Roll WebRTC 9745:9761, Libjingle 9742:9761
[chromium-blink-merge.git] / testing / test.gni
blob3780ebd5f757548f65409816abc8e94c5c1ab8bb
1 # Copyright 2015 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
5 # ==============================================================================
6 # TEST SETUP
7 # ==============================================================================
9 # Define a test as an executable (or apk on Android) with the "testonly" flag
10 # set.
11 template("test") {
12   if (is_android) {
13     import("//build/config/android/config.gni")
14     import("//build/config/android/rules.gni")
16     main_target_name = target_name
17     library_name = "_${target_name}__library"
18     apk_name = "${target_name}_apk"
20     shared_library(library_name) {
21       # Configs will always be defined since we set_defaults for a component
22       # in the main config. We want to use those rather than whatever came with
23       # the nested shared/static library inside the component.
24       configs = []  # Prevent list overwriting warning.
25       configs = invoker.configs
27       testonly = true
29       # Don't use "*" to forward all variables since some (like output_name
30       # and isolate_file) apply only to the APK below.
31       forward_variables_from(invoker,
32                              [
33                                "all_dependent_configs",
34                                "allow_circular_includes_from",
35                                "cflags",
36                                "cflags_c",
37                                "cflags_cc",
38                                "check_includes",
39                                "data",
40                                "data_deps",
41                                "datadeps",
42                                "defines",
43                                "forward_dependent_configs_from",
44                                "include_dirs",
45                                "ldflags",
46                                "lib_dirs",
47                                "libs",
48                                "output_extension",
49                                "output_name",
50                                "public",
51                                "public_configs",
52                                "public_deps",
53                                "sources",
54                                "visibility",
55                              ])
57       deps = []
58       if (!defined(invoker.use_launcher) || invoker.use_launcher) {
59         deps += [ "//testing/android/native_test:native_test_native_code" ]
60       }
61       if (defined(invoker.deps)) {
62         deps += invoker.deps
63       }
64     }
66     unittest_apk(apk_name) {
67       unittests_dep = ":$library_name"
68       apk_name = main_target_name
69       if (defined(invoker.output_name)) {
70         apk_name = invoker.output_name
71         unittests_binary = "lib${apk_name}.so"
72       }
73       deps = [
74         ":$library_name",
75       ]
76       if (defined(invoker.apk_deps)) {
77         deps += invoker.apk_deps
78       }
79       if (defined(invoker.apk_asset_location)) {
80         asset_location = invoker.apk_asset_location
81       }
82     }
84     test_name = main_target_name
85     if (defined(invoker.output_name)) {
86       test_name = invoker.output_name
87     }
88     test_runner_script_name = "${test_name}__test_runner_script"
89     test_runner_script(test_runner_script_name) {
90       test_name = test_name
91       test_type = "gtest"
92       test_suite = test_name
93       if (defined(invoker.isolate_file)) {
94         isolate_file = invoker.isolate_file
95       }
96     }
98     group(target_name) {
99       testonly = true
100       datadeps = [
101         ":$test_runner_script_name",
102       ]
103       deps = [
104         ":$library_name",
105         ":$apk_name",
106       ]
107     }
108   } else if (is_ios) {
109     if (is_ios) {
110       import("//build/config/ios/rules.gni")
111     }
113     target__sources_name = "${target_name}__sources"
114     if (defined(invoker.sources)) {
115       source_set(target__sources_name) {
116         sources = invoker.sources
117         testonly = true
119         configs = []  # Prevent list overwriting warning.
120         configs += invoker.configs
122         forward_variables_from(invoker,
123                                [
124                                  "cflags",
125                                  "cflags_c",
126                                  "cflags_cc",
127                                  "cflags_objc",
128                                  "cflags_objcc",
129                                  "data",
130                                  "data_deps",
131                                  "datadeps",
132                                  "defines",
133                                  "deps",
134                                  "include_dirs",
135                                  "includes",
136                                ])
137       }
138     }
140     ios_app(target_name) {
141       # TODO(GYP): Make this configurable and only provide a default
142       # that can be overridden.
143       info_plist = "//testing/gtest_ios/unittest-Info.plist"
144       app_name = target_name
145       entitlements_path = "//testing/gtest_ios"
146       code_signing_identity = ""
147       testonly = true
149       # See above call.
150       set_sources_assignment_filter([])
152       forward_variables_from(invoker,
153                              [
154                                "all_dependent_configs",
155                                "allow_circular_includes_from",
156                                "cflags",
157                                "cflags_c",
158                                "cflags_cc",
159                                "cflags_objc",
160                                "cflags_objcc",
161                                "check_includes",
162                                "forward_dependent_configs_from",
163                                "ldflags",
164                                "libs",
165                                "output_extension",
166                                "output_name",
167                                "public",
168                                "public_configs",
169                                "public_deps",
170                                "visibility",
171                              ])
173       if (defined(invoker.deps)) {
174         deps = invoker.deps
175       } else {
176         deps = []
177       }
178       deps += [
179         # All shared libraries must have the sanitizer deps to properly link in
180         # asan mode (this target will be empty in other cases).
181         "//build/config/sanitizers:deps",
182       ]
184       if (defined(invoker.sources)) {
185         deps += [ ":${target__sources_name}" ]
186       }
187     }
188   } else {
189     executable(target_name) {
190       forward_variables_from(invoker, "*")
192       testonly = true
194       if (!defined(invoker.deps)) {
195         deps = []
196       }
197       deps += [
198         # All shared libraries must have the sanitizer deps to properly link in
199         # asan mode (this target will be empty in other cases).
200         "//build/config/sanitizers:deps",
202         # Give tests the default manifest on Windows (a no-op elsewhere).
203         "//build/win:default_exe_manifest",
204       ]
205     }
206   }