Home | History | Annotate | Download | only in harmony
      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 // Flags: --harmony-strings
     29 
     30 assertEquals("000", String.prototype.repeat.call(0, 3));
     31 assertEquals("-1-1-1", String.prototype.repeat.call(-1, 3));
     32 assertEquals("2.12.12.1", String.prototype.repeat.call(2.1, 3));
     33 assertEquals("", String.prototype.repeat.call([], 3));
     34 assertEquals("1,2,3", String.prototype.repeat.call([1, 2, 3], 1));
     35 assertEquals("true", String.prototype.repeat.call(true, 1));
     36 assertEquals("false", String.prototype.repeat.call(false, 1));
     37 assertEquals("[object Object]", String.prototype.repeat.call({}, 1));
     38 
     39 assertEquals("000", String.prototype.repeat.apply(0, [3]));
     40 assertEquals("-1-1-1", String.prototype.repeat.apply(-1, [3]));
     41 assertEquals("2.12.12.1", String.prototype.repeat.apply(2.1, [3]));
     42 assertEquals("", String.prototype.repeat.apply([], [3]));
     43 assertEquals("1,2,3", String.prototype.repeat.apply([1, 2, 3], [1]));
     44 assertEquals("true", String.prototype.repeat.apply(true, [1]));
     45 assertEquals("false", String.prototype.repeat.apply(false, [1]));
     46 assertEquals("[object Object]", String.prototype.repeat.apply({}, [1]));
     47 
     48 assertEquals("\u10D8\u10D8\u10D8", "\u10D8".repeat(3));
     49 
     50 assertThrows('String.prototype.repeat.call(null, 1)', TypeError);
     51 assertThrows('String.prototype.repeat.call(undefined, 1)', TypeError);
     52 assertThrows('String.prototype.repeat.apply(null, [1])', TypeError);
     53 assertThrows('String.prototype.repeat.apply(undefined, [1])', TypeError);
     54 
     55 // Test cases found in FF
     56 assertEquals("abc", "abc".repeat(1));
     57 assertEquals("abcabc", "abc".repeat(2));
     58 assertEquals("abcabcabc", "abc".repeat(3));
     59 assertEquals("aaaaaaaaaa", "a".repeat(10));
     60 assertEquals("", "".repeat(5));
     61 assertEquals("", "abc".repeat(0));
     62 assertEquals("abcabc", "abc".repeat(2.0));
     63 
     64 assertThrows('"a".repeat(-1)', RangeError);
     65 assertThrows('"a".repeat(Number.POSITIVE_INFINITY)', RangeError);
     66 
     67 var myobj = {
     68   toString: function() {
     69     return "abc";
     70   },
     71   repeat : String.prototype.repeat
     72 };
     73 assertEquals("abc", myobj.repeat(1));
     74 assertEquals("abcabc", myobj.repeat(2));
     75