forked from AuroraMiddleware/gtk
d0b7a4a4ec
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
296 lines
8.6 KiB
Meson
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
|