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 929 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
940 "(() => {" | 940 "(() => {" |
941 " var x = [1, { get a() { x.length = 0; }}, 3, 4];" | 941 " var x = [1, { get a() { x.length = 0; }}, 3, 4];" |
942 " return x;" | 942 " return x;" |
943 "})()", | 943 "})()", |
944 [this](Local<Value> value) { | 944 [this](Local<Value> value) { |
945 ASSERT_TRUE(value->IsArray()); | 945 ASSERT_TRUE(value->IsArray()); |
946 ASSERT_EQ(4, Array::Cast(*value)->Length()); | 946 ASSERT_EQ(4, Array::Cast(*value)->Length()); |
947 EXPECT_TRUE(EvaluateScriptForResultBool("result[0] === 1")); | 947 EXPECT_TRUE(EvaluateScriptForResultBool("result[0] === 1")); |
948 EXPECT_TRUE(EvaluateScriptForResultBool("!result.hasOwnProperty(2)")); | 948 EXPECT_TRUE(EvaluateScriptForResultBool("!result.hasOwnProperty(2)")); |
949 }); | 949 }); |
| 950 // The same is true if the length is shortened, but there are still items |
| 951 // remaining. |
| 952 RoundTripTest( |
| 953 "(() => {" |
| 954 " var x = [1, { get a() { x.length = 3; }}, 3, 4];" |
| 955 " return x;" |
| 956 "})()", |
| 957 [this](Local<Value> value) { |
| 958 ASSERT_TRUE(value->IsArray()); |
| 959 ASSERT_EQ(4, Array::Cast(*value)->Length()); |
| 960 EXPECT_TRUE(EvaluateScriptForResultBool("result[2] === 3")); |
| 961 EXPECT_TRUE(EvaluateScriptForResultBool("!result.hasOwnProperty(3)")); |
| 962 }); |
950 // Same for sparse arrays. | 963 // Same for sparse arrays. |
951 RoundTripTest( | 964 RoundTripTest( |
952 "(() => {" | 965 "(() => {" |
953 " var x = [1, { get a() { x.length = 0; }}, 3, 4];" | 966 " var x = [1, { get a() { x.length = 0; }}, 3, 4];" |
954 " x.length = 1000;" | 967 " x.length = 1000;" |
955 " return x;" | 968 " return x;" |
956 "})()", | 969 "})()", |
957 [this](Local<Value> value) { | 970 [this](Local<Value> value) { |
958 ASSERT_TRUE(value->IsArray()); | 971 ASSERT_TRUE(value->IsArray()); |
959 ASSERT_EQ(1000, Array::Cast(*value)->Length()); | 972 ASSERT_EQ(1000, Array::Cast(*value)->Length()); |
960 EXPECT_TRUE(EvaluateScriptForResultBool("result[0] === 1")); | 973 EXPECT_TRUE(EvaluateScriptForResultBool("result[0] === 1")); |
961 EXPECT_TRUE(EvaluateScriptForResultBool("!result.hasOwnProperty(2)")); | 974 EXPECT_TRUE(EvaluateScriptForResultBool("!result.hasOwnProperty(2)")); |
962 }); | 975 }); |
| 976 RoundTripTest( |
| 977 "(() => {" |
| 978 " var x = [1, { get a() { x.length = 3; }}, 3, 4];" |
| 979 " x.length = 1000;" |
| 980 " return x;" |
| 981 "})()", |
| 982 [this](Local<Value> value) { |
| 983 ASSERT_TRUE(value->IsArray()); |
| 984 ASSERT_EQ(1000, Array::Cast(*value)->Length()); |
| 985 EXPECT_TRUE(EvaluateScriptForResultBool("result[2] === 3")); |
| 986 EXPECT_TRUE(EvaluateScriptForResultBool("!result.hasOwnProperty(3)")); |
| 987 }); |
963 // If a getter makes a property non-enumerable, it should still be enumerated | 988 // If a getter makes a property non-enumerable, it should still be enumerated |
964 // as enumeration happens once before getters are invoked. | 989 // as enumeration happens once before getters are invoked. |
965 RoundTripTest( | 990 RoundTripTest( |
966 "(() => {" | 991 "(() => {" |
967 " var x = [{ get a() {" | 992 " var x = [{ get a() {" |
968 " Object.defineProperty(x, '1', { value: 3, enumerable: false });" | 993 " Object.defineProperty(x, '1', { value: 3, enumerable: false });" |
969 " }}, 2];" | 994 " }}, 2];" |
970 " return x;" | 995 " return x;" |
971 "})()", | 996 "})()", |
972 [this](Local<Value> value) { | 997 [this](Local<Value> value) { |
(...skipping 1021 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1994 } | 2019 } |
1995 | 2020 |
1996 TEST_F(ValueSerializerTestWithSharedArrayBufferTransfer, | 2021 TEST_F(ValueSerializerTestWithSharedArrayBufferTransfer, |
1997 SharedArrayBufferMustBeTransferred) { | 2022 SharedArrayBufferMustBeTransferred) { |
1998 // A SharedArrayBuffer which was not marked for transfer should fail encoding. | 2023 // A SharedArrayBuffer which was not marked for transfer should fail encoding. |
1999 InvalidEncodeTest("new SharedArrayBuffer(32)"); | 2024 InvalidEncodeTest("new SharedArrayBuffer(32)"); |
2000 } | 2025 } |
2001 | 2026 |
2002 } // namespace | 2027 } // namespace |
2003 } // namespace v8 | 2028 } // namespace v8 |
OLD | NEW |