diff options
Diffstat (limited to 'tests/conform/test-conform-main.c')
-rw-r--r-- | tests/conform/test-conform-main.c | 170 |
1 files changed, 170 insertions, 0 deletions
diff --git a/tests/conform/test-conform-main.c b/tests/conform/test-conform-main.c new file mode 100644 index 00000000..1dd9b68d --- /dev/null +++ b/tests/conform/test-conform-main.c @@ -0,0 +1,170 @@ +#include "config.h" + +#include <cogl/cogl.h> + +#include <glib.h> +#include <locale.h> +#include <stdlib.h> + +#include "test-utils.h" + +#if 0 +void +skip_init (TestUtilsGTestFixture *fixture, + const void *data) +{ + /* void */ +} + +static void +skip_test (TestUtilsGTestFixture *fixture, + const void *data) +{ + /* void */ +} + +void +skip_fini (TestUtilsGTestFixture *fixture, + const void *data) +{ + /* void */ +} +#endif + +static void +run_todo_test (TestUtilsGTestFixture *fixture, + void *data) +{ +#ifdef G_OS_UNIX + TestUtilsSharedState *state = data; + + if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDOUT | G_TEST_TRAP_SILENCE_STDERR)) + { + state->todo_func (fixture, data); + exit (0); + } + + g_test_trap_assert_failed (); +#endif +} + +void +verify_failure (TestUtilsGTestFixture *fixture, + void *data) +{ + g_assert (FALSE); +} + +static TestUtilsSharedState *shared_state = NULL; + +/* This is a bit of sugar for adding new conformance tests: + * + * - It adds an extern function definition just to save maintaining a header + * that lists test entry points. + * - It sets up callbacks for a fixture, which lets us share initialization + * code between tests. (see test-utils.c) + * - It passes in a shared data pointer that is initialised once in main(), + * that gets passed to the fixture setup and test functions. (See the + * definition in test-utils.h) + */ +#define ADD_TEST(NAMESPACE, FUNC) G_STMT_START { \ + extern void FUNC (TestUtilsGTestFixture *, void *); \ + g_test_add ("/conform" NAMESPACE "/" #FUNC, \ + TestUtilsGTestFixture, \ + shared_state, /* data argument for test */ \ + test_utils_init, \ + (void *)(FUNC), \ + test_utils_fini); } G_STMT_END + +/* this is a macro that conditionally executes a test if CONDITION + * evaluates to TRUE; otherwise, it will put the test under the + * "/skip" namespace and execute a dummy function that will always + * pass. + */ +#define ADD_CONDITIONAL_TEST(CONDITION, NAMESPACE, FUNC) G_STMT_START { \ + if (!(CONDITION)) { \ + g_test_add ("/skipped" NAMESPACE "/" #FUNC, \ + TestUtilsGTestFixture, \ + shared_state, /* data argument for test */ \ + skip_init, \ + skip_test, \ + skip_fini); \ + } else { ADD_TEST (NAMESPACE, FUNC); } } G_STMT_END + +#define ADD_TODO_TEST(NAMESPACE, FUNC) G_STMT_START { \ + extern void FUNC (TestUtilsGTestFixture *, void *); \ + shared_state->todo_func = FUNC; \ + g_test_add ("/todo" NAMESPACE "/" #FUNC, \ + TestUtilsGTestFixture, \ + shared_state, \ + test_utils_init, \ + (void *)(run_todo_test), \ + test_utils_fini); } G_STMT_END + +#define UNPORTED_TEST(NAMESPACE, FUNC) + +gchar * +clutter_test_get_data_file (const gchar *filename) +{ + return g_build_filename (TESTS_DATADIR, filename, NULL); +} + +int +main (int argc, char **argv) +{ + g_test_init (&argc, &argv, NULL); + + g_test_bug_base ("http://bugzilla.gnome.org/show_bug.cgi?id=%s"); + + /* Initialise the state you need to share with everything. + */ + shared_state = g_new0 (TestUtilsSharedState, 1); + shared_state->argc_addr = &argc; + shared_state->argv_addr = &argv; + + /* This file is run through a sed script during the make step so the + * lines containing the tests need to be formatted on a single line + * each. To comment out a test use the SKIP or TODO macros. Using + * #if 0 would break the script. */ + + /* sanity check for the test suite itself */ + ADD_TODO_TEST ("/suite", verify_failure); + + UNPORTED_TEST ("/cogl", test_cogl_object); + UNPORTED_TEST ("/cogl", test_cogl_fixed); + UNPORTED_TEST ("/cogl", test_cogl_backface_culling); + UNPORTED_TEST ("/cogl", test_cogl_materials); + UNPORTED_TEST ("/cogl", test_cogl_pipeline_user_matrix); + UNPORTED_TEST ("/cogl", test_cogl_blend_strings); + UNPORTED_TEST ("/cogl", test_cogl_premult); + UNPORTED_TEST ("/cogl", test_cogl_readpixels); + UNPORTED_TEST ("/cogl", test_cogl_path); + ADD_TEST ("/cogl", test_cogl_depth_test); + + UNPORTED_TEST ("/cogl/texture", test_cogl_npot_texture); + UNPORTED_TEST ("/cogl/texture", test_cogl_multitexture); + UNPORTED_TEST ("/cogl/texture", test_cogl_texture_mipmaps); + UNPORTED_TEST ("/cogl/texture", test_cogl_sub_texture); + UNPORTED_TEST ("/cogl/texture", test_cogl_pixel_array); + UNPORTED_TEST ("/cogl/texture", test_cogl_texture_rectangle); + UNPORTED_TEST ("/cogl/texture", test_cogl_texture_3d); + UNPORTED_TEST ("/cogl/texture", test_cogl_wrap_modes); + UNPORTED_TEST ("/cogl/texture", test_cogl_texture_pixmap_x11); + UNPORTED_TEST ("/cogl/texture", test_cogl_texture_get_set_data); + UNPORTED_TEST ("/cogl/texture", test_cogl_atlas_migration); + + UNPORTED_TEST ("/cogl/vertex-buffer", test_cogl_vertex_buffer_contiguous); + UNPORTED_TEST ("/cogl/vertex-buffer", test_cogl_vertex_buffer_interleved); + UNPORTED_TEST ("/cogl/vertex-buffer", test_cogl_vertex_buffer_mutability); + + UNPORTED_TEST ("/cogl/vertex-array", test_cogl_primitive); + + UNPORTED_TEST ("/cogl/shaders", test_cogl_just_vertex_shader); + + /* left to the end because they aren't currently very orthogonal and tend to + * break subsequent tests! */ + UNPORTED_TEST ("/cogl", test_cogl_viewport); + UNPORTED_TEST ("/cogl", test_cogl_offscreen); + + return g_test_run (); +} |