blob: 11eccf5717c93cf5de56f8e53215681165098feb [file] [log] [blame]
William A. Kennington IIIa2d67e22020-02-19 12:17:39 -08001gtest = dependency('gtest', main: true, disabler: true, required: false)
2gmock = dependency('gmock', disabler: true, required: false)
3if not gtest.found() or not gmock.found()
4 gtest_proj = import('cmake').subproject('googletest', required: false)
5 if gtest_proj.found()
6 gtest = declare_dependency(
7 dependencies: [
8 dependency('threads'),
9 gtest_proj.dependency('gtest'),
10 gtest_proj.dependency('gtest_main'),
11 ])
12 gmock = gtest_proj.dependency('gmock')
13 else
14 assert(not build_tests.enabled(), 'Googletest is required')
15 endif
16endif
William A. Kennington III15982f62019-01-31 14:43:41 -080017
William A. Kennington III245495e2020-02-13 13:07:30 -080018gtests = [
William A. Kennington IIIe847ef82018-11-02 17:29:15 -070019 'handle/copyable',
William A. Kennington III7a5e2322018-11-02 17:28:35 -070020 'handle/managed',
William A. Kennington IIIbff0b0f2018-11-16 19:56:10 -080021 'util/cexec',
William A. Kennington III4ef36e72019-06-27 12:48:59 -070022 'util/string',
William A. Kennington III15982f62019-01-31 14:43:41 -080023]
24
William A. Kennington III245495e2020-02-13 13:07:30 -080025foreach t : gtests
William A. Kennington III15982f62019-01-31 14:43:41 -080026 test(t, executable(t.underscorify(), t + '.cpp',
William A. Kennington III31422352020-02-19 13:21:56 -080027 build_by_default: false,
William A. Kennington III15982f62019-01-31 14:43:41 -080028 implicit_include_directories: false,
William A. Kennington III97e39472019-04-03 13:22:32 -070029 dependencies: [stdplus, gtest, gmock]))
William A. Kennington III15982f62019-01-31 14:43:41 -080030endforeach
William A. Kennington III245495e2020-02-13 13:07:30 -080031
32# catch2 might not have a pkg-config. It is header only so just make
33# sure we can access the needed symbols from the header.
34catch2_dep = dependency('Catch2', required: false)
35has_catch2 = meson.get_compiler('cpp').has_header_symbol(
36 'catch2/catch.hpp',
37 'Approx',
38 dependencies: catch2_dep,
39 required: false)
40if not has_catch2
41 catch2_proj = import('cmake').subproject(
42 'Catch2',
43 cmake_options: [
44 '-DBUILD_TESTING=OFF'
45 ],
46 required: false)
47 if catch2_proj.found()
48 catch2_dep = catch2_proj.dependency('Catch2')
49 has_catch2 = true
50 else
51 assert(not build_tests.enabled(), 'Catch2 is required')
52 endif
53endif
54
55catch2_tests = [
William A. Kennington III770c5562020-02-13 13:07:42 -080056 'signal',
William A. Kennington IIIe0990382019-10-18 02:10:25 -070057 'raw',
William A. Kennington III245495e2020-02-13 13:07:30 -080058]
59
60if has_catch2
61 libcatch2 = static_library(
62 'catch2', 'catch2_main.cpp',
63 implicit_include_directories: false,
64 build_by_default: false,
65 dependencies: catch2_dep)
66
67 foreach t : catch2_tests
68 test(t, executable(t.underscorify(), t + '.cpp',
William A. Kennington III31422352020-02-19 13:21:56 -080069 build_by_default: false,
William A. Kennington III245495e2020-02-13 13:07:30 -080070 implicit_include_directories: false,
71 link_with: libcatch2,
William A. Kennington IIIe0990382019-10-18 02:10:25 -070072 dependencies: [stdplus, span_dep, catch2_dep]))
William A. Kennington III245495e2020-02-13 13:07:30 -080073 endforeach
74endif