gtk2/testsuite/gtk/meson.build
Matthias Clasen d0b7a4a4ec testsuite: Add a test that checks for property accessors
Make sure that every object property in GTK has accessors for getting
its value (if the property is readable) or setting it (if it is
writable).

Since we are still missing accessors, the test is allowed to
fail for now. Sadly, mesons xfail support is busted, so we just
disable the test entirely :(

Based on initial work by Benjamin Otte.

Related: #2440
2020-10-03 14:28:37 -04:00

296 lines
8.6 KiB
Meson

testexecdir = join_paths(installed_test_bindir, 'gtk')
testdatadir = join_paths(installed_test_datadir, 'gtk')
gtk_tests_export_dynamic_ldflag = []
if cc.get_id() != 'msvc'
if os_darwin
gtk_tests_export_dynamic_ldflag = ['-Wl,-export_dynamic']
else
gtk_tests_export_dynamic_ldflag = ['-Wl,--export-dynamic']
endif
endif
# Available keys for each test:
#
# - 'name': the test name; used for the test and to determine the base
# source file for the test (MANDATORY)
# - 'sources': (array): additional sources needed by the test
# - 'c_args': (array): additional compiler arguments
# - 'link_args': (array): additional linker arguments
# - 'suites': (array): additional test suites
tests = [
{ 'name': 'accel' },
# sadly, mesons xfail support seems busted
# { 'name': 'accessor-apis' },
{ 'name': 'action' },
{ 'name': 'adjustment' },
{ 'name': 'bitset' },
{
'name': 'bitmask',
'sources': ['../../gtk/gtkallocatedbitmask.c'],
'c_args': ['-DGTK_COMPILATION', '-UG_ENABLE_DEBUG'],
},
{
'name': 'builder',
'link_args': gtk_tests_export_dynamic_ldflag,
},
{ 'name': 'builderparser' },
{ 'name': 'cellarea' },
{ 'name': 'check-icon-names' },
{
'name': 'constraint-solver',
'sources': [
'../../gtk/gtkconstraintsolver.c',
'../../gtk/gtkconstraintexpression.c',
],
'c_args': ['-DGTK_COMPILATION', '-UG_ENABLE_DEBUG'],
},
{ 'name': 'cssprovider' },
{
'name': 'rbtree-crash',
'sources': ['../../gtk/gtkrbtree.c'],
'c_args': ['-DGTK_COMPILATION', '-UG_ENABLE_DEBUG'],
},
{ 'name': 'defaultvalue' },
{ 'name': 'entry' },
{ 'name': 'expression' },
{ 'name': 'filter' },
{ 'name': 'filterlistmodel' },
{
'name': 'filterlistmodel-exhaustive',
'suites': ['slow'],
},
{ 'name': 'flattenlistmodel' },
{ 'name': 'floating' },
{ 'name': 'flowbox' },
#{ 'name': 'gestures' },
{ 'name': 'grid' },
{ 'name': 'grid-layout' },
{ 'name': 'icontheme' },
{ 'name': 'listbox' },
{ 'name': 'main' },
{ 'name': 'maplistmodel' },
{ 'name': 'multiselection' },
{ 'name': 'notify' },
{ 'name': 'no-gtk-init' },
{ 'name': 'object' },
{ 'name': 'objects-finalize' },
{ 'name': 'papersize' },
#{ 'name': 'popover' },
{
'name': 'propertylookuplistmodel',
'sources': ['../../gtk/gtkpropertylookuplistmodel.c'],
'c_args': ['-DGTK_COMPILATION', '-UG_ENABLE_DEBUG'],
},
{
'name': 'rbtree',
'sources': ['../../gtk/gtktreerbtree.c'],
'c_args': ['-DGTK_COMPILATION', '-UG_ENABLE_DEBUG'],
},
{ 'name': 'recentmanager' },
{ 'name': 'regression-tests' },
{ 'name': 'scrolledwindow' },
{ 'name': 'searchbar' },
{ 'name': 'shortcuts' },
{ 'name': 'singleselection' },
{ 'name': 'slicelistmodel' },
{ 'name': 'sorter' },
{ 'name': 'sortlistmodel' },
{ 'name': 'sortlistmodel-exhaustive' },
{ 'name': 'spinbutton' },
{ 'name': 'stringlist' },
{ 'name': 'templates' },
{ 'name': 'textbuffer' },
{ 'name': 'textiter' },
{ 'name': 'theme-validate' },
{
'name': 'timsort',
'sources': ['timsort.c', '../../gtk/timsort/gtktimsort.c'],
},
{ 'name': 'tooltips' },
{ 'name': 'treelistmodel' },
{
'name': 'treemodel',
'sources': [
'treemodel.c',
'liststore.c',
'treestore.c',
'filtermodel.c',
'modelrefcount.c',
'sortmodel.c',
'gtktreemodelrefcount.c',
],
},
{ 'name': 'treepath' },
{ 'name': 'treesorter' },
{ 'name': 'treeview' },
{ 'name': 'typename' },
{ 'name': 'displayclose' },
{ 'name': 'revealer-size' },
{ 'name': 'widgetorder' },
{ 'name': 'widget-refcount' },
]
# Tests that are expected to fail
xfail = [
# we are still missing some accessors
'accessor-apis',
# one of the window resizing tests fails after
# the GdkToplevel refactoring, and needs a big
# gtkwindow.c configure request cleanup
'window',
]
is_debug = get_option('buildtype').startswith('debug')
test_cargs = []
if os_unix
# tests += [['defaultvalue']] # disabled in Makefile.am as well
test_cargs += ['-DHAVE_UNIX_PRINT_WIDGETS']
endif
foreach flag: common_cflags
if flag not in ['-Werror=missing-prototypes', '-Werror=missing-declarations', '-fvisibility=hidden']
test_cargs += flag
endif
endforeach
foreach t : tests
test_name = t.get('name')
test_srcs = ['@0@.c'.format(test_name)] + t.get('sources', [])
test_extra_cargs = t.get('c_args', [])
test_extra_ldflags = t.get('link_args', [])
test_extra_suites = t.get('suites', [])
test_timeout = 60
test_exe = executable(test_name, test_srcs,
c_args : test_cargs + test_extra_cargs,
link_args : test_extra_ldflags,
dependencies : libgtk_dep,
install: get_option('install-tests'),
install_dir: testexecdir)
expect_fail = xfail.contains(test_name)
if test_extra_suites.contains('slow')
test_timeout = 90
endif
test(test_name, test_exe,
args: [ '--tap', '-k' ],
protocol: 'tap',
timeout: test_timeout,
env: [
'GSK_RENDERER=cairo',
'G_TEST_SRCDIR=@0@'.format(meson.current_source_dir()),
'G_TEST_BUILDDIR=@0@'.format(meson.current_build_dir()),
],
suite: ['gtk'] + test_extra_suites,
should_fail: expect_fail,
)
endforeach
# FIXME: if objc autotestkeywords_CPPFLAGS += -DHAVE_OBJC=1 -x objective-c++
if add_languages('cpp', required: false)
test_exe = executable('autotestkeywords',
'autotestkeywords.cc',
c_args : test_cargs + ['-Idummy-headers'],
dependencies : libgtk_dep,
install: get_option('install-tests'),
install_dir: testexecdir)
test('c++ keywords', test_exe,
args: [ '--tap', '-k' ],
#protocol: 'tap',
env: [
'G_TEST_SRCDIR=@0@'.format(meson.current_source_dir()),
'G_TEST_BUILDDIR=@0@'.format(meson.current_build_dir()),
],
suite: 'gtk')
if get_option('install-tests')
conf = configuration_data()
conf.set('testexecdir', testexecdir)
conf.set('test', 'autotestkeywords')
configure_file(input: 'gtk.test.in',
output: 'autotestkeywords.test',
configuration: conf,
install_dir: testdatadir)
endif
endif
focus_chain_tests = [
# test direction
[ 'basic', 'tab' ],
[ 'basic', 'tab-backward' ],
[ 'basic', 'left' ],
[ 'basic', 'right' ],
[ 'widget-factory', 'tab' ],
[ 'widget-factory', 'tab-backward' ],
[ 'widget-factory', 'up' ],
[ 'widget-factory', 'down' ],
[ 'widget-factory', 'left' ],
# this one is flaky in ci, for unclear reasons
#[ 'widget-factory', 'right' ],
[ 'widget-factory2', 'tab' ],
[ 'widget-factory2', 'tab-backward' ],
# in ci, we don't show a color picker, so the focus chain
# for page3 is missing an expected button in the color editor
#[ 'widget-factory3', 'tab' ],
#[ 'widget-factory3', 'tab-backward' ],
]
focus_chain = executable(
'test-focus-chain',
['test-focus-chain.c'],
dependencies: libgtk_dep,
c_args: common_cflags,
install: get_option('install-tests'),
install_dir: testexecdir
)
foreach test : focus_chain_tests
test(test[0] + ' ' + test[1], focus_chain,
args: [ join_paths(meson.current_source_dir(), 'focus-chain', test[0] + '.ui'),
join_paths(meson.current_source_dir(), 'focus-chain', test[0] + '.' + test[1]) ],
env: [
'G_TEST_SRCDIR=@0@'.format(meson.current_source_dir()),
'G_TEST_BUILDDIR=@0@'.format(meson.current_build_dir())
],
suite: [ 'gtk', 'focus' ])
endforeach
if get_option('install-tests')
foreach t : tests
test_name = t.get('name')
conf = configuration_data()
conf.set('testexecdir', testexecdir)
conf.set('test', test_name)
configure_file(input: 'gtk.test.in',
output: '@0@.test'.format(test_name),
configuration: conf,
install_dir: testdatadir)
endforeach
install_subdir('icons', install_dir: testexecdir)
install_subdir('icons2', install_dir: testexecdir)
install_subdir('ui', install_dir: testexecdir)
endif
if false and get_option ('profiler')
test('performance-layout', test_performance,
args: [ '--mark', 'size allocation', join_paths(meson.current_build_dir(), '../../demos/widget-factory/gtk4-widget-factory') ],
env: [ 'GTK_THEME=Empty' ],
suite: [ 'gtk' ])
test('performance-snapshot', test_performance,
args: [ '--mark', 'widget snapshot', join_paths(meson.current_build_dir(), '../../demos/widget-factory/gtk4-widget-factory') ],
env: [ 'GTK_THEME=Empty' ],
suite: [ 'gtk' ])
endif