| 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 "base/stl_util.h" | 7 #include "base/stl_util.h" |
| 8 #include "testing/gtest/include/gtest/gtest.h" | 8 #include "testing/gtest/include/gtest/gtest.h" |
| 9 #include "tools/gn/runtime_deps.h" | 9 #include "tools/gn/runtime_deps.h" |
| 10 #include "tools/gn/scheduler.h" | 10 #include "tools/gn/scheduler.h" |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 43 // Tests an exe depending on different types of libraries. | 43 // Tests an exe depending on different types of libraries. |
| 44 TEST(RuntimeDeps, Libs) { | 44 TEST(RuntimeDeps, Libs) { |
| 45 TestWithScope setup; | 45 TestWithScope setup; |
| 46 Err err; | 46 Err err; |
| 47 | 47 |
| 48 // Dependency hierarchy: main(exe) -> static library | 48 // Dependency hierarchy: main(exe) -> static library |
| 49 // -> shared library | 49 // -> shared library |
| 50 // -> loadable module | 50 // -> loadable module |
| 51 // -> source set | 51 // -> source set |
| 52 | 52 |
| 53 Target stat(setup.settings(), Label(SourceDir("//"), "stat")); | 53 Target stat(setup.settings(), Label(SourceDir("//"), "stat"), {}); |
| 54 InitTargetWithType(setup, &stat, Target::STATIC_LIBRARY); | 54 InitTargetWithType(setup, &stat, Target::STATIC_LIBRARY); |
| 55 stat.data().push_back("//stat.dat"); | 55 stat.data().push_back("//stat.dat"); |
| 56 ASSERT_TRUE(stat.OnResolved(&err)); | 56 ASSERT_TRUE(stat.OnResolved(&err)); |
| 57 | 57 |
| 58 Target shared(setup.settings(), Label(SourceDir("//"), "shared")); | 58 Target shared(setup.settings(), Label(SourceDir("//"), "shared"), {}); |
| 59 InitTargetWithType(setup, &shared, Target::SHARED_LIBRARY); | 59 InitTargetWithType(setup, &shared, Target::SHARED_LIBRARY); |
| 60 shared.data().push_back("//shared.dat"); | 60 shared.data().push_back("//shared.dat"); |
| 61 ASSERT_TRUE(shared.OnResolved(&err)); | 61 ASSERT_TRUE(shared.OnResolved(&err)); |
| 62 | 62 |
| 63 Target loadable(setup.settings(), Label(SourceDir("//"), "loadable")); | 63 Target loadable(setup.settings(), Label(SourceDir("//"), "loadable"), {}); |
| 64 InitTargetWithType(setup, &loadable, Target::LOADABLE_MODULE); | 64 InitTargetWithType(setup, &loadable, Target::LOADABLE_MODULE); |
| 65 loadable.data().push_back("//loadable.dat"); | 65 loadable.data().push_back("//loadable.dat"); |
| 66 ASSERT_TRUE(loadable.OnResolved(&err)); | 66 ASSERT_TRUE(loadable.OnResolved(&err)); |
| 67 | 67 |
| 68 Target set(setup.settings(), Label(SourceDir("//"), "set")); | 68 Target set(setup.settings(), Label(SourceDir("//"), "set"), {}); |
| 69 InitTargetWithType(setup, &set, Target::SOURCE_SET); | 69 InitTargetWithType(setup, &set, Target::SOURCE_SET); |
| 70 set.data().push_back("//set.dat"); | 70 set.data().push_back("//set.dat"); |
| 71 ASSERT_TRUE(set.OnResolved(&err)); | 71 ASSERT_TRUE(set.OnResolved(&err)); |
| 72 | 72 |
| 73 Target main(setup.settings(), Label(SourceDir("//"), "main")); | 73 Target main(setup.settings(), Label(SourceDir("//"), "main"), {}); |
| 74 InitTargetWithType(setup, &main, Target::EXECUTABLE); | 74 InitTargetWithType(setup, &main, Target::EXECUTABLE); |
| 75 main.private_deps().push_back(LabelTargetPair(&stat)); | 75 main.private_deps().push_back(LabelTargetPair(&stat)); |
| 76 main.private_deps().push_back(LabelTargetPair(&shared)); | 76 main.private_deps().push_back(LabelTargetPair(&shared)); |
| 77 main.private_deps().push_back(LabelTargetPair(&loadable)); | 77 main.private_deps().push_back(LabelTargetPair(&loadable)); |
| 78 main.private_deps().push_back(LabelTargetPair(&set)); | 78 main.private_deps().push_back(LabelTargetPair(&set)); |
| 79 main.data().push_back("//main.dat"); | 79 main.data().push_back("//main.dat"); |
| 80 ASSERT_TRUE(main.OnResolved(&err)); | 80 ASSERT_TRUE(main.OnResolved(&err)); |
| 81 | 81 |
| 82 std::vector<std::pair<OutputFile, const Target*>> result = | 82 std::vector<std::pair<OutputFile, const Target*>> result = |
| 83 ComputeRuntimeDeps(&main); | 83 ComputeRuntimeDeps(&main); |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 115 // the output, but executables that are data deps are included. | 115 // the output, but executables that are data deps are included. |
| 116 TEST(RuntimeDeps, ExeDataDep) { | 116 TEST(RuntimeDeps, ExeDataDep) { |
| 117 TestWithScope setup; | 117 TestWithScope setup; |
| 118 Err err; | 118 Err err; |
| 119 | 119 |
| 120 // Dependency hierarchy: main(exe) -> datadep(exe) -> final_in(source set) | 120 // Dependency hierarchy: main(exe) -> datadep(exe) -> final_in(source set) |
| 121 // -> dep(exe) -> final_out(source set) | 121 // -> dep(exe) -> final_out(source set) |
| 122 // The final_in/out targets each have data files. final_in's should be | 122 // The final_in/out targets each have data files. final_in's should be |
| 123 // included, final_out's should not be. | 123 // included, final_out's should not be. |
| 124 | 124 |
| 125 Target final_in(setup.settings(), Label(SourceDir("//"), "final_in")); | 125 Target final_in(setup.settings(), Label(SourceDir("//"), "final_in"), {}); |
| 126 InitTargetWithType(setup, &final_in, Target::SOURCE_SET); | 126 InitTargetWithType(setup, &final_in, Target::SOURCE_SET); |
| 127 final_in.data().push_back("//final_in.dat"); | 127 final_in.data().push_back("//final_in.dat"); |
| 128 ASSERT_TRUE(final_in.OnResolved(&err)); | 128 ASSERT_TRUE(final_in.OnResolved(&err)); |
| 129 | 129 |
| 130 Target datadep(setup.settings(), Label(SourceDir("//"), "datadep")); | 130 Target datadep(setup.settings(), Label(SourceDir("//"), "datadep"), {}); |
| 131 InitTargetWithType(setup, &datadep, Target::EXECUTABLE); | 131 InitTargetWithType(setup, &datadep, Target::EXECUTABLE); |
| 132 datadep.private_deps().push_back(LabelTargetPair(&final_in)); | 132 datadep.private_deps().push_back(LabelTargetPair(&final_in)); |
| 133 ASSERT_TRUE(datadep.OnResolved(&err)); | 133 ASSERT_TRUE(datadep.OnResolved(&err)); |
| 134 | 134 |
| 135 Target final_out(setup.settings(), Label(SourceDir("//"), "final_out")); | 135 Target final_out(setup.settings(), Label(SourceDir("//"), "final_out"), {}); |
| 136 InitTargetWithType(setup, &final_out, Target::SOURCE_SET); | 136 InitTargetWithType(setup, &final_out, Target::SOURCE_SET); |
| 137 final_out.data().push_back("//final_out.dat"); | 137 final_out.data().push_back("//final_out.dat"); |
| 138 ASSERT_TRUE(final_out.OnResolved(&err)); | 138 ASSERT_TRUE(final_out.OnResolved(&err)); |
| 139 | 139 |
| 140 Target dep(setup.settings(), Label(SourceDir("//"), "dep")); | 140 Target dep(setup.settings(), Label(SourceDir("//"), "dep"), {}); |
| 141 InitTargetWithType(setup, &dep, Target::EXECUTABLE); | 141 InitTargetWithType(setup, &dep, Target::EXECUTABLE); |
| 142 dep.private_deps().push_back(LabelTargetPair(&final_out)); | 142 dep.private_deps().push_back(LabelTargetPair(&final_out)); |
| 143 ASSERT_TRUE(dep.OnResolved(&err)); | 143 ASSERT_TRUE(dep.OnResolved(&err)); |
| 144 | 144 |
| 145 Target main(setup.settings(), Label(SourceDir("//"), "main")); | 145 Target main(setup.settings(), Label(SourceDir("//"), "main"), {}); |
| 146 InitTargetWithType(setup, &main, Target::EXECUTABLE); | 146 InitTargetWithType(setup, &main, Target::EXECUTABLE); |
| 147 main.private_deps().push_back(LabelTargetPair(&dep)); | 147 main.private_deps().push_back(LabelTargetPair(&dep)); |
| 148 main.data_deps().push_back(LabelTargetPair(&datadep)); | 148 main.data_deps().push_back(LabelTargetPair(&datadep)); |
| 149 ASSERT_TRUE(main.OnResolved(&err)); | 149 ASSERT_TRUE(main.OnResolved(&err)); |
| 150 | 150 |
| 151 std::vector<std::pair<OutputFile, const Target*>> result = | 151 std::vector<std::pair<OutputFile, const Target*>> result = |
| 152 ComputeRuntimeDeps(&main); | 152 ComputeRuntimeDeps(&main); |
| 153 | 153 |
| 154 // The result should have deps of main, datadep, final_in.dat | 154 // The result should have deps of main, datadep, final_in.dat |
| 155 ASSERT_EQ(3u, result.size()) << GetVectorDescription(result); | 155 ASSERT_EQ(3u, result.size()) << GetVectorDescription(result); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 170 // included. | 170 // included. |
| 171 TEST(RuntimeDeps, ActionOutputs) { | 171 TEST(RuntimeDeps, ActionOutputs) { |
| 172 TestWithScope setup; | 172 TestWithScope setup; |
| 173 Err err; | 173 Err err; |
| 174 | 174 |
| 175 // Dependency hierarchy: main(exe) -> datadep (action) | 175 // Dependency hierarchy: main(exe) -> datadep (action) |
| 176 // -> datadep_copy (copy) | 176 // -> datadep_copy (copy) |
| 177 // -> dep (action) | 177 // -> dep (action) |
| 178 // -> dep_copy (copy) | 178 // -> dep_copy (copy) |
| 179 | 179 |
| 180 Target datadep(setup.settings(), Label(SourceDir("//"), "datadep")); | 180 Target datadep(setup.settings(), Label(SourceDir("//"), "datadep"), {}); |
| 181 InitTargetWithType(setup, &datadep, Target::ACTION); | 181 InitTargetWithType(setup, &datadep, Target::ACTION); |
| 182 datadep.data().push_back("//datadep.data"); | 182 datadep.data().push_back("//datadep.data"); |
| 183 datadep.action_values().outputs() = | 183 datadep.action_values().outputs() = |
| 184 SubstitutionList::MakeForTest("//datadep.output"); | 184 SubstitutionList::MakeForTest("//datadep.output"); |
| 185 ASSERT_TRUE(datadep.OnResolved(&err)); | 185 ASSERT_TRUE(datadep.OnResolved(&err)); |
| 186 | 186 |
| 187 Target datadep_copy(setup.settings(), Label(SourceDir("//"), "datadep_copy")); | 187 Target datadep_copy(setup.settings(), Label(SourceDir("//"), "datadep_copy"), |
| 188 {}); |
| 188 InitTargetWithType(setup, &datadep_copy, Target::COPY_FILES); | 189 InitTargetWithType(setup, &datadep_copy, Target::COPY_FILES); |
| 189 datadep_copy.sources().push_back(SourceFile("//input")); | 190 datadep_copy.sources().push_back(SourceFile("//input")); |
| 190 datadep_copy.data().push_back("//datadep_copy.data"); | 191 datadep_copy.data().push_back("//datadep_copy.data"); |
| 191 datadep_copy.action_values().outputs() = | 192 datadep_copy.action_values().outputs() = |
| 192 SubstitutionList::MakeForTest("//datadep_copy.output"); | 193 SubstitutionList::MakeForTest("//datadep_copy.output"); |
| 193 ASSERT_TRUE(datadep_copy.OnResolved(&err)); | 194 ASSERT_TRUE(datadep_copy.OnResolved(&err)); |
| 194 | 195 |
| 195 Target dep(setup.settings(), Label(SourceDir("//"), "dep")); | 196 Target dep(setup.settings(), Label(SourceDir("//"), "dep"), {}); |
| 196 InitTargetWithType(setup, &dep, Target::ACTION); | 197 InitTargetWithType(setup, &dep, Target::ACTION); |
| 197 dep.data().push_back("//dep.data"); | 198 dep.data().push_back("//dep.data"); |
| 198 dep.action_values().outputs() = | 199 dep.action_values().outputs() = |
| 199 SubstitutionList::MakeForTest("//dep.output"); | 200 SubstitutionList::MakeForTest("//dep.output"); |
| 200 ASSERT_TRUE(dep.OnResolved(&err)); | 201 ASSERT_TRUE(dep.OnResolved(&err)); |
| 201 | 202 |
| 202 Target dep_copy(setup.settings(), Label(SourceDir("//"), "dep_copy")); | 203 Target dep_copy(setup.settings(), Label(SourceDir("//"), "dep_copy"), {}); |
| 203 InitTargetWithType(setup, &dep_copy, Target::COPY_FILES); | 204 InitTargetWithType(setup, &dep_copy, Target::COPY_FILES); |
| 204 dep_copy.sources().push_back(SourceFile("//input")); | 205 dep_copy.sources().push_back(SourceFile("//input")); |
| 205 dep_copy.data().push_back("//dep_copy/data/"); // Tests a directory. | 206 dep_copy.data().push_back("//dep_copy/data/"); // Tests a directory. |
| 206 dep_copy.action_values().outputs() = | 207 dep_copy.action_values().outputs() = |
| 207 SubstitutionList::MakeForTest("//dep_copy.output"); | 208 SubstitutionList::MakeForTest("//dep_copy.output"); |
| 208 ASSERT_TRUE(dep_copy.OnResolved(&err)); | 209 ASSERT_TRUE(dep_copy.OnResolved(&err)); |
| 209 | 210 |
| 210 Target main(setup.settings(), Label(SourceDir("//"), "main")); | 211 Target main(setup.settings(), Label(SourceDir("//"), "main"), {}); |
| 211 InitTargetWithType(setup, &main, Target::EXECUTABLE); | 212 InitTargetWithType(setup, &main, Target::EXECUTABLE); |
| 212 main.private_deps().push_back(LabelTargetPair(&dep)); | 213 main.private_deps().push_back(LabelTargetPair(&dep)); |
| 213 main.private_deps().push_back(LabelTargetPair(&dep_copy)); | 214 main.private_deps().push_back(LabelTargetPair(&dep_copy)); |
| 214 main.data_deps().push_back(LabelTargetPair(&datadep)); | 215 main.data_deps().push_back(LabelTargetPair(&datadep)); |
| 215 main.data_deps().push_back(LabelTargetPair(&datadep_copy)); | 216 main.data_deps().push_back(LabelTargetPair(&datadep_copy)); |
| 216 ASSERT_TRUE(main.OnResolved(&err)); | 217 ASSERT_TRUE(main.OnResolved(&err)); |
| 217 | 218 |
| 218 std::vector<std::pair<OutputFile, const Target*>> result = | 219 std::vector<std::pair<OutputFile, const Target*>> result = |
| 219 ComputeRuntimeDeps(&main); | 220 ComputeRuntimeDeps(&main); |
| 220 | 221 |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 260 | 261 |
| 261 // Dependency hierarchy: | 262 // Dependency hierarchy: |
| 262 // main(exe) -> dep(bundle) -> dep(shared_library) -> dep(source set) | 263 // main(exe) -> dep(bundle) -> dep(shared_library) -> dep(source set) |
| 263 // -> dep(bundle_data) -> dep(loadable_module) | 264 // -> dep(bundle_data) -> dep(loadable_module) |
| 264 // -> data(lm.data) | 265 // -> data(lm.data) |
| 265 // -> datadep(datadep) -> data(dd.data) | 266 // -> datadep(datadep) -> data(dd.data) |
| 266 | 267 |
| 267 const SourceDir source_dir("//"); | 268 const SourceDir source_dir("//"); |
| 268 const std::string& build_dir = setup.build_settings()->build_dir().value(); | 269 const std::string& build_dir = setup.build_settings()->build_dir().value(); |
| 269 | 270 |
| 270 Target loadable_module(setup.settings(), | 271 Target loadable_module(setup.settings(), Label(source_dir, "loadable_module"), |
| 271 Label(source_dir, "loadable_module")); | 272 {}); |
| 272 InitTargetWithType(setup, &loadable_module, Target::LOADABLE_MODULE); | 273 InitTargetWithType(setup, &loadable_module, Target::LOADABLE_MODULE); |
| 273 loadable_module.data().push_back("//lm.data"); | 274 loadable_module.data().push_back("//lm.data"); |
| 274 ASSERT_TRUE(loadable_module.OnResolved(&err)); | 275 ASSERT_TRUE(loadable_module.OnResolved(&err)); |
| 275 | 276 |
| 276 Target module_data(setup.settings(), Label(source_dir, "module_data")); | 277 Target module_data(setup.settings(), Label(source_dir, "module_data"), {}); |
| 277 InitTargetWithType(setup, &module_data, Target::BUNDLE_DATA); | 278 InitTargetWithType(setup, &module_data, Target::BUNDLE_DATA); |
| 278 module_data.private_deps().push_back(LabelTargetPair(&loadable_module)); | 279 module_data.private_deps().push_back(LabelTargetPair(&loadable_module)); |
| 279 module_data.bundle_data().file_rules().push_back(BundleFileRule( | 280 module_data.bundle_data().file_rules().push_back(BundleFileRule( |
| 280 nullptr, | 281 nullptr, |
| 281 std::vector<SourceFile>{SourceFile(build_dir + "loadable_module.so")}, | 282 std::vector<SourceFile>{SourceFile(build_dir + "loadable_module.so")}, |
| 282 SubstitutionPattern::MakeForTest("{{bundle_resources_dir}}"))); | 283 SubstitutionPattern::MakeForTest("{{bundle_resources_dir}}"))); |
| 283 ASSERT_TRUE(module_data.OnResolved(&err)); | 284 ASSERT_TRUE(module_data.OnResolved(&err)); |
| 284 | 285 |
| 285 Target source_set(setup.settings(), Label(source_dir, "sources")); | 286 Target source_set(setup.settings(), Label(source_dir, "sources"), {}); |
| 286 InitTargetWithType(setup, &source_set, Target::SOURCE_SET); | 287 InitTargetWithType(setup, &source_set, Target::SOURCE_SET); |
| 287 source_set.sources().push_back(SourceFile(source_dir.value() + "foo.cc")); | 288 source_set.sources().push_back(SourceFile(source_dir.value() + "foo.cc")); |
| 288 ASSERT_TRUE(source_set.OnResolved(&err)); | 289 ASSERT_TRUE(source_set.OnResolved(&err)); |
| 289 | 290 |
| 290 Target dylib(setup.settings(), Label(source_dir, "dylib")); | 291 Target dylib(setup.settings(), Label(source_dir, "dylib"), {}); |
| 291 dylib.set_output_prefix_override(true); | 292 dylib.set_output_prefix_override(true); |
| 292 dylib.set_output_extension(""); | 293 dylib.set_output_extension(""); |
| 293 dylib.set_output_name("Bundle"); | 294 dylib.set_output_name("Bundle"); |
| 294 InitTargetWithType(setup, &dylib, Target::SHARED_LIBRARY); | 295 InitTargetWithType(setup, &dylib, Target::SHARED_LIBRARY); |
| 295 dylib.private_deps().push_back(LabelTargetPair(&source_set)); | 296 dylib.private_deps().push_back(LabelTargetPair(&source_set)); |
| 296 ASSERT_TRUE(dylib.OnResolved(&err)); | 297 ASSERT_TRUE(dylib.OnResolved(&err)); |
| 297 | 298 |
| 298 Target dylib_data(setup.settings(), Label(source_dir, "dylib_data")); | 299 Target dylib_data(setup.settings(), Label(source_dir, "dylib_data"), {}); |
| 299 InitTargetWithType(setup, &dylib_data, Target::BUNDLE_DATA); | 300 InitTargetWithType(setup, &dylib_data, Target::BUNDLE_DATA); |
| 300 dylib_data.private_deps().push_back(LabelTargetPair(&dylib)); | 301 dylib_data.private_deps().push_back(LabelTargetPair(&dylib)); |
| 301 dylib_data.bundle_data().file_rules().push_back(BundleFileRule( | 302 dylib_data.bundle_data().file_rules().push_back(BundleFileRule( |
| 302 nullptr, std::vector<SourceFile>{SourceFile(build_dir + "dylib")}, | 303 nullptr, std::vector<SourceFile>{SourceFile(build_dir + "dylib")}, |
| 303 SubstitutionPattern::MakeForTest("{{bundle_executable_dir}}"))); | 304 SubstitutionPattern::MakeForTest("{{bundle_executable_dir}}"))); |
| 304 ASSERT_TRUE(dylib_data.OnResolved(&err)); | 305 ASSERT_TRUE(dylib_data.OnResolved(&err)); |
| 305 | 306 |
| 306 Target data_dep(setup.settings(), Label(source_dir, "datadep")); | 307 Target data_dep(setup.settings(), Label(source_dir, "datadep"), {}); |
| 307 InitTargetWithType(setup, &data_dep, Target::EXECUTABLE); | 308 InitTargetWithType(setup, &data_dep, Target::EXECUTABLE); |
| 308 data_dep.data().push_back("//dd.data"); | 309 data_dep.data().push_back("//dd.data"); |
| 309 ASSERT_TRUE(data_dep.OnResolved(&err)); | 310 ASSERT_TRUE(data_dep.OnResolved(&err)); |
| 310 | 311 |
| 311 Target bundle(setup.settings(), Label(source_dir, "bundle")); | 312 Target bundle(setup.settings(), Label(source_dir, "bundle"), {}); |
| 312 InitTargetWithType(setup, &bundle, Target::CREATE_BUNDLE); | 313 InitTargetWithType(setup, &bundle, Target::CREATE_BUNDLE); |
| 313 const std::string root_dir(build_dir + "Bundle.framework/Versions/A/"); | 314 const std::string root_dir(build_dir + "Bundle.framework/Versions/A/"); |
| 314 bundle.bundle_data().root_dir() = SourceDir(root_dir); | 315 bundle.bundle_data().root_dir() = SourceDir(root_dir); |
| 315 bundle.bundle_data().resources_dir() = SourceDir(root_dir + "Resources"); | 316 bundle.bundle_data().resources_dir() = SourceDir(root_dir + "Resources"); |
| 316 bundle.bundle_data().executable_dir() = SourceDir(root_dir + "MacOS"); | 317 bundle.bundle_data().executable_dir() = SourceDir(root_dir + "MacOS"); |
| 317 bundle.private_deps().push_back(LabelTargetPair(&dylib_data)); | 318 bundle.private_deps().push_back(LabelTargetPair(&dylib_data)); |
| 318 bundle.private_deps().push_back(LabelTargetPair(&module_data)); | 319 bundle.private_deps().push_back(LabelTargetPair(&module_data)); |
| 319 bundle.data_deps().push_back(LabelTargetPair(&data_dep)); | 320 bundle.data_deps().push_back(LabelTargetPair(&data_dep)); |
| 320 bundle.data().push_back("//b.data"); | 321 bundle.data().push_back("//b.data"); |
| 321 ASSERT_TRUE(bundle.OnResolved(&err)); | 322 ASSERT_TRUE(bundle.OnResolved(&err)); |
| 322 | 323 |
| 323 Target main(setup.settings(), Label(source_dir, "main")); | 324 Target main(setup.settings(), Label(source_dir, "main"), {}); |
| 324 InitTargetWithType(setup, &main, Target::EXECUTABLE); | 325 InitTargetWithType(setup, &main, Target::EXECUTABLE); |
| 325 main.data_deps().push_back(LabelTargetPair(&bundle)); | 326 main.data_deps().push_back(LabelTargetPair(&bundle)); |
| 326 ASSERT_TRUE(main.OnResolved(&err)); | 327 ASSERT_TRUE(main.OnResolved(&err)); |
| 327 | 328 |
| 328 std::vector<std::pair<OutputFile, const Target*>> result = | 329 std::vector<std::pair<OutputFile, const Target*>> result = |
| 329 ComputeRuntimeDeps(&main); | 330 ComputeRuntimeDeps(&main); |
| 330 | 331 |
| 331 // The result should have deps of main, datadep, final_in.dat | 332 // The result should have deps of main, datadep, final_in.dat |
| 332 ASSERT_EQ(5u, result.size()) << GetVectorDescription(result); | 333 ASSERT_EQ(5u, result.size()) << GetVectorDescription(result); |
| 333 | 334 |
| (...skipping 14 matching lines...) Expand all Loading... |
| 348 EXPECT_TRUE(base::ContainsValue(result, MakePair("../../b.data", &bundle))) | 349 EXPECT_TRUE(base::ContainsValue(result, MakePair("../../b.data", &bundle))) |
| 349 << GetVectorDescription(result); | 350 << GetVectorDescription(result); |
| 350 } | 351 } |
| 351 | 352 |
| 352 // Tests that a dependency duplicated in regular and data deps is processed | 353 // Tests that a dependency duplicated in regular and data deps is processed |
| 353 // as a data dep. | 354 // as a data dep. |
| 354 TEST(RuntimeDeps, Dupe) { | 355 TEST(RuntimeDeps, Dupe) { |
| 355 TestWithScope setup; | 356 TestWithScope setup; |
| 356 Err err; | 357 Err err; |
| 357 | 358 |
| 358 Target action(setup.settings(), Label(SourceDir("//"), "action")); | 359 Target action(setup.settings(), Label(SourceDir("//"), "action"), {}); |
| 359 InitTargetWithType(setup, &action, Target::ACTION); | 360 InitTargetWithType(setup, &action, Target::ACTION); |
| 360 action.action_values().outputs() = | 361 action.action_values().outputs() = |
| 361 SubstitutionList::MakeForTest("//action.output"); | 362 SubstitutionList::MakeForTest("//action.output"); |
| 362 ASSERT_TRUE(action.OnResolved(&err)); | 363 ASSERT_TRUE(action.OnResolved(&err)); |
| 363 | 364 |
| 364 Target target(setup.settings(), Label(SourceDir("//"), "foo")); | 365 Target target(setup.settings(), Label(SourceDir("//"), "foo"), {}); |
| 365 InitTargetWithType(setup, &target, Target::EXECUTABLE); | 366 InitTargetWithType(setup, &target, Target::EXECUTABLE); |
| 366 target.private_deps().push_back(LabelTargetPair(&action)); | 367 target.private_deps().push_back(LabelTargetPair(&action)); |
| 367 target.data_deps().push_back(LabelTargetPair(&action)); | 368 target.data_deps().push_back(LabelTargetPair(&action)); |
| 368 ASSERT_TRUE(target.OnResolved(&err)); | 369 ASSERT_TRUE(target.OnResolved(&err)); |
| 369 | 370 |
| 370 // The results should be the executable and the copy output. | 371 // The results should be the executable and the copy output. |
| 371 std::vector<std::pair<OutputFile, const Target*>> result = | 372 std::vector<std::pair<OutputFile, const Target*>> result = |
| 372 ComputeRuntimeDeps(&target); | 373 ComputeRuntimeDeps(&target); |
| 373 EXPECT_TRUE( | 374 EXPECT_TRUE( |
| 374 base::ContainsValue(result, MakePair("../../action.output", &action))) | 375 base::ContainsValue(result, MakePair("../../action.output", &action))) |
| (...skipping 20 matching lines...) Expand all Loading... |
| 395 err = Err(); | 396 err = Err(); |
| 396 EXPECT_TRUE(setup.ExecuteSnippet( | 397 EXPECT_TRUE(setup.ExecuteSnippet( |
| 397 "if (true) {\n" | 398 "if (true) {\n" |
| 398 " group(\"foo\") { write_runtime_deps = \"//out/Debug/foo.txt\" }\n" | 399 " group(\"foo\") { write_runtime_deps = \"//out/Debug/foo.txt\" }\n" |
| 399 "} else {\n" | 400 "} else {\n" |
| 400 " group(\"bar\") { write_runtime_deps = \"//out/Debug/bar.txt\" }\n" | 401 " group(\"bar\") { write_runtime_deps = \"//out/Debug/bar.txt\" }\n" |
| 401 "}", &err)); | 402 "}", &err)); |
| 402 EXPECT_EQ(1U, setup.items().size()); | 403 EXPECT_EQ(1U, setup.items().size()); |
| 403 EXPECT_EQ(1U, scheduler.GetWriteRuntimeDepsTargets().size()); | 404 EXPECT_EQ(1U, scheduler.GetWriteRuntimeDepsTargets().size()); |
| 404 } | 405 } |
| OLD | NEW |