Index: test/FilterEngine.cpp |
=================================================================== |
--- a/test/FilterEngine.cpp |
+++ b/test/FilterEngine.cpp |
@@ -17,6 +17,7 @@ |
#include "BaseJsTest.h" |
#include <thread> |
+#include "../src/JsEngineTransition.h" |
using namespace AdblockPlus; |
@@ -44,11 +45,11 @@ |
void SetUp() |
{ |
BaseJsTest::SetUp(); |
- jsEngine->SetFileSystem(AdblockPlus::FileSystemPtr(new FileSystem)); |
+ jsEngine->SetFileSystem(std::make_shared<FileSystem>()); |
webRequest = std::make_shared<LazyWebRequest>(); |
jsEngine->SetWebRequest(webRequest); |
- jsEngine->SetLogSystem(AdblockPlus::LogSystemPtr(new LogSystem)); |
- filterEngine = FilterEnginePtr(new AdblockPlus::FilterEngine(jsEngine)); |
+ jsEngine->SetLogSystem(std::make_shared<LogSystem>()); |
+ filterEngine = std::make_shared<AdblockPlus::FilterEngine>(jsEngine); |
} |
void TearDown() |
@@ -94,7 +95,8 @@ |
} |
}; |
- MockWebRequest* mockWebRequest; |
+ AdblockPlus::JsEnginePtr jsEngine; |
+ std::shared_ptr<MockWebRequest> mockWebRequest; |
FilterEnginePtr filterEngine; |
void SetUp() |
@@ -102,11 +104,20 @@ |
AdblockPlus::AppInfo appInfo; |
appInfo.name = "test"; |
appInfo.version = "1.0.1"; |
- AdblockPlus::JsEnginePtr jsEngine = CreateJsEngine(appInfo); |
- jsEngine->SetFileSystem(AdblockPlus::FileSystemPtr(new LazyFileSystem)); |
- mockWebRequest = new MockWebRequest; |
- jsEngine->SetWebRequest(AdblockPlus::WebRequestPtr(mockWebRequest)); |
- filterEngine = FilterEnginePtr(new AdblockPlus::FilterEngine(jsEngine)); |
+ jsEngine = CreateJsEngine(appInfo); |
+ jsEngine->SetFileSystem(std::make_shared<LazyFileSystem>()); |
+ mockWebRequest = std::make_shared<MockWebRequest>(); |
+ jsEngine->SetWebRequest(mockWebRequest); |
+ filterEngine = std::make_shared<FilterEngine>(jsEngine); |
+ } |
+ |
+ void TearDown() |
+ { |
+ filterEngine.reset(); |
+ mockWebRequest.reset(); |
+ ToInternal(jsEngine)->WaitForQuietScheduler(); |
+ ASSERT_EQ(1, jsEngine.use_count()); |
+ jsEngine.reset(); |
} |
}; |
@@ -132,31 +143,41 @@ |
{ |
protected: |
FileSystemPtr fileSystem; |
- std::weak_ptr<JsEngine> weakJsEngine; |
+ std::shared_ptr<LazyWebRequest> webRequest; |
+ AdblockPlus::JsEnginePtr jsEngine; |
void SetUp() override |
{ |
- fileSystem.reset(new DefaultFileSystem()); |
+ fileSystem = std::make_shared<DefaultFileSystem>(); |
+ webRequest = std::make_shared<LazyWebRequest>(); |
// Since there is neither in memory FS nor functionality to work with |
// directories use the hack: manually clean the directory. |
removeFileIfExists("patterns.ini"); |
removeFileIfExists("prefs.json"); |
} |
- JsEnginePtr createJsEngine(const AppInfo& appInfo = AppInfo()) |
+ |
+ void createJsEngine(const AppInfo& appInfo = AppInfo()) |
{ |
- auto jsEngine = JsEngine::New(appInfo); |
- weakJsEngine = jsEngine; |
+ jsEngine = JsEngine::New(appInfo); |
jsEngine->SetFileSystem(fileSystem); |
- jsEngine->SetWebRequest(AdblockPlus::WebRequestPtr(new LazyWebRequest())); |
- jsEngine->SetLogSystem(AdblockPlus::LogSystemPtr(new LazyLogSystem())); |
- return jsEngine; |
+ jsEngine->SetWebRequest(webRequest); |
+ jsEngine->SetLogSystem(std::make_shared<LazyLogSystem>()); |
} |
+ |
void TearDown() override |
{ |
+ if (webRequest) |
+ { |
+ webRequest->Cancel(); |
+ } |
removeFileIfExists("patterns.ini"); |
removeFileIfExists("prefs.json"); |
fileSystem.reset(); |
+ ToInternal(jsEngine)->WaitForQuietScheduler(); |
+ ASSERT_EQ(1, jsEngine.use_count()); |
+ jsEngine.reset(); |
} |
+ |
void removeFileIfExists(const std::string& path) |
{ |
// Hack: allow IO to finish currently running operations, in particular |
@@ -175,7 +196,7 @@ |
} |
}; |
int i = 5; |
- while ((i-- > 0 && weakJsEngine.lock()) || !safeRemove()) |
+ while ((i-- > 0) || !safeRemove()) |
std::this_thread::sleep_for(std::chrono::seconds(2)); |
} |
}; |
@@ -608,9 +629,9 @@ |
AppInfo appInfo; |
appInfo.locale = "zh"; |
const std::string langSubscriptionUrl = "https://easylist-downloads.adblockplus.org/easylistchina+easylist.txt"; |
- auto jsEngine = createJsEngine(appInfo); |
- auto filterEngine = FilterEnginePtr(new AdblockPlus::FilterEngine(jsEngine)); |
- const auto subscriptions = filterEngine->GetListedSubscriptions(); |
+ createJsEngine(appInfo); |
+ auto filterEngine = std::make_shared<AdblockPlus::FilterEngine>(jsEngine); |
+ auto subscriptions = filterEngine->GetListedSubscriptions(); |
ASSERT_EQ(2u, subscriptions.size()); |
const auto aaUrl = filterEngine->GetPref("subscriptions_exceptionsurl")->AsString(); |
SubscriptionPtr aaSubscription; |
@@ -633,10 +654,10 @@ |
TEST_F(FilterEngineWithFreshFolder, DisableSubscriptionsAutoSelectOnFirstRun) |
{ |
- auto jsEngine = createJsEngine(); |
+ createJsEngine(); |
FilterEngine::Prefs preSettings; |
preSettings["first_run_subscription_auto_select"] = jsEngine->NewValue(false); |
- auto filterEngine = FilterEnginePtr(new AdblockPlus::FilterEngine(jsEngine, preSettings)); |
+ auto filterEngine = std::make_shared<AdblockPlus::FilterEngine>(jsEngine, preSettings); |
const auto subscriptions = filterEngine->GetListedSubscriptions(); |
EXPECT_EQ(0u, subscriptions.size()); |
} |