cogl/tests: Export and run unit tests if they are enabled

Cogl unit tests are just functions inside normal code files that needs to be
dload'ed by the test binary.

So in case unit-tests are enabled, we need to export those symbols.
Since map file can't be overridden, use a configure_file to generate the map
file when tests are enabled, in order to export the needed symbols.

Then goes through the source files to look unit tests checking for their macro
definition and load them with the runner script.

https://gitlab.gnome.org/GNOME/mutter/merge_requests/442
This commit is contained in:
Marco Trevisan (Treviño) 2019-04-04 21:45:31 -04:00 committed by Marco Trevisan
parent 5d1a87d355
commit 8374be46d2
5 changed files with 33 additions and 25 deletions

View File

@ -29,8 +29,6 @@ global:
_cogl_texture_can_hardware_repeat;
_cogl_pipeline_prune_to_n_layers;
_cogl_primitive_draw;
#test_;
#unit_test_;
_cogl_winsys_glx_get_vtable;
_cogl_winsys_egl_xlib_get_vtable;
_cogl_winsys_egl_get_vtable;
@ -48,6 +46,7 @@ global:
_cogl_pixel_format_get_bytes_per_pixel*;
_cogl_system_error_quark;
_cogl_util_next_p2;
@unit_tests_symbols@
local:
*;
};

View File

@ -455,16 +455,24 @@ cogl_headers_all = [
]
cogl_test_deps = []
cogl_unit_tests_map_data = configuration_data()
if have_cogl_tests
cogl_test_deps += [libmutter_cogl_test_fixtures_dep]
cogl_unit_tests_map_data.set('unit_tests_symbols', 'test_*; unit_test_*;')
endif
libmutter_cogl_map = configure_file(
input: 'libmutter-cogl.map.in',
output: 'libmutter-cogl.map',
configuration: cogl_unit_tests_map_data,
install: false,
)
libmutter_cogl_name = 'mutter-cogl-' + libmutter_api_version
libmutter_cogl_map = 'libmutter-cogl.map'
libmutter_cogl_link_args = [
'-Wl,--version-script,@0@/@1@'.format(meson.current_source_dir(),
libmutter_cogl_map),
'-Wl,--version-script,@0@'.format(libmutter_cogl_map),
]
libmutter_cogl = shared_library(libmutter_cogl_name,
sources: [cogl_sources, cogl_headers_all],

View File

@ -3,8 +3,6 @@
inputfile="$1"
outputfile="$2"
echo > "$outputfile"
sed -n -e 's/^ \{1,\}ADD_TEST *( *\([a-zA-Z0-9_]\{1,\}\).*/\1/p' "$inputfile" | while read -r test; do
echo "$test" >> "$outputfile"
done

View File

@ -23,20 +23,20 @@ libmutter_cogl_test_unit = executable('test-unit',
install: false,
)
find_unit_tests = find_program('meson/find-unit-tests.sh')
cogl_unit_unit_tests = custom_target('cogl-tests-unit-unit-tests',
output: 'unit-tests',
input: libmutter_cogl,
command: [find_unit_tests, '@INPUT@', '@OUTPUT@'],
install: false,
)
cogl_unit_tests = run_command(
find_program('meson/find-unit-tests.sh'), cogl_srcdir, '/dev/stdout',
check: true,
).stdout().strip().split('\n')
test('unit', cogl_run_tests,
suite: ['cogl'],
args: [
cogl_config_env,
libmutter_cogl_test_unit,
cogl_unit_unit_tests
],
is_parallel: false,
)
foreach test_target: cogl_unit_tests
test_name = '-'.join(test_target.split('_'))
test(test_name, cogl_run_tests,
suite: ['cogl', 'cogl/unit'],
args: [
cogl_config_env,
libmutter_cogl_test_unit,
'unit_test_' + test_target
],
is_parallel: false,
)
endforeach

View File

@ -1,6 +1,9 @@
#!/bin/sh
inputfile="$1"
inputdir="$1"
outputfile="$2"
nm "$inputfile" | grep '[DR] _\?unit_test_'|sed 's/.\+ [DR] _\?//' > "$outputfile"
echo > "$outputfile"
grep -h -r --include \*.c UNIT_TEST "$inputdir" | \
sed -n -e 's/^UNIT_TEST *( *\([a-zA-Z0-9_]\{1,\}\).*/\1/p' > "$outputfile"