Home | History | Annotate | Download | only in mjsunit
      1 // Copyright 2008 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 expected = ["A", undefined, "B", "bold", "/", "B", "and", undefined, "CODE", "coded", "/", "CODE", ""];
     29 result = "A<B>bold</B>and<CODE>coded</CODE>".split(/<(\/)?([^<>]+)>/);
     30 assertArrayEquals(expected, result, 1);
     31 
     32 expected = ["a", "b"];
     33 result = "ab".split(/a*?/);
     34 assertArrayEquals(expected, result, 2);
     35 
     36 expected = ["", "b"];
     37 result = "ab".split(/a*/);
     38 assertArrayEquals(expected, result, 3);
     39 
     40 expected = ["a"];
     41 result = "ab".split(/a*?/, 1);
     42 assertArrayEquals(expected, result, 4);
     43 
     44 expected = [""];
     45 result = "ab".split(/a*/, 1);
     46 assertArrayEquals(expected, result, 5);
     47 
     48 expected = ["as","fas","fas","f"];
     49 result = "asdfasdfasdf".split("d");
     50 assertArrayEquals(expected, result, 6);
     51 
     52 expected = ["as","fas","fas","f"];
     53 result = "asdfasdfasdf".split("d", -1);
     54 assertArrayEquals(expected, result, 7);
     55 
     56 expected = ["as", "fas"];
     57 result = "asdfasdfasdf".split("d", 2);
     58 assertArrayEquals(expected, result, 8);
     59 
     60 expected = [];
     61 result = "asdfasdfasdf".split("d", 0);
     62 assertArrayEquals(expected, result, 9);
     63 
     64 expected = ["as","fas","fas",""];
     65 result = "asdfasdfasd".split("d");
     66 assertArrayEquals(expected, result, 10);
     67 
     68 expected = [];
     69 result = "".split("");
     70 assertArrayEquals(expected, result, 11);
     71 
     72 expected = [""]
     73 result = "".split("a");
     74 assertArrayEquals(expected, result, 12);
     75 
     76 expected = ["a","b"]
     77 result = "axxb".split(/x*/);
     78 assertArrayEquals(expected, result, 13);
     79 
     80 expected = ["a","b"]
     81 result = "axxb".split(/x+/);
     82 assertArrayEquals(expected, result, 14);
     83 
     84 expected = ["a","","b"]
     85 result = "axxb".split(/x/);
     86 assertArrayEquals(expected, result, 15);
     87 
     88 // This was http://b/issue?id=1151354
     89 expected = ["div", "#id", ".class"]
     90 result = "div#id.class".split(/(?=[#.])/);
     91 assertArrayEquals(expected, result, 16);
     92 
     93 expected = ["div", "#i", "d", ".class"]
     94 result = "div#id.class".split(/(?=[d#.])/);
     95 assertArrayEquals(expected, result, 17);
     96 
     97 expected = ["a", "b", "c"]
     98 result = "abc".split(/(?=.)/);
     99 assertArrayEquals(expected, result, 18);
    100 
    101 /* "ab".split(/((?=.))/)
    102  * 
    103  * KJS:   ,a,,b
    104  * SM:    a,,b,
    105  * IE:    a,b
    106  * Opera: a,,b
    107  * V8:    a,,b
    108  * 
    109  * Opera seems to have this right.  The others make no sense.
    110  */
    111 expected = ["a", "", "b"]
    112 result = "ab".split(/((?=.))/);
    113 assertArrayEquals(expected, result, 19);
    114 
    115 /* "ab".split(/(?=)/)
    116  *
    117  * KJS:   a,b
    118  * SM:    ab
    119  * IE:    a,b
    120  * Opera: a,b
    121  * V8:    a,b
    122  */
    123 expected = ["a", "b"]
    124 result = "ab".split(/(?=)/);
    125 assertArrayEquals(expected, result, 20);
    126 
    127