forked from OSchip/llvm-project
[clangd] Added a test for preambles and -isystem
Summary: Checks that preambles are properly invalidated when headers from -isystem paths change. Reviewers: sammccall, ioeric Reviewed By: sammccall Subscribers: MaskRay, jkorous, cfe-commits Differential Revision: https://reviews.llvm.org/D48947 llvm-svn: 336530
This commit is contained in:
parent
5e810a878d
commit
3703551135
|
@ -35,6 +35,7 @@ namespace clangd {
|
|||
|
||||
using ::testing::ElementsAre;
|
||||
using ::testing::Eq;
|
||||
using ::testing::Field;
|
||||
using ::testing::Gt;
|
||||
using ::testing::IsEmpty;
|
||||
using ::testing::Pair;
|
||||
|
@ -927,6 +928,41 @@ void f() {}
|
|||
EXPECT_EQ(Expected, *Changed);
|
||||
}
|
||||
|
||||
TEST_F(ClangdVFSTest, ChangedHeaderFromISystem) {
|
||||
MockFSProvider FS;
|
||||
ErrorCheckingDiagConsumer DiagConsumer;
|
||||
MockCompilationDatabase CDB;
|
||||
ClangdServer Server(CDB, FS, DiagConsumer, ClangdServer::optsForTest());
|
||||
|
||||
auto SourcePath = testPath("source/foo.cpp");
|
||||
auto HeaderPath = testPath("headers/foo.h");
|
||||
FS.Files[HeaderPath] = "struct X { int bar; };";
|
||||
Annotations Code(R"cpp(
|
||||
#include "foo.h"
|
||||
|
||||
int main() {
|
||||
X().ba^
|
||||
})cpp");
|
||||
CDB.ExtraClangFlags.push_back("-xc++");
|
||||
CDB.ExtraClangFlags.push_back("-isystem" + testPath("headers"));
|
||||
|
||||
runAddDocument(Server, SourcePath, Code.code());
|
||||
auto Completions = cantFail(runCodeComplete(Server, SourcePath, Code.point(),
|
||||
clangd::CodeCompleteOptions()))
|
||||
.Completions;
|
||||
EXPECT_THAT(Completions, ElementsAre(Field(&CodeCompletion::Name, "bar")));
|
||||
// Update the header and rerun addDocument to make sure we get the updated
|
||||
// files.
|
||||
FS.Files[HeaderPath] = "struct X { int bar; int baz; };";
|
||||
runAddDocument(Server, SourcePath, Code.code());
|
||||
Completions = cantFail(runCodeComplete(Server, SourcePath, Code.point(),
|
||||
clangd::CodeCompleteOptions()))
|
||||
.Completions;
|
||||
// We want to make sure we see the updated version.
|
||||
EXPECT_THAT(Completions, ElementsAre(Field(&CodeCompletion::Name, "bar"),
|
||||
Field(&CodeCompletion::Name, "baz")));
|
||||
}
|
||||
|
||||
} // namespace
|
||||
} // namespace clangd
|
||||
} // namespace clang
|
||||
|
|
Loading…
Reference in New Issue