Roll src/third_party/WebKit f298044:aa8346d (svn 202628:202629)
[chromium-blink-merge.git] / testing / test.gni
blob6ddb338acae4cf88472ddc200371979b7fe1a5df
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     ios_app(target_name) {
114       # TODO(GYP): Make this configurable and only provide a default
115       # that can be overridden.
116       info_plist = "//testing/gtest_ios/unittest-Info.plist"
117       app_name = target_name
118       entitlements_path = "//testing/gtest_ios"
119       code_signing_identity = ""
120       testonly = true
122       # See above call.
123       set_sources_assignment_filter([])
125       forward_variables_from(invoker,
126                              [
127                                "all_dependent_configs",
128                                "allow_circular_includes_from",
129                                "cflags",
130                                "cflags_c",
131                                "cflags_cc",
132                                "cflags_objc",
133                                "cflags_objcc",
134                                "check_includes",
135                                "configs",
136                                "data",
137                                "data_deps",
138                                "defines",
139                                "forward_dependent_configs_from",
140                                "include_dirs",
141                                "ldflags",
142                                "libs",
143                                "output_extension",
144                                "output_name",
145                                "public",
146                                "public_configs",
147                                "public_deps",
148                                "sources",
149                                "visibility",
150                              ])
152       if (defined(invoker.deps)) {
153         deps = invoker.deps
154       } else {
155         deps = []
156       }
157       deps += [
158         # All shared libraries must have the sanitizer deps to properly link in
159         # asan mode (this target will be empty in other cases).
160         "//build/config/sanitizers:deps",
161       ]
162     }
163   } else {
164     executable(target_name) {
165       forward_variables_from(invoker, "*")
167       testonly = true
169       if (!defined(invoker.deps)) {
170         deps = []
171       }
172       deps += [
173         # All shared libraries must have the sanitizer deps to properly link in
174         # asan mode (this target will be empty in other cases).
175         "//build/config/sanitizers:deps",
177         # Give tests the default manifest on Windows (a no-op elsewhere).
178         "//build/win:default_exe_manifest",
179       ]
180     }
181   }