Index: tools/gn/header_checker_unittest.cc |
diff --git a/tools/gn/header_checker_unittest.cc b/tools/gn/header_checker_unittest.cc |
index 90e4165529c8db9be36a9b240ce351d72a1718b8..05c5f647c5cd4b717a381ef01a405d5f0c04737e 100644 |
--- a/tools/gn/header_checker_unittest.cc |
+++ b/tools/gn/header_checker_unittest.cc |
@@ -15,12 +15,17 @@ namespace { |
class HeaderCheckerTest : public testing::Test { |
public: |
HeaderCheckerTest() |
- : a_(setup_.settings(), Label(SourceDir("//"), "a")), |
- b_(setup_.settings(), Label(SourceDir("//"), "a")), |
- c_(setup_.settings(), Label(SourceDir("//"), "c")) { |
+ : a_(setup_.settings(), Label(SourceDir("//a/"), "a")), |
+ b_(setup_.settings(), Label(SourceDir("//b/"), "a")), |
+ c_(setup_.settings(), Label(SourceDir("//c/"), "c")) { |
a_.deps().push_back(LabelTargetPair(&b_)); |
b_.deps().push_back(LabelTargetPair(&c_)); |
+ // Start with all public visibility. |
+ a_.visibility().SetPublic(); |
+ b_.visibility().SetPublic(); |
+ c_.visibility().SetPublic(); |
+ |
targets_.push_back(&a_); |
targets_.push_back(&b_); |
targets_.push_back(&c_); |
@@ -53,6 +58,10 @@ TEST_F(HeaderCheckerTest, IsDependencyOf) { |
} |
TEST_F(HeaderCheckerTest, CheckInclude) { |
+ InputFile input_file(SourceFile("//some_file.cc")); |
+ input_file.SetContents(std::string()); |
+ LocationRange range; // Dummy value. |
+ |
// Add a disconnected target d with a header to check that you have to have |
// to depend on a target listing a header. |
Target d(setup_.settings(), Label(SourceDir("//"), "d")); |
@@ -78,25 +87,31 @@ TEST_F(HeaderCheckerTest, CheckInclude) { |
// A file in target A can't include a header from D because A has no |
// dependency on D. |
Err err; |
- SourceFile source_file("//some_file.cc"); |
- EXPECT_FALSE(checker->CheckInclude(&a_, source_file, d_header, &err)); |
+ EXPECT_FALSE(checker->CheckInclude(&a_, input_file, d_header, range, &err)); |
EXPECT_TRUE(err.has_error()); |
// A can include the public header in B. |
err = Err(); |
- EXPECT_TRUE(checker->CheckInclude(&a_, source_file, b_public, &err)); |
+ EXPECT_TRUE(checker->CheckInclude(&a_, input_file, b_public, range, &err)); |
EXPECT_FALSE(err.has_error()); |
// Check A depending on the public and private headers in C. |
err = Err(); |
- EXPECT_TRUE(checker->CheckInclude(&a_, source_file, c_public, &err)); |
+ EXPECT_TRUE(checker->CheckInclude(&a_, input_file, c_public, range, &err)); |
EXPECT_FALSE(err.has_error()); |
- EXPECT_FALSE(checker->CheckInclude(&a_, source_file, c_private, &err)); |
+ EXPECT_FALSE(checker->CheckInclude(&a_, input_file, c_private, range, &err)); |
EXPECT_TRUE(err.has_error()); |
// A can depend on a random file unknown to the build. |
err = Err(); |
- EXPECT_TRUE(checker->CheckInclude(&a_, source_file, SourceFile("//random.h"), |
- &err)); |
+ EXPECT_TRUE(checker->CheckInclude(&a_, input_file, SourceFile("//random.h"), |
+ range, &err)); |
EXPECT_FALSE(err.has_error()); |
+ |
+ // If C is not visible from A, A can't include public headers even if there |
+ // is a dependency path. |
+ c_.visibility().SetPrivate(c_.label().dir()); |
+ err = Err(); |
+ EXPECT_FALSE(checker->CheckInclude(&a_, input_file, c_public, range, &err)); |
+ EXPECT_TRUE(err.has_error()); |
} |