From 35b7f25ae3bcdd88a0d9f9fa4c4d7ae4975dcd09 Mon Sep 17 00:00:00 2001 From: Derek Foreman Date: Mon, 25 May 2015 15:19:38 -0500 Subject: [PATCH] tests/internal-screenshot: Fix test so it doesn't expect shell surfaces We no longer have a race with shell startup because we create our own colored surface and check that it's properly drawn. Signed-off-by: Derek Foreman Tested-by: Pekka Paalanen --- tests/internal-screenshot-test.c | 63 ++++++++++++++---- ...-00.png => internal-screenshot-bad-00.png} | Bin .../reference/internal-screenshot-good-00.png | Bin 0 -> 970 bytes 3 files changed, 49 insertions(+), 14 deletions(-) rename tests/reference/{internal-screenshot-00.png => internal-screenshot-bad-00.png} (100%) create mode 100644 tests/reference/internal-screenshot-good-00.png diff --git a/tests/internal-screenshot-test.c b/tests/internal-screenshot-test.c index 43aabf6a9..991761f56 100644 --- a/tests/internal-screenshot-test.c +++ b/tests/internal-screenshot-test.c @@ -184,51 +184,86 @@ capture_screenshot_of_output(struct client *client) { return screenshot; } +static void +draw_stuff(char *pixels, int w, int h) +{ + int x, y; + + for (x = 0; x < w; x++) + for (y = 0; y < h; y++) { + pixels[y * w * 4 + x * 4] = x; + pixels[y * w * 4 + x * 4 + 1] = x + y; + pixels[y * w * 4 + x * 4 + 2] = y; + pixels[y * w * 4 + x * 4 + 3] = 255; + } +} + TEST(internal_screenshot) { + struct wl_buffer *buf; struct client *client; + struct wl_surface *surface; struct surface *screenshot = NULL; - struct surface *reference = NULL; + struct surface *reference_good = NULL; + struct surface *reference_bad = NULL; struct rectangle clip; const char *fname; bool match = false; bool dump_all_images = true; + void *pixels; /* Create the client */ printf("Creating client for test\n"); client = create_client_and_test_surface(100, 100, 100, 100); assert(client); + surface = client->surface->wl_surface; + + buf = create_shm_buffer(client, 100, 100, &pixels); + draw_stuff(pixels, 100, 100); + wl_surface_attach(surface, buf, 0, 0); + wl_surface_damage(surface, 0, 0, 100, 100); + wl_surface_commit(surface); /* Take a snapshot. Result will be in screenshot->wl_buffer. */ printf("Taking a screenshot\n"); screenshot = capture_screenshot_of_output(client); assert(screenshot); - /* Load reference image */ - fname = screenshot_reference_filename("internal-screenshot", 0); - printf("Loading reference image %s\n", fname); - reference = load_surface_from_png(fname); - assert(reference); + /* Load good reference image */ + fname = screenshot_reference_filename("internal-screenshot-good", 0); + printf("Loading good reference image %s\n", fname); + reference_good = load_surface_from_png(fname); + assert(reference_good); + + /* Load bad reference image */ + fname = screenshot_reference_filename("internal-screenshot-bad", 0); + printf("Loading bad reference image %s\n", fname); + reference_bad = load_surface_from_png(fname); + assert(reference_bad); /* Test check_surfaces_equal() - * We expect this to fail since the clock will differ from when we made the reference image + * We expect this to fail since we use a bad reference image */ - match = check_surfaces_equal(screenshot, reference); + match = check_surfaces_equal(screenshot, reference_bad); printf("Screenshot %s reference image\n", match? "equal to" : "different from"); assert(!match); + free(reference_bad->data); + free(reference_bad); /* Test check_surfaces_match_in_clip() * Alpha-blending and other effects can cause irrelevant discrepancies, so look only * at a small portion of the solid-colored background */ - clip.x = 50; - clip.y = 50; - clip.width = 101; - clip.height = 101; + clip.x = 100; + clip.y = 100; + clip.width = 100; + clip.height = 100; printf("Clip: %d,%d %d x %d\n", clip.x, clip.y, clip.width, clip.height); - match = check_surfaces_match_in_clip(screenshot, reference, &clip); + match = check_surfaces_match_in_clip(screenshot, reference_good, + &clip); printf("Screenshot %s reference image in clipped area\n", match? "matches" : "doesn't match"); - free(reference); + free(reference_good->data); + free(reference_good); /* Test dumping of non-matching images */ if (!match || dump_all_images) { diff --git a/tests/reference/internal-screenshot-00.png b/tests/reference/internal-screenshot-bad-00.png similarity index 100% rename from tests/reference/internal-screenshot-00.png rename to tests/reference/internal-screenshot-bad-00.png diff --git a/tests/reference/internal-screenshot-good-00.png b/tests/reference/internal-screenshot-good-00.png new file mode 100644 index 0000000000000000000000000000000000000000..7cf8045f4d205ee6dcf4b1e0f71a21a87bbbdb60 GIT binary patch literal 970 zcmeAS@N?(olHy`uVBq!ia0y~yU~~YoKX9-C$wJ+|*+7ad$=lt9;Xep2*t>i(0|Rrt zr;B4q#hkZS4YODb8CV=S|NNJ~6MepM@!`h9x%{C9I~`V(@&R=Y6gcqt-DUO%)4%Wh z9+9$sy1CJt*DskryuA1Mvu=8V0W5%ea(SV>@iXb_Q9B|&pxK%@U Twq4rW?;y>du6{1-oD!M