[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:
Ilya Biryukov 2018-07-09 09:10:22 +00:00
parent 5e810a878d
commit 3703551135
1 changed files with 36 additions and 0 deletions

View File

@ -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