# Get the gtest/gmock dependencies.
gtest_dep = dependency('gtest', main: true, disabler: true, required: false)
gmock_dep = dependency('gmock', disabler: true, required: false)
if not gtest_dep.found() or not gmock_dep.found()
    cmake = import('cmake')
    gtest_proj = cmake.subproject('googletest',
                                  required: false)
    if gtest_proj.found()
        gtest_dep = declare_dependency(
            dependencies: [
                dependency('threads'),
                gtest_proj.dependency('gtest'),
                gtest_proj.dependency('gtest_main'),
            ]
        )
        gmock_dep = gtest_proj.dependency('gmock')
    else
        assert(not get_option('tests').enabled(),
               'Googletest is required if tests are enabled')
    endif
endif

test_arg = [
    '-DTEST_TRACE',
]

# Compile the test dts into a binary for pdbg.
pdbg_test_dtb = custom_target('build_pdbg_test_dtb',
    input   : files('pdbg_test.dts'),
    output  : 'pdbg_test.dtb',
    command : [ find_program('dtc'), '-I', 'dts', '-O', 'dtb',
                '-o', '@OUTPUT@', '@INPUT@' ])

# end2end code exerciser for experiment and testing
subdir('end2end')

tests = [
  'bin_stream_test',
  'ffdc_file_test',
  'resolution_test',
  'test-pll-unlock',
]

analyzer_src = files(
  '../analyzer/plugins/p10-plugins.cpp',
  '../analyzer/service_data.cpp',
  '../analyzer/resolution.cpp',
)

# We cannot link to `util_lib` because that is built without `-DTEST_TRACE` and
# any of the util functions that use `trace.hpp` will throw a linker error
# because we don't have access to phosphor-logging in test ... yet.
util_src = files(
    '../util/ffdc_file.cpp',
    '../util/pdbg.cpp',
    '../util/temporary_file.cpp',
)

foreach t : tests
    test(t,
         executable(t.underscorify(),
                    [ files(t + '.cpp'), pdbg_test_dtb,
                      analyzer_src, util_src ],
                    dependencies : [ libhei_dep, libpdbg_dep, gtest_dep ],
                    cpp_args : test_arg,
                    include_directories : incdir),
         env : [ 'PDBG_DTB=' + pdbg_test_dtb.full_path() ])
endforeach
