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

Unified Diff: test/BaseJsTest.h

Issue 29449592: Issue 5183 - Provide async interface for FileSystem (Closed) Base URL: https://hg.adblockplus.org/libadblockplus/
Patch Set: Updated patch after review. Created June 16, 2017, 9:52 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
« src/Thread.h ('K') | « src/Thread.h ('k') | test/BaseJsTest.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: test/BaseJsTest.h
===================================================================
--- a/test/BaseJsTest.h
+++ b/test/BaseJsTest.h
@@ -13,16 +13,18 @@
*
* You should have received a copy of the GNU General Public License
* along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef MOCKS_H
#define MOCKS_H
+#include <thread>
+
#include <AdblockPlus.h>
#include <gtest/gtest.h>
#include "../src/Thread.h"
// Strictly speaking in each test there should be a special implementation of
// an interface, which is merely referenced by a wrapper and the latter should
// be injected into JsEngine or what ever. However the everthing a test often
// actually needs is the access to pending tasks. Therefore instantiation of
@@ -97,96 +99,170 @@
public:
void operator()(LogLevel logLevel, const std::string& message,
const std::string& source)
{
throw std::runtime_error("Unexpected error: " + message);
}
};
-class ThrowingFileSystem : public AdblockPlus::FileSystem
+class ThrowingFileSystem : public AdblockPlus::IFileSystem, public AdblockPlus::FileSystem
{
public:
std::shared_ptr<std::istream> Read(const std::string& path) const
{
throw std::runtime_error("Not implemented");
}
+ void Read(const std::string& path,
+ const ReadCallback& callback) const
+ {
+ throw std::runtime_error("Not implemented");
+ }
void Write(const std::string& path, std::istream& content)
{
throw std::runtime_error("Not implemented");
}
+ void Write(const std::string& path, const std::string& data,
+ const Callback& callback)
+ {
+ throw std::runtime_error("Not implemented");
+ }
void Move(const std::string& fromPath, const std::string& toPath)
{
throw std::runtime_error("Not implemented");
}
+ void Move(const std::string& fromPath, const std::string& toPath,
+ const Callback& callback)
+ {
+ throw std::runtime_error("Not implemented");
+ }
void Remove(const std::string& path)
{
throw std::runtime_error("Not implemented");
}
+ void Remove(const std::string& path, const Callback& callback)
+ {
+ throw std::runtime_error("Not implemented");
+ }
StatResult Stat(const std::string& path) const
{
throw std::runtime_error("Not implemented");
}
+ void Stat(const std::string& path,
+ const StatCallback& callback) const
+ {
+ throw std::runtime_error("Not implemented");
+ }
std::string Resolve(const std::string& path) const
{
throw std::runtime_error("Not implemented");
}
-
};
class ThrowingWebRequest : public AdblockPlus::IWebRequest
{
public:
void GET(const std::string& url, const AdblockPlus::HeaderList& requestHeaders, const GetCallback&) override
{
throw std::runtime_error("Unexpected GET: " + url);
}
};
-class LazyFileSystem : public AdblockPlus::FileSystem
+class LazyFileSystem : public AdblockPlus::IFileSystem, public AdblockPlus::FileSystem
{
public:
std::shared_ptr<std::istream> Read(const std::string& path) const
{
std::string dummyData("");
if (path == "patterns.ini")
dummyData = "# Adblock Plus preferences\n[Subscription]\nurl=~fl~";
else if (path == "prefs.json")
dummyData = "{}";
return std::shared_ptr<std::istream>(new std::istringstream(dummyData));
}
+ void Read(const std::string& path, const ReadCallback& callback) const
+ {
+ std::thread([this, path, callback]
+ {
+ auto result = Read(path);
+ std::stringstream stream;
+ stream << result->rdbuf();
+ std::string content = stream.str();
+ callback(std::move(content), "");
+ }).detach();
+ }
+
void Write(const std::string& path, std::istream& content)
{
}
+ void Write(const std::string& path, const std::string& data,
+ const Callback& callback)
+ {
+ std::thread([this, path, data, callback]
+ {
+ std::stringstream stream;
+ stream << data;
+ Write(path, stream);
+ callback("");
+ }).detach();
+ }
+
void Move(const std::string& fromPath, const std::string& toPath)
{
}
+ void Move(const std::string& fromPath, const std::string& toPath,
+ const Callback& callback)
+ {
+ std::thread([this, fromPath, toPath, callback]
+ {
+ Move(fromPath, toPath);
+ callback("");
+ }).detach();
+ }
+
void Remove(const std::string& path)
{
}
+ void Remove(const std::string& path, const Callback& callback)
+ {
+ std::thread([this, path, callback]
+ {
+ Remove(path);
+ callback("");
+ }).detach();
+ }
+
StatResult Stat(const std::string& path) const
{
StatResult result;
if (path == "patterns.ini")
{
result.exists = true;
result.isFile = true;
}
return result;
}
+ void Stat(const std::string& path, const StatCallback& callback) const
+ {
+ std::thread([this, path, callback]
+ {
+ callback(Stat(path), "");
+ }).detach();
+ }
+
std::string Resolve(const std::string& path) const
{
return path;
}
};
class NoopWebRequest : public AdblockPlus::IWebRequest
{
« src/Thread.h ('K') | « src/Thread.h ('k') | test/BaseJsTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld