| Index: test/mjsunit/harmony/harmony-string-pad-end.js | 
| diff --git a/test/mjsunit/harmony/harmony-string-pad-end.js b/test/mjsunit/harmony/harmony-string-pad-end.js | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..3292e94eeec92945983d16259ece19c77e4a22b7 | 
| --- /dev/null | 
| +++ b/test/mjsunit/harmony/harmony-string-pad-end.js | 
| @@ -0,0 +1,87 @@ | 
| +// Copyright 2016 the V8 project authors. All rights reserved. | 
| +// Use of this source code is governed by a BSD-style license that can be | 
| +// found in the LICENSE file. | 
| + | 
| +// Flags: --harmony-string-padding | 
| + | 
| +(function TestMeta() { | 
| +  assertEquals(1, String.prototype.padEnd.length); | 
| +  assertEquals("function", typeof String.prototype.padEnd); | 
| +  assertEquals(Object.getPrototypeOf(Function), | 
| +               Object.getPrototypeOf(String.prototype.padEnd)); | 
| +  assertEquals("padEnd", String.prototype.padEnd.name); | 
| + | 
| +  var desc = Object.getOwnPropertyDescriptor(String.prototype, "padEnd"); | 
| +  assertFalse(desc.enumerable); | 
| +  assertTrue(desc.configurable); | 
| +  assertTrue(desc.writable); | 
| +  assertEquals(undefined, desc.get); | 
| +  assertEquals(undefined, desc.set); | 
| + | 
| +  assertThrows(() => new Function(`${String.prototype.padEnd}`), SyntaxError); | 
| +})(); | 
| + | 
| + | 
| +(function TestRequireObjectCoercible() { | 
| +  var padEnd = String.prototype.padEnd; | 
| +  assertThrows(() => padEnd.call(null, 4, "test"), TypeError); | 
| +  assertThrows(() => padEnd.call(undefined, 4, "test"), TypeError); | 
| +  assertEquals("123   ", padEnd.call({ | 
| +    __proto__: null, | 
| +    valueOf() { return 123; } | 
| +  }, 6, " ")); | 
| + | 
| +  var proxy = new Proxy({}, { | 
| +    get(t, name) { | 
| +      if (name === Symbol.toPrimitive || name === "toString") return; | 
| +      if (name === "valueOf") return () => 6.7; | 
| +      assertUnreachable(); | 
| +    } | 
| +  }); | 
| +  assertEquals("6.7   ", padEnd.call(proxy, 6, " ")); | 
| + | 
| +  proxy = new Proxy({}, { | 
| +    get(t, name) { | 
| +      if (name === Symbol.toPrimitive || name === "valueOf") return; | 
| +      if (name === "toString") return () => 6.7; | 
| +      assertUnreachable(); | 
| +    } | 
| +  }); | 
| +  assertEquals("6.7   ", padEnd.call(proxy, 6, " ")); | 
| +})(); | 
| + | 
| + | 
| +(function TestToLength() { | 
| +  assertThrows(() => "123".padEnd(Symbol("16")), TypeError); | 
| +  assertEquals("123", "123".padEnd(-1)); | 
| +  assertEquals("123", "123".padEnd({ toString() { return -1; } })); | 
| +  assertEquals("123", "123".padEnd(-0)); | 
| +  assertEquals("123", "123".padEnd({ toString() { return -0; } })); | 
| +  assertEquals("123", "123".padEnd(+0)); | 
| +  assertEquals("123", "123".padEnd({ toString() { return +0; } })); | 
| +  assertEquals("123", "123".padEnd(NaN)); | 
| +  assertEquals("123", "123".padEnd({ toString() { return NaN; } })); | 
| +})(); | 
| + | 
| + | 
| +(function TestFillerToString() { | 
| +  assertEquals(".         ", ".".padEnd(10)); | 
| +  assertEquals(".         ", ".".padEnd(10, undefined)); | 
| +  assertEquals(".         ", ".".padEnd(10, { toString() { return ""; } })); | 
| +  assertEquals(".nullnulln", ".".padEnd(10, null)); | 
| +})(); | 
| + | 
| + | 
| +(function TestFillerRepetition() { | 
| +  for (var i = 2000; i > 0; --i) { | 
| +    var expected = "123" + "xoxo".repeat(i / 4).slice(0, i - 3); | 
| +    var actual = "123".padEnd(i, "xoxo"); | 
| +    assertEquals(expected, actual); | 
| +    assertEquals(i > "123".length ? i : 3, actual.length); | 
| +  } | 
| +})(); | 
| + | 
| + | 
| +(function TestTruncation() { | 
| +  assertEquals("ab", "a".padEnd(2, "bc")); | 
| +})(); | 
|  |