 Issue 29449592:
  Issue 5183 - Provide async interface for FileSystem  (Closed) 
  Base URL: https://hg.adblockplus.org/libadblockplus/
    
  
    Issue 29449592:
  Issue 5183 - Provide async interface for FileSystem  (Closed) 
  Base URL: https://hg.adblockplus.org/libadblockplus/| Index: test/DefaultFileSystem.cpp | 
| =================================================================== | 
| --- a/test/DefaultFileSystem.cpp | 
| +++ b/test/DefaultFileSystem.cpp | 
| @@ -14,60 +14,116 @@ | 
| * You should have received a copy of the GNU General Public License | 
| * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. | 
| */ | 
| #include <sstream> | 
| #include <AdblockPlus.h> | 
| #include <gtest/gtest.h> | 
| +#include "BaseJsTest.h" | 
| + | 
| +using AdblockPlus::IFileSystem; | 
| + | 
| + | 
| namespace | 
| { | 
| const std::string testPath = "libadblockplus-t\xc3\xa4st-file"; | 
| - void WriteString(AdblockPlus::FileSystem& fileSystem, | 
| + void WriteString(const AdblockPlus::FileSystemPtr& fileSystem, | 
| const std::string& content) | 
| { | 
| - std::stringstream input; | 
| - input << content; | 
| - fileSystem.Write(testPath, input); | 
| + Sync sync; | 
| + | 
| + auto input = std::make_shared<std::stringstream>(); | 
| + *input << content; | 
| + fileSystem->Write(testPath, input, [&sync](const std::string& error) | 
| + { | 
| + ASSERT_TRUE(error.empty()); | 
| 
sergei
2017/06/16 15:05:56
What about EXPECT_TRUE when it's acceptable here a
 
hub
2017/06/16 21:52:55
Done.
 | 
| + | 
| + sync.Set(); | 
| + }); | 
| + | 
| + sync.Wait(); | 
| } | 
| } | 
| TEST(DefaultFileSystemTest, WriteReadRemove) | 
| { | 
| - AdblockPlus::DefaultFileSystem fileSystem; | 
| + Sync sync; | 
| + AdblockPlus::FileSystemPtr fileSystem = AdblockPlus::CreateDefaultFileSystem(); | 
| WriteString(fileSystem, "foo"); | 
| - std::stringstream output; | 
| - output << fileSystem.Read(testPath)->rdbuf(); | 
| - fileSystem.Remove(testPath); | 
| - ASSERT_EQ("foo", output.str()); | 
| + fileSystem->Read(testPath, [fileSystem, &sync](std::string&& content, const std::string& error) | 
| + { | 
| + ASSERT_TRUE(error.empty()); | 
| + ASSERT_EQ("foo", content); | 
| + | 
| + fileSystem->Remove(testPath, [&sync](const std::string& error) | 
| + { | 
| + ASSERT_TRUE(error.empty()); | 
| + sync.Set(); | 
| + }); | 
| + }); | 
| + | 
| + sync.Wait(); | 
| } | 
| TEST(DefaultFileSystemTest, StatWorkingDirectory) | 
| { | 
| - AdblockPlus::DefaultFileSystem fileSystem; | 
| - const AdblockPlus::FileSystem::StatResult result = fileSystem.Stat("."); | 
| - ASSERT_TRUE(result.exists); | 
| - ASSERT_TRUE(result.isDirectory); | 
| - ASSERT_FALSE(result.isFile); | 
| - ASSERT_NE(0, result.lastModified); | 
| + Sync sync; | 
| + AdblockPlus::FileSystemPtr fileSystem = AdblockPlus::CreateDefaultFileSystem(); | 
| + fileSystem->Stat(".", | 
| + [fileSystem, &sync](const IFileSystem::StatResult result, const std::string& error) | 
| + { | 
| + ASSERT_TRUE(error.empty()); | 
| + ASSERT_TRUE(result.exists); | 
| + ASSERT_TRUE(result.isDirectory); | 
| + ASSERT_FALSE(result.isFile); | 
| + ASSERT_NE(0, result.lastModified); | 
| + sync.Set(); | 
| + }); | 
| + | 
| + sync.Wait(); | 
| } | 
| TEST(DefaultFileSystemTest, WriteMoveStatRemove) | 
| { | 
| - AdblockPlus::DefaultFileSystem fileSystem; | 
| + Sync sync; | 
| + AdblockPlus::FileSystemPtr fileSystem = AdblockPlus::CreateDefaultFileSystem(); | 
| WriteString(fileSystem, "foo"); | 
| - AdblockPlus::FileSystem::StatResult result = fileSystem.Stat(testPath); | 
| - 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); | 
| - result = fileSystem.Stat(testPath); | 
| - ASSERT_FALSE(result.exists); | 
| - result = fileSystem.Stat(newTestPath); | 
| - ASSERT_TRUE(result.exists); | 
| - fileSystem.Remove(newTestPath); | 
| - result = fileSystem.Stat(newTestPath); | 
| - ASSERT_FALSE(result.exists); | 
| + | 
| + fileSystem->Stat(testPath, | 
| + [fileSystem, &sync](const IFileSystem::StatResult& result, const std::string& error) | 
| + { | 
| + ASSERT_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) | 
| + { | 
| + ASSERT_TRUE(error.empty()); | 
| + fileSystem->Stat(testPath, [fileSystem, &sync, newTestPath](const IFileSystem::StatResult& result, const std::string& error) | 
| + { | 
| + ASSERT_TRUE(error.empty()); | 
| + ASSERT_FALSE(result.exists); | 
| + fileSystem->Stat(newTestPath, [fileSystem, &sync, newTestPath](const IFileSystem::StatResult& result, const std::string& error) | 
| + { | 
| + ASSERT_TRUE(error.empty()); | 
| + ASSERT_TRUE(result.exists); | 
| + fileSystem->Remove(newTestPath, [fileSystem, &sync, newTestPath](const std::string& error) | 
| + { | 
| + ASSERT_TRUE(error.empty()); | 
| + fileSystem->Stat(newTestPath, [fileSystem, &sync, newTestPath](const IFileSystem::StatResult& result, const std::string& error) | 
| + { | 
| + ASSERT_TRUE(error.empty()); | 
| + ASSERT_FALSE(result.exists); | 
| + sync.Set(); | 
| + }); | 
| 
sergei
2017/06/16 15:05:55
OK :)
 
hub
2017/06/16 21:52:55
I know, right?
 | 
| + }); | 
| + }); | 
| + }); | 
| + }); | 
| + }); | 
| + | 
| + sync.Wait(); | 
| } |