[cogl] tests: Differentiate between known failures and missing requirements
- From: Neil Roberts <nroberts src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [cogl] tests: Differentiate between known failures and missing requirements
- Date: Mon, 19 Nov 2012 17:41:52 +0000 (UTC)
commit 723f8d4402e7b2ef3a71f51bb29b10d1c0ec8d81
Author: Neil Roberts <neil linux intel com>
Date: Fri Nov 9 16:47:01 2012 +0000
tests: Differentiate between known failures and missing requirements
Previously when make test is run it would say âfailâ in lower case
letters for both tests that are known bugs we need to fix and for
drivers that can't run the test. This makes it too easy to lose track
of bugs.
To fix this, the ADD_TEST macro has now been changed to take two sets
of flags instead of just one. The first specifies the requirements for
the test to run at all. The second specifies the set of flags required
to run without any known failures. The table in the test report now
says ân/aâ instead of âfailâ for tests that don't match the feature
requirements.
Reviewed-by: Robert Bragg <robert linux intel com>
tests/conform/run-tests.sh | 16 +++++-
tests/conform/test-conform-main.c | 93 +++++++++++++++++---------------
tests/conform/test-utils.c | 108 +++++++++++++++++++++----------------
tests/conform/test-utils.h | 3 +-
4 files changed, 126 insertions(+), 94 deletions(-)
---
diff --git a/tests/conform/run-tests.sh b/tests/conform/run-tests.sh
index 266f1c6..11e740a 100755
--- a/tests/conform/run-tests.sh
+++ b/tests/conform/run-tests.sh
@@ -10,7 +10,8 @@ trap "" SIGFPE
trap "" SIGSEGV
EXIT=0
-WARNING="WARNING: Missing required feature";
+MISSING_FEATURE="WARNING: Missing required feature";
+KNOWN_FAILURE="WARNING: Test is known to fail";
if test -f ./test-conformance; then
TEST_CONFORMANCE=./test-conformance
@@ -20,6 +21,7 @@ fi
echo "Key:"
echo "ok = Test passed"
+echo "n/a = Driver is missing a feature required for the test"
echo "FAIL = Unexpected failure"
echo "fail = Test failed, but it was an expected failure"
echo "PASS! = Unexpected pass"
@@ -38,6 +40,10 @@ get_status()
400)
echo -n 'PASS!';;
+ # Special value to indicate the test is missing a required feature
+ 500)
+ echo -n "n/a";;
+
0)
echo -n "ok";;
@@ -52,7 +58,13 @@ run_test()
TMP=$?
var_name=$2_result
eval $var_name=$TMP
- if grep -q "$WARNING" .log; then
+ if grep -q "$MISSING_FEATURE" .log; then
+ if test $TMP -ne 0; then
+ eval $var_name=500
+ else
+ eval $var_name=400
+ fi
+ elif grep -q "$KNOWN_FAILURE" .log; then
if test $TMP -ne 0; then
eval $var_name=300
else
diff --git a/tests/conform/test-conform-main.c b/tests/conform/test-conform-main.c
index 4e2c8bb..b510543 100644
--- a/tests/conform/test-conform-main.c
+++ b/tests/conform/test-conform-main.c
@@ -10,16 +10,17 @@
#include "test-utils.h"
/* A bit of sugar for adding new conformance tests */
-#define ADD_TEST(FUNC, REQUIREMENTS) G_STMT_START { \
- extern void FUNC (void); \
- if (strcmp (#FUNC, argv[1]) == 0) \
- { \
- test_utils_init (REQUIREMENTS); \
- FUNC (); \
- test_utils_fini (); \
- exit (0); \
- } \
-} G_STMT_END
+#define ADD_TEST(FUNC, REQUIREMENTS, KNOWN_FAIL_REQUIREMENTS) \
+ G_STMT_START { \
+ extern void FUNC (void); \
+ if (strcmp (#FUNC, argv[1]) == 0) \
+ { \
+ test_utils_init (REQUIREMENTS, KNOWN_FAIL_REQUIREMENTS); \
+ FUNC (); \
+ test_utils_fini (); \
+ exit (0); \
+ } \
+ } G_STMT_END
#define UNPORTED_TEST(FUNC)
@@ -51,66 +52,70 @@ main (int argc, char **argv)
UNPORTED_TEST (test_object);
UNPORTED_TEST (test_fixed);
UNPORTED_TEST (test_materials);
- ADD_TEST (test_pipeline_user_matrix, 0);
- ADD_TEST (test_blend_strings, 0);
- ADD_TEST (test_premult, 0);
+ ADD_TEST (test_pipeline_user_matrix, 0, 0);
+ ADD_TEST (test_blend_strings, 0, 0);
+ ADD_TEST (test_premult, 0, 0);
UNPORTED_TEST (test_readpixels);
- ADD_TEST (test_path, 0);
- ADD_TEST (test_depth_test, 0);
- ADD_TEST (test_color_mask, 0);
- ADD_TEST (test_backface_culling, TEST_REQUIREMENT_NPOT);
- ADD_TEST (test_layer_remove, 0);
+ ADD_TEST (test_path, 0, 0);
+ ADD_TEST (test_depth_test, 0, 0);
+ ADD_TEST (test_color_mask, 0, 0);
+ ADD_TEST (test_backface_culling, 0, TEST_REQUIREMENT_NPOT);
+ ADD_TEST (test_layer_remove, 0, 0);
- ADD_TEST (test_sparse_pipeline, 0);
+ ADD_TEST (test_sparse_pipeline, 0, 0);
- ADD_TEST (test_npot_texture, TEST_REQUIREMENT_NPOT);
+ ADD_TEST (test_npot_texture, 0, TEST_REQUIREMENT_NPOT);
UNPORTED_TEST (test_multitexture);
UNPORTED_TEST (test_texture_mipmaps);
- ADD_TEST (test_sub_texture, 0);
- ADD_TEST (test_pixel_buffer, 0);
+ ADD_TEST (test_sub_texture, 0, 0);
+ ADD_TEST (test_pixel_buffer, 0, 0);
UNPORTED_TEST (test_texture_rectangle);
- ADD_TEST (test_texture_3d, TEST_REQUIREMENT_TEXTURE_3D);
- ADD_TEST (test_wrap_modes, 0);
+ ADD_TEST (test_texture_3d, TEST_REQUIREMENT_TEXTURE_3D, 0);
+ ADD_TEST (test_wrap_modes, 0, 0);
UNPORTED_TEST (test_texture_pixmap_x11);
UNPORTED_TEST (test_texture_get_set_data);
- ADD_TEST (test_atlas_migration, 0);
- ADD_TEST (test_read_texture_formats, 0);
- ADD_TEST (test_write_texture_formats, 0);
+ ADD_TEST (test_atlas_migration, 0, 0);
+ ADD_TEST (test_read_texture_formats, 0, 0);
+ ADD_TEST (test_write_texture_formats, 0, 0);
UNPORTED_TEST (test_vertex_buffer_contiguous);
UNPORTED_TEST (test_vertex_buffer_interleved);
UNPORTED_TEST (test_vertex_buffer_mutability);
- ADD_TEST (test_primitive, 0);
+ ADD_TEST (test_primitive, 0, 0);
- ADD_TEST (test_just_vertex_shader, TEST_REQUIREMENT_GLSL);
- ADD_TEST (test_pipeline_uniforms, TEST_REQUIREMENT_GLSL);
- ADD_TEST (test_snippets, TEST_REQUIREMENT_GLSL);
- ADD_TEST (test_custom_attributes, TEST_REQUIREMENT_GLSL);
+ ADD_TEST (test_just_vertex_shader, TEST_REQUIREMENT_GLSL, 0);
+ ADD_TEST (test_pipeline_uniforms, TEST_REQUIREMENT_GLSL, 0);
+ ADD_TEST (test_snippets, TEST_REQUIREMENT_GLSL, 0);
+ ADD_TEST (test_custom_attributes, TEST_REQUIREMENT_GLSL, 0);
- ADD_TEST (test_bitmask, 0);
+ ADD_TEST (test_bitmask, 0, 0);
- ADD_TEST (test_offscreen, 0);
+ ADD_TEST (test_offscreen, 0, 0);
- ADD_TEST (test_point_size, 0);
+ ADD_TEST (test_point_size, 0, 0);
ADD_TEST (test_point_sprite,
- TEST_REQUIREMENT_POINT_SPRITE);
+ TEST_REQUIREMENT_POINT_SPRITE,
+ 0);
ADD_TEST (test_point_sprite_orientation,
- TEST_KNOWN_FAILURE | TEST_REQUIREMENT_POINT_SPRITE);
+ TEST_REQUIREMENT_POINT_SPRITE,
+ TEST_KNOWN_FAILURE);
- ADD_TEST (test_version, 0);
+ ADD_TEST (test_version, 0, 0);
- ADD_TEST (test_alpha_test, 0);
+ ADD_TEST (test_alpha_test, 0, 0);
- ADD_TEST (test_map_buffer_range, TEST_REQUIREMENT_MAP_WRITE);
+ ADD_TEST (test_map_buffer_range, TEST_REQUIREMENT_MAP_WRITE, 0);
UNPORTED_TEST (test_viewport);
- ADD_TEST (test_gles2_context, TEST_REQUIREMENT_GLES2_CONTEXT);
- ADD_TEST (test_gles2_context_fbo, TEST_REQUIREMENT_GLES2_CONTEXT);
- ADD_TEST (test_gles2_context_copy_tex_image, TEST_REQUIREMENT_GLES2_CONTEXT);
+ ADD_TEST (test_gles2_context, TEST_REQUIREMENT_GLES2_CONTEXT, 0);
+ ADD_TEST (test_gles2_context_fbo, TEST_REQUIREMENT_GLES2_CONTEXT, 0);
+ ADD_TEST (test_gles2_context_copy_tex_image,
+ TEST_REQUIREMENT_GLES2_CONTEXT,
+ 0);
- ADD_TEST (test_euler_quaternion, 0);
+ ADD_TEST (test_euler_quaternion, 0, 0);
g_printerr ("Unknown test name \"%s\"\n", argv[1]);
diff --git a/tests/conform/test-utils.c b/tests/conform/test-utils.c
index 4ee0856..2173cd0 100644
--- a/tests/conform/test-utils.c
+++ b/tests/conform/test-utils.c
@@ -11,94 +11,106 @@ static CoglBool cogl_test_is_verbose;
CoglContext *test_ctx;
CoglFramebuffer *test_fb;
-void
-test_utils_init (TestFlags flags)
+static CoglBool
+check_flags (TestFlags flags,
+ CoglRenderer *renderer)
{
- static int counter = 0;
- CoglError *error = NULL;
- CoglOnscreen *onscreen = NULL;
- CoglDisplay *display;
- CoglRenderer *renderer;
- CoglBool missing_requirement = FALSE;
-
- if (counter != 0)
- g_critical ("We don't support running more than one test at a time\n"
- "in a single test run due to the state leakage that can\n"
- "cause subsequent tests to fail.\n"
- "\n"
- "If you want to run all the tests you should run\n"
- "$ make test-report");
- counter++;
-
- if (g_getenv ("COGL_TEST_VERBOSE") || g_getenv ("V"))
- cogl_test_is_verbose = TRUE;
-
- if (g_getenv ("G_DEBUG"))
- {
- char *debug = g_strconcat (g_getenv ("G_DEBUG"), ",fatal-warnings", NULL);
- g_setenv ("G_DEBUG", debug, TRUE);
- g_free (debug);
- }
- else
- g_setenv ("G_DEBUG", "fatal-warnings", TRUE);
-
- g_setenv ("COGL_X11_SYNC", "1", 0);
-
- test_ctx = cogl_context_new (NULL, &error);
- if (!test_ctx)
- g_critical ("Failed to create a CoglContext: %s", error->message);
-
- display = cogl_context_get_display (test_ctx);
- renderer = cogl_display_get_renderer (display);
-
if (flags & TEST_REQUIREMENT_GL &&
cogl_renderer_get_driver (renderer) != COGL_DRIVER_GL &&
cogl_renderer_get_driver (renderer) != COGL_DRIVER_GL3)
{
- missing_requirement = TRUE;
+ return FALSE;
}
if (flags & TEST_REQUIREMENT_NPOT &&
!cogl_has_feature (test_ctx, COGL_FEATURE_ID_TEXTURE_NPOT))
{
- missing_requirement = TRUE;
+ return FALSE;
}
if (flags & TEST_REQUIREMENT_TEXTURE_3D &&
!cogl_has_feature (test_ctx, COGL_FEATURE_ID_TEXTURE_3D))
{
- missing_requirement = TRUE;
+ return FALSE;
}
if (flags & TEST_REQUIREMENT_POINT_SPRITE &&
!cogl_has_feature (test_ctx, COGL_FEATURE_ID_POINT_SPRITE))
{
- missing_requirement = TRUE;
+ return FALSE;
}
if (flags & TEST_REQUIREMENT_GLES2_CONTEXT &&
!cogl_has_feature (test_ctx, COGL_FEATURE_ID_GLES2_CONTEXT))
{
- missing_requirement = TRUE;
+ return FALSE;
}
if (flags & TEST_REQUIREMENT_MAP_WRITE &&
!cogl_has_feature (test_ctx, COGL_FEATURE_ID_MAP_BUFFER_FOR_WRITE))
{
- missing_requirement = TRUE;
+ return FALSE;
}
if (flags & TEST_REQUIREMENT_GLSL &&
!cogl_has_feature (test_ctx, COGL_FEATURE_ID_GLSL))
{
- missing_requirement = TRUE;
+ return FALSE;
}
if (flags & TEST_KNOWN_FAILURE)
{
- missing_requirement = TRUE;
+ return FALSE;
}
+ return TRUE;
+}
+
+void
+test_utils_init (TestFlags requirement_flags,
+ TestFlags known_failure_flags)
+{
+ static int counter = 0;
+ CoglError *error = NULL;
+ CoglOnscreen *onscreen = NULL;
+ CoglDisplay *display;
+ CoglRenderer *renderer;
+ CoglBool missing_requirement;
+ CoglBool known_failure;
+
+ if (counter != 0)
+ g_critical ("We don't support running more than one test at a time\n"
+ "in a single test run due to the state leakage that can\n"
+ "cause subsequent tests to fail.\n"
+ "\n"
+ "If you want to run all the tests you should run\n"
+ "$ make test-report");
+ counter++;
+
+ if (g_getenv ("COGL_TEST_VERBOSE") || g_getenv ("V"))
+ cogl_test_is_verbose = TRUE;
+
+ if (g_getenv ("G_DEBUG"))
+ {
+ char *debug = g_strconcat (g_getenv ("G_DEBUG"), ",fatal-warnings", NULL);
+ g_setenv ("G_DEBUG", debug, TRUE);
+ g_free (debug);
+ }
+ else
+ g_setenv ("G_DEBUG", "fatal-warnings", TRUE);
+
+ g_setenv ("COGL_X11_SYNC", "1", 0);
+
+ test_ctx = cogl_context_new (NULL, &error);
+ if (!test_ctx)
+ g_critical ("Failed to create a CoglContext: %s", error->message);
+
+ display = cogl_context_get_display (test_ctx);
+ renderer = cogl_display_get_renderer (display);
+
+ missing_requirement = !check_flags (requirement_flags, renderer);
+ known_failure = !check_flags (known_failure_flags, renderer);
+
if (getenv ("COGL_TEST_ONSCREEN"))
{
onscreen = cogl_onscreen_new (test_ctx, 640, 480);
@@ -132,6 +144,8 @@ test_utils_init (TestFlags flags)
if (missing_requirement)
g_print ("WARNING: Missing required feature[s] for this test\n");
+ else if (known_failure)
+ g_print ("WARNING: Test is known to fail\n");
}
void
diff --git a/tests/conform/test-utils.h b/tests/conform/test-utils.h
index acd4fad..265dc32 100644
--- a/tests/conform/test-utils.h
+++ b/tests/conform/test-utils.h
@@ -23,7 +23,8 @@ extern CoglContext *test_ctx;
extern CoglFramebuffer *test_fb;
void
-test_utils_init (TestFlags flags);
+test_utils_init (TestFlags requirement_flags,
+ TestFlags known_failure_flags);
void
test_utils_fini (void);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]