Steal Cairo's files_equal() routine to do byte comparison of the rendered files. Note that since the clock time will change run to run we can only compare against the first frame (which will be black).
Signed-off-by: Bryce Harrington <br...@osg.samsung.com> --- tests/fadein-test.c | 31 +++++++++++++++++++++++++++---- tests/weston-test-client-helper.c | 33 +++++++++++++++++++++++++++++++++ tests/weston-test-client-helper.h | 5 +++++ 3 files changed, 65 insertions(+), 4 deletions(-) diff --git a/tests/fadein-test.c b/tests/fadein-test.c index a6c284f..965bb0a 100644 --- a/tests/fadein-test.c +++ b/tests/fadein-test.c @@ -24,27 +24,40 @@ #include <unistd.h> #include <stdio.h> +#include <stdbool.h> #include "weston-test-client-helper.h" char *server_parameters="--use-pixman --width=320 --height=240"; static char* -output_filename(const char* basename) { +output_filename(const char* basename, int head) { static const char *path = "./"; char *filename; - if (asprintf(&filename, "%s%s", path, basename) < 0) + if (asprintf(&filename, "%s%s-%d.png", path, basename, head) < 0) filename = NULL; return filename; } +static char* +reference_filename(const char* basename, int head) { + static const char *path = "./tests/reference/"; + char *filename; + + if (asprintf(&filename, "%s%s-%d.png", path, basename, head) < 0) + filename = NULL; + + return filename; +} + TEST(fadein) { struct client *client; char basename[32]; char *out_path; + char *ref_path; int i; client = client_create(100, 100, 100, 100); @@ -52,11 +65,21 @@ TEST(fadein) for (i = 0; i < 6; i++) { snprintf(basename, sizeof basename, "fadein-%02d", i); - out_path = output_filename(basename); + // FIXME: Iterate over all heads + out_path = output_filename(basename, 0); + ref_path = reference_filename(basename, 0); - wl_test_record_screenshot(client->test->wl_test, out_path); + // FIXME: Would be preferred to pass in out_path rather than basename here... + wl_test_record_screenshot(client->test->wl_test, basename); client_roundtrip(client); + if (i == 0) { + if (files_equal(out_path, ref_path)) + printf("%s is correct\n", out_path); + else + printf("%s doesn't match reference %s\n", out_path, ref_path); + } free (out_path); + free (ref_path); usleep(250000); } diff --git a/tests/weston-test-client-helper.c b/tests/weston-test-client-helper.c index 79097fa..72834e4 100644 --- a/tests/weston-test-client-helper.c +++ b/tests/weston-test-client-helper.c @@ -22,6 +22,7 @@ #include <config.h> +#include <stdbool.h> #include <stdlib.h> #include <stdio.h> #include <string.h> @@ -624,3 +625,35 @@ client_create(int x, int y, int width, int height) return client; } + +bool +files_equal(const char *test_filename, const char* ref_filename) +{ + FILE *test, *ref; + int t, p; + + if (test_filename == NULL || ref_filename == NULL) + return false; + + test = fopen (test_filename, "rb"); + if (test == NULL) + return false; + + ref = fopen (ref_filename, "rb"); + if (ref == NULL) { + fclose (test); + return false; + } + + do { + t = getc (test); + p = getc (ref); + if (t != p) + break; + } while (t != EOF && p != EOF); + + fclose (test); + fclose (ref); + + return t == p; /* both EOF */ +} diff --git a/tests/weston-test-client-helper.h b/tests/weston-test-client-helper.h index 684afc6..20e08b1 100644 --- a/tests/weston-test-client-helper.h +++ b/tests/weston-test-client-helper.h @@ -26,6 +26,8 @@ #include "config.h" #include <assert.h> +#include <stdbool.h> + #include "weston-test-runner.h" #include "wayland-test-client-protocol.h" @@ -135,4 +137,7 @@ void expect_protocol_error(struct client *client, const struct wl_interface *intf, uint32_t code); +bool +files_equal(const char *file_1, const char *file_2); + #endif -- 1.9.1 _______________________________________________ wayland-devel mailing list wayland-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/wayland-devel