gtest = dependency('gtest', main: true, disabler: true, required: false)
gmock = dependency('gmock', disabler: true, required: false)
if not gtest.found() or not gmock.found()
    gtest_opts = import('cmake').subproject_options()
    gtest_opts.add_cmake_defines({'CMAKE_CXX_FLAGS': '-Wno-pedantic'})
    gtest_proj = import('cmake').subproject(
        'googletest',
        options: gtest_opts,
        required: false,
    )
    if gtest_proj.found()
        gtest = declare_dependency(
            dependencies: [
                dependency('threads'),
                gtest_proj.dependency('gtest'),
                gtest_proj.dependency('gtest_main'),
            ],
        )
        gmock = gtest_proj.dependency('gmock')
    else
        assert(not get_option('tests').enabled(), 'Googletest is required')
    endif
endif

test(
    'entitymap_json',
    executable(
        'entitymap_json',
        'entitymap_json_unittest.cpp',
        include_directories: root_inc,
        build_by_default: false,
        implicit_include_directories: false,
        dependencies: [
            entity_map_json_dep,
            gmock,
            gtest,
            nlohmann_json_dep,
            sdbusplus_dep,
        ],
    ),
)

# Build/add oemrouter_unittest to test suite
# Issue #3325
# test('oemrouter',
#  executable(
#    'oemrouter',
#    'oemrouter_unittest.cpp',
#    include_directories: root_inc,
#    build_by_default: false,
#    implicit_include_directories: false,
#    dependencies: [gtest, gmock]
#  ))

# Build/add message packing/unpacking unit tests
test(
    'message',
    executable(
        'message',
        'message/pack.cpp',
        'message/payload.cpp',
        'message/unpack.cpp',
        include_directories: root_inc,
        build_by_default: false,
        override_options: ['b_lundef=true'],
        implicit_include_directories: false,
        dependencies: [
            boost,
            crypto,
            gmock,
            gtest,
            libsystemd_dep,
            phosphor_logging_dep,
            sdbusplus_dep,
        ],
    ),
)

# Build/add closesession_unittest to test suite
test(
    'session/closesession',
    executable(
        'session_closesession',
        'session/closesession_unittest.cpp',
        include_directories: root_inc,
        build_by_default: false,
        implicit_include_directories: false,
        dependencies: [gtest, gmock],
    ),
)

# Build/add sensorcommands_unittest to test suite
test(
    'dbus-sdr/sensorcommands',
    executable(
        'dbus-sdr_sensorcommands',
        'dbus-sdr/sensorcommands_unittest.cpp',
        include_directories: root_inc,
        build_by_default: false,
        implicit_include_directories: false,
        dependencies: [sensorutils_dep, gtest, gmock],
    ),
)
