#! /bin/bash

set -x
set -e

cp -a src/tests $AUTOPKGTEST_TMP/tests

cd $AUTOPKGTEST_TMP

cat > meson.build <<EOF
project('autopkgtest', ['c', 'cpp'],
  default_options : ['cpp_std=c++17', 'c_std=gnu11'])

qt5_dep = dependency('qt5', modules: 'Core')
termpaint_dep = dependency('termpaint')
tuiwidgets_dep = dependency('TuiWidgets')
catch2_dep = dependency('catch2')
testlib = static_library('testlib', 'tests/catch_main.cpp', dependencies: [qt5_dep, catch2_dep])

test_files = [
  'tests/Testhelper.cpp',
  'tests/abstracttablemodeltrackby.cpp',
  'tests/basicdefaultwidgetmanager.cpp',
  'tests/basicwindowfacet/basicwindowfacet.cpp',
  'tests/boxlayout.cpp',
  'tests/button/button.cpp',
  'tests/checkbox/checkbox.cpp',
  'tests/color/color.cpp',
  'tests/command.cpp',
  'tests/defaultwidgetmanager.cpp',
  'tests/eventrecorder.cpp',
  'tests/events.cpp',
  'tests/image/image.cpp',
  'tests/inputbox/inputbox.cpp',
  'tests/label/label.cpp',
  'tests/layout/layout.cpp',
  'tests/layout/layoutitem.cpp',
  'tests/layoutinvalidation.cpp',
  'tests/listview/listview.cpp',
  'tests/loggers.cpp',
  'tests/menu/menu.cpp',
  'tests/painting/painter_terminal.cpp',
  'tests/radiobutton/radiobutton.cpp',
  'tests/root/root.cpp',
  'tests/shortcut.cpp',
  'tests/styledtextline/styledtextline.cpp',
  'tests/surrogateescape.cpp',
  'tests/symbol/symbol.cpp',
  'tests/terminal.cpp',
  'tests/textlayout/formatrange.cpp',
  'tests/textlayout/textlayout.cpp',
  'tests/textlayout/textoption.cpp',
  'tests/textline/textline.cpp',
  'tests/textstyle.cpp',
  'tests/viewport/moveviewport.cpp',
  'tests/widget/widget-focus-order.cpp',
  'tests/widget/widget.cpp',
  'tests/window/dialog.cpp',
  'tests/window/window.cpp',
  'tests/windowcontainer.cpp',
  'tests/windowfacet.cpp',
  'tests/windowlayout.cpp',
]

test_env = environment()
test_env.set('TUIWIDGETS_TEST_DATA', meson.current_source_dir() / 'tests')

test('testTuiWidgets',
  executable('testTuiWidgets', test_files,
    link_with: [testlib],
    dependencies: [qt5_dep, tuiwidgets_dep, termpaint_dep, catch2_dep],
    cpp_args: ['-fno-inline']
  ),
  timeout: 240,
  env: test_env
)

EOF

if ! meson _build ; then
    cp -r _build/meson-logs  $AUTOPKGTEST_ARTIFACTS
    exit 1
fi
if ! meson test -C _build ; then
    cp -r _build/meson-logs  $AUTOPKGTEST_ARTIFACTS
    exit 1
fi

cp -r _build/meson-logs  $AUTOPKGTEST_ARTIFACTS || true
