Index: test/DefaultFileSystem.cpp |
diff --git a/test/DefaultFileSystem.cpp b/test/DefaultFileSystem.cpp |
index 751c9dfcab1bfcb8985bc7c846f076876469e6ad..0495427bb04a7b2f3c866dfa79bb336d04fceae1 100644 |
--- a/test/DefaultFileSystem.cpp |
+++ b/test/DefaultFileSystem.cpp |
@@ -22,109 +22,166 @@ |
#include "BaseJsTest.h" |
using AdblockPlus::IFileSystem; |
-using AdblockPlus::Sync; |
+using AdblockPlus::FileSystemPtr; |
+using AdblockPlus::SchedulerTask; |
namespace |
{ |
const std::string testPath = "libadblockplus-t\xc3\xa4st-file"; |
- void WriteString(const AdblockPlus::FileSystemPtr& fileSystem, |
- const std::string& content) |
+ class DefaultFileSystemTest : public ::testing::Test |
{ |
- Sync sync; |
- |
- fileSystem->Write(testPath, |
- IFileSystem::IOBuffer(content.cbegin(), content.cend()), |
- [&sync](const std::string& error) |
+ public: |
+ void SetUp() override |
+ { |
+ fileSystem = AdblockPlus::CreateDefaultFileSystem([this](const SchedulerTask& task) |
{ |
- EXPECT_TRUE(error.empty()); |
- |
- sync.Set(); |
+ fileSystemTasks.emplace_back(task); |
+ }); |
+ } |
+ protected: |
+ void WriteString(const std::string& content) |
+ { |
+ bool hasRun = false; |
+ fileSystem->Write(testPath, |
+ IFileSystem::IOBuffer(content.cbegin(), content.cend()), |
+ [&hasRun](const std::string& error) |
+ { |
+ EXPECT_TRUE(error.empty()) << error; |
+ hasRun = true; |
}); |
+ EXPECT_FALSE(hasRun); |
+ PumpTask(); |
+ EXPECT_TRUE(hasRun); |
+ } |
- sync.WaitFor(); |
- } |
+ void PumpTask() |
+ { |
+ ASSERT_EQ(1u, fileSystemTasks.size()); |
+ (*fileSystemTasks.begin())(); |
+ fileSystemTasks.pop_front(); |
+ } |
+ |
+ std::list<SchedulerTask> fileSystemTasks; |
+ FileSystemPtr fileSystem; |
+ }; |
} |
-TEST(DefaultFileSystemTest, WriteReadRemove) |
+TEST_F(DefaultFileSystemTest, WriteReadRemove) |
{ |
- Sync sync; |
- AdblockPlus::FileSystemPtr fileSystem = AdblockPlus::CreateDefaultFileSystem(); |
- WriteString(fileSystem, "foo"); |
- fileSystem->Read(testPath, |
- [fileSystem, &sync](IFileSystem::IOBuffer&& content, const std::string& error) |
- { |
- EXPECT_TRUE(error.empty()); |
- EXPECT_EQ("foo", std::string(content.cbegin(), content.cend())); |
- |
- fileSystem->Remove(testPath, [&sync](const std::string& error) |
- { |
- EXPECT_TRUE(error.empty()); |
- sync.Set(); |
- }); |
- }); |
+ WriteString("foo"); |
- EXPECT_TRUE(sync.WaitFor()); |
+ bool hasReadRun = false; |
+ fileSystem->Read(testPath, |
+ [this, &hasReadRun](IFileSystem::IOBuffer&& content, const std::string& error) |
+ { |
+ EXPECT_TRUE(error.empty()); |
+ EXPECT_EQ("foo", std::string(content.cbegin(), content.cend())); |
+ hasReadRun = true; |
+ }); |
+ EXPECT_FALSE(hasReadRun); |
+ PumpTask(); |
+ EXPECT_TRUE(hasReadRun); |
+ |
+ bool hasRemoveRun = false; |
+ fileSystem->Remove(testPath, [&hasRemoveRun](const std::string& error) |
+ { |
+ EXPECT_TRUE(error.empty()); |
+ hasRemoveRun = true; |
+ }); |
+ EXPECT_FALSE(hasRemoveRun); |
+ PumpTask(); |
+ EXPECT_TRUE(hasRemoveRun); |
} |
-TEST(DefaultFileSystemTest, StatWorkingDirectory) |
+TEST_F(DefaultFileSystemTest, StatWorkingDirectory) |
{ |
- Sync sync; |
- AdblockPlus::FileSystemPtr fileSystem = AdblockPlus::CreateDefaultFileSystem(); |
+ bool hasStatRun = false; |
fileSystem->Stat(".", |
- [fileSystem, &sync](const IFileSystem::StatResult result, const std::string& error) |
+ [&hasStatRun](const IFileSystem::StatResult result, const std::string& error) |
{ |
EXPECT_TRUE(error.empty()); |
ASSERT_TRUE(result.exists); |
ASSERT_TRUE(result.isDirectory); |
ASSERT_FALSE(result.isFile); |
ASSERT_NE(0, result.lastModified); |
- sync.Set(); |
+ hasStatRun = true; |
}); |
- |
- EXPECT_TRUE(sync.WaitFor()); |
+ EXPECT_FALSE(hasStatRun); |
+ PumpTask(); |
+ EXPECT_TRUE(hasStatRun); |
} |
-TEST(DefaultFileSystemTest, WriteMoveStatRemove) |
+TEST_F(DefaultFileSystemTest, WriteMoveStatRemove) |
{ |
- Sync sync; |
- AdblockPlus::FileSystemPtr fileSystem = AdblockPlus::CreateDefaultFileSystem(); |
- WriteString(fileSystem, "foo"); |
+ WriteString("foo"); |
+ bool hasStatOrigFileExistsRun = false; |
fileSystem->Stat(testPath, |
- [fileSystem, &sync](const IFileSystem::StatResult& result, const std::string& error) |
+ [&hasStatOrigFileExistsRun](const IFileSystem::StatResult& result, const std::string& error) |
{ |
EXPECT_TRUE(error.empty()); |
ASSERT_TRUE(result.exists); |
ASSERT_TRUE(result.isFile); |
ASSERT_FALSE(result.isDirectory); |
ASSERT_NE(0, result.lastModified); |
- const std::string newTestPath = testPath + "-new"; |
- fileSystem->Move(testPath, newTestPath, [fileSystem, &sync, newTestPath](const std::string& error) |
- { |
- EXPECT_TRUE(error.empty()); |
- fileSystem->Stat(testPath, [fileSystem, &sync, newTestPath](const IFileSystem::StatResult& result, const std::string& error) |
- { |
- EXPECT_TRUE(error.empty()); |
- ASSERT_FALSE(result.exists); |
- fileSystem->Stat(newTestPath, [fileSystem, &sync, newTestPath](const IFileSystem::StatResult& result, const std::string& error) |
- { |
- EXPECT_TRUE(error.empty()); |
- ASSERT_TRUE(result.exists); |
- fileSystem->Remove(newTestPath, [fileSystem, &sync, newTestPath](const std::string& error) |
- { |
- EXPECT_TRUE(error.empty()); |
- fileSystem->Stat(newTestPath, [fileSystem, &sync, newTestPath](const IFileSystem::StatResult& result, const std::string& error) |
- { |
- EXPECT_TRUE(error.empty()); |
- ASSERT_FALSE(result.exists); |
- sync.Set(); |
- }); |
- }); |
- }); |
- }); |
- }); |
+ hasStatOrigFileExistsRun = true; |
}); |
+ EXPECT_FALSE(hasStatOrigFileExistsRun); |
+ PumpTask(); |
+ EXPECT_TRUE(hasStatOrigFileExistsRun); |
- EXPECT_TRUE(sync.WaitFor()); |
+ const std::string newTestPath = testPath + "-new"; |
+ bool hasMoveRun = false; |
+ fileSystem->Move(testPath, newTestPath, [&hasMoveRun, newTestPath](const std::string& error) |
+ { |
+ EXPECT_TRUE(error.empty()); |
+ hasMoveRun = true; |
+ }); |
+ EXPECT_FALSE(hasMoveRun); |
+ PumpTask(); |
+ EXPECT_TRUE(hasMoveRun); |
+ |
+ bool hasStatOrigFileDontExistsRun = false; |
+ fileSystem->Stat(testPath, [&hasStatOrigFileDontExistsRun](const IFileSystem::StatResult& result, const std::string& error) |
+ { |
+ EXPECT_TRUE(error.empty()); |
+ ASSERT_FALSE(result.exists); |
+ hasStatOrigFileDontExistsRun = true; |
+ }); |
+ EXPECT_FALSE(hasStatOrigFileDontExistsRun); |
+ PumpTask(); |
+ EXPECT_TRUE(hasStatOrigFileDontExistsRun); |
+ |
+ bool hasStatNewFileExistsRun = false; |
+ fileSystem->Stat(newTestPath, [&hasStatNewFileExistsRun](const IFileSystem::StatResult& result, const std::string& error) |
+ { |
+ EXPECT_TRUE(error.empty()); |
+ ASSERT_TRUE(result.exists); |
+ hasStatNewFileExistsRun = true; |
+ }); |
+ EXPECT_FALSE(hasStatNewFileExistsRun); |
+ PumpTask(); |
+ EXPECT_TRUE(hasStatNewFileExistsRun); |
+ |
+ bool hasRemoveRun = false; |
+ fileSystem->Remove(newTestPath, [&hasRemoveRun](const std::string& error) |
+ { |
+ EXPECT_TRUE(error.empty()); |
+ hasRemoveRun = true; |
+ }); |
+ EXPECT_FALSE(hasRemoveRun); |
+ PumpTask(); |
+ EXPECT_TRUE(hasRemoveRun); |
+ |
+ bool hasStatRemovedFileRun = false; |
+ fileSystem->Stat(newTestPath, [&hasStatRemovedFileRun](const IFileSystem::StatResult& result, const std::string& error) |
+ { |
+ EXPECT_TRUE(error.empty()); |
+ ASSERT_FALSE(result.exists); |
+ hasStatRemovedFileRun = true; |
+ }); |
+ EXPECT_FALSE(hasStatRemovedFileRun); |
+ PumpTask(); |
+ EXPECT_TRUE(hasStatRemovedFileRun); |
} |