OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include <stddef.h> | 5 #include <stddef.h> |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "testing/gtest/include/gtest/gtest.h" | 9 #include "testing/gtest/include/gtest/gtest.h" |
10 #include "tools/gn/runtime_deps.h" | 10 #include "tools/gn/runtime_deps.h" |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
44 // Tests an exe depending on different types of libraries. | 44 // Tests an exe depending on different types of libraries. |
45 TEST(RuntimeDeps, Libs) { | 45 TEST(RuntimeDeps, Libs) { |
46 TestWithScope setup; | 46 TestWithScope setup; |
47 Err err; | 47 Err err; |
48 | 48 |
49 // Dependency hierarchy: main(exe) -> static library | 49 // Dependency hierarchy: main(exe) -> static library |
50 // -> shared library | 50 // -> shared library |
51 // -> loadable module | 51 // -> loadable module |
52 // -> source set | 52 // -> source set |
53 | 53 |
54 Target stat(setup.settings(), Label(SourceDir("//"), "stat")); | 54 Target stat(setup.settings(), Label(SourceDir("//"), "stat"), {}); |
55 InitTargetWithType(setup, &stat, Target::STATIC_LIBRARY); | 55 InitTargetWithType(setup, &stat, Target::STATIC_LIBRARY); |
56 stat.data().push_back("//stat.dat"); | 56 stat.data().push_back("//stat.dat"); |
57 ASSERT_TRUE(stat.OnResolved(&err)); | 57 ASSERT_TRUE(stat.OnResolved(&err)); |
58 | 58 |
59 Target shared(setup.settings(), Label(SourceDir("//"), "shared")); | 59 Target shared(setup.settings(), Label(SourceDir("//"), "shared"), {}); |
60 InitTargetWithType(setup, &shared, Target::SHARED_LIBRARY); | 60 InitTargetWithType(setup, &shared, Target::SHARED_LIBRARY); |
61 shared.data().push_back("//shared.dat"); | 61 shared.data().push_back("//shared.dat"); |
62 ASSERT_TRUE(shared.OnResolved(&err)); | 62 ASSERT_TRUE(shared.OnResolved(&err)); |
63 | 63 |
64 Target loadable(setup.settings(), Label(SourceDir("//"), "loadable")); | 64 Target loadable(setup.settings(), Label(SourceDir("//"), "loadable"), {}); |
65 InitTargetWithType(setup, &loadable, Target::LOADABLE_MODULE); | 65 InitTargetWithType(setup, &loadable, Target::LOADABLE_MODULE); |
66 loadable.data().push_back("//loadable.dat"); | 66 loadable.data().push_back("//loadable.dat"); |
67 ASSERT_TRUE(loadable.OnResolved(&err)); | 67 ASSERT_TRUE(loadable.OnResolved(&err)); |
68 | 68 |
69 Target set(setup.settings(), Label(SourceDir("//"), "set")); | 69 Target set(setup.settings(), Label(SourceDir("//"), "set"), {}); |
70 InitTargetWithType(setup, &set, Target::SOURCE_SET); | 70 InitTargetWithType(setup, &set, Target::SOURCE_SET); |
71 set.data().push_back("//set.dat"); | 71 set.data().push_back("//set.dat"); |
72 ASSERT_TRUE(set.OnResolved(&err)); | 72 ASSERT_TRUE(set.OnResolved(&err)); |
73 | 73 |
74 Target main(setup.settings(), Label(SourceDir("//"), "main")); | 74 Target main(setup.settings(), Label(SourceDir("//"), "main"), {}); |
75 InitTargetWithType(setup, &main, Target::EXECUTABLE); | 75 InitTargetWithType(setup, &main, Target::EXECUTABLE); |
76 main.private_deps().push_back(LabelTargetPair(&stat)); | 76 main.private_deps().push_back(LabelTargetPair(&stat)); |
77 main.private_deps().push_back(LabelTargetPair(&shared)); | 77 main.private_deps().push_back(LabelTargetPair(&shared)); |
78 main.private_deps().push_back(LabelTargetPair(&loadable)); | 78 main.private_deps().push_back(LabelTargetPair(&loadable)); |
79 main.private_deps().push_back(LabelTargetPair(&set)); | 79 main.private_deps().push_back(LabelTargetPair(&set)); |
80 main.data().push_back("//main.dat"); | 80 main.data().push_back("//main.dat"); |
81 ASSERT_TRUE(main.OnResolved(&err)); | 81 ASSERT_TRUE(main.OnResolved(&err)); |
82 | 82 |
83 std::vector<std::pair<OutputFile, const Target*>> result = | 83 std::vector<std::pair<OutputFile, const Target*>> result = |
84 ComputeRuntimeDeps(&main); | 84 ComputeRuntimeDeps(&main); |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
120 // the output, but executables that are data deps are included. | 120 // the output, but executables that are data deps are included. |
121 TEST(RuntimeDeps, ExeDataDep) { | 121 TEST(RuntimeDeps, ExeDataDep) { |
122 TestWithScope setup; | 122 TestWithScope setup; |
123 Err err; | 123 Err err; |
124 | 124 |
125 // Dependency hierarchy: main(exe) -> datadep(exe) -> final_in(source set) | 125 // Dependency hierarchy: main(exe) -> datadep(exe) -> final_in(source set) |
126 // -> dep(exe) -> final_out(source set) | 126 // -> dep(exe) -> final_out(source set) |
127 // The final_in/out targets each have data files. final_in's should be | 127 // The final_in/out targets each have data files. final_in's should be |
128 // included, final_out's should not be. | 128 // included, final_out's should not be. |
129 | 129 |
130 Target final_in(setup.settings(), Label(SourceDir("//"), "final_in")); | 130 Target final_in(setup.settings(), Label(SourceDir("//"), "final_in"), {}); |
131 InitTargetWithType(setup, &final_in, Target::SOURCE_SET); | 131 InitTargetWithType(setup, &final_in, Target::SOURCE_SET); |
132 final_in.data().push_back("//final_in.dat"); | 132 final_in.data().push_back("//final_in.dat"); |
133 ASSERT_TRUE(final_in.OnResolved(&err)); | 133 ASSERT_TRUE(final_in.OnResolved(&err)); |
134 | 134 |
135 Target datadep(setup.settings(), Label(SourceDir("//"), "datadep")); | 135 Target datadep(setup.settings(), Label(SourceDir("//"), "datadep"), {}); |
136 InitTargetWithType(setup, &datadep, Target::EXECUTABLE); | 136 InitTargetWithType(setup, &datadep, Target::EXECUTABLE); |
137 datadep.private_deps().push_back(LabelTargetPair(&final_in)); | 137 datadep.private_deps().push_back(LabelTargetPair(&final_in)); |
138 ASSERT_TRUE(datadep.OnResolved(&err)); | 138 ASSERT_TRUE(datadep.OnResolved(&err)); |
139 | 139 |
140 Target final_out(setup.settings(), Label(SourceDir("//"), "final_out")); | 140 Target final_out(setup.settings(), Label(SourceDir("//"), "final_out"), {}); |
141 InitTargetWithType(setup, &final_out, Target::SOURCE_SET); | 141 InitTargetWithType(setup, &final_out, Target::SOURCE_SET); |
142 final_out.data().push_back("//final_out.dat"); | 142 final_out.data().push_back("//final_out.dat"); |
143 ASSERT_TRUE(final_out.OnResolved(&err)); | 143 ASSERT_TRUE(final_out.OnResolved(&err)); |
144 | 144 |
145 Target dep(setup.settings(), Label(SourceDir("//"), "dep")); | 145 Target dep(setup.settings(), Label(SourceDir("//"), "dep"), {}); |
146 InitTargetWithType(setup, &dep, Target::EXECUTABLE); | 146 InitTargetWithType(setup, &dep, Target::EXECUTABLE); |
147 dep.private_deps().push_back(LabelTargetPair(&final_out)); | 147 dep.private_deps().push_back(LabelTargetPair(&final_out)); |
148 ASSERT_TRUE(dep.OnResolved(&err)); | 148 ASSERT_TRUE(dep.OnResolved(&err)); |
149 | 149 |
150 Target main(setup.settings(), Label(SourceDir("//"), "main")); | 150 Target main(setup.settings(), Label(SourceDir("//"), "main"), {}); |
151 InitTargetWithType(setup, &main, Target::EXECUTABLE); | 151 InitTargetWithType(setup, &main, Target::EXECUTABLE); |
152 main.private_deps().push_back(LabelTargetPair(&dep)); | 152 main.private_deps().push_back(LabelTargetPair(&dep)); |
153 main.data_deps().push_back(LabelTargetPair(&datadep)); | 153 main.data_deps().push_back(LabelTargetPair(&datadep)); |
154 ASSERT_TRUE(main.OnResolved(&err)); | 154 ASSERT_TRUE(main.OnResolved(&err)); |
155 | 155 |
156 std::vector<std::pair<OutputFile, const Target*>> result = | 156 std::vector<std::pair<OutputFile, const Target*>> result = |
157 ComputeRuntimeDeps(&main); | 157 ComputeRuntimeDeps(&main); |
158 | 158 |
159 // The result should have deps of main, datadep, final_in.dat | 159 // The result should have deps of main, datadep, final_in.dat |
160 ASSERT_EQ(3u, result.size()) << GetVectorDescription(result); | 160 ASSERT_EQ(3u, result.size()) << GetVectorDescription(result); |
(...skipping 15 matching lines...) Expand all Loading... |
176 // included. | 176 // included. |
177 TEST(RuntimeDeps, ActionOutputs) { | 177 TEST(RuntimeDeps, ActionOutputs) { |
178 TestWithScope setup; | 178 TestWithScope setup; |
179 Err err; | 179 Err err; |
180 | 180 |
181 // Dependency hierarchy: main(exe) -> datadep (action) | 181 // Dependency hierarchy: main(exe) -> datadep (action) |
182 // -> datadep_copy (copy) | 182 // -> datadep_copy (copy) |
183 // -> dep (action) | 183 // -> dep (action) |
184 // -> dep_copy (copy) | 184 // -> dep_copy (copy) |
185 | 185 |
186 Target datadep(setup.settings(), Label(SourceDir("//"), "datadep")); | 186 Target datadep(setup.settings(), Label(SourceDir("//"), "datadep"), {}); |
187 InitTargetWithType(setup, &datadep, Target::ACTION); | 187 InitTargetWithType(setup, &datadep, Target::ACTION); |
188 datadep.data().push_back("//datadep.data"); | 188 datadep.data().push_back("//datadep.data"); |
189 datadep.action_values().outputs() = | 189 datadep.action_values().outputs() = |
190 SubstitutionList::MakeForTest("//datadep.output"); | 190 SubstitutionList::MakeForTest("//datadep.output"); |
191 ASSERT_TRUE(datadep.OnResolved(&err)); | 191 ASSERT_TRUE(datadep.OnResolved(&err)); |
192 | 192 |
193 Target datadep_copy(setup.settings(), Label(SourceDir("//"), "datadep_copy")); | 193 Target datadep_copy(setup.settings(), Label(SourceDir("//"), "datadep_copy"), |
| 194 {}); |
194 InitTargetWithType(setup, &datadep_copy, Target::COPY_FILES); | 195 InitTargetWithType(setup, &datadep_copy, Target::COPY_FILES); |
195 datadep_copy.sources().push_back(SourceFile("//input")); | 196 datadep_copy.sources().push_back(SourceFile("//input")); |
196 datadep_copy.data().push_back("//datadep_copy.data"); | 197 datadep_copy.data().push_back("//datadep_copy.data"); |
197 datadep_copy.action_values().outputs() = | 198 datadep_copy.action_values().outputs() = |
198 SubstitutionList::MakeForTest("//datadep_copy.output"); | 199 SubstitutionList::MakeForTest("//datadep_copy.output"); |
199 ASSERT_TRUE(datadep_copy.OnResolved(&err)); | 200 ASSERT_TRUE(datadep_copy.OnResolved(&err)); |
200 | 201 |
201 Target dep(setup.settings(), Label(SourceDir("//"), "dep")); | 202 Target dep(setup.settings(), Label(SourceDir("//"), "dep"), {}); |
202 InitTargetWithType(setup, &dep, Target::ACTION); | 203 InitTargetWithType(setup, &dep, Target::ACTION); |
203 dep.data().push_back("//dep.data"); | 204 dep.data().push_back("//dep.data"); |
204 dep.action_values().outputs() = | 205 dep.action_values().outputs() = |
205 SubstitutionList::MakeForTest("//dep.output"); | 206 SubstitutionList::MakeForTest("//dep.output"); |
206 ASSERT_TRUE(dep.OnResolved(&err)); | 207 ASSERT_TRUE(dep.OnResolved(&err)); |
207 | 208 |
208 Target dep_copy(setup.settings(), Label(SourceDir("//"), "dep_copy")); | 209 Target dep_copy(setup.settings(), Label(SourceDir("//"), "dep_copy"), {}); |
209 InitTargetWithType(setup, &dep_copy, Target::COPY_FILES); | 210 InitTargetWithType(setup, &dep_copy, Target::COPY_FILES); |
210 dep_copy.sources().push_back(SourceFile("//input")); | 211 dep_copy.sources().push_back(SourceFile("//input")); |
211 dep_copy.data().push_back("//dep_copy/data/"); // Tests a directory. | 212 dep_copy.data().push_back("//dep_copy/data/"); // Tests a directory. |
212 dep_copy.action_values().outputs() = | 213 dep_copy.action_values().outputs() = |
213 SubstitutionList::MakeForTest("//dep_copy.output"); | 214 SubstitutionList::MakeForTest("//dep_copy.output"); |
214 ASSERT_TRUE(dep_copy.OnResolved(&err)); | 215 ASSERT_TRUE(dep_copy.OnResolved(&err)); |
215 | 216 |
216 Target main(setup.settings(), Label(SourceDir("//"), "main")); | 217 Target main(setup.settings(), Label(SourceDir("//"), "main"), {}); |
217 InitTargetWithType(setup, &main, Target::EXECUTABLE); | 218 InitTargetWithType(setup, &main, Target::EXECUTABLE); |
218 main.private_deps().push_back(LabelTargetPair(&dep)); | 219 main.private_deps().push_back(LabelTargetPair(&dep)); |
219 main.private_deps().push_back(LabelTargetPair(&dep_copy)); | 220 main.private_deps().push_back(LabelTargetPair(&dep_copy)); |
220 main.data_deps().push_back(LabelTargetPair(&datadep)); | 221 main.data_deps().push_back(LabelTargetPair(&datadep)); |
221 main.data_deps().push_back(LabelTargetPair(&datadep_copy)); | 222 main.data_deps().push_back(LabelTargetPair(&datadep_copy)); |
222 ASSERT_TRUE(main.OnResolved(&err)); | 223 ASSERT_TRUE(main.OnResolved(&err)); |
223 | 224 |
224 std::vector<std::pair<OutputFile, const Target*>> result = | 225 std::vector<std::pair<OutputFile, const Target*>> result = |
225 ComputeRuntimeDeps(&main); | 226 ComputeRuntimeDeps(&main); |
226 | 227 |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
267 | 268 |
268 // Dependency hierarchy: | 269 // Dependency hierarchy: |
269 // main(exe) -> dep(bundle) -> dep(shared_library) -> dep(source set) | 270 // main(exe) -> dep(bundle) -> dep(shared_library) -> dep(source set) |
270 // -> dep(bundle_data) -> dep(loadable_module) | 271 // -> dep(bundle_data) -> dep(loadable_module) |
271 // -> data(lm.data) | 272 // -> data(lm.data) |
272 // -> datadep(datadep) -> data(dd.data) | 273 // -> datadep(datadep) -> data(dd.data) |
273 | 274 |
274 const SourceDir source_dir("//"); | 275 const SourceDir source_dir("//"); |
275 const std::string& build_dir = setup.build_settings()->build_dir().value(); | 276 const std::string& build_dir = setup.build_settings()->build_dir().value(); |
276 | 277 |
277 Target loadable_module(setup.settings(), | 278 Target loadable_module(setup.settings(), Label(source_dir, "loadable_module"), |
278 Label(source_dir, "loadable_module")); | 279 {}); |
279 InitTargetWithType(setup, &loadable_module, Target::LOADABLE_MODULE); | 280 InitTargetWithType(setup, &loadable_module, Target::LOADABLE_MODULE); |
280 loadable_module.data().push_back("//lm.data"); | 281 loadable_module.data().push_back("//lm.data"); |
281 ASSERT_TRUE(loadable_module.OnResolved(&err)); | 282 ASSERT_TRUE(loadable_module.OnResolved(&err)); |
282 | 283 |
283 Target module_data(setup.settings(), Label(source_dir, "module_data")); | 284 Target module_data(setup.settings(), Label(source_dir, "module_data"), {}); |
284 InitTargetWithType(setup, &module_data, Target::BUNDLE_DATA); | 285 InitTargetWithType(setup, &module_data, Target::BUNDLE_DATA); |
285 module_data.private_deps().push_back(LabelTargetPair(&loadable_module)); | 286 module_data.private_deps().push_back(LabelTargetPair(&loadable_module)); |
286 module_data.bundle_data().file_rules().push_back(BundleFileRule( | 287 module_data.bundle_data().file_rules().push_back(BundleFileRule( |
287 nullptr, | 288 nullptr, |
288 std::vector<SourceFile>{SourceFile(build_dir + "loadable_module.so")}, | 289 std::vector<SourceFile>{SourceFile(build_dir + "loadable_module.so")}, |
289 SubstitutionPattern::MakeForTest("{{bundle_resources_dir}}"))); | 290 SubstitutionPattern::MakeForTest("{{bundle_resources_dir}}"))); |
290 ASSERT_TRUE(module_data.OnResolved(&err)); | 291 ASSERT_TRUE(module_data.OnResolved(&err)); |
291 | 292 |
292 Target source_set(setup.settings(), Label(source_dir, "sources")); | 293 Target source_set(setup.settings(), Label(source_dir, "sources"), {}); |
293 InitTargetWithType(setup, &source_set, Target::SOURCE_SET); | 294 InitTargetWithType(setup, &source_set, Target::SOURCE_SET); |
294 source_set.sources().push_back(SourceFile(source_dir.value() + "foo.cc")); | 295 source_set.sources().push_back(SourceFile(source_dir.value() + "foo.cc")); |
295 ASSERT_TRUE(source_set.OnResolved(&err)); | 296 ASSERT_TRUE(source_set.OnResolved(&err)); |
296 | 297 |
297 Target dylib(setup.settings(), Label(source_dir, "dylib")); | 298 Target dylib(setup.settings(), Label(source_dir, "dylib"), {}); |
298 dylib.set_output_prefix_override(true); | 299 dylib.set_output_prefix_override(true); |
299 dylib.set_output_extension(""); | 300 dylib.set_output_extension(""); |
300 dylib.set_output_name("Bundle"); | 301 dylib.set_output_name("Bundle"); |
301 InitTargetWithType(setup, &dylib, Target::SHARED_LIBRARY); | 302 InitTargetWithType(setup, &dylib, Target::SHARED_LIBRARY); |
302 dylib.private_deps().push_back(LabelTargetPair(&source_set)); | 303 dylib.private_deps().push_back(LabelTargetPair(&source_set)); |
303 ASSERT_TRUE(dylib.OnResolved(&err)); | 304 ASSERT_TRUE(dylib.OnResolved(&err)); |
304 | 305 |
305 Target dylib_data(setup.settings(), Label(source_dir, "dylib_data")); | 306 Target dylib_data(setup.settings(), Label(source_dir, "dylib_data"), {}); |
306 InitTargetWithType(setup, &dylib_data, Target::BUNDLE_DATA); | 307 InitTargetWithType(setup, &dylib_data, Target::BUNDLE_DATA); |
307 dylib_data.private_deps().push_back(LabelTargetPair(&dylib)); | 308 dylib_data.private_deps().push_back(LabelTargetPair(&dylib)); |
308 dylib_data.bundle_data().file_rules().push_back(BundleFileRule( | 309 dylib_data.bundle_data().file_rules().push_back(BundleFileRule( |
309 nullptr, std::vector<SourceFile>{SourceFile(build_dir + "dylib")}, | 310 nullptr, std::vector<SourceFile>{SourceFile(build_dir + "dylib")}, |
310 SubstitutionPattern::MakeForTest("{{bundle_executable_dir}}"))); | 311 SubstitutionPattern::MakeForTest("{{bundle_executable_dir}}"))); |
311 ASSERT_TRUE(dylib_data.OnResolved(&err)); | 312 ASSERT_TRUE(dylib_data.OnResolved(&err)); |
312 | 313 |
313 Target data_dep(setup.settings(), Label(source_dir, "datadep")); | 314 Target data_dep(setup.settings(), Label(source_dir, "datadep"), {}); |
314 InitTargetWithType(setup, &data_dep, Target::EXECUTABLE); | 315 InitTargetWithType(setup, &data_dep, Target::EXECUTABLE); |
315 data_dep.data().push_back("//dd.data"); | 316 data_dep.data().push_back("//dd.data"); |
316 ASSERT_TRUE(data_dep.OnResolved(&err)); | 317 ASSERT_TRUE(data_dep.OnResolved(&err)); |
317 | 318 |
318 Target bundle(setup.settings(), Label(source_dir, "bundle")); | 319 Target bundle(setup.settings(), Label(source_dir, "bundle"), {}); |
319 InitTargetWithType(setup, &bundle, Target::CREATE_BUNDLE); | 320 InitTargetWithType(setup, &bundle, Target::CREATE_BUNDLE); |
320 const std::string root_dir(build_dir + "Bundle.framework/Versions/A/"); | 321 const std::string root_dir(build_dir + "Bundle.framework/Versions/A/"); |
321 bundle.bundle_data().root_dir() = SourceDir(root_dir); | 322 bundle.bundle_data().root_dir() = SourceDir(root_dir); |
322 bundle.bundle_data().resources_dir() = SourceDir(root_dir + "Resources"); | 323 bundle.bundle_data().resources_dir() = SourceDir(root_dir + "Resources"); |
323 bundle.bundle_data().executable_dir() = SourceDir(root_dir + "MacOS"); | 324 bundle.bundle_data().executable_dir() = SourceDir(root_dir + "MacOS"); |
324 bundle.private_deps().push_back(LabelTargetPair(&dylib_data)); | 325 bundle.private_deps().push_back(LabelTargetPair(&dylib_data)); |
325 bundle.private_deps().push_back(LabelTargetPair(&module_data)); | 326 bundle.private_deps().push_back(LabelTargetPair(&module_data)); |
326 bundle.data_deps().push_back(LabelTargetPair(&data_dep)); | 327 bundle.data_deps().push_back(LabelTargetPair(&data_dep)); |
327 bundle.data().push_back("//b.data"); | 328 bundle.data().push_back("//b.data"); |
328 ASSERT_TRUE(bundle.OnResolved(&err)); | 329 ASSERT_TRUE(bundle.OnResolved(&err)); |
329 | 330 |
330 Target main(setup.settings(), Label(source_dir, "main")); | 331 Target main(setup.settings(), Label(source_dir, "main"), {}); |
331 InitTargetWithType(setup, &main, Target::EXECUTABLE); | 332 InitTargetWithType(setup, &main, Target::EXECUTABLE); |
332 main.data_deps().push_back(LabelTargetPair(&bundle)); | 333 main.data_deps().push_back(LabelTargetPair(&bundle)); |
333 ASSERT_TRUE(main.OnResolved(&err)); | 334 ASSERT_TRUE(main.OnResolved(&err)); |
334 | 335 |
335 std::vector<std::pair<OutputFile, const Target*>> result = | 336 std::vector<std::pair<OutputFile, const Target*>> result = |
336 ComputeRuntimeDeps(&main); | 337 ComputeRuntimeDeps(&main); |
337 | 338 |
338 // The result should have deps of main, datadep, final_in.dat | 339 // The result should have deps of main, datadep, final_in.dat |
339 ASSERT_EQ(5u, result.size()) << GetVectorDescription(result); | 340 ASSERT_EQ(5u, result.size()) << GetVectorDescription(result); |
340 | 341 |
(...skipping 17 matching lines...) Expand all Loading... |
358 MakePair("../../b.data", &bundle)) != | 359 MakePair("../../b.data", &bundle)) != |
359 result.end()) << GetVectorDescription(result); | 360 result.end()) << GetVectorDescription(result); |
360 } | 361 } |
361 | 362 |
362 // Tests that a dependency duplicated in regular and data deps is processed | 363 // Tests that a dependency duplicated in regular and data deps is processed |
363 // as a data dep. | 364 // as a data dep. |
364 TEST(RuntimeDeps, Dupe) { | 365 TEST(RuntimeDeps, Dupe) { |
365 TestWithScope setup; | 366 TestWithScope setup; |
366 Err err; | 367 Err err; |
367 | 368 |
368 Target action(setup.settings(), Label(SourceDir("//"), "action")); | 369 Target action(setup.settings(), Label(SourceDir("//"), "action"), {}); |
369 InitTargetWithType(setup, &action, Target::ACTION); | 370 InitTargetWithType(setup, &action, Target::ACTION); |
370 action.action_values().outputs() = | 371 action.action_values().outputs() = |
371 SubstitutionList::MakeForTest("//action.output"); | 372 SubstitutionList::MakeForTest("//action.output"); |
372 ASSERT_TRUE(action.OnResolved(&err)); | 373 ASSERT_TRUE(action.OnResolved(&err)); |
373 | 374 |
374 Target target(setup.settings(), Label(SourceDir("//"), "foo")); | 375 Target target(setup.settings(), Label(SourceDir("//"), "foo"), {}); |
375 InitTargetWithType(setup, &target, Target::EXECUTABLE); | 376 InitTargetWithType(setup, &target, Target::EXECUTABLE); |
376 target.private_deps().push_back(LabelTargetPair(&action)); | 377 target.private_deps().push_back(LabelTargetPair(&action)); |
377 target.data_deps().push_back(LabelTargetPair(&action)); | 378 target.data_deps().push_back(LabelTargetPair(&action)); |
378 ASSERT_TRUE(target.OnResolved(&err)); | 379 ASSERT_TRUE(target.OnResolved(&err)); |
379 | 380 |
380 // The results should be the executable and the copy output. | 381 // The results should be the executable and the copy output. |
381 std::vector<std::pair<OutputFile, const Target*>> result = | 382 std::vector<std::pair<OutputFile, const Target*>> result = |
382 ComputeRuntimeDeps(&target); | 383 ComputeRuntimeDeps(&target); |
383 EXPECT_TRUE(std::find(result.begin(), result.end(), | 384 EXPECT_TRUE(std::find(result.begin(), result.end(), |
384 MakePair("../../action.output", &action)) != | 385 MakePair("../../action.output", &action)) != |
(...skipping 20 matching lines...) Expand all Loading... |
405 err = Err(); | 406 err = Err(); |
406 EXPECT_TRUE(setup.ExecuteSnippet( | 407 EXPECT_TRUE(setup.ExecuteSnippet( |
407 "if (true) {\n" | 408 "if (true) {\n" |
408 " group(\"foo\") { write_runtime_deps = \"//out/Debug/foo.txt\" }\n" | 409 " group(\"foo\") { write_runtime_deps = \"//out/Debug/foo.txt\" }\n" |
409 "} else {\n" | 410 "} else {\n" |
410 " group(\"bar\") { write_runtime_deps = \"//out/Debug/bar.txt\" }\n" | 411 " group(\"bar\") { write_runtime_deps = \"//out/Debug/bar.txt\" }\n" |
411 "}", &err)); | 412 "}", &err)); |
412 EXPECT_EQ(1U, setup.items().size()); | 413 EXPECT_EQ(1U, setup.items().size()); |
413 EXPECT_EQ(1U, scheduler.GetWriteRuntimeDepsTargets().size()); | 414 EXPECT_EQ(1U, scheduler.GetWriteRuntimeDepsTargets().size()); |
414 } | 415 } |
OLD | NEW |