1# Get the gtest/gmock dependencies.
2gtest_dep = dependency('gtest', main: true, disabler: true, required: false)
3gmock_dep = dependency('gmock', disabler: true, required: false)
4if not gtest_dep.found() or not gmock_dep.found()
5    cmake = import('cmake')
6    gtest_proj = cmake.subproject('googletest',
7                                  required: false)
8    if gtest_proj.found()
9        gtest_dep = declare_dependency(
10            dependencies: [
11                dependency('threads'),
12                gtest_proj.dependency('gtest'),
13                gtest_proj.dependency('gtest_main'),
14            ]
15        )
16        gmock_dep = gtest_proj.dependency('gmock')
17    else
18        assert(not get_option('tests').enabled(),
19               'Googletest is required if tests are enabled')
20    endif
21endif
22
23################################################################################
24
25# Compile the test dts into a binary for pdbg.
26pdbg_test_dtb = custom_target('build_pdbg_test_dtb',
27    input   : files('pdbg-test.dts'),
28    output  : 'pdbg-test.dtb',
29    command : [ find_program('dtc'), '-I', 'dts', '-O', 'dtb',
30                '-o', '@OUTPUT@', '@INPUT@' ])
31
32pdbg_env = 'PDBG_DTB=' + pdbg_test_dtb.full_path()
33
34################################################################################
35
36# Add gtest/gmock dependency to the list of test dependencies.
37test_deps = [
38  test_util_deps,
39  gtest_dep,
40]
41
42test_vars = [
43  pdbg_env,
44  'LG2_FORCE_STDERR=true',
45]
46
47# Additional SRCs that are not (or should not be) included in libraries.
48# NOTE: Try to limit this, if possible, to prevent duplicate compilation.
49test_additional_srcs = [
50  files(
51    '../analyzer/plugins/p10-plugins.cpp',
52    '../analyzer/plugins/p10-tod-plugins.cpp',
53    '../cli.cpp',
54  ),
55  pdbg_test_dtb
56]
57
58################################################################################
59
60testcases = [
61  'test-bin-stream',
62  'test-ffdc-file',
63  'test-lpc-timeout',
64  'test-pdbg-dts',
65  'test-pll-unlock',
66  'test-resolution',
67  'test-tod-step-check-fault',
68  'test-cli',
69]
70
71foreach tc : testcases
72
73  exe = executable(tc.underscorify(),
74    sources             : [ files(tc + '.cpp'), test_additional_srcs ],
75    include_directories : incdir,
76    dependencies        : test_deps,
77    cpp_args            : test_args,
78    link_with           : test_libs,
79  )
80
81  test(tc, exe, env: test_vars)
82
83endforeach
84
85################################################################################
86
87testcases = [
88  'test-attention',
89  'test-end2end',
90  'test-util-data-file',
91  'test-ti-handler',
92]
93
94# allow more time for long running tests
95longtests = {
96  'test-end2end': 2,
97}
98
99foreach tc : testcases
100
101  exe = executable(tc.underscorify(),
102    sources             : [ files(tc + '.cpp'), test_additional_srcs ],
103    include_directories : incdir,
104    dependencies        : test_deps,
105    cpp_args            : test_args,
106    link_with           : hwdiags_libs, # TODO: should use test_libs instead
107  )
108
109  test(tc, exe, env: test_vars, timeout: 30 * longtests.get(tc, 1))
110
111endforeach
112
113