mirror of https://github.com/tc39/test262.git
Add tests for `String#padStart` and `String#padEnd`.
https://github.com/tc39/proposal-string-pad-start-end/issues/23 Closes gh-564
This commit is contained in:
parent
755b0d6117
commit
c95e673feb
|
@ -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());
|
||||
});
|
|
@ -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);
|
||||
});
|
|
@ -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());
|
||||
});
|
|
@ -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');
|
|
@ -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');
|
|
@ -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 ');
|
|
@ -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');
|
|
@ -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');
|
|
@ -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');
|
19
test/built-ins/String/prototype/padEnd/max-length-not-greater-than-string.js
vendored
Normal file
19
test/built-ins/String/prototype/padEnd/max-length-not-greater-than-string.js
vendored
Normal file
|
@ -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');
|
|
@ -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');
|
|
@ -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);
|
|
@ -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());
|
||||
});
|
|
@ -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);
|
||||
});
|
|
@ -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());
|
||||
});
|
|
@ -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');
|
|
@ -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');
|
|
@ -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');
|
|
@ -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');
|
|
@ -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');
|
|
@ -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');
|
19
test/built-ins/String/prototype/padStart/max-length-not-greater-than-string.js
vendored
Normal file
19
test/built-ins/String/prototype/padStart/max-length-not-greater-than-string.js
vendored
Normal file
|
@ -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');
|
|
@ -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');
|
|
@ -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);
|
Loading…
Reference in New Issue