diff options
author | aa@chromium.org <aa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-04-22 18:33:41 +0000 |
---|---|---|
committer | aa@chromium.org <aa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-04-22 18:33:41 +0000 |
commit | 56fb1cf1244d2c7de266794426794dc8c3a2771d (patch) | |
tree | f10d857a9c614233d881c90716015f58a8d5b19e /content/renderer/v8_value_converter_browsertest.cc | |
parent | 3c8b60c5a5c3327e6ed049995ca502a938ecd091 (diff) | |
download | chromium_src-56fb1cf1244d2c7de266794426794dc8c3a2771d.zip chromium_src-56fb1cf1244d2c7de266794426794dc8c3a2771d.tar.gz chromium_src-56fb1cf1244d2c7de266794426794dc8c3a2771d.tar.bz2 |
Revert 82671 - V8ValueConverter: Handle exceptions when dealing with objectproperties.Review URL: http://codereview.chromium.org/6878086
TBR=aa@chromium.org
Review URL: http://codereview.chromium.org/6900020
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@82677 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/renderer/v8_value_converter_browsertest.cc')
-rw-r--r-- | content/renderer/v8_value_converter_browsertest.cc | 233 |
1 files changed, 3 insertions, 230 deletions
diff --git a/content/renderer/v8_value_converter_browsertest.cc b/content/renderer/v8_value_converter_browsertest.cc index 650927f..769b281 100644 --- a/content/renderer/v8_value_converter_browsertest.cc +++ b/content/renderer/v8_value_converter_browsertest.cc @@ -22,115 +22,6 @@ class V8ValueConverterTest : public testing::Test { context_.Dispose(); } - std::string GetString(DictionaryValue* value, const std::string& key) { - std::string temp; - if (!value->GetString(key, &temp)) { - ADD_FAILURE(); - return ""; - } - return temp; - } - - std::string GetString(v8::Handle<v8::Object> value, const std::string& key) { - v8::Handle<v8::String> temp = - value->Get(v8::String::New(key.c_str())).As<v8::String>(); - if (temp.IsEmpty()) { - ADD_FAILURE(); - return ""; - } - v8::String::Utf8Value utf8(temp); - return std::string(*utf8, utf8.length()); - } - - std::string GetString(ListValue* value, uint32 index) { - std::string temp; - if (!value->GetString(static_cast<size_t>(index), &temp)) { - ADD_FAILURE(); - return ""; - } - return temp; - } - - std::string GetString(v8::Handle<v8::Array> value, uint32 index) { - v8::Handle<v8::String> temp = value->Get(index).As<v8::String>(); - if (temp.IsEmpty()) { - ADD_FAILURE(); - return ""; - } - v8::String::Utf8Value utf8(temp); - return std::string(*utf8, utf8.length()); - } - - bool IsNull(DictionaryValue* value, const std::string& key) { - Value* child = NULL; - if (!value->Get(key, &child)) { - ADD_FAILURE(); - return false; - } - return child->GetType() == Value::TYPE_NULL; - } - - bool IsNull(v8::Handle<v8::Object> value, const std::string& key) { - v8::Handle<v8::Value> child = value->Get(v8::String::New(key.c_str())); - if (child.IsEmpty()) { - ADD_FAILURE(); - return false; - } - return child->IsNull(); - } - - bool IsNull(ListValue* value, uint32 index) { - Value* child = NULL; - if (!value->Get(static_cast<size_t>(index), &child)) { - ADD_FAILURE(); - return false; - } - return child->GetType() == Value::TYPE_NULL; - } - - bool IsNull(v8::Handle<v8::Array> value, uint32 index) { - v8::Handle<v8::Value> child = value->Get(index); - if (child.IsEmpty()) { - ADD_FAILURE(); - return false; - } - return child->IsNull(); - } - - void TestWeirdType(const V8ValueConverter& converter, - v8::Handle<v8::Value> val, - Value::ValueType expected_type, - Value* expected_value) { - scoped_ptr<Value> raw(converter.FromV8Value(val, context_)); - ASSERT_TRUE(raw.get()); - EXPECT_EQ(expected_type, raw->GetType()); - if (expected_value) - EXPECT_TRUE(expected_value->Equals(raw.get())); - - v8::Handle<v8::Object> object(v8::Object::New()); - object->Set(v8::String::New("test"), val); - scoped_ptr<DictionaryValue> dictionary( - 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()); - if (expected_value) - EXPECT_TRUE(expected_value->Equals(temp)); - - v8::Handle<v8::Array> array(v8::Array::New()); - array->Set(0, val); - scoped_ptr<ListValue> list( - static_cast<ListValue*>( - converter.FromV8Value(array, context_))); - ASSERT_TRUE(list.get()); - ASSERT_TRUE(list->Get(0, &temp)); - EXPECT_EQ(expected_type, temp->GetType()); - if (expected_value) - EXPECT_TRUE(expected_value->Equals(temp)); - } - // Context for the JavaScript in the test. v8::Persistent<v8::Context> context_; }; @@ -165,8 +56,9 @@ TEST_F(V8ValueConverterTest, BasicRoundTrip) { v8::HandleScope handle_scope; V8ValueConverter converter; - v8::Handle<v8::Object> v8_object = - converter.ToV8Value(&original_root, context_).As<v8::Object>(); + v8::Handle<v8::Object> v8_object( + v8::Handle<v8::Object>::Cast( + converter.ToV8Value(&original_root, context_))); ASSERT_FALSE(v8_object.IsEmpty()); EXPECT_EQ(original_root.size(), v8_object->GetPropertyNames()->Length()); @@ -205,122 +97,3 @@ TEST_F(V8ValueConverterTest, KeysWithDots) { EXPECT_TRUE(original.Equals(copy.get())); } - -TEST_F(V8ValueConverterTest, ObjectExceptions) { - v8::Context::Scope context_scope(context_); - v8::HandleScope handle_scope; - - // Set up objects to throw when reading or writing 'foo'. - const char* source = - "Object.prototype.__defineSetter__('foo', " - " function() { throw new Error('muah!'); });" - "Object.prototype.__defineGetter__('foo', " - " function() { throw new Error('muah!'); });"; - - v8::Handle<v8::Script> script(v8::Script::New(v8::String::New(source))); - script->Run(); - - v8::Handle<v8::Object> object(v8::Object::New()); - object->Set(v8::String::New("bar"), v8::String::New("bar")); - - // Converting from v8 value should replace the foo property with null. - V8ValueConverter converter; - scoped_ptr<DictionaryValue> converted(static_cast<DictionaryValue*>( - converter.FromV8Value(object, context_))); - EXPECT_TRUE(converted.get()); - // http://code.google.com/p/v8/issues/detail?id=1342 - // EXPECT_EQ(2u, converted->size()); - // EXPECT_TRUE(IsNull(converted.get(), "foo")); - EXPECT_EQ(1u, converted->size()); - EXPECT_EQ("bar", GetString(converted.get(), "bar")); - - // Converting to v8 value should drop the foo property. - converted->SetString("foo", "foo"); - v8::Handle<v8::Object> copy = - converter.ToV8Value(converted.get(), context_).As<v8::Object>(); - EXPECT_FALSE(copy.IsEmpty()); - EXPECT_EQ(2u, copy->GetPropertyNames()->Length()); - EXPECT_EQ("bar", GetString(copy, "bar")); -} - -TEST_F(V8ValueConverterTest, ArrayExceptions) { - v8::Context::Scope context_scope(context_); - v8::HandleScope handle_scope; - - const char* source = "(function() {" - "var arr = [];" - "arr.__defineSetter__(0, " - " function() { throw new Error('muah!'); });" - "arr.__defineGetter__(0, " - " function() { throw new Error('muah!'); });" - "arr[1] = 'bar';" - "return arr;" - "})();"; - - 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()); - - // Converting from v8 value should replace the first item with null. - V8ValueConverter converter; - scoped_ptr<ListValue> converted(static_cast<ListValue*>( - converter.FromV8Value(array, context_))); - ASSERT_TRUE(converted.get()); - // http://code.google.com/p/v8/issues/detail?id=1342 - EXPECT_EQ(2u, converted->GetSize()); - EXPECT_TRUE(IsNull(converted.get(), 0)); - - // Converting to v8 value should drop the first item and leave a hole. - converted.reset(new ListValue()); - converted->Append(Value::CreateStringValue("foo")); - converted->Append(Value::CreateStringValue("bar")); - v8::Handle<v8::Array> copy = - converter.ToV8Value(converted.get(), context_).As<v8::Array>(); - ASSERT_FALSE(copy.IsEmpty()); - EXPECT_EQ(2u, copy->Length()); - EXPECT_EQ("bar", GetString(copy, 1)); -} - -TEST_F(V8ValueConverterTest, WeirdTypes) { - v8::Context::Scope context_scope(context_); - v8::HandleScope handle_scope; - - v8::Handle<v8::RegExp> regex( - v8::RegExp::New(v8::String::New("."), v8::RegExp::kNone)); - - V8ValueConverter converter; - TestWeirdType(converter, v8::Undefined(), Value::TYPE_NULL, NULL); - TestWeirdType(converter, v8::Date::New(1000), Value::TYPE_DICTIONARY, NULL); - TestWeirdType(converter, regex, Value::TYPE_DICTIONARY, NULL); - - converter.set_allow_undefined(true); - TestWeirdType(converter, v8::Undefined(), Value::TYPE_NULL, NULL); - - converter.set_allow_date(true); - TestWeirdType(converter, v8::Date::New(1000), Value::TYPE_DOUBLE, - Value::CreateDoubleValue(1)); - - converter.set_allow_regexp(true); - TestWeirdType(converter, regex, Value::TYPE_STRING, - Value::CreateStringValue("/./")); -} - -TEST_F(V8ValueConverterTest, Prototype) { - v8::Context::Scope context_scope(context_); - v8::HandleScope handle_scope; - - const char* source = "(function() {" - "Object.prototype.foo = 'foo';" - "return {};" - "})();"; - - 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()); - - V8ValueConverter converter; - scoped_ptr<DictionaryValue> result( - static_cast<DictionaryValue*>(converter.FromV8Value(object, context_))); - ASSERT_TRUE(result.get()); - EXPECT_EQ(0u, result->size()); -} |