mirror of
https://gitlab.freedesktop.org/cairo/cairo.git
synced 2025-12-20 14:00:10 +01:00
tests: Add device scale test to "full" testrun similar to offsets
This commit is contained in:
parent
7ab34f302b
commit
690c61aa54
3 changed files with 76 additions and 56 deletions
|
|
@ -49,7 +49,7 @@ cairo_test_status_t
|
||||||
_cairo_test_context_run_for_target (cairo_test_context_t *ctx,
|
_cairo_test_context_run_for_target (cairo_test_context_t *ctx,
|
||||||
const cairo_boilerplate_target_t *target,
|
const cairo_boilerplate_target_t *target,
|
||||||
cairo_bool_t similar,
|
cairo_bool_t similar,
|
||||||
int dev_offset);
|
int dev_offset, int dev_scale);
|
||||||
|
|
||||||
void
|
void
|
||||||
_cairo_test_context_init_for_test (cairo_test_context_t *ctx,
|
_cairo_test_context_init_for_test (cairo_test_context_t *ctx,
|
||||||
|
|
|
||||||
|
|
@ -69,6 +69,7 @@ typedef struct _cairo_test_runner {
|
||||||
cairo_test_context_t base;
|
cairo_test_context_t base;
|
||||||
|
|
||||||
unsigned int num_device_offsets;
|
unsigned int num_device_offsets;
|
||||||
|
unsigned int num_device_scales;
|
||||||
|
|
||||||
cairo_bool_t passed;
|
cairo_bool_t passed;
|
||||||
int num_passed;
|
int num_passed;
|
||||||
|
|
@ -232,7 +233,7 @@ _cairo_test_runner_draw (cairo_test_runner_t *runner,
|
||||||
cairo_test_context_t *ctx,
|
cairo_test_context_t *ctx,
|
||||||
const cairo_boilerplate_target_t *target,
|
const cairo_boilerplate_target_t *target,
|
||||||
cairo_bool_t similar,
|
cairo_bool_t similar,
|
||||||
int device_offset)
|
int device_offset, int device_scale)
|
||||||
{
|
{
|
||||||
#if SHOULD_FORK
|
#if SHOULD_FORK
|
||||||
if (! runner->foreground) {
|
if (! runner->foreground) {
|
||||||
|
|
@ -244,7 +245,7 @@ _cairo_test_runner_draw (cairo_test_runner_t *runner,
|
||||||
|
|
||||||
case 0: /* child */
|
case 0: /* child */
|
||||||
exit (_cairo_test_context_run_for_target (ctx, target,
|
exit (_cairo_test_context_run_for_target (ctx, target,
|
||||||
similar, device_offset));
|
similar, device_offset, device_scale));
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return _cairo_test_wait (pid);
|
return _cairo_test_wait (pid);
|
||||||
|
|
@ -252,7 +253,7 @@ _cairo_test_runner_draw (cairo_test_runner_t *runner,
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
return _cairo_test_context_run_for_target (ctx, target,
|
return _cairo_test_context_run_for_target (ctx, target,
|
||||||
similar, device_offset);
|
similar, device_offset, device_scale);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
@ -696,7 +697,7 @@ main (int argc, char **argv)
|
||||||
cairo_test_runner_t runner;
|
cairo_test_runner_t runner;
|
||||||
cairo_test_list_t *test_list;
|
cairo_test_list_t *test_list;
|
||||||
cairo_test_status_t *target_status;
|
cairo_test_status_t *target_status;
|
||||||
unsigned int n, m;
|
unsigned int n, m, k;
|
||||||
char targets[4096];
|
char targets[4096];
|
||||||
int len;
|
int len;
|
||||||
char *cairo_tests_env;
|
char *cairo_tests_env;
|
||||||
|
|
@ -712,6 +713,7 @@ main (int argc, char **argv)
|
||||||
|
|
||||||
memset (&runner, 0, sizeof (runner));
|
memset (&runner, 0, sizeof (runner));
|
||||||
runner.num_device_offsets = 1;
|
runner.num_device_offsets = 1;
|
||||||
|
runner.num_device_scales = 1;
|
||||||
|
|
||||||
if (is_running_under_debugger ())
|
if (is_running_under_debugger ())
|
||||||
runner.foreground = TRUE;
|
runner.foreground = TRUE;
|
||||||
|
|
@ -743,6 +745,7 @@ main (int argc, char **argv)
|
||||||
|
|
||||||
if (runner.full_test) {
|
if (runner.full_test) {
|
||||||
runner.num_device_offsets = 2;
|
runner.num_device_offsets = 2;
|
||||||
|
runner.num_device_scales = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
target_status = NULL; /* silence the compiler */
|
target_status = NULL; /* silence the compiler */
|
||||||
|
|
@ -911,32 +914,35 @@ main (int argc, char **argv)
|
||||||
cairo_test_target_has_similar (&ctx, target) :
|
cairo_test_target_has_similar (&ctx, target) :
|
||||||
DIRECT;
|
DIRECT;
|
||||||
for (m = 0; m < runner.num_device_offsets; m++) {
|
for (m = 0; m < runner.num_device_offsets; m++) {
|
||||||
int dev_offset = m * 25;
|
for (k = 0; k < runner.num_device_scales; k++) {
|
||||||
cairo_test_similar_t similar;
|
int dev_offset = m * 25;
|
||||||
|
int dev_scale = k + 1;
|
||||||
|
cairo_test_similar_t similar;
|
||||||
|
|
||||||
for (similar = DIRECT; similar <= has_similar; similar++) {
|
for (similar = DIRECT; similar <= has_similar; similar++) {
|
||||||
status = _cairo_test_runner_draw (&runner, &ctx, target,
|
status = _cairo_test_runner_draw (&runner, &ctx, target,
|
||||||
similar, dev_offset);
|
similar, dev_offset, dev_scale);
|
||||||
switch (status) {
|
switch (status) {
|
||||||
case CAIRO_TEST_SUCCESS:
|
case CAIRO_TEST_SUCCESS:
|
||||||
target_skipped = FALSE;
|
target_skipped = FALSE;
|
||||||
break;
|
break;
|
||||||
case CAIRO_TEST_XFAILURE:
|
case CAIRO_TEST_XFAILURE:
|
||||||
target_xfailed = TRUE;
|
target_xfailed = TRUE;
|
||||||
break;
|
break;
|
||||||
case CAIRO_TEST_NEW:
|
case CAIRO_TEST_NEW:
|
||||||
case CAIRO_TEST_FAILURE:
|
case CAIRO_TEST_FAILURE:
|
||||||
target_failed = TRUE;
|
target_failed = TRUE;
|
||||||
break;
|
break;
|
||||||
case CAIRO_TEST_ERROR:
|
case CAIRO_TEST_ERROR:
|
||||||
target_error = TRUE;
|
target_error = TRUE;
|
||||||
break;
|
break;
|
||||||
case CAIRO_TEST_NO_MEMORY:
|
case CAIRO_TEST_NO_MEMORY:
|
||||||
case CAIRO_TEST_CRASHED:
|
case CAIRO_TEST_CRASHED:
|
||||||
target_crashed = TRUE;
|
target_crashed = TRUE;
|
||||||
break;
|
break;
|
||||||
case CAIRO_TEST_UNTESTED:
|
case CAIRO_TEST_UNTESTED:
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -101,6 +101,7 @@ static cairo_bool_t print_fail_on_stdout;
|
||||||
static int cairo_test_timeout = 60;
|
static int cairo_test_timeout = 60;
|
||||||
|
|
||||||
#define NUM_DEVICE_OFFSETS 2
|
#define NUM_DEVICE_OFFSETS 2
|
||||||
|
#define NUM_DEVICE_SCALE 2
|
||||||
|
|
||||||
static cairo_bool_t
|
static cairo_bool_t
|
||||||
_cairo_test_mkdir (const char *path)
|
_cairo_test_mkdir (const char *path)
|
||||||
|
|
@ -430,8 +431,8 @@ cairo_test_target_has_similar (const cairo_test_context_t *ctx,
|
||||||
target->content,
|
target->content,
|
||||||
ctx->test->width,
|
ctx->test->width,
|
||||||
ctx->test->height,
|
ctx->test->height,
|
||||||
ctx->test->width + 25 * NUM_DEVICE_OFFSETS,
|
ctx->test->width* NUM_DEVICE_SCALE + 25 * NUM_DEVICE_OFFSETS,
|
||||||
ctx->test->height + 25 * NUM_DEVICE_OFFSETS,
|
ctx->test->height* NUM_DEVICE_SCALE + 25 * NUM_DEVICE_OFFSETS,
|
||||||
CAIRO_BOILERPLATE_MODE_TEST,
|
CAIRO_BOILERPLATE_MODE_TEST,
|
||||||
&closure);
|
&closure);
|
||||||
if (surface == NULL)
|
if (surface == NULL)
|
||||||
|
|
@ -628,6 +629,7 @@ static cairo_test_status_t
|
||||||
cairo_test_for_target (cairo_test_context_t *ctx,
|
cairo_test_for_target (cairo_test_context_t *ctx,
|
||||||
const cairo_boilerplate_target_t *target,
|
const cairo_boilerplate_target_t *target,
|
||||||
int dev_offset,
|
int dev_offset,
|
||||||
|
int dev_scale,
|
||||||
cairo_bool_t similar)
|
cairo_bool_t similar)
|
||||||
{
|
{
|
||||||
cairo_test_status_t status;
|
cairo_test_status_t status;
|
||||||
|
|
@ -635,6 +637,7 @@ cairo_test_for_target (cairo_test_context_t *ctx,
|
||||||
cairo_t *cr;
|
cairo_t *cr;
|
||||||
const char *empty_str = "";
|
const char *empty_str = "";
|
||||||
char *offset_str;
|
char *offset_str;
|
||||||
|
char *scale_str;
|
||||||
char *base_name, *base_path;
|
char *base_name, *base_path;
|
||||||
char *out_png_path;
|
char *out_png_path;
|
||||||
char *ref_path = NULL, *ref_png_path, *cmp_png_path = NULL;
|
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
|
else
|
||||||
offset_str = (char *) empty_str;
|
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,
|
ctx->test_name,
|
||||||
target->name,
|
target->name,
|
||||||
format,
|
format,
|
||||||
similar ? ".similar" : "",
|
similar ? ".similar" : "",
|
||||||
offset_str);
|
offset_str,
|
||||||
|
scale_str);
|
||||||
|
|
||||||
if (offset_str != empty_str)
|
if (offset_str != empty_str)
|
||||||
free (offset_str);
|
free (offset_str);
|
||||||
|
if (scale_str != empty_str)
|
||||||
|
free (scale_str);
|
||||||
|
|
||||||
ref_png_path = cairo_test_reference_filename (ctx,
|
ref_png_path = cairo_test_reference_filename (ctx,
|
||||||
base_name,
|
base_name,
|
||||||
|
|
@ -782,6 +793,8 @@ cairo_test_for_target (cairo_test_context_t *ctx,
|
||||||
width = ctx->test->width;
|
width = ctx->test->width;
|
||||||
height = ctx->test->height;
|
height = ctx->test->height;
|
||||||
if (width && height) {
|
if (width && height) {
|
||||||
|
width *= dev_scale;
|
||||||
|
height *= dev_scale;
|
||||||
width += dev_offset;
|
width += dev_offset;
|
||||||
height += dev_offset;
|
height += dev_offset;
|
||||||
}
|
}
|
||||||
|
|
@ -810,8 +823,8 @@ REPEAT:
|
||||||
surface = (target->create_surface) (base_path,
|
surface = (target->create_surface) (base_path,
|
||||||
target->content,
|
target->content,
|
||||||
width, height,
|
width, height,
|
||||||
ctx->test->width + 25 * NUM_DEVICE_OFFSETS,
|
ctx->test->width * NUM_DEVICE_SCALE + 25 * NUM_DEVICE_OFFSETS,
|
||||||
ctx->test->height + 25 * NUM_DEVICE_OFFSETS,
|
ctx->test->height * NUM_DEVICE_SCALE + 25 * NUM_DEVICE_OFFSETS,
|
||||||
CAIRO_BOILERPLATE_MODE_TEST,
|
CAIRO_BOILERPLATE_MODE_TEST,
|
||||||
&closure);
|
&closure);
|
||||||
if (surface == NULL) {
|
if (surface == NULL) {
|
||||||
|
|
@ -878,6 +891,7 @@ REPEAT:
|
||||||
}
|
}
|
||||||
|
|
||||||
cairo_surface_set_device_offset (surface, dev_offset, dev_offset);
|
cairo_surface_set_device_offset (surface, dev_offset, dev_offset);
|
||||||
|
cairo_surface_set_device_scale (surface, dev_scale, dev_scale);
|
||||||
|
|
||||||
cr = cairo_create (surface);
|
cr = cairo_create (surface);
|
||||||
if (cairo_set_user_data (cr, &_cairo_test_context_key, (void*) ctx, NULL)) {
|
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,
|
_cairo_test_context_run_for_target (cairo_test_context_t *ctx,
|
||||||
const cairo_boilerplate_target_t *target,
|
const cairo_boilerplate_target_t *target,
|
||||||
cairo_bool_t similar,
|
cairo_bool_t similar,
|
||||||
int dev_offset)
|
int dev_offset, int dev_scale)
|
||||||
{
|
{
|
||||||
cairo_test_status_t status;
|
cairo_test_status_t status;
|
||||||
|
|
||||||
|
|
@ -1482,15 +1496,15 @@ _cairo_test_context_run_for_target (cairo_test_context_t *ctx,
|
||||||
return CAIRO_TEST_UNTESTED;
|
return CAIRO_TEST_UNTESTED;
|
||||||
|
|
||||||
cairo_test_log (ctx,
|
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,
|
ctx->test_name,
|
||||||
similar ? " (similar) " : "",
|
similar ? " (similar) " : "",
|
||||||
target->name,
|
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),
|
cairo_boilerplate_content_name (target->content),
|
||||||
dev_offset,
|
dev_offset, dev_scale,
|
||||||
similar ? " (similar)": "");
|
similar ? " (similar)": "");
|
||||||
fflush (stdout);
|
fflush (stdout);
|
||||||
|
|
||||||
|
|
@ -1519,7 +1533,7 @@ _cairo_test_context_run_for_target (cairo_test_context_t *ctx,
|
||||||
old_sigalrm_handler = signal (SIGALRM, segfault_handler);
|
old_sigalrm_handler = signal (SIGALRM, segfault_handler);
|
||||||
#endif
|
#endif
|
||||||
if (0 == setjmp (jmpbuf))
|
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
|
else
|
||||||
status = CAIRO_TEST_CRASHED;
|
status = CAIRO_TEST_CRASHED;
|
||||||
#ifdef SIGSEGV
|
#ifdef SIGSEGV
|
||||||
|
|
@ -1538,17 +1552,17 @@ _cairo_test_context_run_for_target (cairo_test_context_t *ctx,
|
||||||
signal (SIGALRM, old_sigalrm_handler);
|
signal (SIGALRM, old_sigalrm_handler);
|
||||||
#endif
|
#endif
|
||||||
} else {
|
} else {
|
||||||
status = cairo_test_for_target (ctx, target, dev_offset, similar);
|
status = cairo_test_for_target (ctx, target, dev_offset, dev_scale, similar);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
status = cairo_test_for_target (ctx, target, dev_offset, similar);
|
status = cairo_test_for_target (ctx, target, dev_offset, dev_scale, similar);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
cairo_test_log (ctx,
|
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,
|
ctx->test_name, target->name,
|
||||||
cairo_boilerplate_content_name (target->content),
|
cairo_boilerplate_content_name (target->content),
|
||||||
dev_offset, similar);
|
dev_offset, dev_scale, similar);
|
||||||
switch (status) {
|
switch (status) {
|
||||||
case CAIRO_TEST_SUCCESS:
|
case CAIRO_TEST_SUCCESS:
|
||||||
printf ("PASS\n");
|
printf ("PASS\n");
|
||||||
|
|
@ -1570,9 +1584,9 @@ _cairo_test_context_run_for_target (cairo_test_context_t *ctx,
|
||||||
fflush (stdout);
|
fflush (stdout);
|
||||||
}
|
}
|
||||||
cairo_test_log (ctx, "CRASHED\n");
|
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,
|
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);
|
fail_face, normal_face);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
@ -1585,9 +1599,9 @@ _cairo_test_context_run_for_target (cairo_test_context_t *ctx,
|
||||||
fflush (stdout);
|
fflush (stdout);
|
||||||
}
|
}
|
||||||
cairo_test_log (ctx, "ERROR\n");
|
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,
|
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);
|
fail_face, normal_face);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
@ -1599,9 +1613,9 @@ _cairo_test_context_run_for_target (cairo_test_context_t *ctx,
|
||||||
printf ("\r");
|
printf ("\r");
|
||||||
fflush (stdout);
|
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,
|
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);
|
xfail_face, normal_face);
|
||||||
cairo_test_log (ctx, "XFAIL\n");
|
cairo_test_log (ctx, "XFAIL\n");
|
||||||
break;
|
break;
|
||||||
|
|
@ -1614,9 +1628,9 @@ _cairo_test_context_run_for_target (cairo_test_context_t *ctx,
|
||||||
printf ("\r");
|
printf ("\r");
|
||||||
fflush (stdout);
|
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,
|
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);
|
fail_face, normal_face);
|
||||||
cairo_test_log (ctx, "NEW\n");
|
cairo_test_log (ctx, "NEW\n");
|
||||||
break;
|
break;
|
||||||
|
|
@ -1630,9 +1644,9 @@ _cairo_test_context_run_for_target (cairo_test_context_t *ctx,
|
||||||
printf ("\r");
|
printf ("\r");
|
||||||
fflush (stdout);
|
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,
|
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);
|
fail_face, normal_face);
|
||||||
cairo_test_log (ctx, "FAIL\n");
|
cairo_test_log (ctx, "FAIL\n");
|
||||||
break;
|
break;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue