[3/4] tests: promote subsurface-shot-tests's check_screen() to a utility function

Submitted by Micah Fedke on Feb. 7, 2017, 2:42 p.m.

Details

Message ID 20170207144204.4871-4-micah.fedke@collabora.co.uk
State New
Headers show
Series "Add transform and scale tests" ( rev: 1 ) in Wayland

Not browsing as part of any series.

Commit Message

Micah Fedke Feb. 7, 2017, 2:42 p.m.
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(-)

Patch hide | download patch | download mbox

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