diff options
Diffstat (limited to 'llvm/unittests/Support/VirtualFileSystemTest.cpp')
-rw-r--r-- | llvm/unittests/Support/VirtualFileSystemTest.cpp | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/llvm/unittests/Support/VirtualFileSystemTest.cpp b/llvm/unittests/Support/VirtualFileSystemTest.cpp index 60649e9..8d1eb69 100644 --- a/llvm/unittests/Support/VirtualFileSystemTest.cpp +++ b/llvm/unittests/Support/VirtualFileSystemTest.cpp @@ -3565,3 +3565,117 @@ TEST(RedirectingFileSystemTest, ExistsRedirectOnly) { EXPECT_FALSE(Redirecting->exists("/b")); EXPECT_TRUE(Redirecting->exists("/vfile")); } + +TEST(TracingFileSystemTest, TracingWorks) { + auto InMemoryFS = makeIntrusiveRefCnt<vfs::InMemoryFileSystem>(); + auto TracingFS = + makeIntrusiveRefCnt<vfs::TracingFileSystem>(std::move(InMemoryFS)); + + EXPECT_EQ(TracingFS->NumStatusCalls, 0u); + EXPECT_EQ(TracingFS->NumOpenFileForReadCalls, 0u); + EXPECT_EQ(TracingFS->NumDirBeginCalls, 0u); + EXPECT_EQ(TracingFS->NumGetRealPathCalls, 0u); + EXPECT_EQ(TracingFS->NumExistsCalls, 0u); + EXPECT_EQ(TracingFS->NumIsLocalCalls, 0u); + + (void)TracingFS->status("/foo"); + EXPECT_EQ(TracingFS->NumStatusCalls, 1u); + EXPECT_EQ(TracingFS->NumOpenFileForReadCalls, 0u); + EXPECT_EQ(TracingFS->NumDirBeginCalls, 0u); + EXPECT_EQ(TracingFS->NumGetRealPathCalls, 0u); + EXPECT_EQ(TracingFS->NumExistsCalls, 0u); + EXPECT_EQ(TracingFS->NumIsLocalCalls, 0u); + + (void)TracingFS->openFileForRead("/foo"); + EXPECT_EQ(TracingFS->NumStatusCalls, 1u); + EXPECT_EQ(TracingFS->NumOpenFileForReadCalls, 1u); + EXPECT_EQ(TracingFS->NumDirBeginCalls, 0u); + EXPECT_EQ(TracingFS->NumGetRealPathCalls, 0u); + EXPECT_EQ(TracingFS->NumExistsCalls, 0u); + EXPECT_EQ(TracingFS->NumIsLocalCalls, 0u); + + std::error_code EC; + (void)TracingFS->dir_begin("/foo", EC); + EXPECT_EQ(TracingFS->NumStatusCalls, 1u); + EXPECT_EQ(TracingFS->NumOpenFileForReadCalls, 1u); + EXPECT_EQ(TracingFS->NumDirBeginCalls, 1u); + EXPECT_EQ(TracingFS->NumGetRealPathCalls, 0u); + EXPECT_EQ(TracingFS->NumExistsCalls, 0u); + EXPECT_EQ(TracingFS->NumIsLocalCalls, 0u); + + SmallString<128> RealPath; + (void)TracingFS->getRealPath("/foo", RealPath); + EXPECT_EQ(TracingFS->NumStatusCalls, 1u); + EXPECT_EQ(TracingFS->NumOpenFileForReadCalls, 1u); + EXPECT_EQ(TracingFS->NumDirBeginCalls, 1u); + EXPECT_EQ(TracingFS->NumGetRealPathCalls, 1u); + EXPECT_EQ(TracingFS->NumExistsCalls, 0u); + EXPECT_EQ(TracingFS->NumIsLocalCalls, 0u); + + (void)TracingFS->exists("/foo"); + EXPECT_EQ(TracingFS->NumStatusCalls, 1u); + EXPECT_EQ(TracingFS->NumOpenFileForReadCalls, 1u); + EXPECT_EQ(TracingFS->NumDirBeginCalls, 1u); + EXPECT_EQ(TracingFS->NumGetRealPathCalls, 1u); + EXPECT_EQ(TracingFS->NumExistsCalls, 1u); + EXPECT_EQ(TracingFS->NumIsLocalCalls, 0u); + + bool IsLocal; + (void)TracingFS->isLocal("/foo", IsLocal); + EXPECT_EQ(TracingFS->NumStatusCalls, 1u); + EXPECT_EQ(TracingFS->NumOpenFileForReadCalls, 1u); + EXPECT_EQ(TracingFS->NumDirBeginCalls, 1u); + EXPECT_EQ(TracingFS->NumGetRealPathCalls, 1u); + EXPECT_EQ(TracingFS->NumExistsCalls, 1u); + EXPECT_EQ(TracingFS->NumIsLocalCalls, 1u); +} + +TEST(TracingFileSystemTest, PrintOutput) { + auto InMemoryFS = makeIntrusiveRefCnt<vfs::InMemoryFileSystem>(); + auto TracingFS = + makeIntrusiveRefCnt<vfs::TracingFileSystem>(std::move(InMemoryFS)); + + (void)TracingFS->status("/foo"); + + (void)TracingFS->openFileForRead("/foo"); + (void)TracingFS->openFileForRead("/foo"); + + std::error_code EC; + (void)TracingFS->dir_begin("/foo", EC); + (void)TracingFS->dir_begin("/foo", EC); + (void)TracingFS->dir_begin("/foo", EC); + + llvm::SmallString<128> RealPath; + (void)TracingFS->getRealPath("/foo", RealPath); + (void)TracingFS->getRealPath("/foo", RealPath); + (void)TracingFS->getRealPath("/foo", RealPath); + (void)TracingFS->getRealPath("/foo", RealPath); + + (void)TracingFS->exists("/foo"); + (void)TracingFS->exists("/foo"); + (void)TracingFS->exists("/foo"); + (void)TracingFS->exists("/foo"); + (void)TracingFS->exists("/foo"); + + bool IsLocal; + (void)TracingFS->isLocal("/foo", IsLocal); + (void)TracingFS->isLocal("/foo", IsLocal); + (void)TracingFS->isLocal("/foo", IsLocal); + (void)TracingFS->isLocal("/foo", IsLocal); + (void)TracingFS->isLocal("/foo", IsLocal); + (void)TracingFS->isLocal("/foo", IsLocal); + + std::string Output; + llvm::raw_string_ostream OS(Output); + TracingFS->print(OS); + + ASSERT_EQ("TracingFileSystem\n" + "NumStatusCalls=1\n" + "NumOpenFileForReadCalls=2\n" + "NumDirBeginCalls=3\n" + "NumGetRealPathCalls=4\n" + "NumExistsCalls=5\n" + "NumIsLocalCalls=6\n" + " InMemoryFileSystem\n", + Output); +} |