diff --git a/src/tests/meta-ref-test-utils.c b/src/tests/meta-ref-test-utils.c index c401946b2..ed9beb913 100644 --- a/src/tests/meta-ref-test-utils.c +++ b/src/tests/meta-ref-test-utils.c @@ -315,6 +315,7 @@ meta_ref_test_verify (MetaRefTestAdaptor adaptor, g_autofree char *ref_image_path = NULL; cairo_surface_t *ref_image; cairo_status_t ref_status; + gboolean maybe_update; image = adaptor (adaptor_data); @@ -330,11 +331,21 @@ meta_ref_test_verify (MetaRefTestAdaptor adaptor, g_assert_nonnull (ref_image); ref_status = cairo_surface_status (ref_image); - if (flags & META_REFTEST_FLAG_UPDATE_REF) - { - g_assert_true (ref_status == CAIRO_STATUS_FILE_NOT_FOUND || - ref_status == CAIRO_STATUS_SUCCESS); + g_assert_true (ref_status == CAIRO_STATUS_FILE_NOT_FOUND || + ref_status == CAIRO_STATUS_SUCCESS); + if (ref_status == CAIRO_STATUS_FILE_NOT_FOUND) + { + maybe_update = ((flags & META_REFTEST_FLAG_UPDATE_REF) || + (flags & META_REFTEST_FLAG_ENSURE_REF)); + } + else + { + maybe_update = !!(flags & META_REFTEST_FLAG_UPDATE_REF); + } + + if (maybe_update) + { if (ref_status == CAIRO_STATUS_SUCCESS) ensure_expected_format (&ref_image); @@ -428,6 +439,10 @@ meta_ref_test_verify (MetaRefTestAdaptor adaptor, result_image_path, diff_image_path); } + else + { + g_message ("Image matched the reference image '%s'.", ref_image_path); + } } cairo_surface_destroy (image); diff --git a/src/tests/meta-ref-test-utils.h b/src/tests/meta-ref-test-utils.h index 1d3dd1eaa..69bda60ed 100644 --- a/src/tests/meta-ref-test-utils.h +++ b/src/tests/meta-ref-test-utils.h @@ -24,6 +24,7 @@ typedef enum _MetaReftestFlag { META_REFTEST_FLAG_NONE = 0, META_REFTEST_FLAG_UPDATE_REF = 1 << 0, + META_REFTEST_FLAG_ENSURE_REF = 1 << 1, } MetaReftestFlag; typedef cairo_surface_t * (* MetaRefTestAdaptor) (gpointer adaptor_data); diff --git a/src/tests/meta-ref-test.c b/src/tests/meta-ref-test.c index 334426304..941e43cef 100644 --- a/src/tests/meta-ref-test.c +++ b/src/tests/meta-ref-test.c @@ -24,6 +24,10 @@ * expressions, the test reference image will be updated, unless the * existing reference image is pixel identical to the newly created one. * + * If MUTTER_REF_TEST_ENSURE_ONLY is set to "1", in combination with + * MUTTER_REF_TEST_UPDATE being set, only reference images that doesn't already + * exist are updated. + * * Updating test reference images also requires using a software OpenGL * renderer, which can be achieved using MESA_LOADER_DRIVER_OVERRIDE=swrast * @@ -210,18 +214,24 @@ meta_ref_test_verify_view (ClutterStageView *view, MetaReftestFlag meta_ref_test_determine_ref_test_flag (void) { + gboolean ensure_only; const char *update_tests; char **update_test_rules; int n_update_test_rules; MetaReftestFlag flags; int i; + ensure_only = g_strcmp0 (getenv ("MUTTER_REF_TEST_ENSURE_ONLY"), "1") == 0; + update_tests = g_getenv ("MUTTER_REF_TEST_UPDATE"); if (!update_tests) return META_REFTEST_FLAG_NONE; if (strcmp (update_tests, "all") == 0) - return META_REFTEST_FLAG_UPDATE_REF; + { + return ensure_only ? META_REFTEST_FLAG_ENSURE_REF + : META_REFTEST_FLAG_UPDATE_REF; + } update_test_rules = g_strsplit (update_tests, ",", -1); n_update_test_rules = g_strv_length (update_test_rules); @@ -234,7 +244,8 @@ meta_ref_test_determine_ref_test_flag (void) if (g_regex_match_simple (rule, g_test_get_path (), 0, 0)) { - flags |= META_REFTEST_FLAG_UPDATE_REF; + flags |= ensure_only ? META_REFTEST_FLAG_ENSURE_REF + : META_REFTEST_FLAG_UPDATE_REF; break; } }