| Index: test/BaseJsTest.h |
| =================================================================== |
| --- a/test/BaseJsTest.h |
| +++ b/test/BaseJsTest.h |
| @@ -18,6 +18,8 @@ |
| #ifndef MOCKS_H |
| #define MOCKS_H |
| +#include <condition_variable> |
| +#include <mutex> |
| #include <thread> |
| #include <AdblockPlus.h> |
| @@ -119,15 +121,49 @@ |
| } |
| }; |
| +class LazyWaiter |
| +{ |
| + std::mutex m; |
| + typedef std::unique_lock<std::mutex> UniqueLockType; |
| + std::condition_variable cv; |
| + bool running; |
| + |
| +public: |
| + LazyWaiter() |
| + : running(true) |
| + {} |
| + |
| + void WaitUntilCancelled() |
| + { |
| + UniqueLockType ul(m); |
| + cv.wait(ul, [this]() -> bool { return !running; }); |
| + } |
| + |
| + void Cancel() |
| + { |
| + UniqueLockType ul(m); |
| + running = false; |
| + cv.notify_all(); |
| + } |
| +}; |
| + |
| class LazyWebRequest : public AdblockPlus::WebRequest |
| { |
| + mutable LazyWaiter w; |
|
Eric
2016/12/14 20:53:55
Declared mutable because `GET()` is declared `cons
|
| + |
| public: |
| + LazyWebRequest() {} // = default; |
| + |
| AdblockPlus::ServerResponse GET(const std::string& url, const AdblockPlus::HeaderList& requestHeaders) const |
| { |
| - while (true) |
| - std::this_thread::sleep_for(std::chrono::seconds(100)); |
| + w.WaitUntilCancelled(); |
| return AdblockPlus::ServerResponse(); |
| } |
| + |
| + void Cancel() |
| + { |
| + w.Cancel(); |
| + } |
| }; |
| class LazyLogSystem : public AdblockPlus::LogSystem |