Index: test/Prefs.cpp |
=================================================================== |
--- a/test/Prefs.cpp |
+++ b/test/Prefs.cpp |
@@ -18,6 +18,7 @@ |
#include <sstream> |
#include "BaseJsTest.h" |
+#include "../src/JsEngineTransition.h" |
namespace |
{ |
@@ -71,19 +72,51 @@ |
void SetUp() |
{ |
fileSystem = std::make_shared<TestFileSystem>(); |
- Reset(); |
+ Construct(boolPrefsInitializer()); |
} |
- void Reset(const AdblockPlus::FilterEngine::Prefs& preconfiguredPrefs = |
- AdblockPlus::FilterEngine::Prefs()) |
+ void TearDown() |
{ |
+ Destroy(); |
+ fileSystem.reset(); |
+ } |
+ |
+ // Type of initializer values for C++ boolean preferences |
+ typedef std::map<std::string, bool> boolPrefsInitializer; |
+ |
+ void Reset(const boolPrefsInitializer& boolPrefs = boolPrefsInitializer()) |
+ { |
+ Destroy(); |
+ Construct(boolPrefs); |
+ } |
+ |
+ private: |
+ void Construct(const boolPrefsInitializer& boolPrefs) |
+ { |
+ // New JS engine and its resources |
jsEngine = CreateJsEngine(); |
- jsEngine->SetLogSystem(AdblockPlus::LogSystemPtr(new LazyLogSystem)); |
+ jsEngine->SetLogSystem(std::make_shared<LazyLogSystem>()); |
jsEngine->SetFileSystem(fileSystem); |
- jsEngine->SetWebRequest(AdblockPlus::WebRequestPtr(new LazyWebRequest)); |
+ jsEngine->SetWebRequest(std::make_shared<LazyWebRequest>()); |
+ /* |
+ * Create preference values under the new JS engine. |
+ */ |
+ AdblockPlus::FilterEngine::Prefs jsValuePrefs; |
+ for (boolPrefsInitializer::const_iterator entry = boolPrefs.begin(); |
+ entry != boolPrefs.end(); ++entry) |
+ { |
+ jsValuePrefs[entry->first] = jsEngine->NewValue(entry->second); |
+ } |
+ // Use a new filter engine |
+ filterEngine = std::make_shared<AdblockPlus::FilterEngine>(jsEngine, jsValuePrefs); |
+ } |
- filterEngine.reset( |
- new AdblockPlus::FilterEngine(jsEngine, preconfiguredPrefs)); |
+ void Destroy() |
+ { |
+ filterEngine.reset(); |
+ ToInternal(jsEngine)->WaitForQuietScheduler(); |
+ jsEngine.reset(); |
+ EXPECT_EQ(0, jsEngine.use_count()); |
} |
}; |
} |
@@ -148,9 +181,9 @@ |
TEST_F(PrefsTest, PreconfiguredPrefsPreconfigured) |
{ |
- AdblockPlus::FilterEngine::Prefs preconfiguredPrefs; |
- preconfiguredPrefs["disable_auto_updates"] = jsEngine->NewValue(false); |
- preconfiguredPrefs["suppress_first_run_page"] = jsEngine->NewValue(true); |
+ boolPrefsInitializer preconfiguredPrefs; |
+ preconfiguredPrefs["disable_auto_updates"] = false; |
+ preconfiguredPrefs["suppress_first_run_page"] = true; |
Reset(preconfiguredPrefs); |
ASSERT_TRUE(filterEngine->GetPref("disable_auto_updates")->IsBool()); |
@@ -161,8 +194,8 @@ |
TEST_F(PrefsTest, PreconfiguredPrefsUnsupported) |
{ |
- AdblockPlus::FilterEngine::Prefs preconfiguredPrefs; |
- preconfiguredPrefs["unsupported_preconfig"] = jsEngine->NewValue(true); |
+ boolPrefsInitializer preconfiguredPrefs; |
+ preconfiguredPrefs["unsupported_preconfig"] = true; |
Reset(preconfiguredPrefs); |
ASSERT_TRUE(filterEngine->GetPref("unsupported_preconfig")->IsUndefined()); |
@@ -170,8 +203,8 @@ |
TEST_F(PrefsTest, PreconfiguredPrefsOverride) |
{ |
- AdblockPlus::FilterEngine::Prefs preconfiguredPrefs; |
- preconfiguredPrefs["suppress_first_run_page"] = jsEngine->NewValue(true); |
+ boolPrefsInitializer preconfiguredPrefs; |
+ preconfiguredPrefs["suppress_first_run_page"] = true; |
Reset(preconfiguredPrefs); |
filterEngine->SetPref("suppress_first_run_page", jsEngine->NewValue(false)); |
@@ -181,8 +214,8 @@ |
TEST_F(PrefsTest, PrefsPersistWhenPreconfigured) |
{ |
- AdblockPlus::FilterEngine::Prefs preconfiguredPrefs; |
- preconfiguredPrefs["suppress_first_run_page"] = jsEngine->NewValue(true); |
+ boolPrefsInitializer preconfiguredPrefs; |
+ preconfiguredPrefs["suppress_first_run_page"] = true; |
Reset(preconfiguredPrefs); |
ASSERT_TRUE(filterEngine->GetPref("suppress_first_run_page")->IsBool()); |