aboutsummaryrefslogtreecommitdiff
path: root/llvm/unittests/Support/VirtualFileSystemTest.cpp
diff options
context:
space:
mode:
authorKeith Smiley <keithbsmiley@gmail.com>2021-11-13 10:13:38 -0800
committerKeith Smiley <keithbsmiley@gmail.com>2021-11-13 12:14:34 -0800
commit86e2af8043c7728710a711b623f27425801a36c3 (patch)
treebd3f0fb835c32161866f128e93d1fb550ffec7e5 /llvm/unittests/Support/VirtualFileSystemTest.cpp
parente96214ddefb98d18c4448604a746657dba1da91f (diff)
downloadllvm-86e2af8043c7728710a711b623f27425801a36c3.zip
llvm-86e2af8043c7728710a711b623f27425801a36c3.tar.gz
llvm-86e2af8043c7728710a711b623f27425801a36c3.tar.bz2
reland: [VFS] Use original path when falling back to external FS
This reverts commit f0cf544d6f6fe6cbca4c07772998272d6bb433d8. Just a small change to fix: ``` /home/buildbot/as-builder-4/llvm-clang-x86_64-expensive-checks-ubuntu/llvm-project/llvm/lib/Support/VirtualFileSystem.cpp: In static member function ‘static llvm::ErrorOr<std::unique_ptr<llvm::vfs::File> > llvm::vfs::File::getWithPath(llvm::ErrorOr<std::unique_ptr<llvm::vfs::File> >, const llvm::Twine&)’: /home/buildbot/as-builder-4/llvm-clang-x86_64-expensive-checks-ubuntu/llvm-project/llvm/lib/Support/VirtualFileSystem.cpp:2084:10: error: could not convert ‘F’ from ‘std::unique_ptr<llvm::vfs::File>’ to ‘llvm::ErrorOr<std::unique_ptr<llvm::vfs::File> >’ return F; ^ ``` Differential Revision: https://reviews.llvm.org/D113832
Diffstat (limited to 'llvm/unittests/Support/VirtualFileSystemTest.cpp')
-rw-r--r--llvm/unittests/Support/VirtualFileSystemTest.cpp108
1 files changed, 108 insertions, 0 deletions
diff --git a/llvm/unittests/Support/VirtualFileSystemTest.cpp b/llvm/unittests/Support/VirtualFileSystemTest.cpp
index ca35b5e..be32971 100644
--- a/llvm/unittests/Support/VirtualFileSystemTest.cpp
+++ b/llvm/unittests/Support/VirtualFileSystemTest.cpp
@@ -1627,6 +1627,114 @@ TEST_F(VFSFromYAMLTest, RemappedDirectoryOverlayNoFallthrough) {
EXPECT_EQ(0, NumDiagnostics);
}
+TEST_F(VFSFromYAMLTest, ReturnsRequestedPathVFSMiss) {
+ IntrusiveRefCntPtr<vfs::InMemoryFileSystem> BaseFS(
+ new vfs::InMemoryFileSystem);
+ BaseFS->addFile("//root/foo/a", 0,
+ MemoryBuffer::getMemBuffer("contents of a"));
+ ASSERT_FALSE(BaseFS->setCurrentWorkingDirectory("//root/foo"));
+ auto RemappedFS = vfs::RedirectingFileSystem::create(
+ {}, /*UseExternalNames=*/false, *BaseFS);
+
+ auto OpenedF = RemappedFS->openFileForRead("a");
+ ASSERT_FALSE(OpenedF.getError());
+ llvm::ErrorOr<std::string> Name = (*OpenedF)->getName();
+ ASSERT_FALSE(Name.getError());
+ EXPECT_EQ("a", Name.get());
+
+ auto OpenedS = (*OpenedF)->status();
+ ASSERT_FALSE(OpenedS.getError());
+ EXPECT_EQ("a", OpenedS->getName());
+ EXPECT_FALSE(OpenedS->IsVFSMapped);
+
+ auto DirectS = RemappedFS->status("a");
+ ASSERT_FALSE(DirectS.getError());
+ EXPECT_EQ("a", DirectS->getName());
+ EXPECT_FALSE(DirectS->IsVFSMapped);
+
+ EXPECT_EQ(0, NumDiagnostics);
+}
+
+TEST_F(VFSFromYAMLTest, ReturnsExternalPathVFSHit) {
+ IntrusiveRefCntPtr<vfs::InMemoryFileSystem> BaseFS(
+ new vfs::InMemoryFileSystem);
+ BaseFS->addFile("//root/foo/realname", 0,
+ MemoryBuffer::getMemBuffer("contents of a"));
+ auto FS =
+ getFromYAMLString("{ 'use-external-names': true,\n"
+ " 'roots': [\n"
+ "{\n"
+ " 'type': 'directory',\n"
+ " 'name': '//root/foo',\n"
+ " 'contents': [ {\n"
+ " 'type': 'file',\n"
+ " 'name': 'vfsname',\n"
+ " 'external-contents': 'realname'\n"
+ " }\n"
+ " ]\n"
+ "}]}",
+ BaseFS);
+ ASSERT_FALSE(FS->setCurrentWorkingDirectory("//root/foo"));
+
+ auto OpenedF = FS->openFileForRead("vfsname");
+ ASSERT_FALSE(OpenedF.getError());
+ llvm::ErrorOr<std::string> Name = (*OpenedF)->getName();
+ ASSERT_FALSE(Name.getError());
+ EXPECT_EQ("realname", Name.get());
+
+ auto OpenedS = (*OpenedF)->status();
+ ASSERT_FALSE(OpenedS.getError());
+ EXPECT_EQ("realname", OpenedS->getName());
+ EXPECT_TRUE(OpenedS->IsVFSMapped);
+
+ auto DirectS = FS->status("vfsname");
+ ASSERT_FALSE(DirectS.getError());
+ EXPECT_EQ("realname", DirectS->getName());
+ EXPECT_TRUE(DirectS->IsVFSMapped);
+
+ EXPECT_EQ(0, NumDiagnostics);
+}
+
+TEST_F(VFSFromYAMLTest, ReturnsInternalPathVFSHit) {
+ IntrusiveRefCntPtr<vfs::InMemoryFileSystem> BaseFS(
+ new vfs::InMemoryFileSystem);
+ BaseFS->addFile("//root/foo/realname", 0,
+ MemoryBuffer::getMemBuffer("contents of a"));
+ auto FS =
+ getFromYAMLString("{ 'use-external-names': false,\n"
+ " 'roots': [\n"
+ "{\n"
+ " 'type': 'directory',\n"
+ " 'name': '//root/foo',\n"
+ " 'contents': [ {\n"
+ " 'type': 'file',\n"
+ " 'name': 'vfsname',\n"
+ " 'external-contents': 'realname'\n"
+ " }\n"
+ " ]\n"
+ "}]}",
+ BaseFS);
+ ASSERT_FALSE(FS->setCurrentWorkingDirectory("//root/foo"));
+
+ auto OpenedF = FS->openFileForRead("vfsname");
+ ASSERT_FALSE(OpenedF.getError());
+ llvm::ErrorOr<std::string> Name = (*OpenedF)->getName();
+ ASSERT_FALSE(Name.getError());
+ EXPECT_EQ("vfsname", Name.get());
+
+ auto OpenedS = (*OpenedF)->status();
+ ASSERT_FALSE(OpenedS.getError());
+ EXPECT_EQ("vfsname", OpenedS->getName());
+ EXPECT_TRUE(OpenedS->IsVFSMapped);
+
+ auto DirectS = FS->status("vfsname");
+ ASSERT_FALSE(DirectS.getError());
+ EXPECT_EQ("vfsname", DirectS->getName());
+ EXPECT_TRUE(DirectS->IsVFSMapped);
+
+ EXPECT_EQ(0, NumDiagnostics);
+}
+
TEST_F(VFSFromYAMLTest, CaseInsensitive) {
IntrusiveRefCntPtr<DummyFileSystem> Lower(new DummyFileSystem());
Lower->addRegularFile("//root/foo/bar/a");