| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "bindings/core/v8/ToV8.h" | 5 #include "bindings/core/v8/ToV8.h" |
| 6 | 6 |
| 7 #include "bindings/core/v8/V8Binding.h" | 7 #include "bindings/core/v8/V8Binding.h" |
| 8 #include "bindings/core/v8/V8BindingForTesting.h" | 8 #include "bindings/core/v8/V8BindingForTesting.h" |
| 9 #include "core/testing/GarbageCollectedScriptWrappable.h" | 9 #include "core/testing/GarbageCollectedScriptWrappable.h" |
| 10 #include "core/testing/RefCountedScriptWrappable.h" | 10 #include "core/testing/RefCountedScriptWrappable.h" |
| 11 #include "platform/heap/Heap.h" | 11 #include "platform/heap/Heap.h" |
| 12 #include "testing/gtest/include/gtest/gtest.h" | 12 #include "testing/gtest/include/gtest/gtest.h" |
| 13 #include "wtf/Vector.h" | 13 #include "wtf/Vector.h" |
| 14 #include <limits> | 14 #include <limits> |
| 15 | 15 |
| 16 #define TEST_TOV8(expected, value) testToV8(expected, value, __FILE__, __LINE__) | 16 #define TEST_TOV8(expected, value) testToV8(expected, value, __FILE__, __LINE__) |
| 17 | 17 |
| 18 namespace blink { | 18 namespace blink { |
| 19 | 19 |
| 20 namespace { | 20 namespace { |
| 21 | 21 |
| 22 class ToV8Test : public ::testing::Test { | 22 class ToV8Test : public ::testing::Test { |
| 23 public: | 23 public: |
| 24 ToV8Test() : m_scope(v8::Isolate::GetCurrent()) { } | 24 ToV8Test() : m_scope(v8::Isolate::GetCurrent()) { } |
| 25 | 25 |
| 26 template<typename T> | 26 template<typename T> |
| 27 void testToV8(const char* expected, T value, const char* path, int lineNumbe
r) | 27 void testToV8(const char* expected, T value, const char* path, int lineNumbe
r) |
| 28 { | 28 { |
| 29 v8::Local<v8::Value> actual = toV8(value, m_scope.scriptState()->context
()->Global(), m_scope.isolate()); | 29 v8::Local<v8::Value> actual = toV8(value, m_scope.getScriptState()->cont
ext()->Global(), m_scope.isolate()); |
| 30 if (actual.IsEmpty()) { | 30 if (actual.IsEmpty()) { |
| 31 ADD_FAILURE_AT(path, lineNumber) << "toV8 returns an empty value."; | 31 ADD_FAILURE_AT(path, lineNumber) << "toV8 returns an empty value."; |
| 32 return; | 32 return; |
| 33 } | 33 } |
| 34 String actualString = toCoreString(actual->ToString(m_scope.context()).T
oLocalChecked()); | 34 String actualString = toCoreString(actual->ToString(m_scope.context()).T
oLocalChecked()); |
| 35 if (String(expected) != actualString) { | 35 if (String(expected) != actualString) { |
| 36 ADD_FAILURE_AT(path, lineNumber) << "toV8 returns an incorrect value
.\n Actual: " << actualString.utf8().data() << "\nExpected: " << expected; | 36 ADD_FAILURE_AT(path, lineNumber) << "toV8 returns an incorrect value
.\n Actual: " << actualString.utf8().data() << "\nExpected: " << expected; |
| 37 return; | 37 return; |
| 38 } | 38 } |
| 39 } | 39 } |
| (...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 154 TEST_TOV8("5678", handleValue); | 154 TEST_TOV8("5678", handleValue); |
| 155 } | 155 } |
| 156 | 156 |
| 157 TEST_F(ToV8Test, undefinedType) | 157 TEST_F(ToV8Test, undefinedType) |
| 158 { | 158 { |
| 159 TEST_TOV8("undefined", ToV8UndefinedGenerator()); | 159 TEST_TOV8("undefined", ToV8UndefinedGenerator()); |
| 160 } | 160 } |
| 161 | 161 |
| 162 TEST_F(ToV8Test, scriptValue) | 162 TEST_F(ToV8Test, scriptValue) |
| 163 { | 163 { |
| 164 ScriptValue value(m_scope.scriptState(), v8::Number::New(m_scope.isolate(),
1234)); | 164 ScriptValue value(m_scope.getScriptState(), v8::Number::New(m_scope.isolate(
), 1234)); |
| 165 | 165 |
| 166 TEST_TOV8("1234", value); | 166 TEST_TOV8("1234", value); |
| 167 } | 167 } |
| 168 | 168 |
| 169 TEST_F(ToV8Test, vector) | 169 TEST_F(ToV8Test, vector) |
| 170 { | 170 { |
| 171 Vector<RefPtr<RefCountedScriptWrappable>> v; | 171 Vector<RefPtr<RefCountedScriptWrappable>> v; |
| 172 v.append(RefCountedScriptWrappable::create("foo")); | 172 v.append(RefCountedScriptWrappable::create("foo")); |
| 173 v.append(RefCountedScriptWrappable::create("bar")); | 173 v.append(RefCountedScriptWrappable::create("bar")); |
| 174 | 174 |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 226 boolVector.append(false); | 226 boolVector.append(false); |
| 227 TEST_TOV8("true,true,false", boolVector); | 227 TEST_TOV8("true,true,false", boolVector); |
| 228 } | 228 } |
| 229 | 229 |
| 230 TEST_F(ToV8Test, dictionaryVector) | 230 TEST_F(ToV8Test, dictionaryVector) |
| 231 { | 231 { |
| 232 Vector<std::pair<String, int>> dictionary; | 232 Vector<std::pair<String, int>> dictionary; |
| 233 dictionary.append(std::make_pair("one", 1)); | 233 dictionary.append(std::make_pair("one", 1)); |
| 234 dictionary.append(std::make_pair("two", 2)); | 234 dictionary.append(std::make_pair("two", 2)); |
| 235 TEST_TOV8("[object Object]", dictionary); | 235 TEST_TOV8("[object Object]", dictionary); |
| 236 v8::Local<v8::Context> context = m_scope.scriptState()->context(); | 236 v8::Local<v8::Context> context = m_scope.getScriptState()->context(); |
| 237 v8::Local<v8::Object> result = toV8(dictionary, context->Global(), m_scope.i
solate())->ToObject(context).ToLocalChecked(); | 237 v8::Local<v8::Object> result = toV8(dictionary, context->Global(), m_scope.i
solate())->ToObject(context).ToLocalChecked(); |
| 238 v8::Local<v8::Value> one = result->Get(context, v8String(m_scope.isolate(),
"one")).ToLocalChecked(); | 238 v8::Local<v8::Value> one = result->Get(context, v8String(m_scope.isolate(),
"one")).ToLocalChecked(); |
| 239 EXPECT_EQ(1, one->NumberValue(context).FromJust()); | 239 EXPECT_EQ(1, one->NumberValue(context).FromJust()); |
| 240 v8::Local<v8::Value> two = result->Get(context, v8String(m_scope.isolate(),
"two")).ToLocalChecked(); | 240 v8::Local<v8::Value> two = result->Get(context, v8String(m_scope.isolate(),
"two")).ToLocalChecked(); |
| 241 EXPECT_EQ(2, two->NumberValue(context).FromJust()); | 241 EXPECT_EQ(2, two->NumberValue(context).FromJust()); |
| 242 } | 242 } |
| 243 | 243 |
| 244 TEST_F(ToV8Test, heapVector) | 244 TEST_F(ToV8Test, heapVector) |
| 245 { | 245 { |
| 246 HeapVector<Member<GarbageCollectedScriptWrappable>> v; | 246 HeapVector<Member<GarbageCollectedScriptWrappable>> v; |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 298 | 298 |
| 299 HeapVector<bool> boolVector; | 299 HeapVector<bool> boolVector; |
| 300 boolVector.append(true); | 300 boolVector.append(true); |
| 301 boolVector.append(true); | 301 boolVector.append(true); |
| 302 boolVector.append(false); | 302 boolVector.append(false); |
| 303 TEST_TOV8("true,true,false", boolVector); | 303 TEST_TOV8("true,true,false", boolVector); |
| 304 } | 304 } |
| 305 | 305 |
| 306 TEST_F(ToV8Test, withScriptState) | 306 TEST_F(ToV8Test, withScriptState) |
| 307 { | 307 { |
| 308 ScriptValue value(m_scope.scriptState(), v8::Number::New(m_scope.isolate(),
1234.0)); | 308 ScriptValue value(m_scope.getScriptState(), v8::Number::New(m_scope.isolate(
), 1234.0)); |
| 309 | 309 |
| 310 v8::Local<v8::Value> actual = toV8(value, m_scope.scriptState()); | 310 v8::Local<v8::Value> actual = toV8(value, m_scope.getScriptState()); |
| 311 EXPECT_FALSE(actual.IsEmpty()); | 311 EXPECT_FALSE(actual.IsEmpty()); |
| 312 | 312 |
| 313 double actualAsNumber = actual.As<v8::Number>()->Value(); | 313 double actualAsNumber = actual.As<v8::Number>()->Value(); |
| 314 EXPECT_EQ(1234.0, actualAsNumber); | 314 EXPECT_EQ(1234.0, actualAsNumber); |
| 315 } | 315 } |
| 316 | 316 |
| 317 } // namespace | 317 } // namespace |
| 318 | 318 |
| 319 } // namespace blink | 319 } // namespace blink |
| OLD | NEW |