# SPDX-License-Identifier: LGPL-2.1-or-later

if install_tests
        foreach subdir : [
                'auxv',
                'journal-data',
                'units',
                'test-execute',
                'test-fstab-generator',
                'test-path',
                'test-path-util',
                'test-umount',
                'test-network',
                'test-network-generator-conversion',
                'testsuite-03.units',
                'testsuite-04.units',
                'testsuite-06.units',
                'testsuite-07.units',
                'testsuite-10.units',
                'testsuite-11.units',
                'testsuite-16.units',
                'testsuite-23.units',
                'testsuite-28.units',
                'testsuite-30.units',
                'testsuite-52.units',
                'testsuite-63.units',
                'testsuite-80.units',
        ]
                install_subdir(subdir,
                               exclude_files : '.gitattributes',
                               install_dir : testdata_dir)
        endforeach

        install_data(kbd_model_map,
                     install_dir : testdata_dir + '/test-keymap-util')

        if conf.get('HAVE_ZSTD') == 1 and efi_arch != ''
                install_subdir('test-bcd',
                               exclude_files : '.gitattributes',
                               install_dir : testdata_dir)
        endif
        if conf.get('ENABLE_RESOLVE') == 1
                install_subdir('test-resolve',
                               exclude_files : '.gitattributes',
                               install_dir : testdata_dir)
        endif

        # The unit tests implemented as shell scripts expect to find testdata/
        # in the directory where they are stored.
        meson.add_install_script(meson_make_symlink,
                                 testdata_dir,
                                 unittestsdir / 'testdata')
endif

test_bootctl_json_sh = find_program('test-bootctl-json.sh')
test_fstab_generator_sh = find_program('test-fstab-generator.sh')
test_network_generator_conversion_sh = find_program('test-network-generator-conversion.sh')
test_systemctl_enable_sh = find_program('test-systemctl-enable.sh')
test_systemd_tmpfiles_py = find_program('test-systemd-tmpfiles.py')
hwdb_test_sh = find_program('hwdb-test.sh')

############################################################

test_sysusers_sh = configure_file(
        input : 'test-sysusers.sh.in',
        output : 'test-sysusers.sh',
        configuration : conf)
if install_tests and conf.get('ENABLE_SYSUSERS') == 1
        install_data(test_sysusers_sh,
                     install_dir : unittestsdir)
        install_subdir('test-sysusers',
                       exclude_files : '.gitattributes',
                       install_dir : testdata_dir)
endif

############################################################

test_compare_versions_sh = files('test-compare-versions.sh')
if install_tests
        install_data(test_compare_versions_sh,
                     install_dir : unittestsdir)
endif

############################################################

rule_syntax_check_py = find_program('rule-syntax-check.py')
if want_tests != 'false'
        test('rule-syntax-check',
             rule_syntax_check_py,
             suite : 'dist',
             args : all_rules)
endif

############################################################

if install_tests
        install_data('run-unit-tests.py',
                     install_mode : 'rwxr-xr-x',
                     install_dir : testsdir)

        install_data('test-fstab-generator.sh',
                     install_mode : 'rwxr-xr-x',
                     install_dir : unittestsdir)

        install_data('test-network-generator-conversion.sh',
                     install_mode : 'rwxr-xr-x',
                     install_dir : unittestsdir)
endif

############################################################

sys_script_py = files('sys-script.py')
test_udev_py = files('test-udev.py')

if install_tests
        install_data(
                sys_script_py,
                test_udev_py,
                install_dir : unittestsdir)
endif

############################################################

rpm = find_program('rpm', required : false)
rpmspec = find_program('rpmspec', required : false)
test_rpm_macros = find_program('test-rpm-macros.sh')

if rpm.found() and rpmspec.found()
        if want_tests != 'false'
                test('test-rpm-macros',
                     test_rpm_macros,
                     suite : 'dist',
                     args : [project_build_root])
        endif
else
      message('Skipping test-rpm-macros since rpm and/or rpmspec are not available')
endif

############################################################

if want_tests != 'false' and dmi_arches.contains(host_machine.cpu_family())
        udev_dmi_memory_id_test = find_program('udev-dmi-memory-id-test.sh')

        if git.found() and fs.is_dir(project_source_root / '.git')
                out = run_command(
                        env, '-u', 'GIT_WORK_TREE',
                        git, '--git-dir=@0@/.git'.format(project_source_root),
                        'ls-files', ':/test/dmidecode-dumps/*.bin',
                        check: true)
        else
                out = run_command(
                        sh, '-c', 'cd "$1"; echo test/dmidecode-dumps/*.bin', '_', project_source_root,
                        check: true)
        endif

        foreach p : out.stdout().split()
                source = project_source_root / p
                name = 'dmidecode_' + p.split('/')[-1].split('.')[0]

                test(name,
                     udev_dmi_memory_id_test,
                     suite : 'dist',
                     args : [udev_prog_paths['dmi_memory_id'].full_path(),
                             source,
                             source + '.txt'],
                     depends : udev_prog_paths['dmi_memory_id'])
        endforeach
endif

subdir('fuzz')
