Index: tools/gn/target_unittest.cc |
diff --git a/tools/gn/target_unittest.cc b/tools/gn/target_unittest.cc |
index d1c7ab9d1503ac5e6dcba6ea6e6ec261f52422ab..2e2e63e3a02fc46e7c50f68239ad20d8cd0302b7 100644 |
--- a/tools/gn/target_unittest.cc |
+++ b/tools/gn/target_unittest.cc |
@@ -462,6 +462,71 @@ TEST(Target, PublicConfigs) { |
ASSERT_TRUE(forward.OnResolved(&err)); |
} |
+// Tests that configs are ordered properly between local and pulled ones. |
+TEST(Target, ConfigOrdering) { |
+ TestWithScope setup; |
+ Err err; |
+ |
+ // Make Dep1. It has all_dependent_configs and public_configs. |
+ TestTarget dep1(setup, "//:dep1", Target::SOURCE_SET); |
+ Label dep1_all_config_label(SourceDir("//"), "dep1_all_config"); |
+ Config dep1_all_config(setup.settings(), dep1_all_config_label); |
+ ASSERT_TRUE(dep1_all_config.OnResolved(&err)); |
+ dep1.all_dependent_configs().push_back(LabelConfigPair(&dep1_all_config)); |
+ |
+ Label dep1_public_config_label(SourceDir("//"), "dep1_public_config"); |
+ Config dep1_public_config(setup.settings(), dep1_public_config_label); |
+ ASSERT_TRUE(dep1_public_config.OnResolved(&err)); |
+ dep1.public_configs().push_back(LabelConfigPair(&dep1_public_config)); |
+ ASSERT_TRUE(dep1.OnResolved(&err)); |
+ |
+ // Make Dep2 with the same structure. |
+ TestTarget dep2(setup, "//:dep2", Target::SOURCE_SET); |
+ Label dep2_all_config_label(SourceDir("//"), "dep2_all_config"); |
+ Config dep2_all_config(setup.settings(), dep2_all_config_label); |
+ ASSERT_TRUE(dep2_all_config.OnResolved(&err)); |
+ dep2.all_dependent_configs().push_back(LabelConfigPair(&dep2_all_config)); |
+ |
+ Label dep2_public_config_label(SourceDir("//"), "dep2_public_config"); |
+ Config dep2_public_config(setup.settings(), dep2_public_config_label); |
+ ASSERT_TRUE(dep2_public_config.OnResolved(&err)); |
+ dep2.public_configs().push_back(LabelConfigPair(&dep2_public_config)); |
+ ASSERT_TRUE(dep2.OnResolved(&err)); |
+ |
+ // This target depends on both previous targets. |
+ TestTarget target(setup, "//:foo", Target::SOURCE_SET); |
+ target.private_deps().push_back(LabelTargetPair(&dep1)); |
+ target.private_deps().push_back(LabelTargetPair(&dep2)); |
+ |
+ // It also has a private and public config. |
+ Label public_config_label(SourceDir("//"), "public"); |
+ Config public_config(setup.settings(), public_config_label); |
+ ASSERT_TRUE(public_config.OnResolved(&err)); |
+ target.public_configs().push_back(LabelConfigPair(&public_config)); |
+ |
+ Label private_config_label(SourceDir("//"), "private"); |
+ Config private_config(setup.settings(), private_config_label); |
+ ASSERT_TRUE(private_config.OnResolved(&err)); |
+ target.configs().push_back(LabelConfigPair(&private_config)); |
+ |
+ // Resolve to get the computed list of configs applying. |
+ ASSERT_TRUE(target.OnResolved(&err)); |
+ const auto& computed = target.configs(); |
+ |
+ // Order should be: |
+ // 1. local private |
+ // 2. local public |
+ // 3. inherited all dependent |
+ // 4. inherited public |
+ ASSERT_EQ(6u, computed.size()); |
+ EXPECT_EQ(private_config_label, computed[0].label); |
+ EXPECT_EQ(public_config_label, computed[1].label); |
+ EXPECT_EQ(dep1_all_config_label, computed[2].label); |
+ EXPECT_EQ(dep2_all_config_label, computed[3].label); |
+ EXPECT_EQ(dep1_public_config_label, computed[4].label); |
+ EXPECT_EQ(dep2_public_config_label, computed[5].label); |
+} |
+ |
// Tests that different link/depend outputs work for solink tools. |
TEST(Target, LinkAndDepOutputs) { |
TestWithScope setup; |