[VFS] Add isLocal to ProxyFileSystem and add unit tests.

Differential Revision: https://reviews.llvm.org/D55789

llvm-svn: 349410
This commit is contained in:
Michael J. Spencer 2018-12-17 22:30:05 +00:00
parent 54f6e32c40
commit faad5fda26
2 changed files with 40 additions and 0 deletions

View File

@ -374,6 +374,9 @@ public:
SmallVectorImpl<char> &Output) const override { SmallVectorImpl<char> &Output) const override {
return FS->getRealPath(Path, Output); return FS->getRealPath(Path, Output);
} }
std::error_code isLocal(const Twine &Path, bool &Result) override {
return FS->isLocal(Path, Result);
}
protected: protected:
FileSystem &getUnderlyingFS() { return *FS; } FileSystem &getUnderlyingFS() { return *FS; }

View File

@ -743,6 +743,43 @@ TEST(VirtualFileSystemTest, HiddenInIteration) {
} }
} }
TEST(ProxyFileSystemTest, Basic) {
IntrusiveRefCntPtr<vfs::InMemoryFileSystem> Base(
new vfs::InMemoryFileSystem());
vfs::ProxyFileSystem PFS(Base);
Base->addFile("/a", 0, MemoryBuffer::getMemBuffer("test"));
auto Stat = PFS.status("/a");
ASSERT_FALSE(Stat.getError());
auto File = PFS.openFileForRead("/a");
ASSERT_FALSE(File.getError());
EXPECT_EQ("test", (*(*File)->getBuffer("ignored"))->getBuffer());
std::error_code EC;
vfs::directory_iterator I = PFS.dir_begin("/", EC);
ASSERT_FALSE(EC);
ASSERT_EQ("/a", I->path());
I.increment(EC);
ASSERT_FALSE(EC);
ASSERT_EQ(vfs::directory_iterator(), I);
ASSERT_FALSE(PFS.setCurrentWorkingDirectory("/"));
auto PWD = PFS.getCurrentWorkingDirectory();
ASSERT_FALSE(PWD.getError());
ASSERT_EQ("/", *PWD);
SmallString<16> Path;
ASSERT_FALSE(PFS.getRealPath("a", Path));
ASSERT_EQ("/a", Path);
bool Local = true;
ASSERT_FALSE(PFS.isLocal("/a", Local));
ASSERT_EQ(false, Local);
}
class InMemoryFileSystemTest : public ::testing::Test { class InMemoryFileSystemTest : public ::testing::Test {
protected: protected:
llvm::vfs::InMemoryFileSystem FS; llvm::vfs::InMemoryFileSystem FS;