diff options
author | Derek Foreman <derekf@osg.samsung.com> | 2015-05-25 15:19:38 -0500 |
---|---|---|
committer | Pekka Paalanen <pekka.paalanen@collabora.co.uk> | 2015-05-26 11:26:06 +0300 |
commit | 35b7f25ae3bcdd88a0d9f9fa4c4d7ae4975dcd09 (patch) | |
tree | a654247f594d8f641b2138bd5e8eab56b27bc117 /tests | |
parent | 1223fa4be4755a8d55bdd6bb25e1e0dd78710413 (diff) | |
download | weston-35b7f25ae3bcdd88a0d9f9fa4c4d7ae4975dcd09.tar.gz |
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 <derekf@osg.samsung.com>
Tested-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/internal-screenshot-test.c | 63 | ||||
-rw-r--r-- | tests/reference/internal-screenshot-bad-00.png (renamed from tests/reference/internal-screenshot-00.png) | bin | 5149 -> 5149 bytes | |||
-rw-r--r-- | tests/reference/internal-screenshot-good-00.png | bin | 0 -> 970 bytes |
3 files changed, 49 insertions, 14 deletions
diff --git a/tests/internal-screenshot-test.c b/tests/internal-screenshot-test.c index 43aabf6a..991761f5 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 Binary files differindex 5dc79576..5dc79576 100644 --- a/tests/reference/internal-screenshot-00.png +++ b/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 Binary files differnew file mode 100644 index 00000000..7cf8045f --- /dev/null +++ b/tests/reference/internal-screenshot-good-00.png |