Loading clang-tools-extra/include-cleaner/unittests/RecordTest.cpp +30 −0 Original line number Diff line number Diff line Loading @@ -558,5 +558,35 @@ TEST_F(PragmaIncludeTest, ExportInUnnamedBuffer) { PI.getExporters(llvm::cantFail(FM->getFileRef("foo.h")), *FM), testing::ElementsAre(llvm::cantFail(FM->getFileRef("exporter.h")))); } TEST_F(PragmaIncludeTest, OutlivesFMAndSM) { Inputs.Code = R"cpp( #include "public.h" )cpp"; Inputs.ExtraFiles["public.h"] = R"cpp( #include "private.h" #include "private2.h" // IWYU pragma: export )cpp"; Inputs.ExtraFiles["private.h"] = R"cpp( // IWYU pragma: private, include "public.h" )cpp"; Inputs.ExtraFiles["private2.h"] = R"cpp( // IWYU pragma: private )cpp"; build(); // Fills up PI, file/source manager used is destroyed afterwards. Inputs.MakeAction = nullptr; // Don't populate PI anymore. // Now this build gives us a new File&Source Manager. TestAST Processed = build(); auto &FM = Processed.fileManager(); auto PrivateFE = FM.getFile("private.h"); assert(PrivateFE); EXPECT_EQ(PI.getPublic(PrivateFE.get()), "\"public.h\""); auto Private2FE = FM.getFile("private2.h"); assert(Private2FE); EXPECT_THAT(PI.getExporters(Private2FE.get(), FM), testing::ElementsAre(llvm::cantFail(FM.getFileRef("public.h")))); } } // namespace } // namespace clang::include_cleaner Loading
clang-tools-extra/include-cleaner/unittests/RecordTest.cpp +30 −0 Original line number Diff line number Diff line Loading @@ -558,5 +558,35 @@ TEST_F(PragmaIncludeTest, ExportInUnnamedBuffer) { PI.getExporters(llvm::cantFail(FM->getFileRef("foo.h")), *FM), testing::ElementsAre(llvm::cantFail(FM->getFileRef("exporter.h")))); } TEST_F(PragmaIncludeTest, OutlivesFMAndSM) { Inputs.Code = R"cpp( #include "public.h" )cpp"; Inputs.ExtraFiles["public.h"] = R"cpp( #include "private.h" #include "private2.h" // IWYU pragma: export )cpp"; Inputs.ExtraFiles["private.h"] = R"cpp( // IWYU pragma: private, include "public.h" )cpp"; Inputs.ExtraFiles["private2.h"] = R"cpp( // IWYU pragma: private )cpp"; build(); // Fills up PI, file/source manager used is destroyed afterwards. Inputs.MakeAction = nullptr; // Don't populate PI anymore. // Now this build gives us a new File&Source Manager. TestAST Processed = build(); auto &FM = Processed.fileManager(); auto PrivateFE = FM.getFile("private.h"); assert(PrivateFE); EXPECT_EQ(PI.getPublic(PrivateFE.get()), "\"public.h\""); auto Private2FE = FM.getFile("private2.h"); assert(Private2FE); EXPECT_THAT(PI.getExporters(Private2FE.get(), FM), testing::ElementsAre(llvm::cantFail(FM.getFileRef("public.h")))); } } // namespace } // namespace clang::include_cleaner