Home | History | Annotate | Download | only in es6
      1 // Copyright 2013 the V8 project authors. All rights reserved.
      2 // Redistribution and use in source and binary forms, with or without
      3 // modification, are permitted provided that the following conditions are
      4 // met:
      5 //
      6 //     * Redistributions of source code must retain the above copyright
      7 //       notice, this list of conditions and the following disclaimer.
      8 //     * Redistributions in binary form must reproduce the above
      9 //       copyright notice, this list of conditions and the following
     10 //       disclaimer in the documentation and/or other materials provided
     11 //       with the distribution.
     12 //     * Neither the name of Google Inc. nor the names of its
     13 //       contributors may be used to endorse or promote products derived
     14 //       from this software without specific prior written permission.
     15 //
     16 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     17 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     18 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
     19 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     20 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     21 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     22 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     23 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     24 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     27 
     28 assertEquals("000", String.prototype.repeat.call(0, 3));
     29 assertEquals("-1-1-1", String.prototype.repeat.call(-1, 3));
     30 assertEquals("2.12.12.1", String.prototype.repeat.call(2.1, 3));
     31 assertEquals("", String.prototype.repeat.call([], 3));
     32 assertEquals("1,2,3", String.prototype.repeat.call([1, 2, 3], 1));
     33 assertEquals("true", String.prototype.repeat.call(true, 1));
     34 assertEquals("false", String.prototype.repeat.call(false, 1));
     35 assertEquals("[object Object]", String.prototype.repeat.call({}, 1));
     36 
     37 assertEquals("000", String.prototype.repeat.apply(0, [3]));
     38 assertEquals("-1-1-1", String.prototype.repeat.apply(-1, [3]));
     39 assertEquals("2.12.12.1", String.prototype.repeat.apply(2.1, [3]));
     40 assertEquals("", String.prototype.repeat.apply([], [3]));
     41 assertEquals("1,2,3", String.prototype.repeat.apply([1, 2, 3], [1]));
     42 assertEquals("true", String.prototype.repeat.apply(true, [1]));
     43 assertEquals("false", String.prototype.repeat.apply(false, [1]));
     44 assertEquals("[object Object]", String.prototype.repeat.apply({}, [1]));
     45 
     46 assertEquals("\u10D8\u10D8\u10D8", "\u10D8".repeat(3));
     47 
     48 assertThrows('String.prototype.repeat.call(null, 1)', TypeError);
     49 assertThrows('String.prototype.repeat.call(undefined, 1)', TypeError);
     50 assertThrows('String.prototype.repeat.apply(null, [1])', TypeError);
     51 assertThrows('String.prototype.repeat.apply(undefined, [1])', TypeError);
     52 
     53 // Test cases found in FF
     54 assertEquals("abc", "abc".repeat(1));
     55 assertEquals("abcabc", "abc".repeat(2));
     56 assertEquals("abcabcabc", "abc".repeat(3));
     57 assertEquals("aaaaaaaaaa", "a".repeat(10));
     58 assertEquals("", "".repeat(5));
     59 assertEquals("", "abc".repeat(0));
     60 assertEquals("abcabc", "abc".repeat(2.0));
     61 
     62 assertEquals("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "a".repeat(37));
     63 assertThrows('"a".repeat(-1)', RangeError);
     64 assertThrows('"a".repeat(Number.POSITIVE_INFINITY)', RangeError);
     65 assertThrows('"a".repeat(Math.pow(2, 30))', RangeError);
     66 assertThrows('"a".repeat(Math.pow(2, 40))', RangeError);
     67 
     68 // Handling empty strings
     69 assertThrows('"".repeat(-1)', RangeError);
     70 assertThrows('"".repeat(Number.POSITIVE_INFINITY)', RangeError);
     71 assertEquals("", "".repeat(Math.pow(2, 30)));
     72 assertEquals("", "".repeat(Math.pow(2, 40)));
     73 
     74 var myobj = {
     75   toString: function() {
     76     return "abc";
     77   },
     78   repeat : String.prototype.repeat
     79 };
     80 assertEquals("abc", myobj.repeat(1));
     81 assertEquals("abcabc", myobj.repeat(2));
     82