Home | History | Annotate | Download | only in regex
      1 package org.apache.harmony.regex.tests.java.util.regex;
      2 
      3 import junit.framework.TestCase;
      4 import java.util.regex.*;
      5 
      6 /**
      7  * TODO Type description
      8  *
      9  */
     10 public class SplitTest extends TestCase {
     11     public void testSimple() {
     12         Pattern p = Pattern.compile("/");
     13         String[] results = p.split("have/you/done/it/right");
     14         String[] expected = new String[] { "have", "you", "done", "it", "right" };
     15         assertArraysEqual(expected, results);
     16     }
     17 
     18     public void testEmptySplits() {
     19         // Trailing empty matches are removed.
     20         assertArraysEqual(new String[0], "hello".split("."));
     21         assertArraysEqual(new String[] { "1", "2" }, "1:2:".split(":"));
     22         // ...including when that results in an empty result.
     23         assertArraysEqual(new String[0], ":".split(":"));
     24         // ...but not when limit < 0.
     25         assertArraysEqual(new String[] { "1", "2", "" }, "1:2:".split(":", -1));
     26 
     27         // Leading empty matches are retained.
     28         assertArraysEqual(new String[] { "", "", "o" }, "hello".split(".."));
     29 
     30         // A separator that doesn't occur in the input gets you the input.
     31         assertArraysEqual(new String[] { "hello" }, "hello".split("not-present-in-test"));
     32         // ...including when the input is the empty string.
     33         // (Perl returns an empty list instead.)
     34         assertArraysEqual(new String[] { "" }, "".split("not-present-in-test"));
     35         assertArraysEqual(new String[] { "" }, "".split("A?"));
     36 
     37         // The limit argument controls the size of the result.
     38         // If l == 0, the result is as long as needed, except trailing empty matches are dropped.
     39         // If l < 0, the result is as long as needed, and trailing empty matches are retained.
     40         // If l > 0, the result contains the first l matches, plus one string containing the remaining input.
     41         // Examples without a trailing separator (and hence without a trailing empty match):
     42         assertArraysEqual(new String[] { "a", "b", "c" }, "a,b,c".split(",", 0));
     43         assertArraysEqual(new String[] { "a,b,c" }, "a,b,c".split(",", 1));
     44         assertArraysEqual(new String[] { "a", "b,c" }, "a,b,c".split(",", 2));
     45         assertArraysEqual(new String[] { "a", "b", "c" }, "a,b,c".split(",", 3));
     46         assertArraysEqual(new String[] { "a", "b", "c" }, "a,b,c".split(",", Integer.MAX_VALUE));
     47         // Examples with a trailing separator (and hence possibly with a trailing empty match):
     48         assertArraysEqual(new String[] { "a", "b", "c" }, "a,b,c,".split(",", 0));
     49         assertArraysEqual(new String[] { "a,b,c," }, "a,b,c,".split(",", 1));
     50         assertArraysEqual(new String[] { "a", "b,c," }, "a,b,c,".split(",", 2));
     51         assertArraysEqual(new String[] { "a", "b", "c," }, "a,b,c,".split(",", 3));
     52         assertArraysEqual(new String[] { "a", "b", "c", "" }, "a,b,c,".split(",", Integer.MAX_VALUE));
     53         assertArraysEqual(new String[] { "a", "b", "c", "" }, "a,b,c,".split(",", -1));
     54     }
     55 
     56     private void assertArraysEqual(String[] expected, String[] actual) {
     57         assertEquals(expected.length, actual.length);
     58         for (int i = 0; i < expected.length; i++) {
     59             assertEquals(Integer.toString(i), expected[i], actual[i]);
     60         }
     61     }
     62 
     63     public void testSplit1() throws PatternSyntaxException {
     64         Pattern p = Pattern.compile(" ");
     65 
     66         String input = "poodle zoo";
     67         String tokens[];
     68 
     69         tokens = p.split(input, 1);
     70         assertEquals(1, tokens.length);
     71         assertTrue(tokens[0].equals(input));
     72         tokens = p.split(input, 2);
     73         assertEquals(2, tokens.length);
     74         assertEquals("poodle", tokens[0]);
     75         assertEquals("zoo", tokens[1]);
     76         tokens = p.split(input, 5);
     77         assertEquals(2, tokens.length);
     78         assertEquals("poodle", tokens[0]);
     79         assertEquals("zoo", tokens[1]);
     80         tokens = p.split(input, -2);
     81         assertEquals(2, tokens.length);
     82         assertEquals("poodle", tokens[0]);
     83         assertEquals("zoo", tokens[1]);
     84         tokens = p.split(input, 0);
     85         assertEquals(2, tokens.length);
     86         assertEquals("poodle", tokens[0]);
     87         assertEquals("zoo", tokens[1]);
     88         tokens = p.split(input);
     89         assertEquals(2, tokens.length);
     90         assertEquals("poodle", tokens[0]);
     91         assertEquals("zoo", tokens[1]);
     92 
     93         p = Pattern.compile("d");
     94 
     95         tokens = p.split(input, 1);
     96         assertEquals(1, tokens.length);
     97         assertTrue(tokens[0].equals(input));
     98         tokens = p.split(input, 2);
     99         assertEquals(2, tokens.length);
    100         assertEquals("poo", tokens[0]);
    101         assertEquals("le zoo", tokens[1]);
    102         tokens = p.split(input, 5);
    103         assertEquals(2, tokens.length);
    104         assertEquals("poo", tokens[0]);
    105         assertEquals("le zoo", tokens[1]);
    106         tokens = p.split(input, -2);
    107         assertEquals(2, tokens.length);
    108         assertEquals("poo", tokens[0]);
    109         assertEquals("le zoo", tokens[1]);
    110         tokens = p.split(input, 0);
    111         assertEquals(2, tokens.length);
    112         assertEquals("poo", tokens[0]);
    113         assertEquals("le zoo", tokens[1]);
    114         tokens = p.split(input);
    115         assertEquals(2, tokens.length);
    116         assertEquals("poo", tokens[0]);
    117         assertEquals("le zoo", tokens[1]);
    118 
    119         p = Pattern.compile("o");
    120 
    121         tokens = p.split(input, 1);
    122         assertEquals(1, tokens.length);
    123         assertTrue(tokens[0].equals(input));
    124         tokens = p.split(input, 2);
    125         assertEquals(2, tokens.length);
    126         assertEquals("p", tokens[0]);
    127         assertEquals("odle zoo", tokens[1]);
    128         tokens = p.split(input, 5);
    129         assertEquals(5, tokens.length);
    130         assertEquals("p", tokens[0]);
    131         assertTrue(tokens[1].equals(""));
    132         assertEquals("dle z", tokens[2]);
    133         assertTrue(tokens[3].equals(""));
    134         assertTrue(tokens[4].equals(""));
    135         tokens = p.split(input, -2);
    136         assertEquals(5, tokens.length);
    137         assertEquals("p", tokens[0]);
    138         assertTrue(tokens[1].equals(""));
    139         assertEquals("dle z", tokens[2]);
    140         assertTrue(tokens[3].equals(""));
    141         assertTrue(tokens[4].equals(""));
    142         tokens = p.split(input, 0);
    143         assertEquals(3, tokens.length);
    144         assertEquals("p", tokens[0]);
    145         assertTrue(tokens[1].equals(""));
    146         assertEquals("dle z", tokens[2]);
    147         tokens = p.split(input);
    148         assertEquals(3, tokens.length);
    149         assertEquals("p", tokens[0]);
    150         assertTrue(tokens[1].equals(""));
    151         assertEquals("dle z", tokens[2]);
    152     }
    153 
    154     public void testSplit2() {
    155         Pattern p = Pattern.compile("");
    156         String s[];
    157         s = p.split("a", -1);
    158         assertEquals(3, s.length);
    159         assertEquals("", s[0]);
    160         assertEquals("a", s[1]);
    161         assertEquals("", s[2]);
    162 
    163         s = p.split("", -1);
    164         assertEquals(1, s.length);
    165         assertEquals("", s[0]);
    166 
    167         s = p.split("abcd", -1);
    168         assertEquals(6, s.length);
    169         assertEquals("", s[0]);
    170         assertEquals("a", s[1]);
    171         assertEquals("b", s[2]);
    172         assertEquals("c", s[3]);
    173         assertEquals("d", s[4]);
    174         assertEquals("", s[5]);
    175 
    176         // Regression test for Android
    177         assertEquals("GOOG,23,500".split("|").length, 12);
    178     }
    179 
    180 
    181     public void testSplitSupplementaryWithEmptyString() {
    182 
    183         /*
    184          * See http://www.unicode.org/reports/tr18/#Supplementary_Characters
    185          * We have to treat text as code points not code units.
    186          */
    187         Pattern p = Pattern.compile("");
    188         String s[];
    189         s = p.split("a\ud869\uded6b", -1);
    190         assertEquals(5, s.length);
    191         assertEquals("", s[0]);
    192         assertEquals("a", s[1]);
    193         assertEquals("\ud869\uded6", s[2]);
    194         assertEquals("b", s[3]);
    195         assertEquals("", s[4]);
    196     }
    197 }
    198