aboutsummaryrefslogtreecommitdiff
path: root/llvm/unittests/Support/VirtualFileSystemTest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/unittests/Support/VirtualFileSystemTest.cpp')
-rw-r--r--llvm/unittests/Support/VirtualFileSystemTest.cpp114
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);
+}