| OLD | NEW |
| (Empty) |
| 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 | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "bindings/core/v8/V8Binding.h" | |
| 6 | |
| 7 #include "bindings/core/v8/ExceptionState.h" | |
| 8 #include "bindings/core/v8/ToV8ForCore.h" | |
| 9 #include "bindings/core/v8/V8BindingForTesting.h" | |
| 10 #include "platform/wtf/Vector.h" | |
| 11 #include "testing/gtest/include/gtest/gtest.h" | |
| 12 | |
| 13 namespace blink { | |
| 14 | |
| 15 namespace { | |
| 16 | |
| 17 template <typename T> | |
| 18 v8::Local<v8::Value> ToV8(V8TestingScope* scope, T value) { | |
| 19 return blink::ToV8(value, scope->GetContext()->Global(), scope->GetIsolate()); | |
| 20 } | |
| 21 | |
| 22 TEST(V8BindingTest, toImplSequence) { | |
| 23 V8TestingScope scope; | |
| 24 { | |
| 25 v8::Local<v8::Array> v8_string_array = | |
| 26 v8::Array::New(scope.GetIsolate(), 2); | |
| 27 v8_string_array | |
| 28 ->Set(scope.GetContext(), ToV8(&scope, 0), | |
| 29 ToV8(&scope, "Hello, World!")) | |
| 30 .ToChecked(); | |
| 31 v8_string_array | |
| 32 ->Set(scope.GetContext(), ToV8(&scope, 1), ToV8(&scope, "Hi, Mom!")) | |
| 33 .ToChecked(); | |
| 34 | |
| 35 NonThrowableExceptionState exception_state; | |
| 36 Vector<String> string_vector = ToImplSequence<Vector<String>>( | |
| 37 scope.GetIsolate(), v8_string_array, exception_state); | |
| 38 EXPECT_EQ(2U, string_vector.size()); | |
| 39 EXPECT_EQ("Hello, World!", string_vector[0]); | |
| 40 EXPECT_EQ("Hi, Mom!", string_vector[1]); | |
| 41 } | |
| 42 } | |
| 43 | |
| 44 TEST(V8BindingTest, toImplArray) { | |
| 45 V8TestingScope scope; | |
| 46 { | |
| 47 v8::Local<v8::Array> v8_string_array = | |
| 48 v8::Array::New(scope.GetIsolate(), 2); | |
| 49 EXPECT_TRUE(V8CallBoolean(v8_string_array->Set( | |
| 50 scope.GetContext(), ToV8(&scope, 0), ToV8(&scope, "Hello, World!")))); | |
| 51 EXPECT_TRUE(V8CallBoolean(v8_string_array->Set( | |
| 52 scope.GetContext(), ToV8(&scope, 1), ToV8(&scope, "Hi, Mom!")))); | |
| 53 | |
| 54 NonThrowableExceptionState exception_state; | |
| 55 Vector<String> string_vector = ToImplArray<Vector<String>>( | |
| 56 v8_string_array, 0, scope.GetIsolate(), exception_state); | |
| 57 EXPECT_EQ(2U, string_vector.size()); | |
| 58 EXPECT_EQ("Hello, World!", string_vector[0]); | |
| 59 EXPECT_EQ("Hi, Mom!", string_vector[1]); | |
| 60 } | |
| 61 { | |
| 62 v8::Local<v8::Array> v8_unsigned_array = | |
| 63 v8::Array::New(scope.GetIsolate(), 3); | |
| 64 EXPECT_TRUE(V8CallBoolean(v8_unsigned_array->Set( | |
| 65 scope.GetContext(), ToV8(&scope, 0), ToV8(&scope, 42)))); | |
| 66 EXPECT_TRUE(V8CallBoolean(v8_unsigned_array->Set( | |
| 67 scope.GetContext(), ToV8(&scope, 1), ToV8(&scope, 1729)))); | |
| 68 EXPECT_TRUE(V8CallBoolean(v8_unsigned_array->Set( | |
| 69 scope.GetContext(), ToV8(&scope, 2), ToV8(&scope, 31773)))); | |
| 70 | |
| 71 NonThrowableExceptionState exception_state; | |
| 72 Vector<unsigned> unsigned_vector = ToImplArray<Vector<unsigned>>( | |
| 73 v8_unsigned_array, 0, scope.GetIsolate(), exception_state); | |
| 74 EXPECT_EQ(3U, unsigned_vector.size()); | |
| 75 EXPECT_EQ(42U, unsigned_vector[0]); | |
| 76 EXPECT_EQ(1729U, unsigned_vector[1]); | |
| 77 EXPECT_EQ(31773U, unsigned_vector[2]); | |
| 78 } | |
| 79 { | |
| 80 const double kDoublePi = 3.141592653589793238; | |
| 81 const float kFloatPi = kDoublePi; | |
| 82 v8::Local<v8::Array> v8_real_array = v8::Array::New(scope.GetIsolate(), 1); | |
| 83 EXPECT_TRUE(V8CallBoolean(v8_real_array->Set( | |
| 84 scope.GetContext(), ToV8(&scope, 0), ToV8(&scope, kDoublePi)))); | |
| 85 | |
| 86 NonThrowableExceptionState exception_state; | |
| 87 Vector<double> double_vector = ToImplArray<Vector<double>>( | |
| 88 v8_real_array, 0, scope.GetIsolate(), exception_state); | |
| 89 EXPECT_EQ(1U, double_vector.size()); | |
| 90 EXPECT_EQ(kDoublePi, double_vector[0]); | |
| 91 | |
| 92 Vector<float> float_vector = ToImplArray<Vector<float>>( | |
| 93 v8_real_array, 0, scope.GetIsolate(), exception_state); | |
| 94 EXPECT_EQ(1U, float_vector.size()); | |
| 95 EXPECT_EQ(kFloatPi, float_vector[0]); | |
| 96 } | |
| 97 { | |
| 98 v8::Local<v8::Array> v8_array = v8::Array::New(scope.GetIsolate(), 3); | |
| 99 EXPECT_TRUE( | |
| 100 V8CallBoolean(v8_array->Set(scope.GetContext(), ToV8(&scope, 0), | |
| 101 ToV8(&scope, "Vini, vidi, vici.")))); | |
| 102 EXPECT_TRUE(V8CallBoolean(v8_array->Set(scope.GetContext(), ToV8(&scope, 1), | |
| 103 ToV8(&scope, 65535)))); | |
| 104 EXPECT_TRUE(V8CallBoolean(v8_array->Set(scope.GetContext(), ToV8(&scope, 2), | |
| 105 ToV8(&scope, 0.125)))); | |
| 106 | |
| 107 NonThrowableExceptionState exception_state; | |
| 108 Vector<v8::Local<v8::Value>> v8_handle_vector = | |
| 109 ToImplArray<Vector<v8::Local<v8::Value>>>( | |
| 110 v8_array, 0, scope.GetIsolate(), exception_state); | |
| 111 EXPECT_EQ(3U, v8_handle_vector.size()); | |
| 112 EXPECT_EQ( | |
| 113 "Vini, vidi, vici.", | |
| 114 ToUSVString(scope.GetIsolate(), v8_handle_vector[0], exception_state)); | |
| 115 EXPECT_EQ(65535U, ToUInt32(scope.GetIsolate(), v8_handle_vector[1], | |
| 116 kNormalConversion, exception_state)); | |
| 117 | |
| 118 Vector<ScriptValue> script_value_vector = ToImplArray<Vector<ScriptValue>>( | |
| 119 v8_array, 0, scope.GetIsolate(), exception_state); | |
| 120 EXPECT_EQ(3U, script_value_vector.size()); | |
| 121 String report_on_zela; | |
| 122 EXPECT_TRUE(script_value_vector[0].ToString(report_on_zela)); | |
| 123 EXPECT_EQ("Vini, vidi, vici.", report_on_zela); | |
| 124 EXPECT_EQ(65535U, | |
| 125 ToUInt32(scope.GetIsolate(), script_value_vector[1].V8Value(), | |
| 126 kNormalConversion, exception_state)); | |
| 127 } | |
| 128 { | |
| 129 v8::Local<v8::Array> v8_string_array1 = | |
| 130 v8::Array::New(scope.GetIsolate(), 2); | |
| 131 EXPECT_TRUE(V8CallBoolean(v8_string_array1->Set( | |
| 132 scope.GetContext(), ToV8(&scope, 0), ToV8(&scope, "foo")))); | |
| 133 EXPECT_TRUE(V8CallBoolean(v8_string_array1->Set( | |
| 134 scope.GetContext(), ToV8(&scope, 1), ToV8(&scope, "bar")))); | |
| 135 v8::Local<v8::Array> v8_string_array2 = | |
| 136 v8::Array::New(scope.GetIsolate(), 3); | |
| 137 EXPECT_TRUE(V8CallBoolean(v8_string_array2->Set( | |
| 138 scope.GetContext(), ToV8(&scope, 0), ToV8(&scope, "x")))); | |
| 139 EXPECT_TRUE(V8CallBoolean(v8_string_array2->Set( | |
| 140 scope.GetContext(), ToV8(&scope, 1), ToV8(&scope, "y")))); | |
| 141 EXPECT_TRUE(V8CallBoolean(v8_string_array2->Set( | |
| 142 scope.GetContext(), ToV8(&scope, 2), ToV8(&scope, "z")))); | |
| 143 v8::Local<v8::Array> v8_string_array_array = | |
| 144 v8::Array::New(scope.GetIsolate(), 2); | |
| 145 EXPECT_TRUE(V8CallBoolean(v8_string_array_array->Set( | |
| 146 scope.GetContext(), ToV8(&scope, 0), v8_string_array1))); | |
| 147 EXPECT_TRUE(V8CallBoolean(v8_string_array_array->Set( | |
| 148 scope.GetContext(), ToV8(&scope, 1), v8_string_array2))); | |
| 149 | |
| 150 NonThrowableExceptionState exception_state; | |
| 151 Vector<Vector<String>> string_vector_vector = | |
| 152 ToImplArray<Vector<Vector<String>>>( | |
| 153 v8_string_array_array, 0, scope.GetIsolate(), exception_state); | |
| 154 EXPECT_EQ(2U, string_vector_vector.size()); | |
| 155 EXPECT_EQ(2U, string_vector_vector[0].size()); | |
| 156 EXPECT_EQ("foo", string_vector_vector[0][0]); | |
| 157 EXPECT_EQ("bar", string_vector_vector[0][1]); | |
| 158 EXPECT_EQ(3U, string_vector_vector[1].size()); | |
| 159 EXPECT_EQ("x", string_vector_vector[1][0]); | |
| 160 EXPECT_EQ("y", string_vector_vector[1][1]); | |
| 161 EXPECT_EQ("z", string_vector_vector[1][2]); | |
| 162 } | |
| 163 } | |
| 164 | |
| 165 } // namespace | |
| 166 | |
| 167 } // namespace blink | |
| OLD | NEW |