| OLD | NEW |
| 1 // Copyright 2016 the V8 project authors. All rights reserved. | 1 // Copyright 2016 the V8 project 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 "src/value-serializer.h" | 5 #include "src/value-serializer.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <string> | 8 #include <string> |
| 9 | 9 |
| 10 #include "include/v8.h" | 10 #include "include/v8.h" |
| (...skipping 1227 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1238 [this](Local<Value> value) { | 1238 [this](Local<Value> value) { |
| 1239 ASSERT_TRUE(value->IsArray()); | 1239 ASSERT_TRUE(value->IsArray()); |
| 1240 EXPECT_EQ(2u, Array::Cast(*value)->Length()); | 1240 EXPECT_EQ(2u, Array::Cast(*value)->Length()); |
| 1241 EXPECT_TRUE(EvaluateScriptForResultBool("!(0 in result)")); | 1241 EXPECT_TRUE(EvaluateScriptForResultBool("!(0 in result)")); |
| 1242 EXPECT_TRUE(EvaluateScriptForResultBool("result[1] instanceof Array")); | 1242 EXPECT_TRUE(EvaluateScriptForResultBool("result[1] instanceof Array")); |
| 1243 EXPECT_TRUE(EvaluateScriptForResultBool("!(0 in result[1])")); | 1243 EXPECT_TRUE(EvaluateScriptForResultBool("!(0 in result[1])")); |
| 1244 EXPECT_TRUE(EvaluateScriptForResultBool("result[1][1] === true")); | 1244 EXPECT_TRUE(EvaluateScriptForResultBool("result[1][1] === true")); |
| 1245 }); | 1245 }); |
| 1246 } | 1246 } |
| 1247 | 1247 |
| 1248 TEST_F(ValueSerializerTest, RoundTripDenseArrayContainingUndefined) { | |
| 1249 // In previous serialization versions, this would be interpreted as an absent | |
| 1250 // property. | |
| 1251 RoundTripTest("[undefined]", [this](Local<Value> value) { | |
| 1252 ASSERT_TRUE(value->IsArray()); | |
| 1253 EXPECT_EQ(1u, Array::Cast(*value)->Length()); | |
| 1254 EXPECT_TRUE(EvaluateScriptForResultBool("result.hasOwnProperty(0)")); | |
| 1255 EXPECT_TRUE(EvaluateScriptForResultBool("result[0] === undefined")); | |
| 1256 }); | |
| 1257 } | |
| 1258 | |
| 1259 TEST_F(ValueSerializerTest, DecodeDenseArrayContainingUndefined) { | |
| 1260 // In previous versions, "undefined" in a dense array signified absence of the | |
| 1261 // element (for compatibility). In new versions, it has a separate encoding. | |
| 1262 DecodeTest({0xff, 0x09, 0x41, 0x01, 0x5f, 0x24, 0x00, 0x01}, | |
| 1263 [this](Local<Value> value) { | |
| 1264 EXPECT_TRUE(EvaluateScriptForResultBool("!(0 in result)")); | |
| 1265 }); | |
| 1266 DecodeTest( | |
| 1267 {0xff, 0x0b, 0x41, 0x01, 0x5f, 0x24, 0x00, 0x01}, | |
| 1268 [this](Local<Value> value) { | |
| 1269 EXPECT_TRUE(EvaluateScriptForResultBool("0 in result")); | |
| 1270 EXPECT_TRUE(EvaluateScriptForResultBool("result[0] === undefined")); | |
| 1271 }); | |
| 1272 DecodeTest({0xff, 0x0b, 0x41, 0x01, 0x2d, 0x24, 0x00, 0x01}, | |
| 1273 [this](Local<Value> value) { | |
| 1274 EXPECT_TRUE(EvaluateScriptForResultBool("!(0 in result)")); | |
| 1275 }); | |
| 1276 } | |
| 1277 | |
| 1278 TEST_F(ValueSerializerTest, RoundTripDate) { | 1248 TEST_F(ValueSerializerTest, RoundTripDate) { |
| 1279 RoundTripTest("new Date(1e6)", [](Local<Value> value) { | 1249 RoundTripTest("new Date(1e6)", [](Local<Value> value) { |
| 1280 ASSERT_TRUE(value->IsDate()); | 1250 ASSERT_TRUE(value->IsDate()); |
| 1281 EXPECT_EQ(1e6, Date::Cast(*value)->ValueOf()); | 1251 EXPECT_EQ(1e6, Date::Cast(*value)->ValueOf()); |
| 1282 EXPECT_TRUE("Object.getPrototypeOf(result) === Date.prototype"); | 1252 EXPECT_TRUE("Object.getPrototypeOf(result) === Date.prototype"); |
| 1283 }); | 1253 }); |
| 1284 RoundTripTest("new Date(Date.UTC(1867, 6, 1))", [](Local<Value> value) { | 1254 RoundTripTest("new Date(Date.UTC(1867, 6, 1))", [](Local<Value> value) { |
| 1285 ASSERT_TRUE(value->IsDate()); | 1255 ASSERT_TRUE(value->IsDate()); |
| 1286 EXPECT_TRUE("result.toISOString() === '1867-07-01T00:00:00.000Z'"); | 1256 EXPECT_TRUE("result.toISOString() === '1867-07-01T00:00:00.000Z'"); |
| 1287 }); | 1257 }); |
| (...skipping 1376 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2664 InvalidDecodeTest(raw); | 2634 InvalidDecodeTest(raw); |
| 2665 } | 2635 } |
| 2666 | 2636 |
| 2667 TEST_F(ValueSerializerTestWithWasm, DecodeWasmModuleWithInvalidDataLength) { | 2637 TEST_F(ValueSerializerTestWithWasm, DecodeWasmModuleWithInvalidDataLength) { |
| 2668 InvalidDecodeTest({0xff, 0x09, 0x3f, 0x00, 0x57, 0x79, 0x7f, 0x00}); | 2638 InvalidDecodeTest({0xff, 0x09, 0x3f, 0x00, 0x57, 0x79, 0x7f, 0x00}); |
| 2669 InvalidDecodeTest({0xff, 0x09, 0x3f, 0x00, 0x57, 0x79, 0x00, 0x7f}); | 2639 InvalidDecodeTest({0xff, 0x09, 0x3f, 0x00, 0x57, 0x79, 0x00, 0x7f}); |
| 2670 } | 2640 } |
| 2671 | 2641 |
| 2672 } // namespace | 2642 } // namespace |
| 2673 } // namespace v8 | 2643 } // namespace v8 |
| OLD | NEW |