This function takes a screenshot of a provided client, compares it to a
reference image, outputs the result as a PNG, and returns a value
indicating whether the two images matched or not.  A difference image is
generated if the screenshot and reference do not match.
---
 tests/subsurface-shot-test.c      | 39 ----------------------------
 tests/weston-test-client-helper.c | 54 +++++++++++++++++++++++++++++++++++++++
 tests/weston-test-client-helper.h |  4 +++
 3 files changed, 58 insertions(+), 39 deletions(-)

diff --git a/tests/subsurface-shot-test.c b/tests/subsurface-shot-test.c
index a8dfebad..bae4cd87 100644
--- a/tests/subsurface-shot-test.c
+++ b/tests/subsurface-shot-test.c
@@ -96,45 +96,6 @@ color(pixman_color_t *tmp, uint8_t r, uint8_t g, uint8_t b)
        return tmp;
 }
 
-static int
-check_screen(struct client *client,
-            const char *ref_image,
-            int ref_seq_no,
-            const struct rectangle *clip,
-            int seq_no)
-{
-       const char *test_name = get_test_name();
-       struct buffer *shot;
-       pixman_image_t *ref;
-       char *ref_fname;
-       char *shot_fname;
-       bool match;
-
-       ref_fname = screenshot_reference_filename(ref_image, ref_seq_no);
-       shot_fname = screenshot_output_filename(test_name, seq_no);
-
-       ref = load_image_from_png(ref_fname);
-       assert(ref);
-
-       shot = capture_screenshot_of_output(client);
-       assert(shot);
-
-       match = check_images_match(shot->image, ref, clip);
-       printf("ref %s vs. shot %s: %s\n", ref_fname, shot_fname,
-              match ? "PASS" : "FAIL");
-
-       write_image_as_png(shot->image, shot_fname);
-       if (!match)
-               write_visual_diff(ref, shot, clip, test_name, seq_no);
-
-       buffer_destroy(shot);
-       pixman_image_unref(ref);
-       free(ref_fname);
-       free(shot_fname);
-
-       return match ? 0 : -1;
-}
-
 static struct buffer *
 surface_commit_color(struct client *client, struct wl_surface *surface,
                     pixman_color_t *color, int width, int height)
diff --git a/tests/weston-test-client-helper.c 
b/tests/weston-test-client-helper.c
index 43a76eb3..63a7ad21 100644
--- a/tests/weston-test-client-helper.c
+++ b/tests/weston-test-client-helper.c
@@ -1415,3 +1415,57 @@ capture_screenshot_of_output(struct client *client)
        return buffer;
 }
 
+/**
+ * Takes a screenshot of a provided client, compares it to a reference image,
+ * outputs the result as a PNG, and returns a value indicating whether the two
+ * images matched or not.  A difference image is generated if the screenshot
+ * and reference do not match.
+ *
+ * \param client The client whose output will be compared to the reference 
image.
+ * \param ref_image The reference image.
+ * \param ref_seq_no The sequence number of the reference image to use.
+ * \param clip The region of interest, or NULL for comparing the whole
+ * image.
+ * \param seq_no The sequence number to append to the output diff file name
+ * (usually matches the ref_seq_no, unless multiple tests are being compared to
+ * a single reference image)
+ * \return 0 if the screenshot and reference image are equal, -1 otherwise.
+ */
+int
+check_screen(struct client *client,
+            const char *ref_image,
+            int ref_seq_no,
+            const struct rectangle *clip,
+            int seq_no)
+{
+       const char *test_name = get_test_name();
+       struct buffer *shot;
+       pixman_image_t *ref;
+       char *ref_fname;
+       char *shot_fname;
+       bool match;
+
+       ref_fname = screenshot_reference_filename(ref_image, ref_seq_no);
+       shot_fname = screenshot_output_filename(test_name, seq_no);
+
+       ref = load_image_from_png(ref_fname);
+       assert(ref);
+
+       shot = capture_screenshot_of_output(client);
+       assert(shot);
+
+       match = check_images_match(shot->image, ref, clip);
+       printf("ref %s vs. shot %s: %s\n", ref_fname, shot_fname,
+              match ? "PASS" : "FAIL");
+
+       write_image_as_png(shot->image, shot_fname);
+       if (!match)
+               write_visual_diff(ref, shot, clip, test_name, seq_no);
+
+       buffer_destroy(shot);
+       pixman_image_unref(ref);
+       free(ref_fname);
+       free(shot_fname);
+
+       return match ? 0 : -1;
+}
diff --git a/tests/weston-test-client-helper.h 
b/tests/weston-test-client-helper.h
index 8c497e24..218e79dc 100644
--- a/tests/weston-test-client-helper.h
+++ b/tests/weston-test-client-helper.h
@@ -217,4 +217,8 @@ load_image_from_png(const char *fname);
 struct buffer *
 capture_screenshot_of_output(struct client *client);
 
+int
+check_screen(struct client *client, const char *ref_image, int ref_seq_no,
+            const struct rectangle *clip, int seq_no);
+
 #endif
-- 
2.11.0

_______________________________________________
wayland-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to