| 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,165 @@ |
| 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: |
| - FileSystem::IOBuffer Read(const std::string& path) const |
| + IOBuffer 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, const FileSystem::IOBuffer& content) |
| + void Write(const std::string& path, const IOBuffer& content) |
| + { |
| + throw std::runtime_error("Not implemented"); |
| + } |
| + void Write(const std::string& path, const IOBuffer& 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: |
| IOBuffer 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 IOBuffer(dummyData.cbegin(), dummyData.cend()); |
| } |
| + void Read(const std::string& path, const ReadCallback& callback) const |
| + { |
| + std::thread([this, path, callback] |
| + { |
| + auto data = Read(path); |
| + callback(std::move(data), ""); |
| + }).detach(); |
| + } |
| + |
| void Write(const std::string& path, const IOBuffer& content) |
| { |
| } |
| + void Write(const std::string& path, const IOBuffer& data, |
| + const Callback& callback) |
| + { |
| + std::thread([this, path, data, callback] |
| + { |
| + Write(path, data); |
| + 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 |
| { |