From f9a8dab1e66e5b235c071bfad406dcb9f29136c2 Mon Sep 17 00:00:00 2001 From: Alexander Larsson Date: Mon, 3 Jun 2013 15:38:22 +0200 Subject: tests: Add device scale test to "full" testrun similar to offsets --- test/cairo-test-private.h | 2 +- test/cairo-test-runner.c | 66 ++++++++++++++++++++++++++--------------------- test/cairo-test.c | 66 ++++++++++++++++++++++++++++------------------- 3 files changed, 77 insertions(+), 57 deletions(-) diff --git a/test/cairo-test-private.h b/test/cairo-test-private.h index 3e403240..cfd22de4 100644 --- a/test/cairo-test-private.h +++ b/test/cairo-test-private.h @@ -49,7 +49,7 @@ cairo_test_status_t _cairo_test_context_run_for_target (cairo_test_context_t *ctx, const cairo_boilerplate_target_t *target, cairo_bool_t similar, - int dev_offset); + int dev_offset, int dev_scale); void _cairo_test_context_init_for_test (cairo_test_context_t *ctx, diff --git a/test/cairo-test-runner.c b/test/cairo-test-runner.c index a5c67056..71107f3c 100644 --- a/test/cairo-test-runner.c +++ b/test/cairo-test-runner.c @@ -69,6 +69,7 @@ typedef struct _cairo_test_runner { cairo_test_context_t base; unsigned int num_device_offsets; + unsigned int num_device_scales; cairo_bool_t passed; int num_passed; @@ -232,7 +233,7 @@ _cairo_test_runner_draw (cairo_test_runner_t *runner, cairo_test_context_t *ctx, const cairo_boilerplate_target_t *target, cairo_bool_t similar, - int device_offset) + int device_offset, int device_scale) { #if SHOULD_FORK if (! runner->foreground) { @@ -244,7 +245,7 @@ _cairo_test_runner_draw (cairo_test_runner_t *runner, case 0: /* child */ exit (_cairo_test_context_run_for_target (ctx, target, - similar, device_offset)); + similar, device_offset, device_scale)); default: return _cairo_test_wait (pid); @@ -252,7 +253,7 @@ _cairo_test_runner_draw (cairo_test_runner_t *runner, } #endif return _cairo_test_context_run_for_target (ctx, target, - similar, device_offset); + similar, device_offset, device_scale); } static void @@ -696,7 +697,7 @@ main (int argc, char **argv) cairo_test_runner_t runner; cairo_test_list_t *test_list; cairo_test_status_t *target_status; - unsigned int n, m; + unsigned int n, m, k; char targets[4096]; int len; char *cairo_tests_env; @@ -712,6 +713,7 @@ main (int argc, char **argv) memset (&runner, 0, sizeof (runner)); runner.num_device_offsets = 1; + runner.num_device_scales = 1; if (is_running_under_debugger ()) runner.foreground = TRUE; @@ -743,6 +745,7 @@ main (int argc, char **argv) if (runner.full_test) { runner.num_device_offsets = 2; + runner.num_device_scales = 2; } target_status = NULL; /* silence the compiler */ @@ -911,32 +914,35 @@ main (int argc, char **argv) cairo_test_target_has_similar (&ctx, target) : DIRECT; for (m = 0; m < runner.num_device_offsets; m++) { - int dev_offset = m * 25; - cairo_test_similar_t similar; - - for (similar = DIRECT; similar <= has_similar; similar++) { - status = _cairo_test_runner_draw (&runner, &ctx, target, - similar, dev_offset); - switch (status) { - case CAIRO_TEST_SUCCESS: - target_skipped = FALSE; - break; - case CAIRO_TEST_XFAILURE: - target_xfailed = TRUE; - break; - case CAIRO_TEST_NEW: - case CAIRO_TEST_FAILURE: - target_failed = TRUE; - break; - case CAIRO_TEST_ERROR: - target_error = TRUE; - break; - case CAIRO_TEST_NO_MEMORY: - case CAIRO_TEST_CRASHED: - target_crashed = TRUE; - break; - case CAIRO_TEST_UNTESTED: - break; + for (k = 0; k < runner.num_device_scales; k++) { + int dev_offset = m * 25; + int dev_scale = k + 1; + cairo_test_similar_t similar; + + for (similar = DIRECT; similar <= has_similar; similar++) { + status = _cairo_test_runner_draw (&runner, &ctx, target, + similar, dev_offset, dev_scale); + switch (status) { + case CAIRO_TEST_SUCCESS: + target_skipped = FALSE; + break; + case CAIRO_TEST_XFAILURE: + target_xfailed = TRUE; + break; + case CAIRO_TEST_NEW: + case CAIRO_TEST_FAILURE: + target_failed = TRUE; + break; + case CAIRO_TEST_ERROR: + target_error = TRUE; + break; + case CAIRO_TEST_NO_MEMORY: + case CAIRO_TEST_CRASHED: + target_crashed = TRUE; + break; + case CAIRO_TEST_UNTESTED: + break; + } } } } diff --git a/test/cairo-test.c b/test/cairo-test.c index a3a587a2..7bcb0ba8 100644 --- a/test/cairo-test.c +++ b/test/cairo-test.c @@ -101,6 +101,7 @@ static cairo_bool_t print_fail_on_stdout; static int cairo_test_timeout = 60; #define NUM_DEVICE_OFFSETS 2 +#define NUM_DEVICE_SCALE 2 static cairo_bool_t _cairo_test_mkdir (const char *path) @@ -430,8 +431,8 @@ cairo_test_target_has_similar (const cairo_test_context_t *ctx, target->content, ctx->test->width, ctx->test->height, - ctx->test->width + 25 * NUM_DEVICE_OFFSETS, - ctx->test->height + 25 * NUM_DEVICE_OFFSETS, + ctx->test->width* NUM_DEVICE_SCALE + 25 * NUM_DEVICE_OFFSETS, + ctx->test->height* NUM_DEVICE_SCALE + 25 * NUM_DEVICE_OFFSETS, CAIRO_BOILERPLATE_MODE_TEST, &closure); if (surface == NULL) @@ -628,6 +629,7 @@ static cairo_test_status_t cairo_test_for_target (cairo_test_context_t *ctx, const cairo_boilerplate_target_t *target, int dev_offset, + int dev_scale, cairo_bool_t similar) { cairo_test_status_t status; @@ -635,6 +637,7 @@ cairo_test_for_target (cairo_test_context_t *ctx, cairo_t *cr; const char *empty_str = ""; char *offset_str; + char *scale_str; char *base_name, *base_path; char *out_png_path; char *ref_path = NULL, *ref_png_path, *cmp_png_path = NULL; @@ -666,15 +669,23 @@ cairo_test_for_target (cairo_test_context_t *ctx, else offset_str = (char *) empty_str; - xasprintf (&base_name, "%s.%s.%s%s%s", + if (dev_scale != 1) + xasprintf (&scale_str, ".x%d", dev_scale); + else + scale_str = (char *) empty_str; + + xasprintf (&base_name, "%s.%s.%s%s%s%s", ctx->test_name, target->name, format, similar ? ".similar" : "", - offset_str); + offset_str, + scale_str); if (offset_str != empty_str) free (offset_str); + if (scale_str != empty_str) + free (scale_str); ref_png_path = cairo_test_reference_filename (ctx, base_name, @@ -782,6 +793,8 @@ cairo_test_for_target (cairo_test_context_t *ctx, width = ctx->test->width; height = ctx->test->height; if (width && height) { + width *= dev_scale; + height *= dev_scale; width += dev_offset; height += dev_offset; } @@ -810,8 +823,8 @@ REPEAT: surface = (target->create_surface) (base_path, target->content, width, height, - ctx->test->width + 25 * NUM_DEVICE_OFFSETS, - ctx->test->height + 25 * NUM_DEVICE_OFFSETS, + ctx->test->width * NUM_DEVICE_SCALE + 25 * NUM_DEVICE_OFFSETS, + ctx->test->height * NUM_DEVICE_SCALE + 25 * NUM_DEVICE_OFFSETS, CAIRO_BOILERPLATE_MODE_TEST, &closure); if (surface == NULL) { @@ -878,6 +891,7 @@ REPEAT: } cairo_surface_set_device_offset (surface, dev_offset, dev_offset); + cairo_surface_set_device_scale (surface, dev_scale, dev_scale); cr = cairo_create (surface); if (cairo_set_user_data (cr, &_cairo_test_context_key, (void*) ctx, NULL)) { @@ -1471,7 +1485,7 @@ cairo_test_status_t _cairo_test_context_run_for_target (cairo_test_context_t *ctx, const cairo_boilerplate_target_t *target, cairo_bool_t similar, - int dev_offset) + int dev_offset, int dev_scale) { cairo_test_status_t status; @@ -1482,15 +1496,15 @@ _cairo_test_context_run_for_target (cairo_test_context_t *ctx, return CAIRO_TEST_UNTESTED; cairo_test_log (ctx, - "Testing %s with %s%s target (dev offset %d)\n", + "Testing %s with %s%s target (dev offset %d scale: %d)\n", ctx->test_name, similar ? " (similar) " : "", target->name, - dev_offset); + dev_offset, dev_scale); - printf ("%s.%s.%s [%d]%s:\t", ctx->test_name, target->name, + printf ("%s.%s.%s [%dx%d]%s:\t", ctx->test_name, target->name, cairo_boilerplate_content_name (target->content), - dev_offset, + dev_offset, dev_scale, similar ? " (similar)": ""); fflush (stdout); @@ -1519,7 +1533,7 @@ _cairo_test_context_run_for_target (cairo_test_context_t *ctx, old_sigalrm_handler = signal (SIGALRM, segfault_handler); #endif if (0 == setjmp (jmpbuf)) - status = cairo_test_for_target (ctx, target, dev_offset, similar); + status = cairo_test_for_target (ctx, target, dev_offset, dev_scale, similar); else status = CAIRO_TEST_CRASHED; #ifdef SIGSEGV @@ -1538,17 +1552,17 @@ _cairo_test_context_run_for_target (cairo_test_context_t *ctx, signal (SIGALRM, old_sigalrm_handler); #endif } else { - status = cairo_test_for_target (ctx, target, dev_offset, similar); + status = cairo_test_for_target (ctx, target, dev_offset, dev_scale, similar); } #else - status = cairo_test_for_target (ctx, target, dev_offset, similar); + status = cairo_test_for_target (ctx, target, dev_offset, dev_scale, similar); #endif cairo_test_log (ctx, - "TEST: %s TARGET: %s FORMAT: %s OFFSET: %d SIMILAR: %d RESULT: ", + "TEST: %s TARGET: %s FORMAT: %s OFFSET: %d SCALE: %d SIMILAR: %d RESULT: ", ctx->test_name, target->name, cairo_boilerplate_content_name (target->content), - dev_offset, similar); + dev_offset, dev_scale, similar); switch (status) { case CAIRO_TEST_SUCCESS: printf ("PASS\n"); @@ -1570,9 +1584,9 @@ _cairo_test_context_run_for_target (cairo_test_context_t *ctx, fflush (stdout); } cairo_test_log (ctx, "CRASHED\n"); - fprintf (stderr, "%s.%s.%s [%d]%s:\t%s!!!CRASHED!!!%s\n", + fprintf (stderr, "%s.%s.%s [%dx%d]%s:\t%s!!!CRASHED!!!%s\n", ctx->test_name, target->name, - cairo_boilerplate_content_name (target->content), dev_offset, similar ? " (similar)" : "", + cairo_boilerplate_content_name (target->content), dev_offset, dev_scale, similar ? " (similar)" : "", fail_face, normal_face); break; @@ -1585,9 +1599,9 @@ _cairo_test_context_run_for_target (cairo_test_context_t *ctx, fflush (stdout); } cairo_test_log (ctx, "ERROR\n"); - fprintf (stderr, "%s.%s.%s [%d]%s:\t%s!!!ERROR!!!%s\n", + fprintf (stderr, "%s.%s.%s [%dx%d]%s:\t%s!!!ERROR!!!%s\n", ctx->test_name, target->name, - cairo_boilerplate_content_name (target->content), dev_offset, similar ? " (similar)" : "", + cairo_boilerplate_content_name (target->content), dev_offset, dev_scale, similar ? " (similar)" : "", fail_face, normal_face); break; @@ -1599,9 +1613,9 @@ _cairo_test_context_run_for_target (cairo_test_context_t *ctx, printf ("\r"); fflush (stdout); } - fprintf (stderr, "%s.%s.%s [%d]%s:\t%sXFAIL%s\n", + fprintf (stderr, "%s.%s.%s [%dx%d]%s:\t%sXFAIL%s\n", ctx->test_name, target->name, - cairo_boilerplate_content_name (target->content), dev_offset, similar ? " (similar)" : "", + cairo_boilerplate_content_name (target->content), dev_offset, dev_scale, similar ? " (similar)" : "", xfail_face, normal_face); cairo_test_log (ctx, "XFAIL\n"); break; @@ -1614,9 +1628,9 @@ _cairo_test_context_run_for_target (cairo_test_context_t *ctx, printf ("\r"); fflush (stdout); } - fprintf (stderr, "%s.%s.%s [%d]%s:\t%sNEW%s\n", + fprintf (stderr, "%s.%s.%s [%dx%d]%s:\t%sNEW%s\n", ctx->test_name, target->name, - cairo_boilerplate_content_name (target->content), dev_offset, similar ? " (similar)" : "", + cairo_boilerplate_content_name (target->content), dev_offset, dev_scale, similar ? " (similar)" : "", fail_face, normal_face); cairo_test_log (ctx, "NEW\n"); break; @@ -1630,9 +1644,9 @@ _cairo_test_context_run_for_target (cairo_test_context_t *ctx, printf ("\r"); fflush (stdout); } - fprintf (stderr, "%s.%s.%s [%d]%s:\t%sFAIL%s\n", + fprintf (stderr, "%s.%s.%s [%dx%d]%s:\t%sFAIL%s\n", ctx->test_name, target->name, - cairo_boilerplate_content_name (target->content), dev_offset, similar ? " (similar)" : "", + cairo_boilerplate_content_name (target->content), dev_offset, dev_scale, similar ? " (similar)" : "", fail_face, normal_face); cairo_test_log (ctx, "FAIL\n"); break; -- cgit v1.2.3