summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorDerek Foreman <derekf@osg.samsung.com>2015-05-25 15:19:38 -0500
committerPekka Paalanen <pekka.paalanen@collabora.co.uk>2015-05-26 11:26:06 +0300
commit35b7f25ae3bcdd88a0d9f9fa4c4d7ae4975dcd09 (patch)
treea654247f594d8f641b2138bd5e8eab56b27bc117 /tests
parent1223fa4be4755a8d55bdd6bb25e1e0dd78710413 (diff)
downloadweston-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.c63
-rw-r--r--tests/reference/internal-screenshot-bad-00.png (renamed from tests/reference/internal-screenshot-00.png)bin5149 -> 5149 bytes
-rw-r--r--tests/reference/internal-screenshot-good-00.pngbin0 -> 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
index 5dc79576..5dc79576 100644
--- a/tests/reference/internal-screenshot-00.png
+++ b/tests/reference/internal-screenshot-bad-00.png
Binary files differ
diff --git a/tests/reference/internal-screenshot-good-00.png b/tests/reference/internal-screenshot-good-00.png
new file mode 100644
index 00000000..7cf8045f
--- /dev/null
+++ b/tests/reference/internal-screenshot-good-00.png
Binary files differ