diff options
Diffstat (limited to 'js/src/tests/test262/built-ins/Array/prototype/join/S15.4.4.5_A2_T4.js')
-rw-r--r-- | js/src/tests/test262/built-ins/Array/prototype/join/S15.4.4.5_A2_T4.js | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/js/src/tests/test262/built-ins/Array/prototype/join/S15.4.4.5_A2_T4.js b/js/src/tests/test262/built-ins/Array/prototype/join/S15.4.4.5_A2_T4.js new file mode 100644 index 0000000000..a7b77ba974 --- /dev/null +++ b/js/src/tests/test262/built-ins/Array/prototype/join/S15.4.4.5_A2_T4.js @@ -0,0 +1,95 @@ +// Copyright 2009 the Sputnik authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: | + The join function is intentionally generic. + It does not require that its this value be an Array object +esid: sec-array.prototype.join +description: > + Operator use ToNumber from length. If Type(value) is Object, + evaluate ToPrimitive(value, Number) +---*/ + +var obj = {}; +obj.join = Array.prototype.join; + +obj.length = { + valueOf() { + return 3 + } +}; +assert.sameValue(obj.join(), ",,", 'obj.join() must return ",,"'); + +obj.length = { + valueOf() { + return 3 + }, + toString() { + return 2 + } +}; +assert.sameValue(obj.join(), ",,", 'obj.join() must return ",,"'); + +obj.length = { + valueOf() { + return 3 + }, + toString() { + return {} + } +}; +assert.sameValue(obj.join(), ",,", 'obj.join() must return ",,"'); + +obj.length = { + valueOf() { + return 3 + }, + toString() { + throw new Test262Error(); + } +}; +assert.sameValue(obj.join(), ",,", 'obj.join() must return ",,"'); + +obj.length = { + toString() { + return 2 + } +}; +assert.sameValue(obj.join(), ",", 'obj.join() must return ","'); + +obj.length = { + valueOf() { + return {} + }, + toString() { + return 2 + } +} +assert.sameValue(obj.join(), ",", 'obj.join() must return ","'); + +assert.throws(Test262Error, () => { + obj.length = { + valueOf() { + throw new Test262Error(); + }, + toString() { + return 2 + } + }; + obj.join(); +}); + +assert.throws(TypeError, () => { + obj.length = { + valueOf() { + return {} + }, + toString() { + return {} + } + }; + obj.join(); +}); + +reportCompare(0, 0); |