Index: tools/gn/target_unittest.cc |
diff --git a/tools/gn/target_unittest.cc b/tools/gn/target_unittest.cc |
index e2e41a8708cd2e182a173f846bd50901ac4b0aba..622dd54aef70c2f2279864ee30ea663fed4dcf7d 100644 |
--- a/tools/gn/target_unittest.cc |
+++ b/tools/gn/target_unittest.cc |
@@ -183,7 +183,13 @@ TEST(Target, InheritCompleteStaticLib) { |
TestTarget a(setup, "//foo:a", Target::EXECUTABLE); |
TestTarget b(setup, "//foo:b", Target::STATIC_LIBRARY); |
b.set_complete_static_lib(true); |
+ |
+ const LibFile lib("foo"); |
+ const SourceDir lib_dir("/foo_dir/"); |
TestTarget c(setup, "//foo:c", Target::SOURCE_SET); |
+ c.config_values().libs().push_back(lib); |
+ c.config_values().lib_dirs().push_back(lib_dir); |
+ |
a.public_deps().push_back(LabelTargetPair(&b)); |
b.public_deps().push_back(LabelTargetPair(&c)); |
@@ -199,42 +205,74 @@ TEST(Target, InheritCompleteStaticLib) { |
// A should have B in its inherited libs, but not any others (the complete |
// static library will include the source set). |
std::vector<const Target*> a_inherited = a.inherited_libraries().GetOrdered(); |
- EXPECT_EQ(1u, a_inherited.size()); |
+ ASSERT_EQ(1u, a_inherited.size()); |
EXPECT_EQ(&b, a_inherited[0]); |
+ |
+ // A should inherit the libs and lib_dirs from the C. |
+ ASSERT_EQ(1u, a.all_libs().size()); |
+ EXPECT_EQ(lib, a.all_libs()[0]); |
+ ASSERT_EQ(1u, a.all_lib_dirs().size()); |
+ EXPECT_EQ(lib_dir, a.all_lib_dirs()[0]); |
} |
-TEST(Target, InheritCompleteStaticLibNoDirectStaticLibDeps) { |
+TEST(Target, InheritCompleteStaticLibStaticLibDeps) { |
TestWithScope setup; |
Err err; |
// Create a dependency chain: |
- // A (complete static lib) -> B (static lib) |
- TestTarget a(setup, "//foo:a", Target::STATIC_LIBRARY); |
- a.set_complete_static_lib(true); |
+ // A (executable) -> B (complete static lib) -> C (static lib) |
+ TestTarget a(setup, "//foo:a", Target::EXECUTABLE); |
TestTarget b(setup, "//foo:b", Target::STATIC_LIBRARY); |
- |
+ b.set_complete_static_lib(true); |
+ TestTarget c(setup, "//foo:c", Target::STATIC_LIBRARY); |
a.public_deps().push_back(LabelTargetPair(&b)); |
+ b.public_deps().push_back(LabelTargetPair(&c)); |
+ |
+ ASSERT_TRUE(c.OnResolved(&err)); |
ASSERT_TRUE(b.OnResolved(&err)); |
- ASSERT_FALSE(a.OnResolved(&err)); |
+ ASSERT_TRUE(a.OnResolved(&err)); |
+ |
+ // B should have C in its inherited libs. |
+ std::vector<const Target*> b_inherited = b.inherited_libraries().GetOrdered(); |
+ ASSERT_EQ(1u, b_inherited.size()); |
+ EXPECT_EQ(&c, b_inherited[0]); |
+ |
+ // A should have B in its inherited libs, but not any others (the complete |
+ // static library will include the static library). |
+ std::vector<const Target*> a_inherited = a.inherited_libraries().GetOrdered(); |
+ ASSERT_EQ(1u, a_inherited.size()); |
+ EXPECT_EQ(&b, a_inherited[0]); |
} |
-TEST(Target, InheritCompleteStaticLibNoIheritedStaticLibDeps) { |
+TEST(Target, InheritCompleteStaticLibInheritedCompleteStaticLibDeps) { |
TestWithScope setup; |
Err err; |
// Create a dependency chain: |
- // A (complete static lib) -> B (source set) -> C (static lib) |
- TestTarget a(setup, "//foo:a", Target::STATIC_LIBRARY); |
- a.set_complete_static_lib(true); |
- TestTarget b(setup, "//foo:b", Target::SOURCE_SET); |
+ // A (executable) -> B (complete static lib) -> C (complete static lib) |
+ TestTarget a(setup, "//foo:a", Target::EXECUTABLE); |
+ TestTarget b(setup, "//foo:b", Target::STATIC_LIBRARY); |
+ b.set_complete_static_lib(true); |
TestTarget c(setup, "//foo:c", Target::STATIC_LIBRARY); |
+ c.set_complete_static_lib(true); |
- a.public_deps().push_back(LabelTargetPair(&b)); |
- b.public_deps().push_back(LabelTargetPair(&c)); |
+ a.private_deps().push_back(LabelTargetPair(&b)); |
+ b.private_deps().push_back(LabelTargetPair(&c)); |
ASSERT_TRUE(c.OnResolved(&err)); |
ASSERT_TRUE(b.OnResolved(&err)); |
- ASSERT_FALSE(a.OnResolved(&err)); |
+ ASSERT_TRUE(a.OnResolved(&err)); |
+ |
+ // B should have C in its inherited libs. |
+ std::vector<const Target*> b_inherited = b.inherited_libraries().GetOrdered(); |
+ ASSERT_EQ(1u, b_inherited.size()); |
+ EXPECT_EQ(&c, b_inherited[0]); |
+ |
+ // A should have B and C in its inherited libs. |
+ std::vector<const Target*> a_inherited = a.inherited_libraries().GetOrdered(); |
+ ASSERT_EQ(2u, a_inherited.size()); |
+ EXPECT_EQ(&b, a_inherited[0]); |
+ EXPECT_EQ(&c, a_inherited[1]); |
} |
TEST(Target, NoActionDepPropgation) { |