Files
glib/gobject/tests/meson.build
Emmanuele Bassi 9b4bd73d42 Add a G_DECLARE macro for "protected" types
Certain libraries want to provide types that are derivable for internal
users, but final for any external consumer of the API. Other languages
use the term "protected" to refer to this kind of type visibility
attribute.

Since we're providing macros to declare derivable and final types, we
should also provide a macro for declaring protected types.

The mechanism is the same as the other G_DECLARE macros; protected
types:

 - define an opaque type for the instance, like G_DEFINE_FINAL_TYPE
 - define an opaque type for the class
 - define cast and type check functions for instance pointers, for
 public consumers, and cast and type check functions for class pointers,
 for internal consumers
 - omit an accessor for retrieving the class structure from the instance
 structure, as it would be pointless to do so
2024-12-13 17:09:45 +01:00

279 lines
7.1 KiB
Meson

subdir('performance')
marshalers_h = custom_target('marshalers_h',
output : 'marshalers.h',
input : 'marshalers.list',
command : [
python, glib_genmarshal,
'--prefix=test',
'--valist-marshallers',
'--output=@OUTPUT@',
'--quiet',
'--header',
'@INPUT@',
],
)
marshalers_c = custom_target('marshalers_c',
output : 'marshalers.c',
input : 'marshalers.list',
command : [
python, glib_genmarshal,
'--prefix=test',
'--valist-marshallers',
'--include-header=marshalers.h',
'--output=@OUTPUT@',
'--quiet',
'--body',
'@INPUT@',
],
)
# We must embed custom-dispatch.exe with an application
# manifest to pacify UAC in order to run on 32-bit Windows
# builds, otherwise the test will not run as UAC will kill it.
extra_custom_dispatch_objs = []
if embed_uac_manifest
uac_exe_pkg = 'gobject'
uac_exe_name = 'custom-dispatch'
# Well, we have to forgo the xxx.exe.manifest in the output listing, since
# compile_resources doesn't like to consume targets with multiple outputs,
# and the xxx.exe.manifest and xxx.rc are tied together
uac_rc = custom_target(
'@0@.rc'.format(uac_exe_name),
output: ['@0@.rc'.format(uac_exe_name)],
command: [gen_uac_manifest,
'-p=@0@'.format(uac_exe_pkg),
'-n=@0@'.format(uac_exe_name),
'--pkg-version=@0@'.format(meson.project_version()),
'--output-dir=@OUTDIR@'],
)
extra_custom_dispatch_objs = import('windows').compile_resources(uac_rc)
endif
gobject_tests = {
'notify-init' : {},
'notify-init2' : {},
'custom-dispatch' : {
'extra_objs' : extra_custom_dispatch_objs,
},
'qdata' : {},
'accumulator' : {
'source' : ['accumulator.c', marshalers_h, marshalers_c],
},
'basics-gobject' : {},
'boxed' : {},
'defaultiface' : {
'source' : ['defaultiface.c', 'testmodule.c'],
},
'deftype' : { 'protocol': 'exitcode' },
'deprecated-properties' : {},
'dynamictype' : {
'source' : ['dynamictype.c', 'testmodule.c'],
},
'enums' : {},
'max-version' : {'install': false},
'override' : {},
'param' : {},
'references' : {},
'basic-signals' : {},
'singleton' : {},
'threadtests' : {},
'dynamictests' : {},
'binding' : {},
'bindinggroup' : {},
'properties' : {},
'properties-introspection' : {},
'reference' : {
# FIXME: https://gitlab.gnome.org/GNOME/glib/-/issues/3148
'can_fail' : host_system == 'gnu',
},
'flags' : {},
'value' : {},
'type' : {},
'gobject-private' : {
'source' : 'private.c',
},
'closure' : {},
'closure-refcount' : { 'suite': ['slow'] },
'object' : {},
'internal-type': {},
'signal-handler' : {},
'ifaceproperties' : {},
'signals' : {
'source' : ['signals.c', marshalers_h, marshalers_c],
},
'signalgroup' : {},
'testing' : {},
'type-flags' : {},
'objects-refcount1' : {
'c_args': cc.get_supported_arguments([
'-DG_DISABLE_CAST_CHECKS',
'-Werror',
'-Wcast-align=strict',
]),
},
'objects-refcount2' : {'suite' : ['slow']},
'properties-refcount1' : {},
'properties-refcount2' : {'suite' : ['slow']},
'properties-refcount3' : {'suite' : ['slow']},
'properties-refcount4' : {},
'signals-refcount1' : {
'source' : 'signals-refcount.c',
'c_args' : ['-DTESTNUM=1'],
},
'signals-refcount2' : {
'source' : 'signals-refcount.c',
'c_args' : ['-DTESTNUM=2'],
},
'signals-refcount3' : {
'source' : 'signals-refcount.c',
'c_args' : ['-DTESTNUM=3'],
},
'signals-refcount4' : {
'source' : 'signals-refcount.c',
'c_args' : ['-DTESTNUM=4'],
},
}
if have_cxx
gobject_tests += {
'cxx' : {
'protocol': 'exitcode',
'source' : ['cxx.cpp'],
'suite' : ['cpp'],
},
}
foreach std, arg: cxx_standards
gobject_tests += {
'cxx-@0@'.format(std) : {
'protocol': 'exitcode',
'source' : ['cxx.cpp'],
'suite' : ['cpp'],
'cpp_args' : [arg],
},
}
endforeach
endif
if cc.get_id() != 'msvc'
gobject_tests += {'autoptr' : {}}
endif
python_tests = {
'genmarshal.py' : {},
'gobject-query.py' : {
'depends' : gobject_query,
'can_fail' : host_system == 'windows',
},
'mkenums.py' : {},
}
test_env = environment()
test_env.set('G_TEST_SRCDIR', meson.current_source_dir())
test_env.set('G_TEST_BUILDDIR', meson.current_build_dir())
test_deps = [libm, thread_dep, libglib_dep, libgobject_dep]
test_cargs = ['-DG_LOG_DOMAIN="GLib-GObject"', '-UG_DISABLE_ASSERT']
test_cpp_args = test_cargs
foreach test_name, extra_args : gobject_tests
source = extra_args.get('source', test_name + '.c')
extra_objs = extra_args.get('extra_objs', [])
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)
test_conf.set('env', '')
configure_file(
input: installed_tests_template_tap,
output: test_name + '.test',
install_dir: installed_tests_metadir,
install_tag: 'tests',
configuration: test_conf
)
endif
exe = executable(test_name, source, extra_objs,
c_args : test_cargs + extra_args.get('c_args', []),
cpp_args : test_cpp_args + extra_args.get('cpp_args', []),
dependencies : test_deps + extra_args.get('dependencies', []),
install_dir: installed_tests_execdir,
install_tag: 'tests',
install: install,
)
suite = ['gobject'] + extra_args.get('suite', [])
timeout = suite.contains('slow') ? test_timeout_slow : test_timeout
if extra_args.get('can_fail', false)
suite += 'failing'
endif
# FIXME: https://gitlab.gnome.org/GNOME/glib/issues/1316
# aka https://bugs.debian.org/880883
if test_name == 'closure-refcount' and ['arm', 'aarch64'].contains(host_machine.cpu_family())
timeout = timeout * 10
endif
test(test_name,
exe,
protocol : extra_args.get('protocol', test_protocol),
env : test_env,
timeout : timeout,
suite : suite,
)
endforeach
foreach test_name, extra_args : python_tests
depends = [extra_args.get('depends', [])]
suite = ['gobject', 'no-valgrind']
if extra_args.get('can_fail', false)
suite += 'failing'
endif
test(
test_name,
python,
protocol : extra_args.get('protocol', test_protocol),
depends: depends,
args: ['-B', files(test_name)],
env: test_env,
suite: suite,
)
if installed_tests_enabled
install_data(
files(test_name),
install_dir: installed_tests_execdir,
install_tag: 'tests',
install_mode: 'rwxr-xr-x',
)
test_conf = configuration_data()
test_conf.set('installed_tests_dir', installed_tests_execdir)
test_conf.set('program', test_name)
test_conf.set('env', '')
configure_file(
input: installed_tests_template_tap,
output: test_name + '.test',
install_dir: installed_tests_metadir,
install_tag: 'tests',
configuration: test_conf,
)
endif
endforeach
# TAP test runner for Python tests
if installed_tests_enabled
install_data(
files('taptestrunner.py'),
install_dir: installed_tests_execdir,
install_tag: 'tests',
)
endif