tests: Generate the stub scripts using sed

Instead of trying to run ./test-conformance with the -l option to
generate a list of available tests it now runs sed on the
test-conform-main.c file instead. Running the generated executable is
a pain for cross-compiling so it would be nice to avoid it unless it's
absolutely necessary. Although you could tell people who are cross
compiling to just disable the conformance tests, this seems a shame
because they could still be useful along with the wrappers for example
if the cross compile is built to a shared network folder where the
tests can be run on the actual device.

The sed script is a little more ugly than it could be because it tries
to avoid using the GNU extensions '\+' and '\|'.

The script ends up placing restrictions on the format of the C file
because the tests must all be listed on one line each. There is now a
comment to explain this. Hopefully the trade off is worth it.

http://bugzilla.clutter-project.org/show_bug.cgi?id=2363
This commit is contained in:
Neil Roberts 2010-10-11 16:16:45 +01:00
parent 100d541f47
commit 7fd6273c25
2 changed files with 9 additions and 2 deletions

View File

@ -89,9 +89,11 @@ test_conformance_SOURCES = $(common_sources) $(units_sources)
wrappers: stamp-test-conformance wrappers: stamp-test-conformance
@true @true
stamp-test-conformance: Makefile test-conformance$(EXEEXT) stamp-test-conformance: Makefile $(srcdir)/test-conform-main.c
@mkdir -p wrappers @mkdir -p wrappers
@( $(abs_builddir)/test-conformance$(EXEEXT) -l -m thorough | $(GREP) '^/' ) > unit-tests @sed -n -e 's/^ \{1,\}TEST_CONFORM_SIMPLE *(.*"\([^",]\{1,\}\)", *\([a-zA-Z0-9_]\{1,\}\).*/\/conform\1\/\2/p' \
-e 's/^ \{1,\}TEST_CONFORM_SKIP *(.*"\([^",]\{1,\}\)", *\([a-zA-Z0-9_]\{1,\}\).*/\/conform\1\/\2/p' \
$(srcdir)/test-conform-main.c > unit-tests
@chmod +x test-launcher.sh @chmod +x test-launcher.sh
@( echo "/stamp-test-conformance" ; \ @( echo "/stamp-test-conformance" ; \
echo "/test-conformance" ; \ echo "/test-conformance" ; \

View File

@ -92,6 +92,11 @@ main (int argc, char **argv)
{ {
clutter_test_init (&argc, &argv); clutter_test_init (&argc, &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. */
TEST_CONFORM_SIMPLE ("/timeline", test_timeline); TEST_CONFORM_SIMPLE ("/timeline", test_timeline);
TEST_CONFORM_SKIP (!g_test_slow (), "/timeline", test_timeline_interpolate); TEST_CONFORM_SKIP (!g_test_slow (), "/timeline", test_timeline_interpolate);
TEST_CONFORM_SKIP (!g_test_slow (), "/timeline", test_timeline_rewind); TEST_CONFORM_SKIP (!g_test_slow (), "/timeline", test_timeline_rewind);