| Index: test/JsEngine.cpp | 
| =================================================================== | 
| --- a/test/JsEngine.cpp | 
| +++ b/test/JsEngine.cpp | 
| @@ -40,60 +40,98 @@ | 
|  | 
| TEST_F(JsEngineTest, CompileTimeExceptionIsThrown) | 
| { | 
| ASSERT_THROW(jsEngine->Evaluate("'foo'bar'"), std::runtime_error); | 
| } | 
|  | 
| TEST_F(JsEngineTest, ValueCreation) | 
| { | 
| -  AdblockPlus::JsValuePtr value; | 
| - | 
| -  value = jsEngine->NewValue("foo"); | 
| -  ASSERT_TRUE(value->IsString()); | 
| -  ASSERT_EQ("foo", value->AsString()); | 
| +  auto value = jsEngine->NewValue("foo"); | 
| +  ASSERT_TRUE(value.IsString()); | 
| +  ASSERT_EQ("foo", value.AsString()); | 
|  | 
| value = jsEngine->NewValue(12345678901234); | 
| -  ASSERT_TRUE(value->IsNumber()); | 
| -  ASSERT_EQ(12345678901234, value->AsInt()); | 
| +  ASSERT_TRUE(value.IsNumber()); | 
| +  ASSERT_EQ(12345678901234, value.AsInt()); | 
|  | 
| value = jsEngine->NewValue(true); | 
| -  ASSERT_TRUE(value->IsBool()); | 
| -  ASSERT_TRUE(value->AsBool()); | 
| +  ASSERT_TRUE(value.IsBool()); | 
| +  ASSERT_TRUE(value.AsBool()); | 
|  | 
| value = jsEngine->NewObject(); | 
| -  ASSERT_TRUE(value->IsObject()); | 
| -  ASSERT_EQ(0u, value->GetOwnPropertyNames().size()); | 
| +  ASSERT_TRUE(value.IsObject()); | 
| +  ASSERT_EQ(0u, value.GetOwnPropertyNames().size()); | 
| +} | 
| + | 
| +TEST_F(JsEngineTest, ValueCopy) | 
| +{ | 
| +  { | 
| +    auto value = jsEngine->NewValue("foo"); | 
| +    ASSERT_TRUE(value.IsString()); | 
| +    ASSERT_EQ("foo", value.AsString()); | 
| + | 
| +    AdblockPlus::JsValue value2(value); | 
| +    ASSERT_TRUE(value2.IsString()); | 
| +    ASSERT_EQ("foo", value2.AsString()); | 
| +  } | 
| +  { | 
| +    auto value = jsEngine->NewValue(12345678901234); | 
| +    ASSERT_TRUE(value.IsNumber()); | 
| +    ASSERT_EQ(12345678901234, value.AsInt()); | 
| + | 
| +    AdblockPlus::JsValue value2(value); | 
| +    ASSERT_TRUE(value2.IsNumber()); | 
| +    ASSERT_EQ(12345678901234, value2.AsInt()); | 
| +  } | 
| +  { | 
| +    auto value = jsEngine->NewValue(true); | 
| +    ASSERT_TRUE(value.IsBool()); | 
| +    ASSERT_TRUE(value.AsBool()); | 
| + | 
| +    AdblockPlus::JsValue value2(value); | 
| +    ASSERT_TRUE(value2.IsBool()); | 
| +    ASSERT_TRUE(value2.AsBool()); | 
| +  } | 
| +  { | 
| +    auto value = jsEngine->NewObject(); | 
| +    ASSERT_TRUE(value.IsObject()); | 
| +    ASSERT_EQ(0u, value.GetOwnPropertyNames().size()); | 
| + | 
| +    AdblockPlus::JsValue value2(value); | 
| +    ASSERT_TRUE(value2.IsObject()); | 
| +    ASSERT_EQ(0u, value2.GetOwnPropertyNames().size()); | 
| +  } | 
| } | 
|  | 
| TEST_F(JsEngineTest, EventCallbacks) | 
| { | 
| bool callbackCalled = false; | 
| -  AdblockPlus::JsConstValueList callbackParams; | 
| +  AdblockPlus::JsValueList callbackParams; | 
| auto Callback = [&callbackCalled, & callbackParams]( | 
| -    const AdblockPlus::JsConstValueList& params) | 
| +    const AdblockPlus::JsValueList& params) | 
| { | 
| callbackCalled = true; | 
| callbackParams = params; | 
| }; | 
|  | 
| // Trigger event without a callback | 
| callbackCalled = false; | 
| jsEngine->Evaluate("_triggerEvent('foobar')"); | 
| ASSERT_FALSE(callbackCalled); | 
|  | 
| // Set callback | 
| jsEngine->SetEventCallback("foobar", Callback); | 
| callbackCalled = false; | 
| jsEngine->Evaluate("_triggerEvent('foobar', 1, 'x', true)"); | 
| ASSERT_TRUE(callbackCalled); | 
| ASSERT_EQ(callbackParams.size(), 3u); | 
| -  ASSERT_EQ(callbackParams[0]->AsInt(), 1); | 
| -  ASSERT_EQ(callbackParams[1]->AsString(), "x"); | 
| -  ASSERT_TRUE(callbackParams[2]->AsBool()); | 
| +  ASSERT_EQ(callbackParams[0].AsInt(), 1); | 
| +  ASSERT_EQ(callbackParams[1].AsString(), "x"); | 
| +  ASSERT_TRUE(callbackParams[2].AsBool()); | 
|  | 
| // Trigger a different event | 
| callbackCalled = false; | 
| jsEngine->Evaluate("_triggerEvent('barfoo')"); | 
| ASSERT_FALSE(callbackCalled); | 
|  | 
| // Remove callback | 
| jsEngine->RemoveEventCallback("foobar"); | 
| @@ -123,14 +161,14 @@ | 
| AdblockPlus::WebRequestPtr webRequest(new AdblockPlus::DefaultWebRequest()); | 
| jsEngine->SetWebRequest(webRequest); | 
| ASSERT_EQ(webRequest, jsEngine->GetWebRequest()); | 
| } | 
|  | 
| TEST(NewJsEngineTest, GlobalPropertyTest) | 
| { | 
| AdblockPlus::JsEnginePtr jsEngine(AdblockPlus::JsEngine::New()); | 
| -  jsEngine->SetGlobalProperty("foo", *jsEngine->NewValue("bar")); | 
| +  jsEngine->SetGlobalProperty("foo", jsEngine->NewValue("bar")); | 
| AdblockPlus::JsValuePtr foo = jsEngine->Evaluate("foo"); | 
| ASSERT_TRUE(foo->IsString()); | 
| ASSERT_EQ(foo->AsString(), "bar"); | 
| } | 
|  | 
|  |