summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilip Withnall <philip@tecnocode.co.uk>2018-07-17 09:51:12 +0000
committerPhilip Withnall <philip@tecnocode.co.uk>2018-07-17 09:51:12 +0000
commit7f55c768ce16dac4acdfe4b9270018a5c23d4efa (patch)
tree547c343fc5b3c3bc41182bb81e0a54457846301d
parent16c6a735866c63abaef78d5fdb2bad84be5a5a03 (diff)
parent1bba3276bb3b7a878860ac01483574599b23853c (diff)
downloadglib-7f55c768ce16dac4acdfe4b9270018a5c23d4efa.tar.gz
Merge branch '1444-install-tests' into 'master'
Install unit tests Closes #1444 See merge request GNOME/glib!183
-rw-r--r--gio/tests/meson.build11
-rw-r--r--glib/tests/meson.build354
-rw-r--r--gobject/tests/meson.build14
-rw-r--r--meson.build6
-rw-r--r--meson_options.txt5
-rw-r--r--template.test.in3
-rw-r--r--tests/meson.build11
7 files changed, 199 insertions, 205 deletions
diff --git a/gio/tests/meson.build b/gio/tests/meson.build
index 41770e47c..85d31d622 100644
--- a/gio/tests/meson.build
+++ b/gio/tests/meson.build
@@ -79,12 +79,11 @@ test_extra_programs = [
['gdbus-testserver'],
]
-test_env = [
- 'G_TEST_SRCDIR=' + meson.current_source_dir(),
- 'G_TEST_BUILDDIR=' + meson.current_build_dir(),
- 'GIO_MODULE_DIR=',
- 'GIO_LAUNCH_DESKTOP=' + meson.build_root() + '/gio/gio-launch-desktop',
-]
+test_env = environment()
+test_env.set('G_TEST_SRCDIR', meson.current_source_dir())
+test_env.set('G_TEST_BUILDDIR', meson.current_build_dir())
+test_env.set('GIO_MODULE_DIR', '')
+test_env.set('GIO_LAUNCH_DESKTOP', meson.build_root() + '/gio/gio-launch-desktop')
test_c_args = [
'-DG_LOG_DOMAIN="GLib-GIO"',
diff --git a/glib/tests/meson.build b/glib/tests/meson.build
index a2c6973a0..f5c0fbecb 100644
--- a/glib/tests/meson.build
+++ b/glib/tests/meson.build
@@ -1,201 +1,186 @@
-glib_tests = [
- 'array-test',
- 'asyncqueue',
- 'base64',
- 'bitlock',
- 'bookmarkfile',
- 'bytes',
- 'cache',
- 'charset',
- 'checksum',
- 'collate',
- 'cond',
- 'convert',
- 'dataset',
- 'date',
- 'dir',
- 'environment',
- 'error',
- 'fileutils',
- 'gdatetime',
- 'guuid',
- 'gvariant',
- 'hash',
- 'hmac',
- 'hook',
- 'hostutils',
- 'keyfile',
- 'list',
- 'logging',
- 'mainloop',
- 'mappedfile',
- 'markup',
- 'markup-parse',
- 'markup-collect',
- 'markup-escape',
- 'markup-subparser',
- 'mem-overflow',
- 'mutex',
- 'node',
- 'once',
- 'option-context',
- 'option-argv0',
- 'overflow',
- # overflow-fallback handled separately below
- 'pattern',
- 'private',
- 'protocol',
- 'queue',
- 'rand',
- 'rcbox',
- 'rec-mutex',
- 'refcount',
- 'refcount-macro',
- 'refstring',
- 'regex',
- 'rwlock',
- 'scannerapi',
- 'search-utils',
- 'sequence',
- 'shell',
- 'slice',
- 'slist',
- 'sort',
- 'spawn-multithreaded',
- 'spawn-singlethread',
- 'strfuncs',
- 'string',
- 'testing',
- 'test-printf',
- 'thread',
- 'timeout',
- 'timer',
- 'tree',
- 'utf8-performance',
- 'utf8-pointer',
- 'utf8-validate',
- 'utf8-misc',
- 'utils',
- 'unicode',
- 'uri',
- '1bit-mutex',
- '642026',
-]
+glib_tests = {
+ 'array-test' : {},
+ 'asyncqueue' : {},
+ 'atomic' : {
+ 'c_args' : cc.get_id() == 'gcc' ? ['-Wstrict-aliasing=2'] : [],
+ },
+ 'autoptr' : {
+ 'skip' : cc.get_id() == 'msvc',
+ },
+ 'base64' : {},
+ 'bitlock' : {},
+ 'bookmarkfile' : {},
+ 'bytes' : {},
+ 'cache' : {},
+ 'charset' : {},
+ 'checksum' : {},
+ 'collate' : {},
+ 'cond' : {},
+ 'convert' : {},
+ 'dataset' : {},
+ 'date' : {},
+ 'dir' : {},
+ 'environment' : {},
+ 'error' : {},
+ 'fileutils' : {},
+ 'gdatetime' : {},
+ 'guuid' : {},
+ 'gvariant' : {
+ 'suite' : ['slow'],
+ },
+ 'gwakeup' : {
+ 'source' : ['gwakeuptest.c', '../gwakeup.c'],
+ 'install' : false,
+ },
+ 'gwakeup-fallback' : {
+ 'skip' : not glib_conf.has('HAVE_EVENTFD'),
+ 'source' : ['gwakeuptest.c', '../gwakeup.c'],
+ 'c_args' : ['-DTEST_EVENTFD_FALLBACK'],
+ 'install' : false,
+ },
+ 'hash' : {},
+ 'hmac' : {},
+ 'hook' : {},
+ 'hostutils' : {},
+ 'include' : {
+ 'skip' : host_machine.system() == 'windows',
+ },
+ 'keyfile' : {},
+ 'list' : {},
+ 'logging' : {},
+ 'mainloop' : {},
+ 'mappedfile' : {},
+ 'markup' : {},
+ 'markup-parse' : {},
+ 'markup-collect' : {},
+ 'markup-escape' : {},
+ 'markup-subparser' : {},
+ 'mem-overflow' : {},
+ 'mutex' : {},
+ 'node' : {},
+ 'once' : {},
+ 'option-context' : {},
+ 'option-argv0' : {},
+ 'overflow' : {},
+ 'overflow-fallback' : {
+ 'source' : 'overflow.c',
+ 'c_args' : ['-D_GLIB_TEST_OVERFLOW_FALLBACK'],
+ },
+ 'pattern' : {},
+ 'private' : {},
+ 'protocol' : {},
+ 'queue' : {},
+ 'rand' : {},
+ 'rcbox' : {},
+ 'rec-mutex' : {},
+ 'refcount' : {},
+ 'refcount-macro' : {
+ 'source' : 'refcount.c',
+ 'c_args' : ['-DG_DISABLE_CHECKS'],
+ },
+ 'refstring' : {},
+ 'regex' : {
+ 'dependencies' : [pcre],
+ 'c_args' : use_pcre_static_flag ? ['-DPCRE_STATIC'] : [],
+ },
+ 'rwlock' : {},
+ 'scannerapi' : {},
+ 'search-utils' : {},
+ 'sequence' : {
+ 'suite' : ['slow'],
+ },
+ 'shell' : {},
+ 'slice' : {},
+ 'slist' : {},
+ 'sort' : {},
+ 'spawn-multithreaded' : {},
+ 'spawn-singlethread' : {},
+ 'strfuncs' : {},
+ 'string' : {},
+ 'testing' : {},
+ 'test-printf' : {},
+ 'thread' : {},
+ 'timeout' : {},
+ 'timer' : {},
+ 'tree' : {},
+ 'utf8-performance' : {},
+ 'utf8-pointer' : {},
+ 'utf8-validate' : {},
+ 'utf8-misc' : {},
+ 'utils' : {},
+ 'unicode' : {},
+ 'unix' : {
+ 'skip' : host_machine.system() == 'windows',
+ },
+ 'uri' : {},
+ '1bit-mutex' : {},
+ '1bit-emufutex' : {
+ 'source' : '1bit-mutex.c',
+ 'c_args' : ['-DTEST_EMULATED_FUTEX'],
+ 'install' : false,
+ },
+ '642026' : {
+ 'suite' : ['slow'],
+ },
+ '642026-ec' : {
+ 'source' : '642026.c',
+ 'c_args' : ['-DG_ERRORCHECK_MUTEXES'],
+ 'suite' : ['slow'],
+ },
+}
-if host_machine.system() != 'windows'
- glib_tests += [ 'unix', 'include' ]
-endif
-
-if cc.get_id() != 'msvc'
- glib_tests += [ 'autoptr' ]
-endif
-
-# FIXME: use new environment() object
# Not entirely random of course, but at least it changes over time
random_number = minor_version + meson.version().split('.').get(1).to_int()
-test_env = [
- 'G_TEST_SRCDIR=' + meson.current_source_dir(),
- 'G_TEST_BUILDDIR=' + meson.current_build_dir(),
- 'G_DEBUG=gc-friendly',
- 'MALLOC_CHECK_=2',
- 'MALLOC_PERTURB_=@0@'.format(random_number % 256),
-]
+test_env = environment()
+test_env.set('G_TEST_SRCDIR', meson.current_source_dir())
+test_env.set('G_TEST_BUILDDIR', meson.current_build_dir())
+test_env.set('G_DEBUG', 'gc-friendly')
+test_env.set('MALLOC_CHECK_', '2')
+test_env.set('MALLOC_PERTURB_', '@0@'.format(random_number % 256))
+test_deps = [libm, thread_dep, libglib_dep]
test_cargs = ['-DG_LOG_DOMAIN="GLib"']
-# Tests that consistently time out on the CI infrastructure
-slow_tests = [
- 'gvariant',
- 'sequence',
- '642026',
-]
+foreach test_name, extra_args : glib_tests
+ # FIXME: This condition is ugly, meson should either have 'continue'
+ # keyword (https://github.com/mesonbuild/meson/issues/3601), or support
+ # mutable to dictionaries (https://github.com/mesonbuild/meson/pull/3820).
+ if not extra_args.get('skip', false)
+ source = extra_args.get('source', test_name + '.c')
+ install = installed_tests_enabled and extra_args.get('install', true)
+
+ if install
+ test_conf = configuration_data()
+ test_conf.set('installed_tests_dir', installed_tests_execdir)
+ test_conf.set('program', test_name)
+ configure_file(
+ input: installed_tests_template,
+ output: test_name + '.test',
+ install_dir: installed_tests_metadir,
+ configuration: test_conf
+ )
+ endif
+
+ exe = executable(test_name, source,
+ c_args : test_cargs + extra_args.get('c_args', []),
+ dependencies : test_deps + extra_args.get('dependencies', []),
+ install_dir: installed_tests_execdir,
+ install: install,
+ )
-foreach test_name : glib_tests
- deps = [libm, thread_dep, libglib_dep]
- source = test_name + '.c'
- c_args = test_cargs + ['-DPCRE_STATIC']
- if test_name == 'regex'
- deps += [pcre]
- endif
- if test_name == 'gdatetime'
- deps += [libintl]
- endif
- # We build the refcount test twice: one to test the function-based API,
- # and the other to test the macro-based API that is used when disabling
- # checks
- if test_name == 'refcount-macro'
- source = 'refcount.c'
- c_args += ['-DG_DISABLE_CHECKS']
- endif
- exe = executable(test_name, source,
- c_args : c_args,
- dependencies : deps,
- install : false,
- )
- # These tests may take more than 30 seconds to run on the CI infrastructure
- if slow_tests.contains(test_name)
- test(test_name, exe, env : test_env, timeout : 120, suite : ['glib', 'slow'])
- else
- test(test_name, exe, env : test_env, suite : ['glib'])
+ suite = ['glib'] + extra_args.get('suite', [])
+ timeout = suite.contains('slow') ? 120 : 30
+ test(test_name, exe, env : test_env, timeout : timeout, suite : suite)
endif
endforeach
-c_args_atomic = []
-if cc.get_id() == 'gcc'
- c_args_atomic += ['-Wstrict-aliasing=2']
-endif
-
-deps = [libm, thread_dep, libglib_dep]
-
-exe = executable('atomic', 'atomic.c',
- c_args : test_cargs + c_args_atomic,
- dependencies : deps,
-)
-test('atomic', exe, env : test_env, suite : ['glib'])
-
-# FIXME: consolidate all of these into the array
-exe = executable('overflow-fallback', 'overflow.c',
- c_args : test_cargs + ['-D_GLIB_TEST_OVERFLOW_FALLBACK'],
- dependencies : deps,
- install : false,
-)
-test('overflow-fallback', exe, env : test_env, suite : ['glib'])
-
-exe = executable('642026-ec', '642026.c',
- c_args : test_cargs + ['-DG_ERRORCHECK_MUTEXES'],
- dependencies : deps,
- install : false,
-)
-test('642026-ec', exe, env : test_env, timeout : 90, suite : ['glib', 'slow'])
-
-exe = executable('1bit-emufutex', '1bit-mutex.c',
- c_args : test_cargs + ['-DTEST_EMULATED_FUTEX'],
- dependencies : deps,
- install : false,
-)
-test('1bit-emufutex', exe, env : test_env, suite : ['glib'])
-
-exe = executable('gwakeup', 'gwakeuptest.c', '../gwakeup.c',
- c_args : test_cargs,
- dependencies : deps,
- install : false)
-test('gwakeup', exe, env : test_env, suite : ['glib'])
-
-if glib_conf.has('HAVE_EVENTFD')
- exe = executable('gwakeup-fallback', 'gwakeuptest.c', '../gwakeup.c',
- c_args : test_cargs + ['-DTEST_EVENTFD_FALLBACK'],
- dependencies : deps,
- install : false,
- )
- test('gwakeup-fallback', exe, env : test_env, suite : ['glib'])
-endif
-
# test-spawn-echo helper binary required by the spawn tests above
executable('test-spawn-echo', 'test-spawn-echo.c',
c_args : test_cargs,
- dependencies : deps,
- install : false,
+ dependencies : test_deps,
+ install_dir: installed_tests_execdir,
+ install: installed_tests_enabled,
)
# some testing of gtester functionality
@@ -204,7 +189,6 @@ if not meson.is_cross_build() and host_system != 'windows'
if xmllint.found()
tmpsample_xml = custom_target('tmpsample.xml',
output : 'tmpsample.xml',
- build_by_default : true, # hack around meson bug, see PR #1335
command : [ gtester, '-k', '--quiet', '-o', '@OUTPUT@',
'--test-arg=--gtester-selftest', gtester])
diff --git a/gobject/tests/meson.build b/gobject/tests/meson.build
index 252b5ecf8..53b76d3eb 100644
--- a/gobject/tests/meson.build
+++ b/gobject/tests/meson.build
@@ -20,18 +20,16 @@ gobject_tests = [
'ifaceproperties',
]
-# FIXME: use new environment() object
# FIXME: put common bits of test environment() in one location
# Not entirely random of course, but at least it changes over time
random_number = minor_version + meson.version().split('.').get(1).to_int()
-test_env = [
- 'G_TEST_SRCDIR=' + meson.current_source_dir(),
- 'G_TEST_BUILDDIR=' + meson.current_build_dir(),
- 'G_DEBUG=gc-friendly',
- 'MALLOC_CHECK_=2',
- 'MALLOC_PERTURB_=@0@'.format(random_number % 256),
-]
+test_env = environment()
+test_env.set('G_TEST_SRCDIR', meson.current_source_dir())
+test_env.set('G_TEST_BUILDDIR', meson.current_build_dir())
+test_env.set('G_DEBUG', 'gc-friendly')
+test_env.set('MALLOC_CHECK_', '2')
+test_env.set('MALLOC_PERTURB_', '@0@'.format(random_number % 256))
foreach test_name : gobject_tests
deps = [libm, thread_dep, libglib_dep, libgobject_dep]
diff --git a/meson.build b/meson.build
index fa7357d40..15f895e7f 100644
--- a/meson.build
+++ b/meson.build
@@ -56,6 +56,7 @@ gioinc = include_directories('gio')
glib_prefix = get_option('prefix')
glib_bindir = join_paths(glib_prefix, get_option('bindir'))
glib_libdir = join_paths(glib_prefix, get_option('libdir'))
+glib_libexecdir = join_paths(glib_prefix, get_option('libexecdir'))
glib_datadir = join_paths(glib_prefix, get_option('datadir'))
glib_pkgdatadir = join_paths(glib_datadir, 'glib-2.0')
glib_includedir = join_paths(glib_prefix, get_option('includedir'))
@@ -66,6 +67,11 @@ endif
glib_pkgconfigreldir = join_paths(glib_libdir, 'pkgconfig')
+installed_tests_metadir = join_paths(glib_datadir, 'installed-tests', meson.project_name())
+installed_tests_execdir = join_paths(glib_libexecdir, 'installed-tests', meson.project_name())
+installed_tests_enabled = get_option('installed_tests')
+installed_tests_template = files('template.test.in')
+
add_project_arguments('-D_GNU_SOURCE', language: 'c')
# Disable strict aliasing;
diff --git a/meson_options.txt b/meson_options.txt
index 5245e0a8b..64accf68b 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -78,3 +78,8 @@ option('fam',
type : 'boolean',
value : false,
description : 'Use fam for file system monitoring')
+
+option('installed_tests',
+ type : 'boolean',
+ value : false,
+ description : 'enable installed tests')
diff --git a/template.test.in b/template.test.in
new file mode 100644
index 000000000..f701627f8
--- /dev/null
+++ b/template.test.in
@@ -0,0 +1,3 @@
+[Test]
+Type=session
+Exec=@installed_tests_dir@/@program@
diff --git a/tests/meson.build b/tests/meson.build
index 03997a634..3beb4c68a 100644
--- a/tests/meson.build
+++ b/tests/meson.build
@@ -1,11 +1,10 @@
# tests
-test_env = [
- 'G_TEST_SRCDIR=' + meson.current_source_dir(),
- 'G_TEST_BUILDDIR=' + meson.current_build_dir(),
- 'G_DEBUG=gc-friendly',
- 'MALLOC_CHECK_=2',
-]
+test_env = environment()
+test_env.set('G_TEST_SRCDIR', meson.current_source_dir())
+test_env.set('G_TEST_BUILDDIR', meson.current_build_dir())
+test_env.set('G_DEBUG', 'gc-friendly')
+test_env.set('MALLOC_CHECK_', '2')
test_cargs = ['-DG_LOG_DOMAIN="GLib"']