diff --git a/test/built-ins/String/prototype/padEnd/exception-fill-string-symbol.js b/test/built-ins/String/prototype/padEnd/exception-fill-string-symbol.js new file mode 100644 index 0000000000..1bd1678448 --- /dev/null +++ b/test/built-ins/String/prototype/padEnd/exception-fill-string-symbol.js @@ -0,0 +1,13 @@ +// Copyright (C) 2016 Jordan Harband. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-string.prototype.padend +description: String#padEnd should fail if given a Symbol fillString. +author: Jordan Harband +features: [Symbol] +---*/ + +assert.throws(TypeError, function () { + 'abc'.padEnd(10, Symbol()); +}); diff --git a/test/built-ins/String/prototype/padEnd/exception-not-object-coercible.js b/test/built-ins/String/prototype/padEnd/exception-not-object-coercible.js new file mode 100644 index 0000000000..ef89429a2d --- /dev/null +++ b/test/built-ins/String/prototype/padEnd/exception-not-object-coercible.js @@ -0,0 +1,28 @@ +// Copyright (C) 2016 Jordan Harband. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-string.prototype.padend +description: > + String#padEnd should fail if given a null or undefined value, + or an object not coercible to a string. +author: Jordan Harband +---*/ + +assert.throws(TypeError, function () { + String.prototype.padEnd.call(null); +}); + +assert.throws(TypeError, function () { + String.prototype.padEnd.call(undefined); +}); + +var notCoercible = { + toString: function () { + throw new Test262Error('attempted toString'); + } +}; + +assert.throws(Test262Error, function () { + String.prototype.padEnd.call(notCoercible); +}); diff --git a/test/built-ins/String/prototype/padEnd/exception-symbol.js b/test/built-ins/String/prototype/padEnd/exception-symbol.js new file mode 100644 index 0000000000..949d4d927b --- /dev/null +++ b/test/built-ins/String/prototype/padEnd/exception-symbol.js @@ -0,0 +1,13 @@ +// Copyright (C) 2016 Jordan Harband. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-string.prototype.padend +description: String#padEnd should fail if given a Symbol receiver. +author: Jordan Harband +features: [Symbol] +---*/ + +assert.throws(TypeError, function () { + String.prototype.padEnd.call(Symbol()); +}); diff --git a/test/built-ins/String/prototype/padEnd/fill-string-empty.js b/test/built-ins/String/prototype/padEnd/fill-string-empty.js new file mode 100644 index 0000000000..4b4547a838 --- /dev/null +++ b/test/built-ins/String/prototype/padEnd/fill-string-empty.js @@ -0,0 +1,12 @@ +// Copyright (C) 2016 Jordan Harband. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-string.prototype.padend +description: > + String#padEnd should return the string unchanged when + an explicit empty string is provided +author: Jordan Harband +---*/ + +assert.sameValue('abc'.padEnd(5, ''), 'abc'); diff --git a/test/built-ins/String/prototype/padEnd/fill-string-non-strings.js b/test/built-ins/String/prototype/padEnd/fill-string-non-strings.js new file mode 100644 index 0000000000..2549a78397 --- /dev/null +++ b/test/built-ins/String/prototype/padEnd/fill-string-non-strings.js @@ -0,0 +1,15 @@ +// Copyright (C) 2016 Jordan Harband. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-string.prototype.padend +description: String#padEnd should stringify a non-string fillString value +author: Jordan Harband +---*/ + +assert.sameValue('abc'.padEnd(10, false), 'abcfalsefa'); +assert.sameValue('abc'.padEnd(10, true), 'abctruetru'); +assert.sameValue('abc'.padEnd(10, null), 'abcnullnul'); +assert.sameValue('abc'.padEnd(10, 0), 'abc0000000'); +assert.sameValue('abc'.padEnd(10, -0), 'abc0000000'); +assert.sameValue('abc'.padEnd(10, NaN), 'abcNaNNaNN'); diff --git a/test/built-ins/String/prototype/padEnd/fill-string-omitted.js b/test/built-ins/String/prototype/padEnd/fill-string-omitted.js new file mode 100644 index 0000000000..90a9bc35ec --- /dev/null +++ b/test/built-ins/String/prototype/padEnd/fill-string-omitted.js @@ -0,0 +1,11 @@ +// Copyright (C) 2016 Jordan Harband. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-string.prototype.padend +description: String#padEnd should default to a fillString of " " when omitted +author: Jordan Harband +---*/ + +assert.sameValue('abc'.padEnd(5), 'abc '); +assert.sameValue('abc'.padEnd(5, undefined), 'abc '); diff --git a/test/built-ins/String/prototype/padEnd/function-length.js b/test/built-ins/String/prototype/padEnd/function-length.js new file mode 100644 index 0000000000..37ea2a27e9 --- /dev/null +++ b/test/built-ins/String/prototype/padEnd/function-length.js @@ -0,0 +1,15 @@ +// Copyright (C) 2016 Jordan Harband. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-string.prototype.padend +description: String#padEnd should have length 1 +author: Jordan Harband +includes: [propertyHelper.js] +---*/ + +assert.sameValue(String.prototype.padEnd.length, 1, 'Expected String#padEnd.length to be 1'); + +verifyNotEnumerable(String.prototype.padEnd, 'length'); +verifyNotWritable(String.prototype.padEnd, 'length'); +verifyConfigurable(String.prototype.padEnd, 'length'); diff --git a/test/built-ins/String/prototype/padEnd/function-name.js b/test/built-ins/String/prototype/padEnd/function-name.js new file mode 100644 index 0000000000..0b6b7db74a --- /dev/null +++ b/test/built-ins/String/prototype/padEnd/function-name.js @@ -0,0 +1,19 @@ +// Copyright (C) 2016 Jordan Harband. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-string.prototype.padend +description: String#padEnd should have name property with value 'padEnd' +author: Jordan Harband +includes: [propertyHelper.js] +---*/ + +assert.sameValue( + String.prototype.padEnd.name, + 'padEnd', + 'Expected String#padEnd.name to be "padEnd"' +); + +verifyNotEnumerable(String.prototype.padEnd, 'name'); +verifyNotWritable(String.prototype.padEnd, 'name'); +verifyConfigurable(String.prototype.padEnd, 'name'); diff --git a/test/built-ins/String/prototype/padEnd/function-property-descriptor.js b/test/built-ins/String/prototype/padEnd/function-property-descriptor.js new file mode 100644 index 0000000000..97d2ad3725 --- /dev/null +++ b/test/built-ins/String/prototype/padEnd/function-property-descriptor.js @@ -0,0 +1,13 @@ +// Copyright (C) 2016 Jordan Harband. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-string.prototype.padend +description: String#padEnd should be writable, non-enumerable, and configurable +author: Jordan Harband +includes: [propertyHelper.js] +---*/ + +verifyNotEnumerable(String.prototype, 'padEnd'); +verifyWritable(String.prototype, 'padEnd'); +verifyConfigurable(String.prototype, 'padEnd'); diff --git a/test/built-ins/String/prototype/padEnd/max-length-not-greater-than-string.js b/test/built-ins/String/prototype/padEnd/max-length-not-greater-than-string.js new file mode 100644 index 0000000000..6d0dfa494b --- /dev/null +++ b/test/built-ins/String/prototype/padEnd/max-length-not-greater-than-string.js @@ -0,0 +1,19 @@ +// Copyright (C) 2016 Jordan Harband. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-string.prototype.padend +description: > + String#padEnd should return the string unchanged when an integer max + length is not greater than the string length +author: Jordan Harband +---*/ + +assert.sameValue('abc'.padEnd(undefined, 'def'), 'abc'); +assert.sameValue('abc'.padEnd(null, 'def'), 'abc'); +assert.sameValue('abc'.padEnd(NaN, 'def'), 'abc'); +assert.sameValue('abc'.padEnd(-Infinity, 'def'), 'abc'); +assert.sameValue('abc'.padEnd(0, 'def'), 'abc'); +assert.sameValue('abc'.padEnd(-1, 'def'), 'abc'); +assert.sameValue('abc'.padEnd(3, 'def'), 'abc'); +assert.sameValue('abc'.padEnd(3.9999, 'def'), 'abc'); diff --git a/test/built-ins/String/prototype/padEnd/normal-operation.js b/test/built-ins/String/prototype/padEnd/normal-operation.js new file mode 100644 index 0000000000..35e4f424f1 --- /dev/null +++ b/test/built-ins/String/prototype/padEnd/normal-operation.js @@ -0,0 +1,14 @@ +// Copyright (C) 2016 Jordan Harband. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-string.prototype.padend +description: String#padEnd should work in the general case +author: Jordan Harband +---*/ + +assert.sameValue('abc'.padEnd(7, 'def'), 'abcdefd'); +assert.sameValue('abc'.padEnd(5, '*'), 'abc**'); + +// surrogate pairs +assert.sameValue('abc'.padEnd(6, '\uD83D\uDCA9'), 'abc\uD83D\uDCA9\uD83D'); diff --git a/test/built-ins/String/prototype/padEnd/observable-operations.js b/test/built-ins/String/prototype/padEnd/observable-operations.js new file mode 100644 index 0000000000..38315b3c44 --- /dev/null +++ b/test/built-ins/String/prototype/padEnd/observable-operations.js @@ -0,0 +1,42 @@ +// Copyright (C) 2016 Jordan Harband. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-string.prototype.padend +description: String#padEnd should perform observable operations in the correct order +author: Jordan Harband +---*/ + +var log = ""; + +function createPrimitiveObserver(name, string, value) { + return { + toString: function () { + log += '|toString:' + name; + return string; + }, + valueOf: function () { + log += '|valueOf:' + name; + return value; + } + }; +}; + +var receiver = createPrimitiveObserver('receiver', {}, 'abc'); + +var fillString = createPrimitiveObserver('fillString', {}, 'def'); + +var maxLength = createPrimitiveObserver('maxLength', 11, {}); + +var result = String.prototype.padEnd.call(receiver, maxLength, fillString); + +assert.sameValue(result, 'abcdefdefde'); + +assert.sameValue(log, '|' + [ + 'toString:receiver', + 'valueOf:receiver', + 'valueOf:maxLength', + 'toString:maxLength', + 'toString:fillString', + 'valueOf:fillString' +].join('|'), log); diff --git a/test/built-ins/String/prototype/padStart/exception-fill-string-symbol.js b/test/built-ins/String/prototype/padStart/exception-fill-string-symbol.js new file mode 100644 index 0000000000..73f5435445 --- /dev/null +++ b/test/built-ins/String/prototype/padStart/exception-fill-string-symbol.js @@ -0,0 +1,13 @@ +// Copyright (C) 2016 Jordan Harband. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-string.prototype.padstart +description: String#padStart should fail if given a Symbol fillString. +author: Jordan Harband +features: [Symbol] +---*/ + +assert.throws(TypeError, function () { + 'abc'.padStart(10, Symbol()); +}); diff --git a/test/built-ins/String/prototype/padStart/exception-not-object-coercible.js b/test/built-ins/String/prototype/padStart/exception-not-object-coercible.js new file mode 100644 index 0000000000..7d08deae00 --- /dev/null +++ b/test/built-ins/String/prototype/padStart/exception-not-object-coercible.js @@ -0,0 +1,28 @@ +// Copyright (C) 2016 Jordan Harband. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-string.prototype.padstart +description: > + String#padStart should fail if given a null or undefined value, + or an object not coercible to a string. +author: Jordan Harband +---*/ + +assert.throws(TypeError, function () { + String.prototype.padStart.call(null); +}); + +assert.throws(TypeError, function () { + String.prototype.padStart.call(undefined); +}); + +var notCoercible = { + toString: function () { + throw new Test262Error('attempted toString'); + } +}; + +assert.throws(Test262Error, function () { + String.prototype.padStart.call(notCoercible); +}); diff --git a/test/built-ins/String/prototype/padStart/exception-symbol.js b/test/built-ins/String/prototype/padStart/exception-symbol.js new file mode 100644 index 0000000000..66521f28c3 --- /dev/null +++ b/test/built-ins/String/prototype/padStart/exception-symbol.js @@ -0,0 +1,13 @@ +// Copyright (C) 2016 Jordan Harband. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-string.prototype.padstart +description: String#padStart should fail if given a Symbol receiver. +author: Jordan Harband +features: [Symbol] +---*/ + +assert.throws(TypeError, function () { + String.prototype.padStart.call(Symbol()); +}); diff --git a/test/built-ins/String/prototype/padStart/fill-string-empty.js b/test/built-ins/String/prototype/padStart/fill-string-empty.js new file mode 100644 index 0000000000..b1ba8377a7 --- /dev/null +++ b/test/built-ins/String/prototype/padStart/fill-string-empty.js @@ -0,0 +1,12 @@ +// Copyright (C) 2016 Jordan Harband. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-string.prototype.padstart +description: > + String#padStart should return the string unchanged when + an explicit empty string is provided +author: Jordan Harband +---*/ + +assert.sameValue('abc'.padStart(5, ''), 'abc'); diff --git a/test/built-ins/String/prototype/padStart/fill-string-non-strings.js b/test/built-ins/String/prototype/padStart/fill-string-non-strings.js new file mode 100644 index 0000000000..acbb73ea77 --- /dev/null +++ b/test/built-ins/String/prototype/padStart/fill-string-non-strings.js @@ -0,0 +1,15 @@ +// Copyright (C) 2016 Jordan Harband. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-string.prototype.padstart +description: String#padStart should stringify a non-string fillString value +author: Jordan Harband +---*/ + +assert.sameValue('abc'.padStart(10, false), 'falsefaabc'); +assert.sameValue('abc'.padStart(10, true), 'truetruabc'); +assert.sameValue('abc'.padStart(10, null), 'nullnulabc'); +assert.sameValue('abc'.padStart(10, 0), '0000000abc'); +assert.sameValue('abc'.padStart(10, -0), '0000000abc'); +assert.sameValue('abc'.padStart(10, NaN), 'NaNNaNNabc'); diff --git a/test/built-ins/String/prototype/padStart/fill-string-omitted.js b/test/built-ins/String/prototype/padStart/fill-string-omitted.js new file mode 100644 index 0000000000..829edbcb20 --- /dev/null +++ b/test/built-ins/String/prototype/padStart/fill-string-omitted.js @@ -0,0 +1,11 @@ +// Copyright (C) 2016 Jordan Harband. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-string.prototype.padstart +description: String#padStart should default to a fillString of " " when omitted +author: Jordan Harband +---*/ + +assert.sameValue('abc'.padStart(5), ' abc'); +assert.sameValue('abc'.padStart(5, undefined), ' abc'); diff --git a/test/built-ins/String/prototype/padStart/function-length.js b/test/built-ins/String/prototype/padStart/function-length.js new file mode 100644 index 0000000000..a096add5ed --- /dev/null +++ b/test/built-ins/String/prototype/padStart/function-length.js @@ -0,0 +1,15 @@ +// Copyright (C) 2016 Jordan Harband. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-string.prototype.padstart +description: String#padStart should have length 1 +author: Jordan Harband +includes: [propertyHelper.js] +---*/ + +assert.sameValue(String.prototype.padStart.length, 1, 'Expected String#padStart.length to be 1'); + +verifyNotEnumerable(String.prototype.padStart, 'length'); +verifyNotWritable(String.prototype.padStart, 'length'); +verifyConfigurable(String.prototype.padStart, 'length'); diff --git a/test/built-ins/String/prototype/padStart/function-name.js b/test/built-ins/String/prototype/padStart/function-name.js new file mode 100644 index 0000000000..0b63be0e4e --- /dev/null +++ b/test/built-ins/String/prototype/padStart/function-name.js @@ -0,0 +1,19 @@ +// Copyright (C) 2016 Jordan Harband. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-string.prototype.padstart +description: String#padStart should have name property with value 'padStart' +author: Jordan Harband +includes: [propertyHelper.js] +---*/ + +assert.sameValue( + String.prototype.padStart.name, + 'padStart', + 'Expected String#padStart.name to be "padStart"' +); + +verifyNotEnumerable(String.prototype.padStart, 'name'); +verifyNotWritable(String.prototype.padStart, 'name'); +verifyConfigurable(String.prototype.padStart, 'name'); diff --git a/test/built-ins/String/prototype/padStart/function-property-descriptor.js b/test/built-ins/String/prototype/padStart/function-property-descriptor.js new file mode 100644 index 0000000000..5fece20c26 --- /dev/null +++ b/test/built-ins/String/prototype/padStart/function-property-descriptor.js @@ -0,0 +1,13 @@ +// Copyright (C) 2016 Jordan Harband. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-string.prototype.padstart +description: String#padStart should be writable, non-enumerable, and configurable +author: Jordan Harband +includes: [propertyHelper.js] +---*/ + +verifyNotEnumerable(String.prototype, 'padStart'); +verifyWritable(String.prototype, 'padStart'); +verifyConfigurable(String.prototype, 'padStart'); diff --git a/test/built-ins/String/prototype/padStart/max-length-not-greater-than-string.js b/test/built-ins/String/prototype/padStart/max-length-not-greater-than-string.js new file mode 100644 index 0000000000..1dac96fee6 --- /dev/null +++ b/test/built-ins/String/prototype/padStart/max-length-not-greater-than-string.js @@ -0,0 +1,19 @@ +// Copyright (C) 2016 Jordan Harband. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-string.prototype.padstart +description: > + String#padStart should return the string unchanged when an integer max + length is not greater than the string length +author: Jordan Harband +---*/ + +assert.sameValue('abc'.padStart(undefined, 'def'), 'abc'); +assert.sameValue('abc'.padStart(null, 'def'), 'abc'); +assert.sameValue('abc'.padStart(NaN, 'def'), 'abc'); +assert.sameValue('abc'.padStart(-Infinity, 'def'), 'abc'); +assert.sameValue('abc'.padStart(0, 'def'), 'abc'); +assert.sameValue('abc'.padStart(-1, 'def'), 'abc'); +assert.sameValue('abc'.padStart(3, 'def'), 'abc'); +assert.sameValue('abc'.padStart(3.9999, 'def'), 'abc'); diff --git a/test/built-ins/String/prototype/padStart/normal-operation.js b/test/built-ins/String/prototype/padStart/normal-operation.js new file mode 100644 index 0000000000..f6f6b17cf9 --- /dev/null +++ b/test/built-ins/String/prototype/padStart/normal-operation.js @@ -0,0 +1,14 @@ +// Copyright (C) 2016 Jordan Harband. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-string.prototype.padstart +description: String#padStart should work in the general case +author: Jordan Harband +---*/ + +assert.sameValue('abc'.padStart(7, 'def'), 'defdabc'); +assert.sameValue('abc'.padStart(5, '*'), '**abc'); + +// surrogate pairs +assert.sameValue('abc'.padStart(6, '\uD83D\uDCA9'), '\uD83D\uDCA9\uD83Dabc'); diff --git a/test/built-ins/String/prototype/padStart/observable-operations.js b/test/built-ins/String/prototype/padStart/observable-operations.js new file mode 100644 index 0000000000..dfb9a0f261 --- /dev/null +++ b/test/built-ins/String/prototype/padStart/observable-operations.js @@ -0,0 +1,42 @@ +// Copyright (C) 2016 Jordan Harband. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-string.prototype.padstart +description: String#padStart should perform observable operations in the correct order +author: Jordan Harband +---*/ + +var log = ""; + +function createPrimitiveObserver(name, string, value) { + return { + toString: function () { + log += '|toString:' + name; + return string; + }, + valueOf: function () { + log += '|valueOf:' + name; + return value; + } + }; +}; + +var receiver = createPrimitiveObserver('receiver', {}, 'abc'); + +var fillString = createPrimitiveObserver('fillString', {}, 'def'); + +var maxLength = createPrimitiveObserver('maxLength', 11, {}); + +var result = String.prototype.padStart.call(receiver, maxLength, fillString); + +assert.sameValue(result, 'defdefdeabc'); + +assert.sameValue(log, '|' + [ + 'toString:receiver', + 'valueOf:receiver', + 'valueOf:maxLength', + 'toString:maxLength', + 'toString:fillString', + 'valueOf:fillString' +].join('|'), log);