summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/unittests/clangd
diff options
context:
space:
mode:
authorEric Liu <ioeric@google.com>2018-02-06 16:10:35 +0000
committerEric Liu <ioeric@google.com>2018-02-06 16:10:35 +0000
commit7f247659126e28d1376588ba5cf96d77b37910e4 (patch)
tree01f2b8dbcab3554d5e845fbef3fd1ca8df8ecedc /clang-tools-extra/unittests/clangd
parente11c64162ce8653665fc6baca9f355df8db0bd47 (diff)
downloadbcm5719-llvm-7f247659126e28d1376588ba5cf96d77b37910e4.tar.gz
bcm5719-llvm-7f247659126e28d1376588ba5cf96d77b37910e4.zip
[clangd] Use URIs in index symbols.
Reviewers: hokein, sammccall Reviewed By: sammccall Subscribers: klimek, ilya-biryukov, jkorous-apple, cfe-commits Differential Revision: https://reviews.llvm.org/D42915 llvm-svn: 324358
Diffstat (limited to 'clang-tools-extra/unittests/clangd')
-rw-r--r--clang-tools-extra/unittests/clangd/IndexTests.cpp6
-rw-r--r--clang-tools-extra/unittests/clangd/SymbolCollectorTests.cpp115
2 files changed, 82 insertions, 39 deletions
diff --git a/clang-tools-extra/unittests/clangd/IndexTests.cpp b/clang-tools-extra/unittests/clangd/IndexTests.cpp
index 73406a48e4f..65904495f21 100644
--- a/clang-tools-extra/unittests/clangd/IndexTests.cpp
+++ b/clang-tools-extra/unittests/clangd/IndexTests.cpp
@@ -226,8 +226,8 @@ TEST(MergeTest, Merge) {
Symbol L, R;
L.ID = R.ID = SymbolID("hello");
L.Name = R.Name = "Foo"; // same in both
- L.CanonicalDeclaration.FilePath = "left.h"; // differs
- R.CanonicalDeclaration.FilePath = "right.h";
+ L.CanonicalDeclaration.FileURI = "file:///left.h"; // differs
+ R.CanonicalDeclaration.FileURI = "file:///right.h";
L.CompletionPlainInsertText = "f00"; // present in left only
R.CompletionSnippetInsertText = "f0{$1:0}"; // present in right only
Symbol::Details DetL, DetR;
@@ -240,7 +240,7 @@ TEST(MergeTest, Merge) {
Symbol::Details Scratch;
Symbol M = mergeSymbol(L, R, &Scratch);
EXPECT_EQ(M.Name, "Foo");
- EXPECT_EQ(M.CanonicalDeclaration.FilePath, "left.h");
+ EXPECT_EQ(M.CanonicalDeclaration.FileURI, "file:///left.h");
EXPECT_EQ(M.CompletionPlainInsertText, "f00");
EXPECT_EQ(M.CompletionSnippetInsertText, "f0{$1:0}");
ASSERT_TRUE(M.Detail);
diff --git a/clang-tools-extra/unittests/clangd/SymbolCollectorTests.cpp b/clang-tools-extra/unittests/clangd/SymbolCollectorTests.cpp
index 6340686cb5d..67e5654e849 100644
--- a/clang-tools-extra/unittests/clangd/SymbolCollectorTests.cpp
+++ b/clang-tools-extra/unittests/clangd/SymbolCollectorTests.cpp
@@ -46,7 +46,7 @@ MATCHER_P(Snippet, S, "") {
return arg.CompletionSnippetInsertText == S;
}
MATCHER_P(QName, Name, "") { return (arg.Scope + arg.Name).str() == Name; }
-MATCHER_P(CPath, P, "") { return arg.CanonicalDeclaration.FilePath == P; }
+MATCHER_P(DeclURI, P, "") { return arg.CanonicalDeclaration.FileURI == P; }
MATCHER_P(LocationOffsets, Offsets, "") {
// Offset range in SymbolLocation is [start, end] while in Clangd is [start,
// end).
@@ -58,8 +58,6 @@ namespace clang {
namespace clangd {
namespace {
-const char TestHeaderName[] = "symbols.h";
-const char TestFileName[] = "symbol.cc";
class SymbolIndexActionFactory : public tooling::FrontendActionFactory {
public:
SymbolIndexActionFactory(SymbolCollector::Options COpts)
@@ -82,6 +80,13 @@ public:
class SymbolCollectorTest : public ::testing::Test {
public:
+ SymbolCollectorTest()
+ : TestHeaderName(getVirtualTestFilePath("symbol.h").str()),
+ TestFileName(getVirtualTestFilePath("symbol.cc").str()) {
+ TestHeaderURI = URI::createFile(TestHeaderName).toString();
+ TestFileURI = URI::createFile(TestFileName).toString();
+ }
+
bool runSymbolCollector(StringRef HeaderCode, StringRef MainCode,
const std::vector<std::string> &ExtraArgs = {}) {
llvm::IntrusiveRefCntPtr<vfs::InMemoryFileSystem> InMemoryFileSystem(
@@ -104,7 +109,9 @@ public:
std::string Content = MainCode;
if (!HeaderCode.empty())
- Content = "#include\"" + std::string(TestHeaderName) + "\"\n" + Content;
+ Content = (llvm::Twine("#include\"") +
+ llvm::sys::path::filename(TestHeaderName) + "\"\n" + Content)
+ .str();
InMemoryFileSystem->addFile(TestFileName, 0,
llvm::MemoryBuffer::getMemBuffer(Content));
Invocation.run();
@@ -113,6 +120,10 @@ public:
}
protected:
+ std::string TestHeaderName;
+ std::string TestHeaderURI;
+ std::string TestFileName;
+ std::string TestFileURI;
SymbolSlab Symbols;
SymbolCollector::Options CollectorOpts;
};
@@ -169,16 +180,49 @@ TEST_F(SymbolCollectorTest, SymbolRelativeNoFallback) {
CollectorOpts.IndexMainFiles = false;
runSymbolCollector("class Foo {};", /*Main=*/"");
EXPECT_THAT(Symbols,
- UnorderedElementsAre(AllOf(QName("Foo"), CPath("symbols.h"))));
+ UnorderedElementsAre(AllOf(QName("Foo"), DeclURI(TestHeaderURI))));
}
TEST_F(SymbolCollectorTest, SymbolRelativeWithFallback) {
CollectorOpts.IndexMainFiles = false;
+ TestHeaderName = "x.h";
+ TestFileName = "x.cpp";
+ TestHeaderURI =
+ URI::createFile(getVirtualTestFilePath(TestHeaderName)).toString();
CollectorOpts.FallbackDir = getVirtualTestRoot();
runSymbolCollector("class Foo {};", /*Main=*/"");
EXPECT_THAT(Symbols,
- UnorderedElementsAre(AllOf(
- QName("Foo"), CPath(getVirtualTestFilePath("symbols.h")))));
+ UnorderedElementsAre(AllOf(QName("Foo"), DeclURI(TestHeaderURI))));
+}
+
+#ifndef LLVM_ON_WIN32
+TEST_F(SymbolCollectorTest, CustomURIScheme) {
+ CollectorOpts.IndexMainFiles = false;
+ // Use test URI scheme from URITests.cpp
+ CollectorOpts.URISchemes.insert(CollectorOpts.URISchemes.begin(), "unittest");
+ TestHeaderName = getVirtualTestFilePath("test-root/x.h").str();
+ TestFileName = getVirtualTestFilePath("test-root/x.cpp").str();
+ runSymbolCollector("class Foo {};", /*Main=*/"");
+ EXPECT_THAT(Symbols,
+ UnorderedElementsAre(AllOf(QName("Foo"), DeclURI("unittest:x.h"))));
+}
+#endif
+
+TEST_F(SymbolCollectorTest, InvalidURIScheme) {
+ CollectorOpts.IndexMainFiles = false;
+ // Use test URI scheme from URITests.cpp
+ CollectorOpts.URISchemes = {"invalid"};
+ runSymbolCollector("class Foo {};", /*Main=*/"");
+ EXPECT_THAT(Symbols, UnorderedElementsAre(AllOf(QName("Foo"), DeclURI(""))));
+}
+
+TEST_F(SymbolCollectorTest, FallbackToFileURI) {
+ CollectorOpts.IndexMainFiles = false;
+ // Use test URI scheme from URITests.cpp
+ CollectorOpts.URISchemes = {"invalid", "file"};
+ runSymbolCollector("class Foo {};", /*Main=*/"");
+ EXPECT_THAT(Symbols, UnorderedElementsAre(
+ AllOf(QName("Foo"), DeclURI(TestHeaderURI))));
}
TEST_F(SymbolCollectorTest, IncludeEnums) {
@@ -233,14 +277,14 @@ TEST_F(SymbolCollectorTest, SymbolFormedFromMacro) {
)");
runSymbolCollector(Header.code(), /*Main=*/"");
- EXPECT_THAT(Symbols,
- UnorderedElementsAre(
- AllOf(QName("abc_Test"),
- LocationOffsets(Header.offsetRange("expansion")),
- CPath(TestHeaderName)),
- AllOf(QName("Test"),
- LocationOffsets(Header.offsetRange("spelling")),
- CPath(TestHeaderName))));
+ EXPECT_THAT(
+ Symbols,
+ UnorderedElementsAre(
+ AllOf(QName("abc_Test"),
+ LocationOffsets(Header.offsetRange("expansion")),
+ DeclURI(TestHeaderURI)),
+ AllOf(QName("Test"), LocationOffsets(Header.offsetRange("spelling")),
+ DeclURI(TestHeaderURI))));
}
TEST_F(SymbolCollectorTest, SymbolFormedFromMacroInMainFile) {
@@ -258,14 +302,13 @@ TEST_F(SymbolCollectorTest, SymbolFormedFromMacroInMainFile) {
FF2();
)");
runSymbolCollector(/*Header=*/"", Main.code());
- EXPECT_THAT(Symbols,
- UnorderedElementsAre(
- AllOf(QName("abc_Test"),
- LocationOffsets(Main.offsetRange("expansion")),
- CPath(TestFileName)),
- AllOf(QName("Test"),
- LocationOffsets(Main.offsetRange("spelling")),
- CPath(TestFileName))));
+ EXPECT_THAT(Symbols, UnorderedElementsAre(
+ AllOf(QName("abc_Test"),
+ LocationOffsets(Main.offsetRange("expansion")),
+ DeclURI(TestFileURI)),
+ AllOf(QName("Test"),
+ LocationOffsets(Main.offsetRange("spelling")),
+ DeclURI(TestFileURI))));
}
TEST_F(SymbolCollectorTest, SymbolFormedByCLI) {
@@ -279,11 +322,10 @@ TEST_F(SymbolCollectorTest, SymbolFormedByCLI) {
runSymbolCollector(Header.code(), /*Main=*/"",
/*ExtraArgs=*/{"-DNAME=name"});
- EXPECT_THAT(Symbols,
- UnorderedElementsAre(
- AllOf(QName("name"),
- LocationOffsets(Header.offsetRange("expansion")),
- CPath(TestHeaderName))));
+ EXPECT_THAT(Symbols, UnorderedElementsAre(AllOf(
+ QName("name"),
+ LocationOffsets(Header.offsetRange("expansion")),
+ DeclURI(TestHeaderURI))));
}
TEST_F(SymbolCollectorTest, IgnoreSymbolsInMainFile) {
@@ -433,7 +475,7 @@ SymInfo:
CanonicalDeclaration:
StartOffset: 0
EndOffset: 1
- FilePath: /path/foo.h
+ FileURI: file:///path/foo.h
CompletionLabel: 'Foo1-label'
CompletionFilterText: 'filter'
CompletionPlainInsertText: 'plain'
@@ -453,7 +495,7 @@ SymInfo:
CanonicalDeclaration:
StartOffset: 10
EndOffset: 12
- FilePath: /path/foo.h
+ FileURI: file:///path/bar.h
CompletionLabel: 'Foo2-label'
CompletionFilterText: 'filter'
CompletionPlainInsertText: 'plain'
@@ -462,13 +504,14 @@ CompletionSnippetInsertText: 'snippet'
)";
auto Symbols1 = SymbolFromYAML(YAML1);
- EXPECT_THAT(Symbols1, UnorderedElementsAre(
- AllOf(QName("clang::Foo1"), Labeled("Foo1-label"),
- Doc("Foo doc"), Detail("int"))));
+ EXPECT_THAT(Symbols1,
+ UnorderedElementsAre(AllOf(
+ QName("clang::Foo1"), Labeled("Foo1-label"), Doc("Foo doc"),
+ Detail("int"), DeclURI("file:///path/foo.h"))));
auto Symbols2 = SymbolFromYAML(YAML2);
- EXPECT_THAT(Symbols2, UnorderedElementsAre(AllOf(QName("clang::Foo2"),
- Labeled("Foo2-label"),
- Not(HasDetail()))));
+ EXPECT_THAT(Symbols2, UnorderedElementsAre(AllOf(
+ QName("clang::Foo2"), Labeled("Foo2-label"),
+ Not(HasDetail()), DeclURI("file:///path/bar.h"))));
std::string ConcatenatedYAML =
SymbolsToYAML(Symbols1) + SymbolsToYAML(Symbols2);
OpenPOWER on IntegriCloud