Skip to content

Commit

Permalink
Add tests for String#padStart and String#padEnd.
Browse files Browse the repository at this point in the history
  • Loading branch information
ljharb authored and leobalter committed Apr 6, 2016
1 parent 755b0d6 commit c95e673
Show file tree
Hide file tree
Showing 24 changed files with 428 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -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());
});
Original file line number Diff line number Diff line change
@@ -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);
});
13 changes: 13 additions & 0 deletions test/built-ins/String/prototype/padEnd/exception-symbol.js
Original file line number Diff line number Diff line change
@@ -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());
});
12 changes: 12 additions & 0 deletions test/built-ins/String/prototype/padEnd/fill-string-empty.js
Original file line number Diff line number Diff line change
@@ -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');
15 changes: 15 additions & 0 deletions test/built-ins/String/prototype/padEnd/fill-string-non-strings.js
Original file line number Diff line number Diff line change
@@ -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');
11 changes: 11 additions & 0 deletions test/built-ins/String/prototype/padEnd/fill-string-omitted.js
Original file line number Diff line number Diff line change
@@ -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 ');
15 changes: 15 additions & 0 deletions test/built-ins/String/prototype/padEnd/function-length.js
Original file line number Diff line number Diff line change
@@ -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');
19 changes: 19 additions & 0 deletions test/built-ins/String/prototype/padEnd/function-name.js
Original file line number Diff line number Diff line change
@@ -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');
Original file line number Diff line number Diff line change
@@ -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');
Original file line number Diff line number Diff line change
@@ -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');
14 changes: 14 additions & 0 deletions test/built-ins/String/prototype/padEnd/normal-operation.js
Original file line number Diff line number Diff line change
@@ -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');
42 changes: 42 additions & 0 deletions test/built-ins/String/prototype/padEnd/observable-operations.js
Original file line number Diff line number Diff line change
@@ -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);
Original file line number Diff line number Diff line change
@@ -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());
});
Original file line number Diff line number Diff line change
@@ -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);
});
13 changes: 13 additions & 0 deletions test/built-ins/String/prototype/padStart/exception-symbol.js
Original file line number Diff line number Diff line change
@@ -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());
});
12 changes: 12 additions & 0 deletions test/built-ins/String/prototype/padStart/fill-string-empty.js
Original file line number Diff line number Diff line change
@@ -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');
Original file line number Diff line number Diff line change
@@ -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');
11 changes: 11 additions & 0 deletions test/built-ins/String/prototype/padStart/fill-string-omitted.js
Original file line number Diff line number Diff line change
@@ -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');
15 changes: 15 additions & 0 deletions test/built-ins/String/prototype/padStart/function-length.js
Original file line number Diff line number Diff line change
@@ -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');
19 changes: 19 additions & 0 deletions test/built-ins/String/prototype/padStart/function-name.js
Original file line number Diff line number Diff line change
@@ -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');
Original file line number Diff line number Diff line change
@@ -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');
Original file line number Diff line number Diff line change
@@ -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');
Loading

0 comments on commit c95e673

Please sign in to comment.