| 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/V8Binding.h" | 5 #include "bindings/core/v8/V8Binding.h" |
| 6 | 6 |
| 7 #include "bindings/core/v8/ExceptionState.h" | 7 #include "bindings/core/v8/ExceptionState.h" |
| 8 #include "bindings/core/v8/ToV8.h" | 8 #include "bindings/core/v8/ToV8.h" |
| 9 #include "bindings/core/v8/V8BindingForTesting.h" | 9 #include "bindings/core/v8/V8BindingForTesting.h" |
| 10 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
| 11 #include "wtf/Vector.h" | 11 #include "wtf/Vector.h" |
| 12 | 12 |
| 13 namespace blink { | 13 namespace blink { |
| 14 | 14 |
| 15 namespace { | 15 namespace { |
| 16 | 16 |
| 17 template <typename T> | 17 template <typename T> |
| 18 v8::Local<v8::Value> toV8(V8TestingScope* scope, T value) { | 18 v8::Local<v8::Value> ToV8(V8TestingScope* scope, T value) { |
| 19 return blink::toV8(value, scope->context()->Global(), scope->isolate()); | 19 return blink::ToV8(value, scope->context()->Global(), scope->isolate()); |
| 20 } | 20 } |
| 21 | 21 |
| 22 TEST(V8BindingTest, toImplSequence) { | 22 TEST(V8BindingTest, toImplSequence) { |
| 23 V8TestingScope scope; | 23 V8TestingScope scope; |
| 24 { | 24 { |
| 25 v8::Local<v8::Array> v8StringArray = v8::Array::New(scope.isolate(), 2); | 25 v8::Local<v8::Array> v8StringArray = v8::Array::New(scope.isolate(), 2); |
| 26 v8StringArray | 26 v8StringArray |
| 27 ->Set(scope.context(), toV8(&scope, 0), toV8(&scope, "Hello, World!")) | 27 ->Set(scope.context(), ToV8(&scope, 0), ToV8(&scope, "Hello, World!")) |
| 28 .ToChecked(); | 28 .ToChecked(); |
| 29 v8StringArray | 29 v8StringArray |
| 30 ->Set(scope.context(), toV8(&scope, 1), toV8(&scope, "Hi, Mom!")) | 30 ->Set(scope.context(), ToV8(&scope, 1), ToV8(&scope, "Hi, Mom!")) |
| 31 .ToChecked(); | 31 .ToChecked(); |
| 32 | 32 |
| 33 NonThrowableExceptionState exceptionState; | 33 NonThrowableExceptionState exceptionState; |
| 34 Vector<String> stringVector = toImplSequence<Vector<String>>( | 34 Vector<String> stringVector = toImplSequence<Vector<String>>( |
| 35 scope.isolate(), v8StringArray, exceptionState); | 35 scope.isolate(), v8StringArray, exceptionState); |
| 36 EXPECT_EQ(2U, stringVector.size()); | 36 EXPECT_EQ(2U, stringVector.size()); |
| 37 EXPECT_EQ("Hello, World!", stringVector[0]); | 37 EXPECT_EQ("Hello, World!", stringVector[0]); |
| 38 EXPECT_EQ("Hi, Mom!", stringVector[1]); | 38 EXPECT_EQ("Hi, Mom!", stringVector[1]); |
| 39 } | 39 } |
| 40 } | 40 } |
| 41 | 41 |
| 42 TEST(V8BindingTest, toImplArray) { | 42 TEST(V8BindingTest, toImplArray) { |
| 43 V8TestingScope scope; | 43 V8TestingScope scope; |
| 44 { | 44 { |
| 45 v8::Local<v8::Array> v8StringArray = v8::Array::New(scope.isolate(), 2); | 45 v8::Local<v8::Array> v8StringArray = v8::Array::New(scope.isolate(), 2); |
| 46 EXPECT_TRUE(v8CallBoolean(v8StringArray->Set( | 46 EXPECT_TRUE(v8CallBoolean(v8StringArray->Set( |
| 47 scope.context(), toV8(&scope, 0), toV8(&scope, "Hello, World!")))); | 47 scope.context(), ToV8(&scope, 0), ToV8(&scope, "Hello, World!")))); |
| 48 EXPECT_TRUE(v8CallBoolean(v8StringArray->Set( | 48 EXPECT_TRUE(v8CallBoolean(v8StringArray->Set( |
| 49 scope.context(), toV8(&scope, 1), toV8(&scope, "Hi, Mom!")))); | 49 scope.context(), ToV8(&scope, 1), ToV8(&scope, "Hi, Mom!")))); |
| 50 | 50 |
| 51 NonThrowableExceptionState exceptionState; | 51 NonThrowableExceptionState exceptionState; |
| 52 Vector<String> stringVector = toImplArray<Vector<String>>( | 52 Vector<String> stringVector = toImplArray<Vector<String>>( |
| 53 v8StringArray, 0, scope.isolate(), exceptionState); | 53 v8StringArray, 0, scope.isolate(), exceptionState); |
| 54 EXPECT_EQ(2U, stringVector.size()); | 54 EXPECT_EQ(2U, stringVector.size()); |
| 55 EXPECT_EQ("Hello, World!", stringVector[0]); | 55 EXPECT_EQ("Hello, World!", stringVector[0]); |
| 56 EXPECT_EQ("Hi, Mom!", stringVector[1]); | 56 EXPECT_EQ("Hi, Mom!", stringVector[1]); |
| 57 } | 57 } |
| 58 { | 58 { |
| 59 v8::Local<v8::Array> v8UnsignedArray = v8::Array::New(scope.isolate(), 3); | 59 v8::Local<v8::Array> v8UnsignedArray = v8::Array::New(scope.isolate(), 3); |
| 60 EXPECT_TRUE(v8CallBoolean(v8UnsignedArray->Set( | 60 EXPECT_TRUE(v8CallBoolean(v8UnsignedArray->Set( |
| 61 scope.context(), toV8(&scope, 0), toV8(&scope, 42)))); | 61 scope.context(), ToV8(&scope, 0), ToV8(&scope, 42)))); |
| 62 EXPECT_TRUE(v8CallBoolean(v8UnsignedArray->Set( | 62 EXPECT_TRUE(v8CallBoolean(v8UnsignedArray->Set( |
| 63 scope.context(), toV8(&scope, 1), toV8(&scope, 1729)))); | 63 scope.context(), ToV8(&scope, 1), ToV8(&scope, 1729)))); |
| 64 EXPECT_TRUE(v8CallBoolean(v8UnsignedArray->Set( | 64 EXPECT_TRUE(v8CallBoolean(v8UnsignedArray->Set( |
| 65 scope.context(), toV8(&scope, 2), toV8(&scope, 31773)))); | 65 scope.context(), ToV8(&scope, 2), ToV8(&scope, 31773)))); |
| 66 | 66 |
| 67 NonThrowableExceptionState exceptionState; | 67 NonThrowableExceptionState exceptionState; |
| 68 Vector<unsigned> unsignedVector = toImplArray<Vector<unsigned>>( | 68 Vector<unsigned> unsignedVector = toImplArray<Vector<unsigned>>( |
| 69 v8UnsignedArray, 0, scope.isolate(), exceptionState); | 69 v8UnsignedArray, 0, scope.isolate(), exceptionState); |
| 70 EXPECT_EQ(3U, unsignedVector.size()); | 70 EXPECT_EQ(3U, unsignedVector.size()); |
| 71 EXPECT_EQ(42U, unsignedVector[0]); | 71 EXPECT_EQ(42U, unsignedVector[0]); |
| 72 EXPECT_EQ(1729U, unsignedVector[1]); | 72 EXPECT_EQ(1729U, unsignedVector[1]); |
| 73 EXPECT_EQ(31773U, unsignedVector[2]); | 73 EXPECT_EQ(31773U, unsignedVector[2]); |
| 74 } | 74 } |
| 75 { | 75 { |
| 76 const double doublePi = 3.141592653589793238; | 76 const double doublePi = 3.141592653589793238; |
| 77 const float floatPi = doublePi; | 77 const float floatPi = doublePi; |
| 78 v8::Local<v8::Array> v8RealArray = v8::Array::New(scope.isolate(), 1); | 78 v8::Local<v8::Array> v8RealArray = v8::Array::New(scope.isolate(), 1); |
| 79 EXPECT_TRUE(v8CallBoolean(v8RealArray->Set(scope.context(), toV8(&scope, 0), | 79 EXPECT_TRUE(v8CallBoolean(v8RealArray->Set(scope.context(), ToV8(&scope, 0), |
| 80 toV8(&scope, doublePi)))); | 80 ToV8(&scope, doublePi)))); |
| 81 | 81 |
| 82 NonThrowableExceptionState exceptionState; | 82 NonThrowableExceptionState exceptionState; |
| 83 Vector<double> doubleVector = toImplArray<Vector<double>>( | 83 Vector<double> doubleVector = toImplArray<Vector<double>>( |
| 84 v8RealArray, 0, scope.isolate(), exceptionState); | 84 v8RealArray, 0, scope.isolate(), exceptionState); |
| 85 EXPECT_EQ(1U, doubleVector.size()); | 85 EXPECT_EQ(1U, doubleVector.size()); |
| 86 EXPECT_EQ(doublePi, doubleVector[0]); | 86 EXPECT_EQ(doublePi, doubleVector[0]); |
| 87 | 87 |
| 88 Vector<float> floatVector = toImplArray<Vector<float>>( | 88 Vector<float> floatVector = toImplArray<Vector<float>>( |
| 89 v8RealArray, 0, scope.isolate(), exceptionState); | 89 v8RealArray, 0, scope.isolate(), exceptionState); |
| 90 EXPECT_EQ(1U, floatVector.size()); | 90 EXPECT_EQ(1U, floatVector.size()); |
| 91 EXPECT_EQ(floatPi, floatVector[0]); | 91 EXPECT_EQ(floatPi, floatVector[0]); |
| 92 } | 92 } |
| 93 { | 93 { |
| 94 v8::Local<v8::Array> v8Array = v8::Array::New(scope.isolate(), 3); | 94 v8::Local<v8::Array> v8Array = v8::Array::New(scope.isolate(), 3); |
| 95 EXPECT_TRUE(v8CallBoolean(v8Array->Set(scope.context(), toV8(&scope, 0), | 95 EXPECT_TRUE(v8CallBoolean(v8Array->Set(scope.context(), ToV8(&scope, 0), |
| 96 toV8(&scope, "Vini, vidi, vici.")))); | 96 ToV8(&scope, "Vini, vidi, vici.")))); |
| 97 EXPECT_TRUE(v8CallBoolean( | 97 EXPECT_TRUE(v8CallBoolean( |
| 98 v8Array->Set(scope.context(), toV8(&scope, 1), toV8(&scope, 65535)))); | 98 v8Array->Set(scope.context(), ToV8(&scope, 1), ToV8(&scope, 65535)))); |
| 99 EXPECT_TRUE(v8CallBoolean( | 99 EXPECT_TRUE(v8CallBoolean( |
| 100 v8Array->Set(scope.context(), toV8(&scope, 2), toV8(&scope, 0.125)))); | 100 v8Array->Set(scope.context(), ToV8(&scope, 2), ToV8(&scope, 0.125)))); |
| 101 | 101 |
| 102 NonThrowableExceptionState exceptionState; | 102 NonThrowableExceptionState exceptionState; |
| 103 Vector<v8::Local<v8::Value>> v8HandleVector = | 103 Vector<v8::Local<v8::Value>> v8HandleVector = |
| 104 toImplArray<Vector<v8::Local<v8::Value>>>(v8Array, 0, scope.isolate(), | 104 toImplArray<Vector<v8::Local<v8::Value>>>(v8Array, 0, scope.isolate(), |
| 105 exceptionState); | 105 exceptionState); |
| 106 EXPECT_EQ(3U, v8HandleVector.size()); | 106 EXPECT_EQ(3U, v8HandleVector.size()); |
| 107 EXPECT_EQ("Vini, vidi, vici.", | 107 EXPECT_EQ("Vini, vidi, vici.", |
| 108 toUSVString(scope.isolate(), v8HandleVector[0], exceptionState)); | 108 toUSVString(scope.isolate(), v8HandleVector[0], exceptionState)); |
| 109 EXPECT_EQ(65535U, toUInt32(scope.isolate(), v8HandleVector[1], | 109 EXPECT_EQ(65535U, toUInt32(scope.isolate(), v8HandleVector[1], |
| 110 NormalConversion, exceptionState)); | 110 NormalConversion, exceptionState)); |
| 111 | 111 |
| 112 Vector<ScriptValue> scriptValueVector = toImplArray<Vector<ScriptValue>>( | 112 Vector<ScriptValue> scriptValueVector = toImplArray<Vector<ScriptValue>>( |
| 113 v8Array, 0, scope.isolate(), exceptionState); | 113 v8Array, 0, scope.isolate(), exceptionState); |
| 114 EXPECT_EQ(3U, scriptValueVector.size()); | 114 EXPECT_EQ(3U, scriptValueVector.size()); |
| 115 String reportOnZela; | 115 String reportOnZela; |
| 116 EXPECT_TRUE(scriptValueVector[0].toString(reportOnZela)); | 116 EXPECT_TRUE(scriptValueVector[0].toString(reportOnZela)); |
| 117 EXPECT_EQ("Vini, vidi, vici.", reportOnZela); | 117 EXPECT_EQ("Vini, vidi, vici.", reportOnZela); |
| 118 EXPECT_EQ(65535U, toUInt32(scope.isolate(), scriptValueVector[1].v8Value(), | 118 EXPECT_EQ(65535U, toUInt32(scope.isolate(), scriptValueVector[1].v8Value(), |
| 119 NormalConversion, exceptionState)); | 119 NormalConversion, exceptionState)); |
| 120 } | 120 } |
| 121 { | 121 { |
| 122 v8::Local<v8::Array> v8StringArray1 = v8::Array::New(scope.isolate(), 2); | 122 v8::Local<v8::Array> v8StringArray1 = v8::Array::New(scope.isolate(), 2); |
| 123 EXPECT_TRUE(v8CallBoolean(v8StringArray1->Set( | 123 EXPECT_TRUE(v8CallBoolean(v8StringArray1->Set( |
| 124 scope.context(), toV8(&scope, 0), toV8(&scope, "foo")))); | 124 scope.context(), ToV8(&scope, 0), ToV8(&scope, "foo")))); |
| 125 EXPECT_TRUE(v8CallBoolean(v8StringArray1->Set( | 125 EXPECT_TRUE(v8CallBoolean(v8StringArray1->Set( |
| 126 scope.context(), toV8(&scope, 1), toV8(&scope, "bar")))); | 126 scope.context(), ToV8(&scope, 1), ToV8(&scope, "bar")))); |
| 127 v8::Local<v8::Array> v8StringArray2 = v8::Array::New(scope.isolate(), 3); | 127 v8::Local<v8::Array> v8StringArray2 = v8::Array::New(scope.isolate(), 3); |
| 128 EXPECT_TRUE(v8CallBoolean(v8StringArray2->Set( | 128 EXPECT_TRUE(v8CallBoolean(v8StringArray2->Set( |
| 129 scope.context(), toV8(&scope, 0), toV8(&scope, "x")))); | 129 scope.context(), ToV8(&scope, 0), ToV8(&scope, "x")))); |
| 130 EXPECT_TRUE(v8CallBoolean(v8StringArray2->Set( | 130 EXPECT_TRUE(v8CallBoolean(v8StringArray2->Set( |
| 131 scope.context(), toV8(&scope, 1), toV8(&scope, "y")))); | 131 scope.context(), ToV8(&scope, 1), ToV8(&scope, "y")))); |
| 132 EXPECT_TRUE(v8CallBoolean(v8StringArray2->Set( | 132 EXPECT_TRUE(v8CallBoolean(v8StringArray2->Set( |
| 133 scope.context(), toV8(&scope, 2), toV8(&scope, "z")))); | 133 scope.context(), ToV8(&scope, 2), ToV8(&scope, "z")))); |
| 134 v8::Local<v8::Array> v8StringArrayArray = | 134 v8::Local<v8::Array> v8StringArrayArray = |
| 135 v8::Array::New(scope.isolate(), 2); | 135 v8::Array::New(scope.isolate(), 2); |
| 136 EXPECT_TRUE(v8CallBoolean(v8StringArrayArray->Set( | 136 EXPECT_TRUE(v8CallBoolean(v8StringArrayArray->Set( |
| 137 scope.context(), toV8(&scope, 0), v8StringArray1))); | 137 scope.context(), ToV8(&scope, 0), v8StringArray1))); |
| 138 EXPECT_TRUE(v8CallBoolean(v8StringArrayArray->Set( | 138 EXPECT_TRUE(v8CallBoolean(v8StringArrayArray->Set( |
| 139 scope.context(), toV8(&scope, 1), v8StringArray2))); | 139 scope.context(), ToV8(&scope, 1), v8StringArray2))); |
| 140 | 140 |
| 141 NonThrowableExceptionState exceptionState; | 141 NonThrowableExceptionState exceptionState; |
| 142 Vector<Vector<String>> stringVectorVector = | 142 Vector<Vector<String>> stringVectorVector = |
| 143 toImplArray<Vector<Vector<String>>>(v8StringArrayArray, 0, | 143 toImplArray<Vector<Vector<String>>>(v8StringArrayArray, 0, |
| 144 scope.isolate(), exceptionState); | 144 scope.isolate(), exceptionState); |
| 145 EXPECT_EQ(2U, stringVectorVector.size()); | 145 EXPECT_EQ(2U, stringVectorVector.size()); |
| 146 EXPECT_EQ(2U, stringVectorVector[0].size()); | 146 EXPECT_EQ(2U, stringVectorVector[0].size()); |
| 147 EXPECT_EQ("foo", stringVectorVector[0][0]); | 147 EXPECT_EQ("foo", stringVectorVector[0][0]); |
| 148 EXPECT_EQ("bar", stringVectorVector[0][1]); | 148 EXPECT_EQ("bar", stringVectorVector[0][1]); |
| 149 EXPECT_EQ(3U, stringVectorVector[1].size()); | 149 EXPECT_EQ(3U, stringVectorVector[1].size()); |
| 150 EXPECT_EQ("x", stringVectorVector[1][0]); | 150 EXPECT_EQ("x", stringVectorVector[1][0]); |
| 151 EXPECT_EQ("y", stringVectorVector[1][1]); | 151 EXPECT_EQ("y", stringVectorVector[1][1]); |
| 152 EXPECT_EQ("z", stringVectorVector[1][2]); | 152 EXPECT_EQ("z", stringVectorVector[1][2]); |
| 153 } | 153 } |
| 154 } | 154 } |
| 155 | 155 |
| 156 } // namespace | 156 } // namespace |
| 157 | 157 |
| 158 } // namespace blink | 158 } // namespace blink |
| OLD | NEW |