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_proj = import('cmake').subproject('googletest', 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

swampd_sources = include_directories('../')

unit_tests = [
    'dbus_active_unittest',
    'dbus_passive_unittest',
    'dbus_util_unittest',
    'json_parse_unittest',
    'pid_json_unittest',
    'pid_fancontroller_unittest',
    'pid_stepwisecontroller_unittest',
    'pid_thermalcontroller_unittest',
    'pid_zone_unittest',
    'sensor_host_unittest',
    'sensor_manager_unittest',
    'sensor_pluggable_unittest',
    'sensors_json_unittest',
    'util_unittest',
]

unittest_source = {
    'dbus_active_unittest': ['../dbus/dbusactiveread.cpp'],
    'dbus_passive_unittest': ['../dbus/dbuspassive.cpp',
                              '../dbus/dbuspassiveredundancy.cpp',
                              '../dbus/dbusutil.cpp'],
    'dbus_util_unittest': ['../dbus/dbusutil.cpp'],
    'json_parse_unittest': ['../buildjson/buildjson.cpp'],
    'pid_json_unittest': ['../pid/buildjson.cpp'],
    'pid_fancontroller_unittest': ['../pid/ec/pid.cpp',
                                   '../pid/fancontroller.cpp',
                                   '../pid/pidcontroller.cpp',
                                   '../pid/tuning.cpp',
                                   '../pid/util.cpp'],
    'pid_stepwisecontroller_unittest': ['../pid/ec/stepwise.cpp',
                                        '../pid/stepwisecontroller.cpp',
                                        '../pid/util.cpp'],
    'pid_thermalcontroller_unittest': ['../pid/ec/pid.cpp',
                                       '../pid/pidcontroller.cpp',
                                       '../pid/thermalcontroller.cpp',
                                       '../pid/tuning.cpp',
                                       '../pid/util.cpp'],
    'pid_zone_unittest': ['../pid/ec/pid.cpp',
                          '../pid/pidcontroller.cpp',
                          '../pid/tuning.cpp',
                          '../pid/zone.cpp',
                          '../sensors/manager.cpp'],
    'sensor_host_unittest': ['../sensors/host.cpp'],
    'sensor_manager_unittest': ['../sensors/manager.cpp'],
    'sensor_pluggable_unittest': ['../sensors/pluggable.cpp'],
    'sensors_json_unittest': ['../sensors/buildjson.cpp'],
    'util_unittest': ['../sensors/build_utils.cpp']
}

foreach t : unit_tests
    test(t, executable(t.underscorify(), t + '.cpp',
                       unittest_source.get(t),
                       include_directories: [
                           swampd_sources,
                       ],
                       link_args: dynamic_linker,
                       build_rpath: get_option('oe-sdk').enabled() ? rpath : '',
                       dependencies: [
                           gtest,
                           gmock,
                           deps,
                       ]))
endforeach
