1/*
2 * Copyright (C) 2007 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17import java.nio.charset.Charset;
18import java.io.UnsupportedEncodingException;
19
20/**
21 * Simple string test.
22 */
23public class Main {
24    public static void main(String args[]) {
25        basicTest();
26        indexTest();
27        constructorTest();
28        copyTest();
29    }
30
31    public static void basicTest() {
32        String baseStr = "*** This is a very nice string!!!";
33        String testStr;
34        int i;
35
36        testStr = baseStr.substring(4, baseStr.length() - 3);
37        System.out.println("testStr is '" + testStr + "'");
38
39        /* sloppy for loop */
40        for (i = 0; i < testStr.length(); i++)
41            System.out.print(testStr.charAt(i));
42        System.out.print("\n");
43
44        String testStr2 = "This is a very nice strinG";
45        if (testStr.length() != testStr2.length())
46            System.out.println("WARNING: stringTest length mismatch");
47
48        int compareResult = testStr.compareTo(testStr2);
49        if (compareResult > 0) {
50          System.out.println("Compare result is greater than zero");
51        } else if (compareResult == 0) {
52          System.out.println("Compare result is equal to zero");
53        } else {
54          System.out.println("Compare result is less than zero");
55        }
56
57        // expected: -65302
58        String s1 = "\u0c6d\u0cb6\u0d00\u0000\u0080\u0080\u0080\u0000\u0002\u0002\u0002\u0000\u00e9\u00e9\u00e9";
59        String s2 = "\u0c6d\u0cb6\u0d00\u0000\u0080\u0080\u0080\u0000\u0002\u0002\u0002\u0000\uffff\uffff\uffff\u00e9\u00e9\u00e9";
60        System.out.println("Compare unicode: " + s1.compareTo(s2));
61
62        try {
63            testStr.charAt(500);
64            System.out.println("GLITCH: expected exception");
65        } catch (StringIndexOutOfBoundsException sioobe) {
66            System.out.println("Got expected exception");
67        }
68    }
69
70    public static void indexTest() {
71        String baseStr = "The quick brown fox jumps over the lazy dog!";
72        String subStr;
73
74        subStr = baseStr.substring(5, baseStr.length() - 4);
75        System.out.println("subStr is '" + subStr + "'");
76
77        System.out.println("Indexes are: " +
78            baseStr.indexOf('T') + ":" +
79            subStr.indexOf('T') + ":" +
80            subStr.indexOf('u') + ":" +
81            baseStr.indexOf('!') + ":" +
82            subStr.indexOf('y') + ":" +
83            subStr.indexOf('d') + ":" +
84            baseStr.indexOf('x') + ":" +
85            subStr.indexOf('x', 0) + ":" +
86            subStr.indexOf('x', -1) + ":" +
87            subStr.indexOf('x', 200) + ":" +
88            baseStr.indexOf('x', 17) + ":" +
89            baseStr.indexOf('x', 18) + ":" +
90            baseStr.indexOf('x', 19) + ":" +
91            subStr.indexOf('x', 13) + ":" +
92            subStr.indexOf('x', 14) + ":" +
93            subStr.indexOf('&') + ":" +
94            baseStr.indexOf(0x12341234));
95    }
96
97    public static void constructorTest() {
98        byte[] byteArray = "byteArray".getBytes();
99        char[] charArray = new char[] { 'c', 'h', 'a', 'r', 'A', 'r', 'r', 'a', 'y' };
100        String charsetName = "US-ASCII";
101        Charset charset = Charset.forName("UTF-8");
102        String string = "string";
103        StringBuffer stringBuffer = new StringBuffer("stringBuffer");
104        int [] codePoints = new int[] { 65, 66, 67, 68, 69 };
105        StringBuilder stringBuilder = new StringBuilder("stringBuilder");
106
107        String s1 = new String();
108        String s2 = new String(byteArray);
109        String s3 = new String(byteArray, 1);
110        String s4 = new String(byteArray, 0, 4);
111        String s5 = new String(byteArray, 2, 4, 5);
112
113        try {
114            String s6 = new String(byteArray, 2, 4, charsetName);
115            String s7 = new String(byteArray, charsetName);
116        } catch (UnsupportedEncodingException e) {
117            System.out.println("Got unexpected UnsupportedEncodingException");
118        }
119        String s8 = new String(byteArray, 3, 3, charset);
120        String s9 = new String(byteArray, charset);
121        String s10 = new String(charArray);
122        String s11 = new String(charArray, 0, 4);
123        String s12 = new String(string);
124        String s13 = new String(stringBuffer);
125        String s14 = new String(codePoints, 1, 3);
126        String s15 = new String(stringBuilder);
127    }
128
129    public static void copyTest() {
130        String src = new String("Hello Android");
131        char[] dst = new char[7];
132        char[] tmp = null;
133
134        try {
135            src.getChars(2, 9, tmp, 0);
136            System.out.println("GLITCH: expected exception");
137        } catch (NullPointerException npe) {
138            System.out.println("Got expected exception");
139        }
140
141        try {
142            src.getChars(-1, 9, dst, 0);
143            System.out.println("GLITCH: expected exception");
144        } catch (StringIndexOutOfBoundsException sioobe) {
145            System.out.println("Got expected exception");
146        }
147
148        try {
149            src.getChars(2, 19, dst, 0);
150            System.out.println("GLITCH: expected exception");
151        } catch (StringIndexOutOfBoundsException sioobe) {
152            System.out.println("Got expected exception");
153        }
154
155        try {
156            src.getChars(2, 1, dst, 0);
157            System.out.println("GLITCH: expected exception");
158        } catch (StringIndexOutOfBoundsException sioobe) {
159            System.out.println("Got expected exception");
160        }
161
162        try {
163            src.getChars(2, 10, dst, 0);
164            System.out.println("GLITCH: expected exception");
165        } catch (ArrayIndexOutOfBoundsException aioobe) {
166            System.out.println("Got expected exception");
167        }
168
169        src.getChars(2, 9, dst, 0);
170        System.out.println(new String(dst));
171    }
172}
173