diff options
Diffstat (limited to 'content/renderer/v8_value_converter_impl_unittest.cc')
-rw-r--r-- | content/renderer/v8_value_converter_impl_unittest.cc | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/content/renderer/v8_value_converter_impl_unittest.cc b/content/renderer/v8_value_converter_impl_unittest.cc index a56941a..a4e461f 100644 --- a/content/renderer/v8_value_converter_impl_unittest.cc +++ b/content/renderer/v8_value_converter_impl_unittest.cc @@ -113,6 +113,7 @@ class V8ValueConverterImplTest : public testing::Test { static_cast<DictionaryValue*>( converter.FromV8Value(object, context_))); ASSERT_TRUE(dictionary.get()); + Value* temp = NULL; ASSERT_TRUE(dictionary->Get("test", &temp)); EXPECT_EQ(expected_type, temp->GetType()); @@ -346,3 +347,74 @@ TEST_F(V8ValueConverterImplTest, StripNullFromObjects) { ASSERT_TRUE(result.get()); EXPECT_EQ(0u, result->size()); } + +TEST_F(V8ValueConverterImplTest, RecursiveObjects) { + v8::Context::Scope context_scope(context_); + v8::HandleScope handle_scope; + + V8ValueConverterImpl converter; + + v8::Handle<v8::Object> object = v8::Object::New().As<v8::Object>(); + ASSERT_FALSE(object.IsEmpty()); + object->Set(v8::String::New("foo"), v8::String::New("bar")); + object->Set(v8::String::New("obj"), object); + + scoped_ptr<DictionaryValue> object_result( + static_cast<DictionaryValue*>(converter.FromV8Value(object, context_))); + ASSERT_TRUE(object_result.get()); + EXPECT_EQ(2u, object_result->size()); + EXPECT_TRUE(IsNull(object_result.get(), "obj")); + + v8::Handle<v8::Array> array = v8::Array::New().As<v8::Array>(); + ASSERT_FALSE(array.IsEmpty()); + array->Set(0, v8::String::New("1")); + array->Set(1, array); + + scoped_ptr<ListValue> list_result( + static_cast<ListValue*>(converter.FromV8Value(array, context_))); + ASSERT_TRUE(list_result.get()); + EXPECT_EQ(2u, list_result->GetSize()); + EXPECT_TRUE(IsNull(list_result.get(), 1)); +} + +TEST_F(V8ValueConverterImplTest, ObjectGetters) { + v8::Context::Scope context_scope(context_); + v8::HandleScope handle_scope; + + const char* source = "(function() {" + "var a = {};" + "a.__defineGetter__('foo', function() { return 'bar'; });" + "return a;" + "})();"; + + v8::Handle<v8::Script> script(v8::Script::New(v8::String::New(source))); + v8::Handle<v8::Object> object = script->Run().As<v8::Object>(); + ASSERT_FALSE(object.IsEmpty()); + + V8ValueConverterImpl converter; + scoped_ptr<DictionaryValue> result( + static_cast<DictionaryValue*>(converter.FromV8Value(object, context_))); + ASSERT_TRUE(result.get()); + EXPECT_EQ(1u, result->size()); +} + +TEST_F(V8ValueConverterImplTest, ArrayGetters) { + v8::Context::Scope context_scope(context_); + v8::HandleScope handle_scope; + + const char* source = "(function() {" + "var a = [0];" + "a.__defineGetter__(1, function() { return 'bar'; });" + "return a;" + "})();"; + + v8::Handle<v8::Script> script(v8::Script::New(v8::String::New(source))); + v8::Handle<v8::Array> array = script->Run().As<v8::Array>(); + ASSERT_FALSE(array.IsEmpty()); + + V8ValueConverterImpl converter; + scoped_ptr<ListValue> result( + static_cast<ListValue*>(converter.FromV8Value(array, context_))); + ASSERT_TRUE(result.get()); + EXPECT_EQ(2u, result->GetSize()); +} |