| 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()); |