gtk/testsuite/gsk/meson.build
Benjamin Otte 01453c733c testsuite: Rename "diff" test to "not-diff"
3 things you need to know about this change:

1. We use diff(1) in various tests to check generated text against
   reference output
2. Windows locates executables not just in $PATH, it also looks in
   $cwd and the directory of the current process' binary
3. Multiple tests live together in the same directory

Windows is fun.
2024-11-05 02:45:37 +01:00

605 lines
17 KiB
Meson

compare_render = executable('compare-render',
['compare-render.c', '../reftests/reftest-compare.c', 'replay-node.c', '../gdk/udmabuf.c'],
dependencies: libgtk_static_dep,
c_args: common_cflags + ['-DGTK_COMPILATION'],
)
node_parser = executable('node-parser',
[ 'node-parser.c', '../testutils.c' ],
dependencies: libgtk_dep,
c_args: common_cflags,
)
compare_render_tests = [
'big-box-glyph-nocairo',
'big-checkerboard',
'big-checkerboard-scaled-down',
'big-checkerboard-scaled-down-nearest',
'big-checkerboard-scaled-down2',
'blend-difference',
'blend-modes',
'blend-invisible-child',
'blend-in-rotate',
'blend-normal',
'blurred-lines',
'blur-child-bounds-oversize-nogl',
'blur-contents-outside-of-clip',
'blur-huge-contents-outside-of-clip-nogl',
'border-bottom-right',
'border-colorstates',
'border-one-rounded',
'border-opacity',
'border-zero-width-color',
'borders-rotated',
'borders-scaled-nogl',
'clip-all-clipped-issue-7044',
'clip-contained',
'clip-coordinates-2d',
'clip-coordinates-nocairo',
'clip-in-rounded-clip1',
'clip-in-rounded-clip2',
'clip-in-rounded-clip3',
'clip-in-smaller-rounded-clip',
'clip-intersection-fail-opacity-nogl',
'clipped-repeat-nogl',
'clipped_rounded_clip',
'clip-nested1-nogl',
'clip-translate-offscreen',
'color-blur0',
'color-matrix-identity',
'color-matrix-merge',
'color-matrix-parsing',
'color-states',
'conic-gradient-premultiplied-nocairo',
'conic-gradient-with-64-colorstops',
'container-single-child-offscreen-for-opacity',
'crossfade-clip-both-children',
'cross-fade-clipped-with-huge-children-nogl',
'cross-fade-in-opacity',
'cross-fade-in-rotate',
'css-background-nogl',
'dihedral',
'empty-blend',
'empty-blur',
'empty-border',
'empty-cairo',
'empty-clip',
'empty-color',
'empty-color-matrix',
'empty-container',
'empty-cross-fade',
'empty-debug',
'empty-glshader',
'empty-inset-shadow',
'empty-linear-gradient',
'empty-mask',
'empty-opacity',
'empty-outset-shadow',
'empty-repeat',
'empty-rounded-clip',
'empty-shadow',
'empty-texture',
'empty-transform',
'fill',
'fill2',
'fill-clipped-nogl',
'fill-fractional-translate-gradient-nogl',
'fill-fractional-translate-nogl',
'fill-opacity',
'fill-scaled-up',
'fill-with-3d-contents-nogl-nocairo',
'glyph-cache-overflow-nogl',
'glyph-cache-overflow-slices',
'glyph-hinting-none',
'glyph-hinting-slight',
'glyph-hinting-position-nogl-nocairo',
'glyph-subpixel-position',
'glyph-scaling',
'glyph-antialias',
'huge-height-nogl',
'huge-width-nogl',
'inset-shadow-multiple',
'invalid-transform',
'issue-3615',
'linear-gradient-interpolation-nogl-nocairo',
'linear-gradient-3d-nocairo',
'linear-gradient-nonorthogonal-scale-nogl',
'linear-gradient-premultiplied-nocairo',
'linear-gradient-with-64-colorstops',
'lots-of-offscreens-nogl',
'mask',
'mask-clipped-inverted-alpha',
'mask-empty-mask',
'mask-empty-source',
'mask-modes',
'mask-modes-in-opacity',
'mask-modes-with-alpha',
'mask-texture-color-alpha',
'mipmap-generation-later',
'mipmap-with-1x1',
'nested-rounded-clips',
'offscreen-forced-downscale',
'offscreen-forced-downscale-all-clipped',
'offscreen-fractional-translate-nogl',
'offscreen-pixel-alignment-nogl-nocairo',
'offscreen-pixel-alignment2',
'opacity_clip',
'opacity-colormatrix-combinations',
'opacity-overdraw',
'opacity-overlapping-children',
'outset-shadow-corner-blur',
'outset-shadow-corner-blur-huge-nocairo-nogl',
'outset-shadow-corner-blur-normal',
'outset-shadow-corner-blur-tiny',
'outset_shadow_offset_both',
'outset_shadow_offset_x',
'outset_shadow_offset_y',
'outset_shadow_rounded_top',
'outset-shadow-scale-offset',
'outset_shadow_simple',
'premul-color-nogl',
'radial-gradient-premultiplied-nocairo',
'radial-gradient-with-64-colorstops',
'repeat',
'repeating-linear-gradient-edge-colors',
'repeating-radial-gradient-edge-colors',
'repeat-color',
'repeat-child-bounds',
'repeat-empty-child-bounds',
'repeat-huge-overdraw',
'repeat-negative-coords',
'repeat-no-repeat',
'repeat-node-tiling-horizontal',
'repeat-node-tiling-vertical',
'repeat-noninteger-nogl-nocairo',
'repeat-repeats',
'repeat-repeats-nested-nogl',
'repeat-scaling',
'repeat-texture',
'repeat-tiny-nogl-nocairo',
'repeating-gradient-scaled',
'reuse-of-texture-nested-in-offscreens',
'rounded-clip-with-huge-bounds-nogl',
'scale-textures-negative-ngl',
'scale-up-down',
'scaled-cairo',
'scaled-texture',
'scaled-texture-scale',
'scaled-texture-scale-clip-nocairo',
'scale0-crash',
'shadow-behind',
'shadow-clip-contents',
'shadow-huge-offset',
'shadow-in-opacity',
'shadow-offset-clip',
'shadow-offset-to-outside-clip',
'shadow-opacity',
'shadow-replay-nocairo',
'shadow-texture-formats',
'shrink-rounded-border',
'stroke',
'stroke-clipped-nogl',
'stroke-fractional-translate-gradient-nogl',
'stroke-fractional-translate-nogl',
'stroke-opacity',
'stroke-with-3d-contents-nogl-nocairo',
'subpixel-positioning',
'subpixel-positioning-hidpi-nogl-nocairo',
'text-color-mix',
'text-glyph-lsb',
'text-mixed-color-nocairo',
'text-mixed-color-colrv1',
'texture-coords',
'texture-offscreen-mipmap-nogl',
'texture-scale-filters-nocairo',
'texture-scale-magnify-10000x',
'texture-scale-magnify-rotate',
'texture-scale-nearest-noninteger-scaled-nogl',
'texture-scale-nearest-vs-linear',
'texture-scale-offset',
'texture-scale-stripes',
'texture-url',
'transform-huge-child-nogl',
'transform-huge-child-3d-nocairo-nogl',
'transform-in-transform',
'transform-in-transform-in-transform',
'z-transform-clipping-bounds-nocairo',
]
# these are too sensitive to differences in the renderers
# to run in ci, but still useful to keep around
informative_render_tests = [
'big-glyph',
'empty-text',
'huge-glyph',
'rounded-clip-in-clip-nocairo', # both cairo and gl fail this one
'text-missing-glyph', # https://gitlab.gnome.org/GNOME/pango/-/merge_requests/718
]
renderers = [
{ 'name': 'gl' },
{ 'name': 'broadway' },
{ 'name': 'cairo' },
{ 'name': 'ngl' },
{ 'name': 'vulkan' },
]
variants = {
'plain': '--plain',
'flip': '--flip',
'rotate': '--rotate',
'repeat': '--repeat',
'mask': '--mask',
'replay': '--replay',
'clip': '--clip',
'colorflip': '--colorflip',
}
compare_xfails = {
'ngl': {
# the gradients are prone to rounding errors which become
# more pronounced in small clips, it seems
'radial-gradient-with-64-colorstops': ['plain','flip','rotate','repeate','mask','replay','clip','colorflip'],
'conic-gradient-with-64-colorstops': ['plain','flip','rotate','repeate','mask','replay','clip','colorflip'],
'blur-child-bounds-oversize-nogl': ['clip'], # 6450
'rounded-clip-with-huge-bounds-nogl': ['plain','flip','rotate','repeat','mask','replay','clip','colorflip'], # 6532
'big-checkerboard': ['clipped'], # 6444
},
'vulkan': {
'radial-gradient-with-64-colorstops': ['clip', 'colorflip'],
'conic-gradient-with-64-colorstops': ['clip', 'colorflip'],
'blur-child-bounds-oversize-nogl': ['clip'], # 6450
'repeat-repeats-nested-nogl': ['clip'], # 6522
'repeating-radial-gradient-edge-colors': ['colorflip'],
'rounded-clip-with-huge-bounds-nogl': ['plain','flip','rotate','repeat','mask','replay','clip','colorflip'], # 6532
'big-checkerboard': ['clip'], # 6444
},
'gl': {
# 6525
'container-single-child-offscreen-for-opacity': ['rotate'],
'cross-fade-in-opacity': ['rotate'],
'mask-modes-in-opacity': ['rotate'],
'opacity-overlapping-children': ['rotate'],
'scaled-texture-scale': ['rotate'],
'shadow-opacity': ['rotate'],
'shadow-texture-formats': ['rotate'],
'texture-scale-nearest-vs-linear': ['rotate'],
},
}
foreach renderer : renderers
renderer_name = renderer.get('name')
renderer_xfails = compare_xfails.get(renderer_name, { })
foreach testname : compare_render_tests
test_xfails = renderer_xfails.get(testname, [])
exclude_term = '-no' + renderer_name
suites = [
'gsk',
'gsk-compare',
'gsk-' + renderer_name,
'gsk-compare-' + renderer_name,
]
test_env = [
'GSK_RENDERER=' + renderer_name,
'GTK_A11Y=test',
'G_TEST_SRCDIR=@0@'.format(meson.current_source_dir()),
'G_TEST_BUILDDIR=@0@'.format(meson.current_build_dir()),
'TEST_FONT_DIR=@0@/fonts'.format(meson.current_source_dir())
]
if ((not testname.contains(exclude_term)) and
(renderer_name != 'broadway' or broadway_enabled) and
(renderer_name != 'vulkan' or have_vulkan))
foreach variant : variants.keys()
extra_suites = [ 'gsk-compare-' + variant + '-' + renderer_name ]
if test_xfails.contains(variant) or (renderer_name == 'cairo' and variant == 'clip')
extra_suites += ['failing']
endif
test('compare ' + renderer_name + ' ' + testname + ' ' + variant, compare_render,
protocol: 'tap',
args: [
'--tap',
'-k',
variants.get(variant),
'--output', join_paths(meson.current_build_dir(), 'compare', renderer_name),
join_paths(meson.current_source_dir(), 'compare', testname + '.node'),
join_paths(meson.current_source_dir(), 'compare', testname + '.png'),
],
env: test_env,
suite: suites + extra_suites
)
endforeach
endif
endforeach
endforeach
node_parser_tests = [
'at-rule.node',
'blend.node',
'blend-unknown-mode.errors',
'blend-unknown-mode.node',
'blend-unknown-mode.ref.node',
'border.node',
'box-shadow.node',
'color.node',
'color2.node',
'color3.node',
'color4.node',
'conic-gradient.node',
'conic-gradient.ref.node',
'crash1.errors',
'crash1.node',
'crash1.ref.node',
'crash2.errors',
'crash2.node',
'crash2.ref.node',
'crash3.node',
'crash3.ref.node',
'crash4.errors',
'crash4.node',
'crash4.ref.node',
'debug.node',
'debug-fail.node',
'debug-fail.ref.node',
'debug-fail.errors',
'empty-blend.node',
'empty-blend.ref.node',
'empty-blur.node',
'empty-blur.ref.node',
'empty-border.node',
'empty-border.ref.node',
'empty-cairo.node',
'empty-cairo.ref.node',
'empty-clip.node',
'empty-clip.ref.node',
'empty-color.node',
'empty-color.ref.node',
'empty-color-matrix.node',
'empty-color-matrix.ref.node',
'empty-container.node',
'empty-container.ref.node',
'empty-cross-fade.node',
'empty-cross-fade.ref.node',
'empty-debug.node',
'empty-debug.ref.node',
'empty-fill.node',
'empty-fill.ref.node',
'empty-inset-shadow.node',
'empty-inset-shadow.ref.node',
'empty-linear-gradient.node',
'empty-linear-gradient.ref.node',
'empty-mask.node',
'empty-mask.ref.node',
'empty-opacity.node',
'empty-opacity.ref.node',
'empty-outset-shadow.node',
'empty-outset-shadow.ref.node',
'empty-repeat.node',
'empty-repeat.ref.node',
'empty-rounded-clip.node',
'empty-rounded-clip.ref.node',
'empty-shadow.node',
'empty-shadow.ref.node',
'empty-stroke.node',
'empty-stroke.ref.node',
'empty-subsurface.node',
'empty-subsurface.ref.node',
'empty-text.node',
'empty-text.ref.node',
'empty-texture.node',
'empty-texture.ref.node',
'empty-texture-scale.node',
'empty-texture-scale.ref.node',
'empty-transform.node',
'empty-transform.ref.node',
'fill.node',
'fill.ref.node',
'fill2.node',
'fill2.ref.node',
'glshader.node',
'glshader.ref.node',
'glshader.errors',
'gradient-fail.node',
'gradient-fail.ref.node',
'gradient-fail.errors',
'gradients.node',
'gradients.ref.node',
'mask-modes.node',
'mask-modes.ref.node',
'node-names.node',
'node-names-everywhere.errors',
'node-names-everywhere.node',
'node-names-everywhere.ref.node',
'occlusion-wrong-rect-contains',
'radial-gradient.node',
'radial-gradient.ref.node',
'radial-gradient-start-end.errors',
'radial-gradient-start-end.node',
'radial-gradient-start-end.ref.node',
'repeating-linear-gradient.node',
'repeating-linear-gradient.ref.node',
'repeating-radial-gradient.node',
'repeating-radial-gradient.ref.node',
'rounded-rect.node',
'shadow.node',
'shadow-fail.node',
'shadow-fail.ref.node',
'shadow-fail.errors',
'srgb-high-accuracy.node',
'string-error.errors',
'string-error.node',
'string-error.ref.node',
'stroke.node',
'stroke.ref.node',
'testswitch.node',
'text.node',
'text-color.node',
'text-fail.node',
'text-fail.ref.node',
'text-fail.errors',
'text-font-blob.node',
'text-font-blob.ref.node',
'text-font-errors.node',
'text-font-errors.ref.node',
'text-font-errors.errors',
'text-font-options.node',
'text-font-options.ref.node',
'text-font-options-error.node',
'text-font-options-error.ref.node',
'text-font-options-error.ref.errors',
'text-no-color.node',
'texture-fail.node',
'texture-fail.ref.node',
'texture-fail.errors',
'texture-names.node',
'texture-scale-filters.node',
'texture-scale-filters.ref.node',
'texture-scale-unknown-filter.errors',
'texture-scale-unknown-filter.node',
'texture-scale-unknown-filter.ref.node',
'transform-fail.node',
'transform-fail.ref.node',
'transform-fail.errors',
# this fails in f40 since libpng changes the pngs while reencoding
#'widgetfactory.node',
]
foreach test : node_parser_tests
if test.endswith('.node') and not test.endswith('.ref.node')
test('parser ' + test, node_parser,
args: [
join_paths(meson.current_source_dir(), 'nodeparser', test)
],
env: [
'GSK_RENDERER=opengl',
'GTK_A11Y=test',
'G_TEST_SRCDIR=@0@'.format(meson.current_source_dir()),
'G_TEST_BUILDDIR=@0@'.format(meson.current_build_dir()),
'FONTCONFIG_FILE=@0@/fonts/fonts.conf'.format(meson.current_source_dir()),
],
protocol: 'exitcode',
suite: [ 'gsk', 'gsk-nodeparser' ]
)
endif
endforeach
# offload does not work outside of linux
if os_linux
offload = executable('offload',
[ 'offload.c', 'gskrendernodeattach.c', '../testutils.c' ],
dependencies : libgtk_static_dep,
c_args: common_cflags + [ '-DGTK_COMPILATION=1' ],
)
offload_tests = [
'simple.node',
'transforms.node',
'deep.node',
'move.node',
'start_offloading.node',
'stop_offloading.node',
'source.node',
'nested.node',
'clipped.node',
'not-clipped.node',
'complex-clip.node',
'background.node',
'background2.node',
'bad-transform.node',
]
foreach test : offload_tests
if test.endswith('.node') and not test.endswith('.out')
test('offload ' + test, offload,
args: [
join_paths(meson.current_source_dir(), 'offload', test)
],
env: [
'GTK_A11Y=test',
'G_TEST_SRCDIR=@0@'.format(meson.current_source_dir()),
'G_TEST_BUILDDIR=@0@'.format(meson.current_build_dir()),
'GDK_DEBUG=force-offload',
],
protocol: 'exitcode',
suite: ['gsk', 'offload'],
)
endif
endforeach
endif
tests = [
[ 'normalize', [ 'normalize.c', '../reftests/reftest-compare.c' ] ],
[ 'transform' ],
[ 'shader' ],
[ 'opaque' ],
[ 'path', [ 'path-utils.c' ], [ 'flaky'] ],
[ 'path-special-cases' ],
[ 'scaling', [ 'scaling.c', '../gdk/gdktestutils.c' ] ],
]
test_cargs = []
foreach t : tests
test_name = t.get(0)
test_srcs = ['@0@.c'.format(test_name)] + t.get(1, [])
test_extra_suites = t.get(2, [])
test_exe = executable(test_name, test_srcs,
dependencies : libgtk_dep,
c_args : test_cargs + common_cflags,
)
test(test_name, test_exe,
args: [ '--tap', '-k' ],
protocol: 'tap',
env: [
'GSK_RENDERER=cairo',
'GTK_A11Y=test',
'G_TEST_SRCDIR=@0@'.format(meson.current_source_dir()),
'G_TEST_BUILDDIR=@0@'.format(meson.current_build_dir())
],
suite: [ 'gsk' ] + test_extra_suites,
)
endforeach
internal_tests = [
[ 'boundingbox'],
[ 'curve', [ ], [ 'flaky' ]],
[ 'curve-special-cases' ],
[ 'half-float' ],
[ 'not-diff' ],
[ 'misc'],
[ 'path-private' ],
[ 'rounded-rect'],
]
foreach t : internal_tests
test_name = t.get(0)
test_srcs = ['@0@.c'.format(test_name)] + t.get(1, [])
test_extra_suites = t.get(2, [])
test_exe = executable(test_name,
sources: test_srcs,
dependencies : libgtk_static_dep,
c_args : test_cargs + common_cflags + ['-DGTK_COMPILATION'],
)
test(test_name, test_exe,
args: [ '--tap', '-k' ],
protocol: 'tap',
env: [
'GSK_RENDERER=cairo',
'GTK_A11Y=test',
'G_TEST_SRCDIR=@0@'.format(meson.current_source_dir()),
'G_TEST_BUILDDIR=@0@'.format(meson.current_build_dir())
],
suite: [ 'gsk' ] + test_extra_suites,
)
endforeach