Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(18)

Side by Side Diff: tools/gn/runtime_deps_unittest.cc

Issue 2940873002: Implement tracking of BUILD.gn files used to define target, toolchain or (Closed)
Patch Set: Use base::flat_set instead of std::set. Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698