summaryrefslogtreecommitdiff
path: root/deps/v8/test/mjsunit/array-tolocalestring.js
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/test/mjsunit/array-tolocalestring.js')
-rw-r--r--deps/v8/test/mjsunit/array-tolocalestring.js72
1 files changed, 72 insertions, 0 deletions
diff --git a/deps/v8/test/mjsunit/array-tolocalestring.js b/deps/v8/test/mjsunit/array-tolocalestring.js
new file mode 100644
index 0000000000..a5f856907a
--- /dev/null
+++ b/deps/v8/test/mjsunit/array-tolocalestring.js
@@ -0,0 +1,72 @@
+// Copyright 2018 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+(function CycleDetection() {
+ const arr = [
+ {
+ toLocaleString() {
+ return [1, arr];
+ }
+ }
+ ];
+ assertSame('1,', arr.toLocaleString());
+ assertSame('1,', arr.toLocaleString());
+})();
+
+(function ThrowsError(){
+ function TestError() {}
+ const arr = [];
+ const obj = {
+ toLocaleString(){
+ throw new TestError();
+ }
+ };
+ arr[0] = obj;
+ assertThrows(() => arr.toLocaleString(), TestError);
+
+ // Verifies cycle detection still works properly after thrown error.
+ arr[0] = {
+ toLocaleString() {
+ return 1;
+ }
+ };
+ assertSame('1', arr.toLocaleString());
+})();
+
+(function AccessThrowsError(){
+ function TestError() {}
+ const arr = [];
+ const obj = {
+ get toLocaleString(){
+ throw new TestError();
+ }
+ };
+ arr[0] = obj;
+ assertThrows(() => arr.toLocaleString(), TestError);
+
+ // Verifies cycle detection still works properly after thrown error.
+ arr[0] = {
+ toLocaleString() {
+ return 1;
+ }
+ };
+ assertSame('1', arr.toLocaleString());
+})();
+
+(function NotCallable(){
+ const arr = [];
+ const obj = {
+ toLocaleString: 7
+ }
+ arr[0] = obj;
+ assertThrows(() => arr.toLocaleString(), TypeError, '7 is not a function');
+
+ // Verifies cycle detection still works properly after thrown error.
+ arr[0] = {
+ toLocaleString() {
+ return 1;
+ }
+ };
+ assertSame('1', arr.toLocaleString());
+})();