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 1483 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1494 EXPECT_TRUE(EvaluateScriptForResultBool("result.length === 2")); | 1494 EXPECT_TRUE(EvaluateScriptForResultBool("result.length === 2")); |
1495 }); | 1495 }); |
1496 DecodeTest( | 1496 DecodeTest( |
1497 {0xff, 0x09, 0x3f, 0x00, 0x6f, 0x3f, 0x01, 0x53, 0x01, | 1497 {0xff, 0x09, 0x3f, 0x00, 0x6f, 0x3f, 0x01, 0x53, 0x01, |
1498 0x61, 0x3f, 0x01, 0x73, 0x00, 0x3f, 0x02, 0x53, 0x01, | 1498 0x61, 0x3f, 0x01, 0x73, 0x00, 0x3f, 0x02, 0x53, 0x01, |
1499 0x62, 0x3f, 0x02, 0x5e, 0x01, 0x7b, 0x02, 0x00}, | 1499 0x62, 0x3f, 0x02, 0x5e, 0x01, 0x7b, 0x02, 0x00}, |
1500 [this](Local<Value> value) { | 1500 [this](Local<Value> value) { |
1501 EXPECT_TRUE(EvaluateScriptForResultBool("result.a instanceof String")); | 1501 EXPECT_TRUE(EvaluateScriptForResultBool("result.a instanceof String")); |
1502 EXPECT_TRUE(EvaluateScriptForResultBool("result.a === result.b")); | 1502 EXPECT_TRUE(EvaluateScriptForResultBool("result.a === result.b")); |
1503 }); | 1503 }); |
| 1504 |
| 1505 // String object containing a Latin-1 string. |
| 1506 DecodeTest({0xff, 0x0c, 0x73, 0x22, 0x06, 'Q', 'u', 0xe9, 'b', 'e', 'c'}, |
| 1507 [this](Local<Value> value) { |
| 1508 EXPECT_TRUE(EvaluateScriptForResultBool( |
| 1509 "Object.getPrototypeOf(result) === String.prototype")); |
| 1510 EXPECT_TRUE(EvaluateScriptForResultBool( |
| 1511 "result.valueOf() === 'Qu\\xe9bec'")); |
| 1512 EXPECT_TRUE(EvaluateScriptForResultBool("result.length === 6")); |
| 1513 }); |
1504 } | 1514 } |
1505 | 1515 |
1506 TEST_F(ValueSerializerTest, RoundTripRegExp) { | 1516 TEST_F(ValueSerializerTest, RoundTripRegExp) { |
1507 RoundTripTest("/foo/g", [this](Local<Value> value) { | 1517 RoundTripTest("/foo/g", [this](Local<Value> value) { |
1508 ASSERT_TRUE(value->IsRegExp()); | 1518 ASSERT_TRUE(value->IsRegExp()); |
1509 EXPECT_TRUE(EvaluateScriptForResultBool( | 1519 EXPECT_TRUE(EvaluateScriptForResultBool( |
1510 "Object.getPrototypeOf(result) === RegExp.prototype")); | 1520 "Object.getPrototypeOf(result) === RegExp.prototype")); |
1511 EXPECT_TRUE(EvaluateScriptForResultBool("result.toString() === '/foo/g'")); | 1521 EXPECT_TRUE(EvaluateScriptForResultBool("result.toString() === '/foo/g'")); |
1512 }); | 1522 }); |
1513 RoundTripTest("new RegExp('Qu\\xe9bec', 'i')", [this](Local<Value> value) { | 1523 RoundTripTest("new RegExp('Qu\\xe9bec', 'i')", [this](Local<Value> value) { |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1553 "result.toString() === '/\\ud83d\\udc4a/gu'")); | 1563 "result.toString() === '/\\ud83d\\udc4a/gu'")); |
1554 }); | 1564 }); |
1555 DecodeTest( | 1565 DecodeTest( |
1556 {0xff, 0x09, 0x3f, 0x00, 0x6f, 0x3f, 0x01, 0x53, 0x01, 0x61, | 1566 {0xff, 0x09, 0x3f, 0x00, 0x6f, 0x3f, 0x01, 0x53, 0x01, 0x61, |
1557 0x3f, 0x01, 0x52, 0x03, 0x66, 0x6f, 0x6f, 0x03, 0x3f, 0x02, | 1567 0x3f, 0x01, 0x52, 0x03, 0x66, 0x6f, 0x6f, 0x03, 0x3f, 0x02, |
1558 0x53, 0x01, 0x62, 0x3f, 0x02, 0x5e, 0x01, 0x7b, 0x02, 0x00}, | 1568 0x53, 0x01, 0x62, 0x3f, 0x02, 0x5e, 0x01, 0x7b, 0x02, 0x00}, |
1559 [this](Local<Value> value) { | 1569 [this](Local<Value> value) { |
1560 EXPECT_TRUE(EvaluateScriptForResultBool("result.a instanceof RegExp")); | 1570 EXPECT_TRUE(EvaluateScriptForResultBool("result.a instanceof RegExp")); |
1561 EXPECT_TRUE(EvaluateScriptForResultBool("result.a === result.b")); | 1571 EXPECT_TRUE(EvaluateScriptForResultBool("result.a === result.b")); |
1562 }); | 1572 }); |
| 1573 |
| 1574 // RegExp containing a Latin-1 string. |
| 1575 DecodeTest( |
| 1576 {0xff, 0x0c, 0x52, 0x22, 0x06, 'Q', 'u', 0xe9, 'b', 'e', 'c', 0x02}, |
| 1577 [this](Local<Value> value) { |
| 1578 ASSERT_TRUE(value->IsRegExp()); |
| 1579 EXPECT_TRUE(EvaluateScriptForResultBool( |
| 1580 "result.toString() === '/Qu\\xe9bec/i'")); |
| 1581 }); |
1563 } | 1582 } |
1564 | 1583 |
1565 TEST_F(ValueSerializerTest, RoundTripMap) { | 1584 TEST_F(ValueSerializerTest, RoundTripMap) { |
1566 RoundTripTest( | 1585 RoundTripTest( |
1567 "(() => { var m = new Map(); m.set(42, 'foo'); return m; })()", | 1586 "(() => { var m = new Map(); m.set(42, 'foo'); return m; })()", |
1568 [this](Local<Value> value) { | 1587 [this](Local<Value> value) { |
1569 ASSERT_TRUE(value->IsMap()); | 1588 ASSERT_TRUE(value->IsMap()); |
1570 EXPECT_TRUE(EvaluateScriptForResultBool( | 1589 EXPECT_TRUE(EvaluateScriptForResultBool( |
1571 "Object.getPrototypeOf(result) === Map.prototype")); | 1590 "Object.getPrototypeOf(result) === Map.prototype")); |
1572 EXPECT_TRUE(EvaluateScriptForResultBool("result.size === 1")); | 1591 EXPECT_TRUE(EvaluateScriptForResultBool("result.size === 1")); |
(...skipping 1091 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2664 InvalidDecodeTest(raw); | 2683 InvalidDecodeTest(raw); |
2665 } | 2684 } |
2666 | 2685 |
2667 TEST_F(ValueSerializerTestWithWasm, DecodeWasmModuleWithInvalidDataLength) { | 2686 TEST_F(ValueSerializerTestWithWasm, DecodeWasmModuleWithInvalidDataLength) { |
2668 InvalidDecodeTest({0xff, 0x09, 0x3f, 0x00, 0x57, 0x79, 0x7f, 0x00}); | 2687 InvalidDecodeTest({0xff, 0x09, 0x3f, 0x00, 0x57, 0x79, 0x7f, 0x00}); |
2669 InvalidDecodeTest({0xff, 0x09, 0x3f, 0x00, 0x57, 0x79, 0x00, 0x7f}); | 2688 InvalidDecodeTest({0xff, 0x09, 0x3f, 0x00, 0x57, 0x79, 0x00, 0x7f}); |
2670 } | 2689 } |
2671 | 2690 |
2672 } // namespace | 2691 } // namespace |
2673 } // namespace v8 | 2692 } // namespace v8 |
OLD | NEW |