Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Unified Diff: test/FileSystemJsObject.cpp

Issue 29449592: Issue 5183 - Provide async interface for FileSystem (Closed) Base URL: https://hg.adblockplus.org/libadblockplus/
Patch Set: Rebased on https://codereview.adblockplus.org/29481704 Created July 6, 2017, 10:40 p.m.
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: test/FileSystemJsObject.cpp
===================================================================
--- a/test/FileSystemJsObject.cpp
+++ b/test/FileSystemJsObject.cpp
@@ -16,17 +16,17 @@
*/
#include <sstream>
#include "BaseJsTest.h"
#include "../src/Thread.h"
namespace
{
- class MockFileSystem : public AdblockPlus::FileSystem
+ class MockFileSystem : public AdblockPlus::IFileSystem
{
public:
bool success;
IOBuffer contentToRead;
std::string lastWrittenPath;
IOBuffer lastWrittenContent;
std::string movedFrom;
std::string movedTo;
@@ -36,58 +36,80 @@
bool statIsDirectory;
bool statIsFile;
int statLastModified;
MockFileSystem() : success(true)
{
}
- IOBuffer Read(const std::string& path) const
+ void Read(const std::string& path, const ReadCallback& callback) const
{
if (!success)
- throw std::runtime_error("Unable to read " + path);
- return contentToRead;
+ {
+ callback(IOBuffer(), "Unable to read " + path);
+ return;
+ }
+ callback(IOBuffer(contentToRead), "");
}
- void Write(const std::string& path, const IOBuffer& data)
+ void Write(const std::string& path, const IOBuffer& data,
+ const Callback& callback)
{
if (!success)
- throw std::runtime_error("Unable to write to " + path);
+ {
+ callback("Unable to write to " + path);
+ return;
+ }
lastWrittenPath = path;
+
lastWrittenContent = data;
+ callback("");
}
- void Move(const std::string& fromPath, const std::string& toPath)
+ void Move(const std::string& fromPath, const std::string& toPath,
+ const Callback& callback)
{
if (!success)
- throw std::runtime_error("Unable to move " + fromPath + " to "
- + toPath);
+ {
+ callback("Unable to move " + fromPath + " to " + toPath);
+ return;
+ }
movedFrom = fromPath;
movedTo = toPath;
+ callback("");
}
- void Remove(const std::string& path)
+ void Remove(const std::string& path, const Callback& callback)
{
if (!success)
- throw std::runtime_error("Unable to remove " + path);
+ {
+ callback("Unable to remove " + path);
+ return;
+ }
removedPath = path;
+ callback("");
}
- StatResult Stat(const std::string& path) const
+ void Stat(const std::string& path,
+ const StatCallback& callback) const
{
- if (!success)
- throw std::runtime_error("Unable to stat " + path);
- statPath = path;
StatResult result;
- result.exists = statExists;
- result.isDirectory = statIsDirectory;
- result.isFile = statIsFile;
- result.lastModified = statLastModified;
- return result;
+ std::string error;
+ if (!success)
+ error = "Unable to stat " + path;
+ else
+ {
+ statPath = path;
+ result.exists = statExists;
+ result.isDirectory = statIsDirectory;
+ result.isFile = statIsFile;
+ result.lastModified = statLastModified;
+ }
+ callback(result, error);
}
std::string Resolve(const std::string& path) const
{
if (!success)
throw std::runtime_error("Unable to stat " + path);
return path;
}
@@ -106,32 +128,33 @@
class FileSystemJsObjectTest : public BaseJsTest
{
protected:
MockFileSystemPtr mockFileSystem;
void SetUp()
{
- BaseJsTest::SetUp();
mockFileSystem = MockFileSystemPtr(new MockFileSystem);
- jsEngine->SetFileSystem(mockFileSystem);
+ JsEngineCreationParameters params;
+ params.fileSystem = mockFileSystem;
+ jsEngine = CreateJsEngine(std::move(params));
}
};
}
TEST_F(FileSystemJsObjectTest, Read)
{
mockFileSystem->contentToRead =
- AdblockPlus::FileSystem::IOBuffer{'f', 'o', 'o'};
+ AdblockPlus::IFileSystem::IOBuffer{'f', 'o', 'o'};
std::string content;
std::string error;
ReadFile(jsEngine, content, error);
ASSERT_EQ("foo", content);
- ASSERT_EQ("", error);
+ ASSERT_EQ("undefined", error);
}
TEST_F(FileSystemJsObjectTest, ReadIllegalArguments)
{
ASSERT_ANY_THROW(jsEngine->Evaluate("_fileSystem.read()"));
ASSERT_ANY_THROW(jsEngine->Evaluate("_fileSystem.read('', '')"));
}
@@ -145,19 +168,19 @@
ASSERT_EQ("", content);
}
TEST_F(FileSystemJsObjectTest, Write)
{
jsEngine->Evaluate("_fileSystem.write('foo', 'bar', function(e) {error = e})");
AdblockPlus::Sleep(50);
ASSERT_EQ("foo", mockFileSystem->lastWrittenPath);
- ASSERT_EQ((AdblockPlus::FileSystem::IOBuffer{'b', 'a', 'r'}),
- mockFileSystem->lastWrittenContent);
- ASSERT_EQ("", jsEngine->Evaluate("error").AsString());
+ ASSERT_EQ((AdblockPlus::IFileSystem::IOBuffer{'b', 'a', 'r'}),
+ mockFileSystem->lastWrittenContent);
+ ASSERT_TRUE(jsEngine->Evaluate("error").IsUndefined());
}
TEST_F(FileSystemJsObjectTest, WriteIllegalArguments)
{
ASSERT_ANY_THROW(jsEngine->Evaluate("_fileSystem.write()"));
ASSERT_ANY_THROW(jsEngine->Evaluate("_fileSystem.write('', '', '')"));
}
@@ -170,39 +193,39 @@
}
TEST_F(FileSystemJsObjectTest, Move)
{
jsEngine->Evaluate("_fileSystem.move('foo', 'bar', function(e) {error = e})");
AdblockPlus::Sleep(50);
ASSERT_EQ("foo", mockFileSystem->movedFrom);
ASSERT_EQ("bar", mockFileSystem->movedTo);
- ASSERT_EQ("", jsEngine->Evaluate("error").AsString());
+ ASSERT_TRUE(jsEngine->Evaluate("error").IsUndefined());
}
TEST_F(FileSystemJsObjectTest, MoveIllegalArguments)
{
ASSERT_ANY_THROW(jsEngine->Evaluate("_fileSystem.move()"));
ASSERT_ANY_THROW(jsEngine->Evaluate("_fileSystem.move('', '', '')"));
}
TEST_F(FileSystemJsObjectTest, MoveError)
{
mockFileSystem->success = false;
jsEngine->Evaluate("_fileSystem.move('foo', 'bar', function(e) {error = e})");
AdblockPlus::Sleep(50);
- ASSERT_NE("", jsEngine->Evaluate("error").AsString());
+ ASSERT_FALSE(jsEngine->Evaluate("error").IsUndefined());
}
TEST_F(FileSystemJsObjectTest, Remove)
{
jsEngine->Evaluate("_fileSystem.remove('foo', function(e) {error = e})");
AdblockPlus::Sleep(50);
ASSERT_EQ("foo", mockFileSystem->removedPath);
- ASSERT_EQ("", jsEngine->Evaluate("error").AsString());
+ ASSERT_TRUE(jsEngine->Evaluate("error").IsUndefined());
}
TEST_F(FileSystemJsObjectTest, RemoveIllegalArguments)
{
ASSERT_ANY_THROW(jsEngine->Evaluate("_fileSystem.remove()"));
ASSERT_ANY_THROW(jsEngine->Evaluate("_fileSystem.remove('', '')"));
}
@@ -218,17 +241,17 @@
{
mockFileSystem->statExists = true;
mockFileSystem->statIsDirectory= false;
mockFileSystem->statIsFile = true;
mockFileSystem->statLastModified = 1337;
jsEngine->Evaluate("_fileSystem.stat('foo', function(r) {result = r})");
AdblockPlus::Sleep(50);
ASSERT_EQ("foo", mockFileSystem->statPath);
- ASSERT_EQ("", jsEngine->Evaluate("result.error").AsString());
+ ASSERT_TRUE(jsEngine->Evaluate("result.error").IsUndefined());
ASSERT_TRUE(jsEngine->Evaluate("result.exists").AsBool());
ASSERT_FALSE(jsEngine->Evaluate("result.isDirectory").AsBool());
ASSERT_TRUE(jsEngine->Evaluate("result.isFile").AsBool());
ASSERT_EQ(1337, jsEngine->Evaluate("result.lastModified").AsInt());
}
TEST_F(FileSystemJsObjectTest, StatIllegalArguments)
{
@@ -236,10 +259,10 @@
ASSERT_ANY_THROW(jsEngine->Evaluate("_fileSystem.stat('', '')"));
}
TEST_F(FileSystemJsObjectTest, StatError)
{
mockFileSystem->success = false;
jsEngine->Evaluate("_fileSystem.stat('foo', function(r) {result = r})");
AdblockPlus::Sleep(50);
- ASSERT_NE("", jsEngine->Evaluate("result.error").AsString());
+ ASSERT_FALSE(jsEngine->Evaluate("result.error").IsUndefined());
}

Powered by Google App Engine
This is Rietveld