From 30949926f98576fbff8d5ad0390be5124ffacd7e Mon Sep 17 00:00:00 2001 From: Jan Korous Date: Wed, 3 Jun 2020 21:39:55 -0700 Subject: [PATCH] Relands "[YAMLVFSWriter][Test][NFC] Add couple tests" vol. 2 This reverts commit e4e3e41905d182c0f3d5b0b9406e3cbf2aabb30f. Fixed dangling StringRef in test. --- llvm/unittests/Support/VirtualFileSystemTest.cpp | 57 ++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/llvm/unittests/Support/VirtualFileSystemTest.cpp b/llvm/unittests/Support/VirtualFileSystemTest.cpp index 85e7093..96092de 100644 --- a/llvm/unittests/Support/VirtualFileSystemTest.cpp +++ b/llvm/unittests/Support/VirtualFileSystemTest.cpp @@ -2338,3 +2338,60 @@ TEST_F(VFSFromYAMLTest, YAMLVFSWriterTestHandleDirs) { EXPECT_FALSE(FS->exists(_b.Path + "/b")); EXPECT_FALSE(FS->exists(_c.Path + "/c")); } + +TEST_F(VFSFromYAMLTest, YAMLVFSWriterTestNestedDirs) { + ScopedDir TestDirectory("virtual-file-system-test", /*Unique*/ true); + ScopedDir a(TestDirectory + "/a"); + ScopedDir _a_aa(TestDirectory + "/a/aa"); + ScopedDir b(TestDirectory + "/b"); + ScopedDir _b_bb(TestDirectory + "/b/bb"); + ScopedDir c(TestDirectory + "/c"); + ScopedDir _c_cc(TestDirectory + "/c/cc"); + + vfs::YAMLVFSWriter VFSWriter; + VFSWriter.addDirectoryMapping(a.Path, "//root/a"); + VFSWriter.addDirectoryMapping(_a_aa.Path, "//root/a/aa"); + VFSWriter.addDirectoryMapping(b.Path, "//root/b"); + VFSWriter.addDirectoryMapping(_b_bb.Path, "//root/b/bb"); + VFSWriter.addDirectoryMapping(c.Path, "//root/c"); + VFSWriter.addDirectoryMapping(_c_cc.Path, "//root/c/cc"); + + std::string Buffer; + raw_string_ostream OS(Buffer); + VFSWriter.write(OS); + OS.flush(); + + IntrusiveRefCntPtr Lower(new ErrorDummyFileSystem()); + Lower->addDirectory("//root/a"); + Lower->addDirectory("//root/a/aa"); + Lower->addDirectory("//root/b"); + Lower->addDirectory("//root/b/bb"); + Lower->addDirectory("//root/c"); + Lower->addDirectory("//root/c/cc"); + + IntrusiveRefCntPtr FS = getFromYAMLRawString(Buffer, Lower); + ASSERT_TRUE(FS.get() != nullptr); + + EXPECT_TRUE(FS->exists(a.Path)); + EXPECT_TRUE(FS->exists(_a_aa.Path)); + EXPECT_TRUE(FS->exists(b.Path)); + EXPECT_TRUE(FS->exists(_b_bb.Path)); + EXPECT_TRUE(FS->exists(c.Path)); + EXPECT_TRUE(FS->exists(_c_cc.Path)); +} + +TEST(YAMLVFSWriterTest, HandleRootAsVPath) { + llvm::SmallVector Tmp; + llvm::sys::path::system_temp_directory(false, Tmp); + std::string Root = llvm::sys::path::root_path(StringRef(Tmp.data(), Tmp.size())).str(); + llvm::SmallVector Subdir(Root.begin(), Root.end()); + llvm::sys::path::append(Subdir, "foo"); + + llvm::vfs::YAMLVFSWriter W; + W.addDirectoryMapping(Root, "/tmp"); + W.addDirectoryMapping(std::string{Subdir.begin(), Subdir.end()} + "/foo", "/tmp/bar"); + std::string Dump; + llvm::raw_string_ostream ToBeIgnored(Dump); + + EXPECT_NO_FATAL_FAILURE(W.write(ToBeIgnored)); +} -- 2.7.4