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()
    gtest_proj = import('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

tests = [
    'async/context',
    'async/task',
    'async/timer',
    'async/fdio',
    'bus/exception',
    'bus/list_names',
    'bus/match',
    'event/event',
    'exception/sdbus_error',
    'message/append',
    'message/call',
    'message/native_types',
    'message/read',
    'message/types',
    'timer',
    'unpack_properties',
    'utility/tuple_to_array',
    'utility/type_traits',
]

foreach t : tests
    test(
        'test_' + t.underscorify(),
        executable(
            'test-' + t.underscorify(),
            t + '.cpp',
            dependencies: [gtest_dep, gmock_dep, sdbusplus_dep],
        ),
    )
endforeach

assert(
    not get_option('tests').allowed() or boost_dep.found(),
    'Boost is required when tests are enabled',
)

test(
    'test-bus_aio',
    executable(
        'test-bus_aio',
        'bus/aio.cpp',
        dependencies: [boost_dep, gmock_dep, gtest_dep, sdbusplus_dep],
    ),
)

test(
    'test-vtable',
    executable(
        'test-vtable',
        'vtable/vtable.cpp',
        'vtable/vtable_c.c',
        dependencies: [gtest_dep, sdbusplus_dep],
    ),
)

yaml_selected_subdirs = ['server']
subdir('gen')

server_test_pre = declare_dependency(
    include_directories: include_directories('gen'),
    dependencies: sdbusplus_dep,
)

server_test_lib = static_library(
    'server-test',
    generated_sources,
    implicit_include_directories: false,
    dependencies: server_test_pre,
)

server_test_dep = declare_dependency(
    sources: generated_headers,
    link_with: server_test_lib,
    dependencies: server_test_pre,
)

test(
    'test-server',
    executable(
        'test-server',
        'server/object.cpp',
        dependencies: [gmock_dep, gtest_dep, server_test_dep],
    ),
)

test(
    'test-server-message-variant',
    executable(
        'test-server-message-variant',
        'server/message_variant.cpp',
        dependencies: [gmock_dep, gtest_dep, server_test_dep],
    ),
)

uninit_tests = [
    'test_server_no_uninitialized_value_constructor',
    'test_aserver_no_uninitialized_value_constructor',
]

foreach t : uninit_tests
    test(
        t,
        executable(
            t,
            f'gen/@t@.cpp',
            generated_sources,
            include_directories: [root_inc],
            dependencies: [sdbusplus_dep, server_test_dep],
        ),
    )
endforeach
