| 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 250 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  261 // Tests that the search for dependencies terminates at a bundle target, |  261 // Tests that the search for dependencies terminates at a bundle target, | 
|  262 // ignoring any shared libraries or loadable modules that get copied into the |  262 // ignoring any shared libraries or loadable modules that get copied into the | 
|  263 // bundle. |  263 // bundle. | 
|  264 TEST(RuntimeDeps, CreateBundle) { |  264 TEST(RuntimeDeps, CreateBundle) { | 
|  265   TestWithScope setup; |  265   TestWithScope setup; | 
|  266   Err err; |  266   Err err; | 
|  267  |  267  | 
|  268   // Dependency hierarchy: |  268   // Dependency hierarchy: | 
|  269   // main(exe) -> dep(bundle) -> dep(shared_library) -> dep(source set) |  269   // main(exe) -> dep(bundle) -> dep(shared_library) -> dep(source set) | 
|  270   //                          -> dep(bundle_data) -> dep(loadable_module) |  270   //                          -> dep(bundle_data) -> dep(loadable_module) | 
 |  271   //                                                      -> data(lm.data) | 
 |  272   //                          -> datadep(datadep) -> data(dd.data) | 
|  271  |  273  | 
|  272   const SourceDir source_dir("//"); |  274   const SourceDir source_dir("//"); | 
|  273   const std::string& build_dir = setup.build_settings()->build_dir().value(); |  275   const std::string& build_dir = setup.build_settings()->build_dir().value(); | 
|  274  |  276  | 
|  275   Target loadable_module(setup.settings(), |  277   Target loadable_module(setup.settings(), | 
|  276                          Label(source_dir, "loadable_module")); |  278                          Label(source_dir, "loadable_module")); | 
|  277   InitTargetWithType(setup, &loadable_module, Target::LOADABLE_MODULE); |  279   InitTargetWithType(setup, &loadable_module, Target::LOADABLE_MODULE); | 
 |  280   loadable_module.data().push_back("//lm.data"); | 
|  278   ASSERT_TRUE(loadable_module.OnResolved(&err)); |  281   ASSERT_TRUE(loadable_module.OnResolved(&err)); | 
|  279  |  282  | 
|  280   Target module_data(setup.settings(), Label(source_dir, "module_data")); |  283   Target module_data(setup.settings(), Label(source_dir, "module_data")); | 
|  281   InitTargetWithType(setup, &module_data, Target::BUNDLE_DATA); |  284   InitTargetWithType(setup, &module_data, Target::BUNDLE_DATA); | 
|  282   module_data.private_deps().push_back(LabelTargetPair(&loadable_module)); |  285   module_data.private_deps().push_back(LabelTargetPair(&loadable_module)); | 
|  283   module_data.bundle_data().file_rules().push_back(BundleFileRule( |  286   module_data.bundle_data().file_rules().push_back(BundleFileRule( | 
|  284       std::vector<SourceFile>{SourceFile(build_dir + "loadable_module.so")}, |  287       std::vector<SourceFile>{SourceFile(build_dir + "loadable_module.so")}, | 
|  285       SubstitutionPattern::MakeForTest("{{bundle_resources_dir}}"))); |  288       SubstitutionPattern::MakeForTest("{{bundle_resources_dir}}"))); | 
|  286   ASSERT_TRUE(module_data.OnResolved(&err)); |  289   ASSERT_TRUE(module_data.OnResolved(&err)); | 
|  287  |  290  | 
| (...skipping 11 matching lines...) Expand all  Loading... | 
|  299   ASSERT_TRUE(dylib.OnResolved(&err)); |  302   ASSERT_TRUE(dylib.OnResolved(&err)); | 
|  300  |  303  | 
|  301   Target dylib_data(setup.settings(), Label(source_dir, "dylib_data")); |  304   Target dylib_data(setup.settings(), Label(source_dir, "dylib_data")); | 
|  302   InitTargetWithType(setup, &dylib_data, Target::BUNDLE_DATA); |  305   InitTargetWithType(setup, &dylib_data, Target::BUNDLE_DATA); | 
|  303   dylib_data.private_deps().push_back(LabelTargetPair(&dylib)); |  306   dylib_data.private_deps().push_back(LabelTargetPair(&dylib)); | 
|  304   dylib_data.bundle_data().file_rules().push_back(BundleFileRule( |  307   dylib_data.bundle_data().file_rules().push_back(BundleFileRule( | 
|  305       std::vector<SourceFile>{SourceFile(build_dir + "dylib")}, |  308       std::vector<SourceFile>{SourceFile(build_dir + "dylib")}, | 
|  306       SubstitutionPattern::MakeForTest("{{bundle_executable_dir}}"))); |  309       SubstitutionPattern::MakeForTest("{{bundle_executable_dir}}"))); | 
|  307   ASSERT_TRUE(dylib_data.OnResolved(&err)); |  310   ASSERT_TRUE(dylib_data.OnResolved(&err)); | 
|  308  |  311  | 
 |  312   Target data_dep(setup.settings(), Label(source_dir, "datadep")); | 
 |  313   InitTargetWithType(setup, &data_dep, Target::EXECUTABLE); | 
 |  314   data_dep.data().push_back("//dd.data"); | 
 |  315   ASSERT_TRUE(data_dep.OnResolved(&err)); | 
 |  316  | 
|  309   Target bundle(setup.settings(), Label(source_dir, "bundle")); |  317   Target bundle(setup.settings(), Label(source_dir, "bundle")); | 
|  310   InitTargetWithType(setup, &bundle, Target::CREATE_BUNDLE); |  318   InitTargetWithType(setup, &bundle, Target::CREATE_BUNDLE); | 
|  311   const std::string root_dir(build_dir + "Bundle.framework/Versions/A/"); |  319   const std::string root_dir(build_dir + "Bundle.framework/Versions/A/"); | 
|  312   bundle.bundle_data().root_dir() = SourceDir(root_dir); |  320   bundle.bundle_data().root_dir() = SourceDir(root_dir); | 
|  313   bundle.bundle_data().resources_dir() = SourceDir(root_dir + "Resources"); |  321   bundle.bundle_data().resources_dir() = SourceDir(root_dir + "Resources"); | 
|  314   bundle.bundle_data().executable_dir() = SourceDir(root_dir + "MacOS"); |  322   bundle.bundle_data().executable_dir() = SourceDir(root_dir + "MacOS"); | 
|  315   bundle.private_deps().push_back(LabelTargetPair(&dylib_data)); |  323   bundle.private_deps().push_back(LabelTargetPair(&dylib_data)); | 
|  316   bundle.private_deps().push_back(LabelTargetPair(&module_data)); |  324   bundle.private_deps().push_back(LabelTargetPair(&module_data)); | 
 |  325   bundle.data_deps().push_back(LabelTargetPair(&data_dep)); | 
 |  326   bundle.data().push_back("//b.data"); | 
|  317   ASSERT_TRUE(bundle.OnResolved(&err)); |  327   ASSERT_TRUE(bundle.OnResolved(&err)); | 
|  318  |  328  | 
|  319   Target main(setup.settings(), Label(source_dir, "main")); |  329   Target main(setup.settings(), Label(source_dir, "main")); | 
|  320   InitTargetWithType(setup, &main, Target::EXECUTABLE); |  330   InitTargetWithType(setup, &main, Target::EXECUTABLE); | 
|  321   main.data_deps().push_back(LabelTargetPair(&bundle)); |  331   main.data_deps().push_back(LabelTargetPair(&bundle)); | 
|  322   ASSERT_TRUE(main.OnResolved(&err)); |  332   ASSERT_TRUE(main.OnResolved(&err)); | 
|  323  |  333  | 
|  324   std::vector<std::pair<OutputFile, const Target*>> result = |  334   std::vector<std::pair<OutputFile, const Target*>> result = | 
|  325       ComputeRuntimeDeps(&main); |  335       ComputeRuntimeDeps(&main); | 
|  326  |  336  | 
|  327   // The result should have deps of main, datadep, final_in.dat |  337   // The result should have deps of main, datadep, final_in.dat | 
|  328   ASSERT_EQ(2u, result.size()) << GetVectorDescription(result); |  338   ASSERT_EQ(5u, result.size()) << GetVectorDescription(result); | 
|  329  |  339  | 
|  330   // The first one should always be the main exe. |  340   // The first one should always be the main exe. | 
|  331   EXPECT_EQ(MakePair("./main", &main), result[0]); |  341   EXPECT_EQ(MakePair("./main", &main), result[0]); | 
|  332  |  342  | 
|  333   // The second one should be the framework bundle, not its included |  343   // The rest of the ordering is undefined. | 
|  334   // loadable_module or its intermediate shared_library. |  344  | 
|  335   EXPECT_EQ(MakePair("Bundle.framework/", &bundle), result[1]); |  345   // The framework bundle's internal dependencies should not be incldued. | 
 |  346   EXPECT_TRUE(std::find(result.begin(), result.end(), | 
 |  347                         MakePair("Bundle.framework/", &bundle)) != | 
 |  348               result.end()) << GetVectorDescription(result); | 
 |  349   // But direct data and data dependencies should be. | 
 |  350   EXPECT_TRUE(std::find(result.begin(), result.end(), | 
 |  351                         MakePair("./datadep", &data_dep)) != | 
 |  352               result.end()) << GetVectorDescription(result); | 
 |  353   EXPECT_TRUE(std::find(result.begin(), result.end(), | 
 |  354                         MakePair("../../dd.data", &data_dep)) != | 
 |  355               result.end()) << GetVectorDescription(result); | 
 |  356   EXPECT_TRUE(std::find(result.begin(), result.end(), | 
 |  357                         MakePair("../../b.data", &bundle)) != | 
 |  358               result.end()) << GetVectorDescription(result); | 
|  336 } |  359 } | 
|  337  |  360  | 
|  338 // Tests that a dependency duplicated in regular and data deps is processed |  361 // Tests that a dependency duplicated in regular and data deps is processed | 
|  339 // as a data dep. |  362 // as a data dep. | 
|  340 TEST(RuntimeDeps, Dupe) { |  363 TEST(RuntimeDeps, Dupe) { | 
|  341   TestWithScope setup; |  364   TestWithScope setup; | 
|  342   Err err; |  365   Err err; | 
|  343  |  366  | 
|  344   Target action(setup.settings(), Label(SourceDir("//"), "action")); |  367   Target action(setup.settings(), Label(SourceDir("//"), "action")); | 
|  345   InitTargetWithType(setup, &action, Target::ACTION); |  368   InitTargetWithType(setup, &action, Target::ACTION); | 
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  381   err = Err(); |  404   err = Err(); | 
|  382   EXPECT_TRUE(setup.ExecuteSnippet( |  405   EXPECT_TRUE(setup.ExecuteSnippet( | 
|  383       "if (true) {\n" |  406       "if (true) {\n" | 
|  384       "  group(\"foo\") { write_runtime_deps = \"//out/Debug/foo.txt\" }\n" |  407       "  group(\"foo\") { write_runtime_deps = \"//out/Debug/foo.txt\" }\n" | 
|  385       "} else {\n" |  408       "} else {\n" | 
|  386       "  group(\"bar\") { write_runtime_deps = \"//out/Debug/bar.txt\" }\n" |  409       "  group(\"bar\") { write_runtime_deps = \"//out/Debug/bar.txt\" }\n" | 
|  387       "}", &err)); |  410       "}", &err)); | 
|  388   EXPECT_EQ(1U, setup.items().size()); |  411   EXPECT_EQ(1U, setup.items().size()); | 
|  389   EXPECT_EQ(1U, scheduler.GetWriteRuntimeDepsTargets().size()); |  412   EXPECT_EQ(1U, scheduler.GetWriteRuntimeDepsTargets().size()); | 
|  390 } |  413 } | 
| OLD | NEW |