| // 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); |