15d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao/*
25d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao * Copyright (C) 2007 The Android Open Source Project
35d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao *
45d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao * Licensed under the Apache License, Version 2.0 (the "License");
55d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao * you may not use this file except in compliance with the License.
65d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao * You may obtain a copy of the License at
75d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao *
85d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao *      http://www.apache.org/licenses/LICENSE-2.0
95d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao *
105d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao * Unless required by applicable law or agreed to in writing, software
115d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao * distributed under the License is distributed on an "AS IS" BASIS,
125d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
135d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao * See the License for the specific language governing permissions and
145d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao * limitations under the License.
155d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao */
165d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
1739b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Haoimport java.nio.charset.Charset;
1839b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Haoimport java.io.UnsupportedEncodingException;
1939b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao
205d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao/**
215d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao * Simple string test.
225d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao */
235d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhaopublic class Main {
245d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    public static void main(String args[]) {
255d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        basicTest();
265d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        indexTest();
2739b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao        constructorTest();
2825abd6c0c9f5a6abebcdeeb6f4373e85eedcfb6bTim Zhang        copyTest();
295d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    }
305d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
315d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    public static void basicTest() {
325d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        String baseStr = "*** This is a very nice string!!!";
335d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        String testStr;
345d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        int i;
355d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
365d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        testStr = baseStr.substring(4, baseStr.length() - 3);
375d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        System.out.println("testStr is '" + testStr + "'");
385d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
395d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        /* sloppy for loop */
405d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        for (i = 0; i < testStr.length(); i++)
415d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            System.out.print(testStr.charAt(i));
425d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        System.out.print("\n");
435d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
445d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        String testStr2 = "This is a very nice strinG";
455d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        if (testStr.length() != testStr2.length())
465d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            System.out.println("WARNING: stringTest length mismatch");
475d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
485d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        System.out.println("Compare result is " + testStr.compareTo(testStr2));
495d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
505d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        // expected: -65302
515d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        String s1 = "\u0c6d\u0cb6\u0d00\u0000\u0080\u0080\u0080\u0000\u0002\u0002\u0002\u0000\u00e9\u00e9\u00e9";
525d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        String s2 = "\u0c6d\u0cb6\u0d00\u0000\u0080\u0080\u0080\u0000\u0002\u0002\u0002\u0000\uffff\uffff\uffff\u00e9\u00e9\u00e9";
535d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        System.out.println("Compare unicode: " + s1.compareTo(s2));
545d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
555d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        try {
565d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            testStr.charAt(500);
575d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            System.out.println("GLITCH: expected exception");
585d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        } catch (StringIndexOutOfBoundsException sioobe) {
595d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            System.out.println("Got expected exception");
605d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        }
615d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    }
625d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
635d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    public static void indexTest() {
645d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        String baseStr = "The quick brown fox jumps over the lazy dog!";
655d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        String subStr;
665d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
675d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        subStr = baseStr.substring(5, baseStr.length() - 4);
685d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        System.out.println("subStr is '" + subStr + "'");
695d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
705d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        System.out.println("Indexes are: " +
715d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            baseStr.indexOf('T') + ":" +
725d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            subStr.indexOf('T') + ":" +
735d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            subStr.indexOf('u') + ":" +
745d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            baseStr.indexOf('!') + ":" +
755d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            subStr.indexOf('y') + ":" +
765d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            subStr.indexOf('d') + ":" +
775d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            baseStr.indexOf('x') + ":" +
785d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            subStr.indexOf('x', 0) + ":" +
795d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            subStr.indexOf('x', -1) + ":" +
805d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            subStr.indexOf('x', 200) + ":" +
815d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            baseStr.indexOf('x', 17) + ":" +
825d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            baseStr.indexOf('x', 18) + ":" +
835d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            baseStr.indexOf('x', 19) + ":" +
845d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            subStr.indexOf('x', 13) + ":" +
855d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            subStr.indexOf('x', 14) + ":" +
865d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            subStr.indexOf('&') + ":" +
875d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            baseStr.indexOf(0x12341234));
885d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    }
8939b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao
9039b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao    public static void constructorTest() {
9139b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao        byte[] byteArray = "byteArray".getBytes();
9239b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao        char[] charArray = new char[] { 'c', 'h', 'a', 'r', 'A', 'r', 'r', 'a', 'y' };
9339b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao        String charsetName = "US-ASCII";
9439b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao        Charset charset = Charset.forName("UTF-8");
9539b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao        String string = "string";
9639b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao        StringBuffer stringBuffer = new StringBuffer("stringBuffer");
9739b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao        int [] codePoints = new int[] { 65, 66, 67, 68, 69 };
9839b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao        StringBuilder stringBuilder = new StringBuilder("stringBuilder");
9939b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao
10039b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao        String s1 = new String();
10139b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao        String s2 = new String(byteArray);
10239b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao        String s3 = new String(byteArray, 1);
10339b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao        String s4 = new String(byteArray, 0, 4);
10439b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao        String s5 = new String(byteArray, 2, 4, 5);
10539b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao
10639b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao        try {
10739b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao            String s6 = new String(byteArray, 2, 4, charsetName);
10839b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao            String s7 = new String(byteArray, charsetName);
10939b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao        } catch (UnsupportedEncodingException e) {
11039b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao            System.out.println("Got unexpected UnsupportedEncodingException");
11139b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao        }
11239b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao        String s8 = new String(byteArray, 3, 3, charset);
11339b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao        String s9 = new String(byteArray, charset);
11439b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao        String s10 = new String(charArray);
11539b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao        String s11 = new String(charArray, 0, 4);
11639b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao        String s12 = new String(string);
11739b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao        String s13 = new String(stringBuffer);
11839b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao        String s14 = new String(codePoints, 1, 3);
11939b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao        String s15 = new String(stringBuilder);
12039b6c24ce68cf05db0f82f454b4401cfb03d675fJeff Hao    }
12125abd6c0c9f5a6abebcdeeb6f4373e85eedcfb6bTim Zhang
12225abd6c0c9f5a6abebcdeeb6f4373e85eedcfb6bTim Zhang    public static void copyTest() {
12325abd6c0c9f5a6abebcdeeb6f4373e85eedcfb6bTim Zhang        String src = new String("Hello Android");
12425abd6c0c9f5a6abebcdeeb6f4373e85eedcfb6bTim Zhang        char[] dst = new char[7];
12525abd6c0c9f5a6abebcdeeb6f4373e85eedcfb6bTim Zhang        char[] tmp = null;
12625abd6c0c9f5a6abebcdeeb6f4373e85eedcfb6bTim Zhang
12725abd6c0c9f5a6abebcdeeb6f4373e85eedcfb6bTim Zhang        try {
12825abd6c0c9f5a6abebcdeeb6f4373e85eedcfb6bTim Zhang            src.getChars(2, 9, tmp, 0);
12925abd6c0c9f5a6abebcdeeb6f4373e85eedcfb6bTim Zhang            System.out.println("GLITCH: expected exception");
13025abd6c0c9f5a6abebcdeeb6f4373e85eedcfb6bTim Zhang        } catch (NullPointerException npe) {
13125abd6c0c9f5a6abebcdeeb6f4373e85eedcfb6bTim Zhang            System.out.println("Got expected exception");
13225abd6c0c9f5a6abebcdeeb6f4373e85eedcfb6bTim Zhang        }
13325abd6c0c9f5a6abebcdeeb6f4373e85eedcfb6bTim Zhang
13425abd6c0c9f5a6abebcdeeb6f4373e85eedcfb6bTim Zhang        try {
13525abd6c0c9f5a6abebcdeeb6f4373e85eedcfb6bTim Zhang            src.getChars(-1, 9, dst, 0);
13625abd6c0c9f5a6abebcdeeb6f4373e85eedcfb6bTim Zhang            System.out.println("GLITCH: expected exception");
13725abd6c0c9f5a6abebcdeeb6f4373e85eedcfb6bTim Zhang        } catch (StringIndexOutOfBoundsException sioobe) {
13825abd6c0c9f5a6abebcdeeb6f4373e85eedcfb6bTim Zhang            System.out.println("Got expected exception");
13925abd6c0c9f5a6abebcdeeb6f4373e85eedcfb6bTim Zhang        }
14025abd6c0c9f5a6abebcdeeb6f4373e85eedcfb6bTim Zhang
14125abd6c0c9f5a6abebcdeeb6f4373e85eedcfb6bTim Zhang        try {
14225abd6c0c9f5a6abebcdeeb6f4373e85eedcfb6bTim Zhang            src.getChars(2, 19, dst, 0);
14325abd6c0c9f5a6abebcdeeb6f4373e85eedcfb6bTim Zhang            System.out.println("GLITCH: expected exception");
14425abd6c0c9f5a6abebcdeeb6f4373e85eedcfb6bTim Zhang        } catch (StringIndexOutOfBoundsException sioobe) {
14525abd6c0c9f5a6abebcdeeb6f4373e85eedcfb6bTim Zhang            System.out.println("Got expected exception");
14625abd6c0c9f5a6abebcdeeb6f4373e85eedcfb6bTim Zhang        }
14725abd6c0c9f5a6abebcdeeb6f4373e85eedcfb6bTim Zhang
14825abd6c0c9f5a6abebcdeeb6f4373e85eedcfb6bTim Zhang        try {
14925abd6c0c9f5a6abebcdeeb6f4373e85eedcfb6bTim Zhang            src.getChars(2, 1, dst, 0);
15025abd6c0c9f5a6abebcdeeb6f4373e85eedcfb6bTim Zhang            System.out.println("GLITCH: expected exception");
15125abd6c0c9f5a6abebcdeeb6f4373e85eedcfb6bTim Zhang        } catch (StringIndexOutOfBoundsException sioobe) {
15225abd6c0c9f5a6abebcdeeb6f4373e85eedcfb6bTim Zhang            System.out.println("Got expected exception");
15325abd6c0c9f5a6abebcdeeb6f4373e85eedcfb6bTim Zhang        }
15425abd6c0c9f5a6abebcdeeb6f4373e85eedcfb6bTim Zhang
15525abd6c0c9f5a6abebcdeeb6f4373e85eedcfb6bTim Zhang        try {
15625abd6c0c9f5a6abebcdeeb6f4373e85eedcfb6bTim Zhang            src.getChars(2, 10, dst, 0);
15725abd6c0c9f5a6abebcdeeb6f4373e85eedcfb6bTim Zhang            System.out.println("GLITCH: expected exception");
15825abd6c0c9f5a6abebcdeeb6f4373e85eedcfb6bTim Zhang        } catch (ArrayIndexOutOfBoundsException aioobe) {
15925abd6c0c9f5a6abebcdeeb6f4373e85eedcfb6bTim Zhang            System.out.println("Got expected exception");
16025abd6c0c9f5a6abebcdeeb6f4373e85eedcfb6bTim Zhang        }
16125abd6c0c9f5a6abebcdeeb6f4373e85eedcfb6bTim Zhang
16225abd6c0c9f5a6abebcdeeb6f4373e85eedcfb6bTim Zhang        src.getChars(2, 9, dst, 0);
16325abd6c0c9f5a6abebcdeeb6f4373e85eedcfb6bTim Zhang        System.out.println(new String(dst));
16425abd6c0c9f5a6abebcdeeb6f4373e85eedcfb6bTim Zhang    }
1655d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao}
166