84 lines
4.1 KiB
JavaScript
84 lines
4.1 KiB
JavaScript
description("This test checks the String.prototype.padStart.");
|
|
|
|
shouldBe('String.prototype.padStart.length', '1');
|
|
shouldBeEqualToString('String.prototype.padStart.name', 'padStart');
|
|
shouldBe('Object.getOwnPropertyDescriptor(String.prototype, "padStart").configurable', 'true');
|
|
shouldBe('Object.getOwnPropertyDescriptor(String.prototype, "padStart").enumerable', 'false');
|
|
shouldBe('Object.getOwnPropertyDescriptor(String.prototype, "padStart").writable', 'true');
|
|
shouldBe('Object.getOwnPropertyDescriptor(String.prototype, "padStart").get', 'undefined');
|
|
shouldBe('Object.getOwnPropertyDescriptor(String.prototype, "padStart").set', 'undefined');
|
|
shouldBe('Object.getOwnPropertyDescriptor(String.prototype, "padStart").value', 'String.prototype.padStart');
|
|
|
|
shouldBe("'foo'.padStart()", "'foo'");
|
|
shouldBe("'foo'.padStart(+0)", "'foo'");
|
|
shouldBe("'foo'.padStart(-0)", "'foo'");
|
|
shouldBe("'foo'.padStart(1)", "'foo'");
|
|
shouldBe("'foo'.padStart(2)", "'foo'");
|
|
shouldBe("'foo'.padStart(-2)", "'foo'");
|
|
shouldBe("'foo'.padStart(10)", "' foo'");
|
|
shouldBe("'foo'.padStart(10, undefined)", "' foo'");
|
|
shouldBe("'foo'.padStart(10, 'x')", "'xxxxxxxfoo'");
|
|
shouldBe("'foo'.padStart(10.5, 'z')", "'zzzzzzzfoo'");
|
|
shouldBe("'foo'.padStart(10, 'bar')", "'barbarbfoo'");
|
|
shouldBe("'foo'.padStart(10, '123456789')", "'1234567foo'");
|
|
shouldBe("'foo'.padStart(999, '')", "'foo'");
|
|
shouldBe("''.padStart(1, '')", "''");
|
|
shouldBe("''.padStart(2, 'bar')", "'ba'");
|
|
shouldBe("'x'.padStart(2, 'bar')", "'bx'");
|
|
shouldBe("'xx'.padStart(2, 'bar')", "'xx'");
|
|
shouldBe("'xx'.padStart(Math.PI, 'bar')", "'bxx'");
|
|
|
|
// Coerce length (ToLength).
|
|
shouldBe("''.padStart(true, 'ABC')", "'A'");
|
|
shouldBe("''.padStart(false, 'ABC')", "''");
|
|
shouldBe("''.padStart(null, 'ABC')", "''");
|
|
shouldBe("''.padStart({}, 'ABC')", "''");
|
|
shouldBe("''.padStart(NaN, 'ABC')", "''");
|
|
|
|
// Coerce fillString (ToString).
|
|
shouldBe("'ABC'.padStart(10, true)", "'truetruABC'");
|
|
shouldBe("'ABC'.padStart(10, false)", "'falsefaABC'");
|
|
shouldBe("'ABC'.padStart(10, null)", "'nullnulABC'");
|
|
shouldBe("'ABC'.padStart(10, {})", "'[objectABC'");
|
|
shouldBe("'ABC'.padStart(10, NaN)", "'NaNNaNNABC'");
|
|
|
|
// Check out of memory errors.
|
|
shouldNotThrow('"x".padStart(Infinity, "")'); // Empty string filler is fine.
|
|
shouldThrow('"x".padStart(Infinity, "x")', "'RangeError: Out of memory'");
|
|
shouldThrow('"x".padStart(0x80000000, "x")', "'RangeError: Out of memory'");
|
|
shouldThrow('"x".padStart(0xFFFFFFFF, "x")', "'RangeError: Out of memory'");
|
|
|
|
// Check side-effects.
|
|
let sideEffects = "";
|
|
let thisObject = new String("foo bar");
|
|
let lengthObject = new Number(10);
|
|
let fillObject = new String("X");
|
|
|
|
sideEffects = "";
|
|
thisObject.toString = function() { sideEffects += "A"; return this; };
|
|
lengthObject.valueOf = function() { sideEffects += "B"; return this; };
|
|
fillObject.toString = function() { sideEffects += "C"; return this; };
|
|
shouldBeEqualToString("String.prototype.padStart.call(thisObject, lengthObject, fillObject)", "XXXfoo bar");
|
|
shouldBeEqualToString("sideEffects", "ABC");
|
|
|
|
sideEffects = "";
|
|
thisObject.toString = function() { throw "ERROR"; };
|
|
lengthObject.valueOf = function() { sideEffects += "B"; return this; };
|
|
fillObject.toString = function() { sideEffects += "C"; return this; };
|
|
shouldThrow("String.prototype.padStart.call(thisObject, lengthObject, fillObject)", "'ERROR'");
|
|
shouldBeEqualToString("sideEffects", "");
|
|
|
|
sideEffects = "";
|
|
thisObject.toString = function() { sideEffects += "A"; return this; };
|
|
lengthObject.valueOf = function() { throw "ERROR"; };
|
|
fillObject.toString = function() { sideEffects += "C"; return this; };
|
|
shouldThrow("String.prototype.padStart.call(thisObject, lengthObject, fillObject)", "'ERROR'");
|
|
shouldBeEqualToString("sideEffects", "A");
|
|
|
|
sideEffects = "";
|
|
thisObject.toString = function() { sideEffects += "A"; return this; };
|
|
lengthObject.valueOf = function() { sideEffects += "B"; return this; };
|
|
fillObject.toString = function() { throw "ERROR"; return this; };
|
|
shouldThrow("String.prototype.padStart.call(thisObject, lengthObject, fillObject)", "'ERROR'");
|
|
shouldBeEqualToString("sideEffects", "AB");
|