SplitTest.java revision f6c387128427e121477c1b32ad35cdcaa5101ba3
1package org.apache.harmony.regex.tests.java.util.regex;
2
3import dalvik.annotation.TestTargetClass;
4import dalvik.annotation.TestTargets;
5import dalvik.annotation.TestTargetNew;
6import dalvik.annotation.TestLevel;
7
8import junit.framework.TestCase;
9import java.util.regex.*;
10
11@TestTargetClass(java.util.regex.Pattern.class)
12/**
13 * TODO Type description
14 *
15 */
16public class SplitTest extends TestCase {
17    @TestTargets({
18        @TestTargetNew(
19            level = TestLevel.PARTIAL_COMPLETE,
20            notes = "Verifies the basic functionality of split(java.lang.CharSequence) & compile(java.lang.String)methods.",
21            method = "split",
22            args = {java.lang.CharSequence.class}
23        ),
24        @TestTargetNew(
25            level = TestLevel.PARTIAL_COMPLETE,
26            notes = "Verifies the basic functionality of split(java.lang.CharSequence) & compile(java.lang.String)methods.",
27            method = "compile",
28            args = {java.lang.String.class}
29        )
30    })
31    public void testSimple() {
32        Pattern p = Pattern.compile("/");
33        String[] results = p.split("have/you/done/it/right");
34        String[] expected = new String[] { "have", "you", "done", "it", "right" };
35        assertEquals(expected.length, results.length);
36        for (int i = 0; i < expected.length; i++) {
37            assertEquals(results[i], expected[i]);
38        }
39    }
40
41    @TestTargetNew(
42        level = TestLevel.PARTIAL_COMPLETE,
43        notes = "Verifies the functionality of split(java.lang.CharSequence). Test uses not empty pattern.",
44        method = "split",
45        args = {java.lang.CharSequence.class, int.class}
46    )
47    public void testSplit1() throws PatternSyntaxException {
48        Pattern p = Pattern.compile(" ");
49
50        String input = "poodle zoo";
51        String tokens[];
52
53        tokens = p.split(input, 1);
54        assertEquals(1, tokens.length);
55        assertTrue(tokens[0].equals(input));
56        tokens = p.split(input, 2);
57        assertEquals(2, tokens.length);
58        assertEquals("poodle", tokens[0]);
59        assertEquals("zoo", tokens[1]);
60        tokens = p.split(input, 5);
61        assertEquals(2, tokens.length);
62        assertEquals("poodle", tokens[0]);
63        assertEquals("zoo", tokens[1]);
64        tokens = p.split(input, -2);
65        assertEquals(2, tokens.length);
66        assertEquals("poodle", tokens[0]);
67        assertEquals("zoo", tokens[1]);
68        tokens = p.split(input, 0);
69        assertEquals(2, tokens.length);
70        assertEquals("poodle", tokens[0]);
71        assertEquals("zoo", tokens[1]);
72        tokens = p.split(input);
73        assertEquals(2, tokens.length);
74        assertEquals("poodle", tokens[0]);
75        assertEquals("zoo", tokens[1]);
76
77        p = Pattern.compile("d");
78
79        tokens = p.split(input, 1);
80        assertEquals(1, tokens.length);
81        assertTrue(tokens[0].equals(input));
82        tokens = p.split(input, 2);
83        assertEquals(2, tokens.length);
84        assertEquals("poo", tokens[0]);
85        assertEquals("le zoo", tokens[1]);
86        tokens = p.split(input, 5);
87        assertEquals(2, tokens.length);
88        assertEquals("poo", tokens[0]);
89        assertEquals("le zoo", tokens[1]);
90        tokens = p.split(input, -2);
91        assertEquals(2, tokens.length);
92        assertEquals("poo", tokens[0]);
93        assertEquals("le zoo", tokens[1]);
94        tokens = p.split(input, 0);
95        assertEquals(2, tokens.length);
96        assertEquals("poo", tokens[0]);
97        assertEquals("le zoo", tokens[1]);
98        tokens = p.split(input);
99        assertEquals(2, tokens.length);
100        assertEquals("poo", tokens[0]);
101        assertEquals("le zoo", tokens[1]);
102
103        p = Pattern.compile("o");
104
105        tokens = p.split(input, 1);
106        assertEquals(1, tokens.length);
107        assertTrue(tokens[0].equals(input));
108        tokens = p.split(input, 2);
109        assertEquals(2, tokens.length);
110        assertEquals("p", tokens[0]);
111        assertEquals("odle zoo", tokens[1]);
112        tokens = p.split(input, 5);
113        assertEquals(5, tokens.length);
114        assertEquals("p", tokens[0]);
115        assertTrue(tokens[1].equals(""));
116        assertEquals("dle z", tokens[2]);
117        assertTrue(tokens[3].equals(""));
118        assertTrue(tokens[4].equals(""));
119        tokens = p.split(input, -2);
120        assertEquals(5, tokens.length);
121        assertEquals("p", tokens[0]);
122        assertTrue(tokens[1].equals(""));
123        assertEquals("dle z", tokens[2]);
124        assertTrue(tokens[3].equals(""));
125        assertTrue(tokens[4].equals(""));
126        tokens = p.split(input, 0);
127        assertEquals(3, tokens.length);
128        assertEquals("p", tokens[0]);
129        assertTrue(tokens[1].equals(""));
130        assertEquals("dle z", tokens[2]);
131        tokens = p.split(input);
132        assertEquals(3, tokens.length);
133        assertEquals("p", tokens[0]);
134        assertTrue(tokens[1].equals(""));
135        assertEquals("dle z", tokens[2]);
136    }
137
138    @TestTargetNew(
139        level = TestLevel.PARTIAL_COMPLETE,
140        notes = "Verifies the functionality of split(java.lang.CharSequence). Test uses empty pattern.",
141        method = "split",
142        args = {java.lang.CharSequence.class, int.class}
143    )
144    public void testSplit2() {
145        Pattern p = Pattern.compile("");
146        String s[];
147        s = p.split("a", -1);
148        assertEquals(3, s.length);
149        assertEquals("", s[0]);
150        assertEquals("a", s[1]);
151        assertEquals("", s[2]);
152
153        s = p.split("", -1);
154        assertEquals(1, s.length);
155        assertEquals("", s[0]);
156
157        s = p.split("abcd", -1);
158        assertEquals(6, s.length);
159        assertEquals("", s[0]);
160        assertEquals("a", s[1]);
161        assertEquals("b", s[2]);
162        assertEquals("c", s[3]);
163        assertEquals("d", s[4]);
164        assertEquals("", s[5]);
165
166        // Regression test for Android
167        assertEquals("GOOG,23,500".split("|").length, 12);
168    }
169
170
171    @TestTargets({
172        @TestTargetNew(
173            level = TestLevel.PARTIAL_COMPLETE,
174            notes = "Verifies the functionality of split(java.lang.CharSequence) & compile(java.lang.String, int) methods. Test uses empty pattern and supplementary chars.",
175            method = "split",
176            args = {java.lang.CharSequence.class, int.class}
177        ),
178        @TestTargetNew(
179            level = TestLevel.PARTIAL_COMPLETE,
180            notes = "Verifies the functionality of split(java.lang.CharSequence) & compile(java.lang.String, int) methods. Test uses empty pattern and supplementary chars.",
181            method = "compile",
182            args = {java.lang.String.class}
183        )
184    })
185    public void testSplitSupplementaryWithEmptyString() {
186
187        /*
188         * See http://www.unicode.org/reports/tr18/#Supplementary_Characters
189         * We have to treat text as code points not code units.
190         */
191        Pattern p = Pattern.compile("");
192        String s[];
193        s = p.split("a\ud869\uded6b", -1);
194        assertEquals(5, s.length);
195        assertEquals("", s[0]);
196        assertEquals("a", s[1]);
197        assertEquals("\ud869\uded6", s[2]);
198        assertEquals("b", s[3]);
199        assertEquals("", s[4]);
200    }
201}
202