# FIXME: $(no_undefined) ? reftest_cflags = [] foreach flag: common_cflags if flag not in ['-Werror=missing-prototypes', '-Wmissing-prototypes', '-Werror=missing-declarations', '-Wmissing-declarations', '-fvisibility=hidden'] reftest_cflags += flag endif endforeach libgtkreftestprivate = library('gtkreftestprivate', sources: [ 'reftest-compare.c', 'reftest-module.c', 'reftest-snapshot.c', ], dependencies: libgtk_dep, c_args: reftest_cflags) libreftest = library('reftest', sources: [ 'expand-expander.c', 'frame-inhibitor.c', 'letter-spacing.c', 'set-default-direction.c', 'statusbar-remove-all.c', 'textview-border-windows.c', 'textview-tags.c', 'animation-direction.c', 'icon-theme-hicolor.c', ], link_with: libgtkreftestprivate, c_args: reftest_cflags, dependencies : libgtk_dep) tcdata = configuration_data() tcdata.set('libexecdir', join_paths(get_option('prefix'), get_option('libexecdir'))) #built_tests = ['reftests', 'reftests-dark', 'reftests-hc', 'reftests-hci'] #foreach t : built_tests # configure_file(input : '@0@.test.in'.format(t), # output : '@0@.test'.format(t), # configuration : tcdata) #endforeach gtk_reftest = executable('gtk-reftest', sources: 'gtk-reftest.c', c_args: common_cflags, link_with : [libgtkreftestprivate, libreftest], dependencies : libgtk_dep, ) image_compare = executable('image-compare', sources: 'image-compare.c', c_args: common_cflags, link_with : [libgtkreftestprivate, libreftest], dependencies : libgtk_dep) # Installed data (TODO) testdata = [ '721800-0px-dotted-border.css', '721800-0px-dotted-border.ref.ui', '721800-0px-dotted-border.ui', 'actionbar.css', 'actionbar.ref.ui', 'actionbar.ui', 'animation-direction.css', 'animation-direction.ref.ui', 'animation-direction.ui', 'animation-fill-mode-iteration-count.css', 'animation-fill-mode-iteration-count.ref.ui', 'animation-fill-mode-iteration-count.ui', 'background-area.css', 'background-area.ref.ui', 'background-area.ui', 'background-blend-mode-clip-interaction.css', 'background-blend-mode-clip-interaction.ref.ui', 'background-blend-mode-clip-interaction.ui', 'background-color-transparent.css', 'background-color-transparent.ref.ui', 'background-color-transparent.ui', 'background-image-multiple.css', 'background-image-multiple.ref.ui', 'background-image-multiple.ui', 'background-origin.css', 'background-origin.ref.ui', 'background-origin.ui', 'background-positioning-area-empty.ref.ui', 'background-positioning-area-empty.ui', 'background-position.css', 'background-position.ref.ui', 'background-position.ui', 'background-position-repeat.css', 'background-position-repeat.ref.ui', 'background-position-repeat.ui', 'background-position-repeat-bg.png', 'background-position-simple.css', 'background-position-simple.ref.ui', 'background-position-simple.ui', 'background-repeat-clip.css', 'background-repeat-clip.ref.ui', 'background-repeat-clip.ui', 'background-size.css', 'background-size.ref.ui', 'background-size.ui', 'background-size-keywords.css', 'background-size-keywords.ref.ui', 'background-size-keywords.ui', 'background-size-zero.css', 'background-size-zero.ref.ui', 'background-size-zero.ui', 'background-window-transparent.css', 'background-window-transparent.ref.ui', 'background-window-transparent.ui', 'bad-color-names.css', 'bad-color-names.ref.ui', 'bad-color-names.ui', 'reference-background-origin.png', 'border-color-default.css', 'border-color-default.ref.ui', 'border-color-default.ui', 'border-corner-zero-width-rendering.css', 'border-corner-zero-width-rendering.ref.ui', 'border-corner-zero-width-rendering.ui', 'border-half-pixel.css', 'border-half-pixel.ref.ui', 'border-half-pixel.ui', 'border-image-ball-green.png', 'border-image-ball-red.png', 'border-image-ball-yellow.png', 'border-image-balls.png', 'border-image-3-balls-green.png', 'border-image-3-balls-green-squished.png', 'border-image-3-balls-yellow.png', 'border-image-3-balls-yellow-squished.png', 'border-image-excess-size.css', 'border-image-excess-size.ref.ui', 'border-image-excess-size.ui', 'border-image-url-scaled.css', 'border-image-url-scaled.ref.ui', 'border-image-url-scaled.ui', # this seems to make assumptions on text positioning # that are not valid with subpixel positioning #'border-image-url.css', #'border-image-url.ref.ui', #'border-image-url.ui', 'border-radius-clamp.css', 'border-radius-clamp.ref.ui', 'border-radius-clamp.ui', 'border-rgb.png', 'border-rgb@2.png', 'border-style-none.css', 'border-style-none.ref.ui', 'border-style-none.ui', 'border-style.css', 'border-style.ref.ui', 'border-style.ui', 'boxlayout-invisible-child.ref.ui', 'boxlayout-invisible-child.ui', 'box-pseudo-classes.css', 'box-pseudo-classes.ref.ui', 'box-pseudo-classes.ui', 'box-shadow-changes-modify-clip.css', 'box-shadow-changes-modify-clip.ref.ui', 'box-shadow-changes-modify-clip.ui', 'box-shadow-spec-inset.css', 'box-shadow-spec-inset.ref.ui', 'box-shadow-spec-inset.ui', 'box-shadow-spread.css', 'box-shadow-spread.ref.ui', 'box-shadow-spread.ui', 'box-shadow-with-blend-mode.css', 'box-shadow-with-blend-mode.ref.ui', 'box-shadow-with-blend-mode.ui', 'button-wrapping.ui', 'button-wrapping.ref.ui', 'center-center-100x100-picture-in-100x200.css', 'center-center-100x100-picture-in-100x200.ref.ui', 'center-center-100x100-picture-in-100x200.ui', 'center-center-100x100-picture-in-200x100.css', 'center-center-100x100-picture-in-200x100.ref.ui', 'center-center-100x100-picture-in-200x100.ui', 'center-center-150x150-picture-in-100x200.css', 'center-center-150x150-picture-in-100x200.ref.ui', 'center-center-150x150-picture-in-100x200.ui', 'center-center-150x150-picture-in-200x100.css', 'center-center-150x150-picture-in-200x100.ref.ui', 'center-center-150x150-picture-in-200x100.ui', 'center-center-200x200-picture-in-100x200.css', 'center-center-200x200-picture-in-100x200.ref.ui', 'center-center-200x200-picture-in-100x200.ui', 'center-center-200x200-picture-in-200x100.css', 'center-center-200x200-picture-in-200x100.ref.ui', 'center-center-200x200-picture-in-200x100.ui', 'center-center-20x20-picture-in-100x200.css', 'center-center-20x20-picture-in-100x200.ref.ui', 'center-center-20x20-picture-in-100x200.ui', 'center-center-20x20-picture-in-200x100.css', 'center-center-20x20-picture-in-200x100.ref.ui', 'center-center-20x20-picture-in-200x100.ui', 'center-center-300x300-picture-in-100x200.css', 'center-center-300x300-picture-in-100x200.ref.ui', 'center-center-300x300-picture-in-100x200.ui', 'center-center-300x300-picture-in-200x100.css', 'center-center-300x300-picture-in-200x100.ref.ui', 'center-center-300x300-picture-in-200x100.ui', 'centerlayout-invisible-child.css', 'centerlayout-invisible-child.ref.ui', 'centerlayout-invisible-child.ui', 'centerlayout-minsize.css', 'centerlayout-minsize.ref.ui', 'centerlayout-minsize.ui', 'color-transition.css', 'color-transition.ref.ui', 'color-transition.ui', 'cross-fade-syntax.css', 'cross-fade-syntax.ref.ui', 'cross-fade-syntax.ui', 'css-em-label-size.css', 'css-em-label-size.ui', 'css-em-label-size.ref.ui', 'css-currentcolor-alpha.css', 'css-currentcolor-alpha.ui', 'css-currentcolor-alpha.ref.ui', 'css-image-aspect-ratio.css', 'css-image-aspect-ratio.ui', 'css-image-aspect-ratio.ref.ui', 'css-image-broken-url.css', 'css-image-broken-url.ref.ui', 'css-image-broken-url.ui', 'css-image-color-aspect-ratio.css', 'css-image-color-aspect-ratio.ui', 'css-image-color-aspect-ratio.ref.ui', 'css-match-class.css', 'css-match-class.ref.ui', 'css-match-class.ui', 'css-match-descendant-later.css', 'css-match-descendant-later.ref.ui', 'css-match-descendant-later.ui', 'css-match-exact.css', 'css-match-exact.ref.ui', 'css-match-exact.ui', 'css-match-import.css', 'css-match-import-import.css', 'css-match-import.ui', 'css-match-import.ref.ui', 'css-match-inherit.css', 'css-match-inherit.ref.ui', 'css-match-inherit.ui', 'css-match-inherit-different-state.css', 'css-match-inherit-different-state.ref.ui', 'css-match-inherit-different-state.ui', 'css-match-name.css', 'css-match-name.ref.ui', 'css-match-name.ui', 'css-match-siblings.css', 'css-match-siblings.ref.ui', 'css-match-siblings.ui', 'css-match-type.css', 'css-match-type.ref.ui', 'css-match-type.ui', 'css-multi-state.css', 'css-multi-state.ref.ui', 'css-multi-state.ui', 'css-radial-gradient-colorstop-crash.css', 'css-radial-gradient-colorstop-crash.ref.ui', 'css-radial-gradient-colorstop-crash.ui', 'data-url.css', 'data-url.ref.ui', 'data-url.ui', 'default-size-too-small.ref.ui', 'default-size-too-small.ui', 'default-size-undecorated.ui', 'default-size-undecorated.ref.ui', 'default-size-with-titlebar.ui', 'default-size-with-titlebar.ref.ui', 'default-size-without-titlebar.ui', 'default-size-without-titlebar.ref.ui', 'fixed-widget-stacking.ref.ui', 'fixed-widget-stacking.ui', 'flipping-icons.ref.ui', 'flipping-icons.ui', 'font-sizes-names.css', 'font-sizes-names.ref.ui', 'font-sizes-names.ui', 'gtk-image-effect-inherit.css', 'gtk-image-effect-inherit.ref.ui', 'gtk-image-effect-inherit.ui', 'gradient-hard-stop.css', 'gradient-hard-stop.ref.ui', 'gradient-hard-stop.ui', 'green-20x20.png', 'gridlayout-invisible-child.ref.ui', 'gridlayout-invisible-child.ui', 'grid-empty-with-spacing.ref.ui', 'grid-empty-with-spacing.ui', 'grid-expand.css', 'grid-expand.ref.ui', 'grid-expand.ui', 'grid-wfh.ui', 'grid-wfh.ref.ui', 'grid-homogeneous.css', 'grid-homogeneous.ref.ui', 'grid-homogeneous.ui', 'grid-spacing1.ref.ui', 'grid-spacing1.ui', 'grid-spacing2.ref.ui', 'grid-spacing2.ui', 'grid-spacing3.css', 'grid-spacing3.ref.ui', 'grid-spacing3.ui', 'gtk-icontheme-sizing.css', 'gtk-icontheme-sizing.ref.ui', 'gtk-icontheme-sizing.ui', 'hbox-with-ellipsizing-label.ref.ui', 'hbox-with-ellipsizing-label.ui', 'hbox-with-ellipsizing-wrapping-label.ref.ui', 'hbox-with-ellipsizing-wrapping-label.ui', 'icon-effect-missing.css', 'icon-effect-missing.ref.ui', 'icon-effect-missing.ui', 'icon-shadow-no-transform.css', 'icon-shadow-no-transform.ref.ui', 'icon-shadow-no-transform.ui', 'icon-style-basics.css', 'icon-style-basics.ref.ui', 'icon-style-basics.ui', 'icon-vfuncs.css', 'icon-vfuncs.ref.ui', 'icon-vfuncs.ui', 'iconview-empty.css', 'iconview-empty.ui', 'iconview-empty.ref.ui', 'image-icon-name-use-fallback.ui', 'image-icon-name-use-fallback.ref.ui', 'image-icon-shadow-clipping.css', 'image-icon-shadow-clipping.ref.ui', 'image-icon-shadow-clipping.ui', 'image-load-from-file.css', 'image-load-from-file.ref.ui', 'image-load-from-file.ui', 'label-attribute-preference.css', 'label-attribute-preference.ref.ui', 'label-attribute-preference.ui', # makes assumptions about text positioning that are not # valid with subpixel positioning #'label-background.css', #'label-background.ref.ui', #'label-background.ui', 'label-box-shadow-clip.css', 'label-box-shadow-clip.ref.ui', 'label-box-shadow-clip.ui', 'label-clipping.css', 'label-clipping.ref.ui', 'label-clipping.ui', 'label-ellipsize-small.ref.ui', 'label-ellipsize-small.ui', 'label-ellipsize-with-big.ref.ui', 'label-ellipsize-with-big.ui', 'label-fonts.css', 'label-fonts.ref.ui', 'label-fonts.ui', 'label-huge-max-width-chars.ref.ui', 'label-huge-max-width-chars.ui', 'label-max-width-chars-and-halign-and-infinite-width.ui', 'label-max-width-chars-and-halign-and-infinite-width.ref.ui', 'label-shadows.css', 'label-shadows.ref.ui', 'label-shadows.ui', 'label-sizing.css', 'label-sizing.ref.ui', 'label-sizing.ui', 'label-small-ellipsized.ref.ui', 'label-small-ellipsized.ui', 'label-small-max-width-chars.ref.ui', 'label-small-max-width-chars.ui', 'label-text-shadow-clipping.css', 'label-text-shadow-clipping.ref.ui', 'label-text-shadow-clipping.ui', 'label-text-shadow-changes-modify-clip.css', 'label-text-shadow-changes-modify-clip.ref.ui', 'label-text-shadow-changes-modify-clip.ui', 'label-width-chars-dont-shrink.ref.ui', 'label-width-chars-dont-shrink.ui', 'label-wrap-width-chars.ref.ui', 'label-wrap-width-chars.ui', 'label-wrapped-huge-max-width-chars.ref.ui', 'label-wrapped-huge-max-width-chars.ui', # this seems to make assumptions on text positioning # that are not valid with subpixel positioning #'label-wrap-justify.ref.ui', #'label-wrap-justify.ui', 'late-binding.ui', 'late-binding.ref.ui', 'late-property.ui', 'late-property.ref.ui', 'letter-spacing.css', 'letter-spacing.ui', 'letter-spacing.ref.ui', 'linear-gradient.css', 'linear-gradient.ref.ui', 'linear-gradient.ui', 'linear-gradient-transition-to-other.css', 'linear-gradient-transition-to-other.ref.ui', 'linear-gradient-transition-to-other.ui', 'link-coloring.css', 'link-coloring.ref.ui', 'link-coloring.ui', 'listview-with-wrapped-labels.ref.ui', 'listview-with-wrapped-labels.ui', 'marble.xpm', 'messagedialog-secondarytext.ui', 'messagedialog-secondarytext.ref.ui', 'named-colors.css', 'named-colors.ref.ui', 'named-colors.ui', 'no-colors.css', 'no-colors.ref.ui', 'no-colors.ui', 'nonresizable-size.ref.ui', 'nonresizable-size.ui', 'notebook-tab-position.css', 'notebook-tab-position.ui', 'notebook-tab-position.ref.ui', 'nth-child.css', 'nth-child.ref.ui', 'nth-child.ui', 'opacity.css', 'opacity.ui', 'opacity.ref.ui', 'opacity-initial.css', 'opacity-initial.ref.ui', 'opacity-initial.ui', 'overlay-no-main-widget.ref.ui', 'overlay-no-main-widget.ui', 'paned-handle-size.css', 'paned-handle-size.ref.ui', 'paned-handle-size.ui', 'paned-undersized.css', 'paned-undersized.ref.ui', 'paned-undersized.ui', 'partial-rounded-border.css', 'partial-rounded-border.ref.ui', 'partial-rounded-border.ui', 'picture-load-invalid-file.ui', 'picture-load-invalid-file.ref.ui', 'pixbuf-icon.ref.ui', 'pixbuf-icon.ui', 'pseudoclass-on-box.css', 'pseudoclass-on-box.ref.ui', 'pseudoclass-on-box.ui', 'pseudoclass-on-parent.css', 'pseudoclass-on-parent.ref.ui', 'pseudoclass-on-parent.ui', 'quit-mnemonic.css', 'quit-mnemonic.ref.ui', 'quit-mnemonic.ui', 'repeating-radial-gradient-at-beginning.css', 'repeating-radial-gradient-at-beginning.ref.ui', 'repeating-radial-gradient-at-beginning.ui', 'reset-to-defaults.css', 'revealer-extra-size.ref.ui', 'revealer-extra-size.ui', 'revealer-wrappable-contents.ref.ui', 'revealer-wrappable-contents.ui', 'rotated-layout.ref.ui', 'rotated-layout.ui', 'separator-size.css', 'separator-size.ref.ui', 'separator-size.ui', 'set-default-direction.ui', 'set-default-direction.ref.ui', 'shadow-clip-rounding.css', 'shadow-clip-rounding.ref.ui', 'shadow-clip-rounding.ui', 'shorthand-entry-border.css', 'shorthand-entry-border.ref.ui', 'shorthand-entry-border.ui', 'sibling-pseudoclasses.css', 'sibling-pseudoclasses.ref.ui', 'sibling-pseudoclasses.ui', 'simple.ref.ui', 'simple.ui', 'sizegroups-basics.css', 'sizegroups-basics.ui', 'sizegroups-basics.ref.ui', 'sizegroups-evolution-identity-page.ui', 'sizegroups-evolution-identity-page.ref.ui', 'sizegroups-get-preferred-null.ui', 'sizegroups-get-preferred-null.ref.ui', 'statusbar-remove-all.ref.ui', 'statusbar-remove-all.ui', 'style-context-save-inheritance.css', 'style-context-save-inheritance.ref.ui', 'style-context-save-inheritance.ui', 'style-properties-only-child.css', 'style-properties-only-child.ref.ui', 'style-properties-only-child.ui', 'symbolic-icon-translucent-color.css', 'symbolic-icon-translucent-color.ref.ui', 'symbolic-icon-translucent-color.ui', 'texture-icon.ref.ui', 'texture-icon.ui', 'textview-border-windows.css', 'textview-border-windows.ref.ui', 'textview-border-windows.ui', # these tests needs a better way to perform delayed actions # they are not in xfail since they succeed on some platforms #'textview-margins.css', #'textview-margins.ref.ui', #'textview-margins.ui', #'textview-tags.ref.ui', #'textview-tags.ui', 'treeview-crash-too-wide.ref.ui', 'treeview-crash-too-wide.ui', 'treeview-fixed-height.css', 'treeview-fixed-height.ref.ui', 'treeview-fixed-height.ui', # this test fails with an off-by-one in ci too frequently # to be left enabled. Remove it until somebody figures out # what is going on there. #'treeview-headers-hidden.ref.ui', #'treeview-headers-hidden.ui', 'unresolvable.css', 'unresolvable.ref.ui', 'unresolvable.ui', 'vbox-with-2-wrapping-labels-where-one-should-wrap.ref.ui', 'vbox-with-2-wrapping-labels-where-one-should-wrap.ui', 'vbox-with-max-width-chars-label.ref.ui', 'vbox-with-max-width-chars-label.ui', 'window-border-width.ref.ui', 'window-border-width.ui', 'window-default-size.ref.ui', 'window-default-size.ui', 'window-height-for-width.ref.ui', 'window-height-for-width.ui', # this test needs a better way to perform delayed actions # it is not in xfail since it succeeds on some platforms #'window-show-contents-on-map.ref.ui', #'window-show-contents-on-map.ui', 'wrap-margin-align-critical.ref.ui', 'wrap-margin-align-critical.ui', 'wrapping-in-boxes-in-boxes.ref.ui', 'wrapping-in-boxes-in-boxes.ui', ] # These need to be fixed but the issue hasn't been tracked down. xfails = [ 'sizegroups-evolution-identity-page.ui', # the NGL renderer can't deal with non-integer sizes 'border-half-pixel.ui' ] reftest_env = environment() reftest_env.set('GTK_A11Y', 'test') reftest_env.set('G_TEST_SRCDIR', meson.current_source_dir()) reftest_env.set('G_TEST_BUILDDIR', meson.current_build_dir()) reftest_env.set('GIO_USE_VFS', 'local') reftest_env.set('GSETTINGS_BACKEND', 'memory') reftest_env.set('G_ENABLE_DIAGNOSTIC', '0') reftest_env.set('REFTEST_MODULE_DIR', meson.current_build_dir()) foreach testname : testdata if testname.endswith('.ui') and not testname.endswith('.ref.ui') test('reftest ' + testname, gtk_reftest, args: [ '--tap', '-k', '-o', join_paths(meson.current_build_dir(), 'output'), join_paths(meson.current_source_dir(), testname), ], protocol: 'tap', env: reftest_env, suite: 'reftest', should_fail: xfails.contains(testname), ) endif endforeach