String2Test.java revision 2ad60cfc28e14ee8f0bb038720836a4696c478ad
1/*
2 *  Licensed to the Apache Software Foundation (ASF) under one or more
3 *  contributor license agreements.  See the NOTICE file distributed with
4 *  this work for additional information regarding copyright ownership.
5 *  The ASF licenses this file to You under the Apache License, Version 2.0
6 *  (the "License"); you may not use this file except in compliance with
7 *  the License.  You may obtain a copy of the License at
8 *
9 *     http://www.apache.org/licenses/LICENSE-2.0
10 *
11 *  Unless required by applicable law or agreed to in writing, software
12 *  distributed under the License is distributed on an "AS IS" BASIS,
13 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 *  See the License for the specific language governing permissions and
15 *  limitations under the License.
16 */
17
18package org.apache.harmony.luni.tests.java.lang;
19
20import java.io.UnsupportedEncodingException;
21import java.util.Locale;
22
23public class String2Test extends junit.framework.TestCase {
24
25    String hw1 = "HelloWorld";
26
27    String hw2 = "HelloWorld";
28
29    String hwlc = "helloworld";
30
31    String hwuc = "HELLOWORLD";
32
33    String hello1 = "Hello";
34
35    String world1 = "World";
36
37    String comp11 = "Test String";
38
39    Object obj = new Object();
40
41    char[] buf = { 'W', 'o', 'r', 'l', 'd' };
42
43    char[] rbuf = new char[5];
44
45    /**
46     * @tests java.lang.String#String()
47     */
48    public void test_Constructor() {
49        // Test for method java.lang.String()
50        assertTrue("Created incorrect string", new String().equals(""));
51    }
52
53    /**
54     * @tests java.lang.String#String(byte[])
55     */
56    public void test_Constructor$B() {
57        // Test for method java.lang.String(byte [])
58        assertTrue("Failed to create string", new String(hw1.getBytes())
59                .equals(hw1));
60    }
61
62    /**
63     * @tests java.lang.String#String(byte[], int)
64     */
65    @SuppressWarnings("deprecation")
66    public void test_Constructor$BI() {
67        // Test for method java.lang.String(byte [], int)
68        String s = new String(new byte[] { 65, 66, 67, 68, 69 }, 0);
69        assertTrue("Incorrect string returned: " + s, s.equals("ABCDE"));
70        s = new String(new byte[] { 65, 66, 67, 68, 69 }, 1);
71        assertTrue("Did not use nonzero hibyte", !s.equals("ABCDE"));
72    }
73
74    /**
75     * @tests java.lang.String#String(byte[], int, int)
76     */
77    public void test_Constructor$BII() {
78        // Test for method java.lang.String(byte [], int, int)
79        assertTrue("Failed to create string", new String(hw1.getBytes(), 0, hw1
80                .getBytes().length).equals(hw1));
81
82        boolean exception = false;
83        try {
84            new String(new byte[0], 0, Integer.MAX_VALUE);
85        } catch (IndexOutOfBoundsException e) {
86            exception = true;
87        }
88        assertTrue("Did not throw exception", exception);
89    }
90
91    /**
92     * @tests java.lang.String#String(byte[], int, int, int)
93     */
94    @SuppressWarnings("deprecation")
95    public void test_Constructor$BIII() {
96        // Test for method java.lang.String(byte [], int, int, int)
97        String s = new String(new byte[] { 65, 66, 67, 68, 69 }, 0, 1, 3);
98        assertTrue("Incorrect string returned: " + s, s.equals("BCD"));
99        s = new String(new byte[] { 65, 66, 67, 68, 69 }, 1, 0, 5);
100        assertTrue("Did not use nonzero hibyte", !s.equals("ABCDE"));
101    }
102
103    /**
104     * @tests java.lang.String#String(byte[], int, int, java.lang.String)
105     */
106    public void test_Constructor$BIILjava_lang_String() throws Exception {
107        // Test for method java.lang.String(byte [], int, int, java.lang.String)
108        String s = null;
109        try {
110            s = new String(new byte[] { 65, 66, 67, 68, 69 }, 0, 5, "8859_1");
111        } catch (Exception e) {
112            fail("Threw exception : " + e.getMessage());
113        }
114        assertTrue("Incorrect string returned: " + s, s.equals("ABCDE"));
115        //Regression for HARMONY-1111
116        assertNotNull(new String(new byte[] {(byte)0xC0}, 0, 1, "UTF-8"));
117    }
118
119    /**
120     * @tests java.lang.String#String(byte[], java.lang.String)
121     */
122    public void test_Constructor$BLjava_lang_String() {
123        // Test for method java.lang.String(byte [], java.lang.String)
124        String s = null;
125        try {
126            s = new String(new byte[] { 65, 66, 67, 68, 69 }, "8859_1");
127        } catch (Exception e) {
128            fail("Threw exception : " + e.getMessage());
129        }
130        assertTrue("Incorrect string returned: " + s, s.equals("ABCDE"));
131    }
132
133    /**
134     * @tests java.lang.String#String(char[])
135     */
136    public void test_Constructor$C() {
137        // Test for method java.lang.String(char [])
138        assertEquals("Failed Constructor test", "World", new String(buf));
139    }
140
141    /**
142     * @tests java.lang.String#String(char[], int, int)
143     */
144    public void test_Constructor$CII() {
145        // Test for method java.lang.String(char [], int, int)
146        char[] buf = { 'H', 'e', 'l', 'l', 'o', 'W', 'o', 'r', 'l', 'd' };
147        String s = new String(buf, 0, buf.length);
148        assertTrue("Incorrect string created", hw1.equals(s));
149
150        boolean exception = false;
151        try {
152            new String(new char[0], 0, Integer.MAX_VALUE);
153        } catch (IndexOutOfBoundsException e) {
154            exception = true;
155        }
156        assertTrue("Did not throw exception", exception);
157    }
158
159    /**
160     * @tests java.lang.String#String(int[], int, int)
161     */
162    public void test_Constructor$III() {
163        // Test for method java.lang.String(int [], int, int)
164        try {
165            new String(new int[0], 2, Integer.MAX_VALUE);
166            fail("Did not throw exception");
167        } catch (IndexOutOfBoundsException e) {
168            //expected
169        }
170    }
171
172    /**
173     * @tests java.lang.String#String(java.lang.String)
174     */
175    public void test_ConstructorLjava_lang_String() {
176        // Test for method java.lang.String(java.lang.String)
177        String s = new String("Hello World");
178        assertEquals("Failed to construct correct string", "Hello World", s
179                );
180    }
181
182    /**
183     * @tests java.lang.String#String(java.lang.StringBuffer)
184     */
185    public void test_ConstructorLjava_lang_StringBuffer() {
186        // Test for method java.lang.String(java.lang.StringBuffer)
187        StringBuffer sb = new StringBuffer();
188        sb.append("HelloWorld");
189        assertEquals("Created incorrect string", "HelloWorld", new String(sb)
190                );
191    }
192
193    /**
194     * @tests java.lang.String#charAt(int)
195     */
196    public void test_charAtI() {
197        // Test for method char java.lang.String.charAt(int)
198        assertTrue("Incorrect character returned", hw1.charAt(5) == 'W'
199                && (hw1.charAt(1) != 'Z'));
200    }
201
202    /**
203     * @tests java.lang.String#compareTo(java.lang.String)
204     */
205    public void test_compareToLjava_lang_String() {
206        // Test for method int java.lang.String.compareTo(java.lang.String)
207        assertTrue("Returned incorrect value for first < second", "aaaaab"
208                .compareTo("aaaaac") < 0);
209        assertEquals("Returned incorrect value for first = second", 0, "aaaaac"
210                .compareTo("aaaaac"));
211        assertTrue("Returned incorrect value for first > second", "aaaaac"
212                .compareTo("aaaaab") > 0);
213        assertTrue("Considered case to not be of importance", !("A"
214                .compareTo("a") == 0));
215
216        try {
217            "fixture".compareTo(null);
218            fail("No NPE");
219        } catch (NullPointerException e) {
220        }
221    }
222
223    /**
224     * @tests java.lang.String#compareToIgnoreCase(java.lang.String)
225     */
226    public void test_compareToIgnoreCaseLjava_lang_String() {
227        // Test for method int
228        // java.lang.String.compareToIgnoreCase(java.lang.String)
229        assertTrue("Returned incorrect value for first < second", "aaaaab"
230                .compareToIgnoreCase("aaaaac") < 0);
231        assertEquals("Returned incorrect value for first = second", 0, "aaaaac"
232                .compareToIgnoreCase("aaaaac"));
233        assertTrue("Returned incorrect value for first > second", "aaaaac"
234                .compareToIgnoreCase("aaaaab") > 0);
235        assertEquals("Considered case to not be of importance", 0, "A"
236                .compareToIgnoreCase("a"));
237
238        assertTrue("0xbf should not compare = to 'ss'", "\u00df"
239                .compareToIgnoreCase("ss") != 0);
240        assertEquals("0x130 should compare = to 'i'", 0, "\u0130"
241                .compareToIgnoreCase("i"));
242        assertEquals("0x131 should compare = to 'i'", 0, "\u0131"
243                .compareToIgnoreCase("i"));
244
245        Locale defLocale = Locale.getDefault();
246        try {
247            Locale.setDefault(new Locale("tr", ""));
248            assertEquals("Locale tr: 0x130 should compare = to 'i'", 0, "\u0130"
249                    .compareToIgnoreCase("i"));
250            assertEquals("Locale tr: 0x131 should compare = to 'i'", 0, "\u0131"
251                    .compareToIgnoreCase("i"));
252        } finally {
253            Locale.setDefault(defLocale);
254        }
255
256        try {
257            "fixture".compareToIgnoreCase(null);
258            fail("No NPE");
259        } catch (NullPointerException e) {
260        }
261    }
262
263    /**
264     * @tests java.lang.String#concat(java.lang.String)
265     */
266    public void test_concatLjava_lang_String() {
267        // Test for method java.lang.String
268        // java.lang.String.concat(java.lang.String)
269        assertTrue("Concatenation failed to produce correct string", hello1
270                .concat(world1).equals(hw1));
271        boolean exception = false;
272        try {
273            String a = new String("test");
274            String b = null;
275            a.concat(b);
276        } catch (NullPointerException e) {
277            exception = true;
278        }
279        assertTrue("Concatenation failed to throw NP exception (1)", exception);
280        exception = false;
281        try {
282            String a = new String("");
283            String b = null;
284            a.concat(b);
285        } catch (NullPointerException e) {
286            exception = true;
287        }
288        assertTrue("Concatenation failed to throw NP exception (2)", exception);
289
290        String s1 = "";
291        String s2 = "s2";
292        String s3 = s1.concat(s2);
293        assertEquals(s2, s3);
294
295        s3 = s2.concat(s1);
296        assertSame(s2, s3);
297    }
298
299    /**
300     * @tests java.lang.String#copyValueOf(char[])
301     */
302    public void test_copyValueOf$C() {
303        // Test for method java.lang.String java.lang.String.copyValueOf(char
304        // [])
305        char[] t = { 'H', 'e', 'l', 'l', 'o', 'W', 'o', 'r', 'l', 'd' };
306        assertEquals("copyValueOf returned incorrect String", "HelloWorld", String.copyValueOf(
307                t));
308    }
309
310    /**
311     * @tests java.lang.String#copyValueOf(char[], int, int)
312     */
313    public void test_copyValueOf$CII() {
314        // Test for method java.lang.String java.lang.String.copyValueOf(char
315        // [], int, int)
316        char[] t = { 'H', 'e', 'l', 'l', 'o', 'W', 'o', 'r', 'l', 'd' };
317        assertEquals("copyValueOf returned incorrect String", "World", String.copyValueOf(
318                t, 5, 5));
319    }
320
321    /**
322     * @tests java.lang.String#endsWith(java.lang.String)
323     */
324    public void test_endsWithLjava_lang_String() {
325        // Test for method boolean java.lang.String.endsWith(java.lang.String)
326        assertTrue("Failed to fine ending string", hw1.endsWith("ld"));
327    }
328
329    /**
330     * @tests java.lang.String#equals(java.lang.Object)
331     */
332    public void test_equalsLjava_lang_Object() {
333        // Test for method boolean java.lang.String.equals(java.lang.Object)
334        assertTrue("String not equal", hw1.equals(hw2) && !(hw1.equals(comp11)));
335    }
336
337    /**
338     * @tests java.lang.String#equalsIgnoreCase(java.lang.String)
339     */
340    public void test_equalsIgnoreCaseLjava_lang_String() {
341        // Test for method boolean
342        // java.lang.String.equalsIgnoreCase(java.lang.String)
343        assertTrue("lc version returned unequal to uc", hwlc
344                .equalsIgnoreCase(hwuc));
345    }
346
347    /**
348     * @tests java.lang.String#getBytes()
349     */
350    public void test_getBytes() {
351        // Test for method byte [] java.lang.String.getBytes()
352        byte[] sbytes = hw1.getBytes();
353        for (int i = 0; i < hw1.length(); i++)
354            assertTrue("Returned incorrect bytes", sbytes[i] == (byte) hw1
355                    .charAt(i));
356
357        char[] chars = new char[1];
358        for (int i = 0; i < 65536; i++) {
359            // skip surrogates
360            if (i == 0xd800)
361                i = 0xe000;
362            byte[] result = null;
363            chars[0] = (char) i;
364            String string = new String(chars);
365            try {
366                result = string.getBytes("8859_1");
367                if (i < 256) {
368                    assertEquals((byte)i, result[0]);
369                } else {
370                    /*
371                     * Substitue character should be 0x1A [1], but may be
372                     * '?' character.
373                     * [1] http://en.wikipedia.org/wiki/Substitute_character
374                     */
375                    assertTrue(result[0] == '?' || result[0] == 0x1a);
376                }
377            } catch (java.io.UnsupportedEncodingException e) {
378            }
379            try {
380                result = string.getBytes("UTF8");
381                int length = i < 0x80 ? 1 : (i < 0x800 ? 2 : 3);
382                assertTrue("Wrong length UTF8: " + Integer.toHexString(i),
383                        result.length == length);
384                assertTrue(
385                        "Wrong bytes UTF8: " + Integer.toHexString(i),
386                        (i < 0x80 && result[0] == i)
387                                || (i >= 0x80
388                                        && i < 0x800
389                                        && result[0] == (byte) (0xc0 | ((i & 0x7c0) >> 6)) && result[1] == (byte) (0x80 | (i & 0x3f)))
390                                || (i >= 0x800
391                                        && result[0] == (byte) (0xe0 | (i >> 12))
392                                        && result[1] == (byte) (0x80 | ((i & 0xfc0) >> 6)) && result[2] == (byte) (0x80 | (i & 0x3f))));
393            } catch (java.io.UnsupportedEncodingException e) {
394            }
395
396            String bytes = null;
397            try {
398                bytes = new String(result, "UTF8");
399                assertTrue("Wrong UTF8 byte length: " + bytes.length() + "("
400                        + i + ")", bytes.length() == 1);
401                assertTrue(
402                        "Wrong char UTF8: "
403                                + Integer.toHexString(bytes.charAt(0)) + " ("
404                                + i + ")", bytes.charAt(0) == i);
405            } catch (java.io.UnsupportedEncodingException e) {
406            }
407        }
408
409        byte[] bytes = new byte[1];
410        for (int i = 0; i < 256; i++) {
411            bytes[0] = (byte) i;
412            String result = null;
413            try {
414                result = new String(bytes, "8859_1");
415                assertEquals("Wrong char length", 1, result.length());
416                assertTrue("Wrong char value", result.charAt(0) == (char) i);
417            } catch (java.io.UnsupportedEncodingException e) {
418            }
419        }
420    }
421
422    /**
423     * @tests java.lang.String#getBytes(int, int, byte[], int)
424     */
425    @SuppressWarnings("deprecation")
426    public void test_getBytesII$BI() {
427        // Test for method void java.lang.String.getBytes(int, int, byte [],
428        // int)
429        byte[] buf = new byte[5];
430        "Hello World".getBytes(6, 11, buf, 0);
431        assertEquals("Returned incorrect bytes", "World", new String(buf));
432
433        try {
434            "Hello World".getBytes(-1, 1, null, 0);
435            fail("Expected StringIndexOutOfBoundsException");
436        } catch (StringIndexOutOfBoundsException e) {
437        } catch (NullPointerException e) {
438            fail("Threw wrong exception");
439        }
440    }
441
442    /**
443     * @tests java.lang.String#getBytes(java.lang.String)
444     */
445    public void test_getBytesLjava_lang_String() throws Exception {
446        // Test for method byte [] java.lang.String.getBytes(java.lang.String)
447        byte[] buf = "Hello World".getBytes();
448        assertEquals("Returned incorrect bytes", "Hello World", new String(buf));
449
450        try {
451            "string".getBytes("8849_1");
452            fail("No UnsupportedEncodingException");
453        } catch (UnsupportedEncodingException e) {
454        }
455
456        byte[] bytes = "\u3048".getBytes("UTF-8");
457        byte[] expected = new byte[] {(byte)0xE3, (byte)0x81, (byte)0x88};
458        assertEquals(expected[0], bytes[0]);
459        assertEquals(expected[1], bytes[1]);
460        assertEquals(expected[2], bytes[2]);
461
462        // Regression for HARMONY-663
463        try {
464            // BEGIN android-changed
465            // (replaced non-ASCII-printable characters with escapes)
466            "string".getBytes(
467                    "?Q?D??_??_6ffa?+vG?_??\u00ef\u00bf\u00bd??\u0015");
468            // END android-changed
469            fail("No UnsupportedEncodingException");
470        } catch (UnsupportedEncodingException e) {
471            //expected
472        }
473    }
474
475    /**
476     * @tests java.lang.String#getChars(int, int, char[], int)
477     */
478    public void test_getCharsII$CI() {
479        // Test for method void java.lang.String.getChars(int, int, char [],
480        // int)
481        hw1.getChars(5, hw1.length(), rbuf, 0);
482
483        for (int i = 0; i < rbuf.length; i++)
484            assertTrue("getChars returned incorrect char(s)", rbuf[i] == buf[i]);
485    }
486
487    /**
488     * @tests java.lang.String#hashCode()
489     */
490    public void test_hashCode() {
491        // Test for method int java.lang.String.hashCode()
492        int hwHashCode = 0;
493        final int hwLength = hw1.length();
494        int powerOfThirtyOne = 1;
495        for (int counter = hwLength - 1; counter >= 0; counter--) {
496            hwHashCode += hw1.charAt(counter) * powerOfThirtyOne;
497            powerOfThirtyOne *= 31;
498        }
499        assertTrue("String did not hash to correct value--got: "
500                + String.valueOf(hw1.hashCode()) + " but wanted: "
501                + String.valueOf(hwHashCode), hw1.hashCode() == hwHashCode);
502        assertTrue("The empty string \"\" did not hash to zero", 0 == ""
503                .hashCode());
504    }
505
506    /**
507     * @tests java.lang.String#indexOf(int)
508     */
509    public void test_indexOfI() {
510        // Test for method int java.lang.String.indexOf(int)
511        assertEquals("Invalid index returned", 1, hw1.indexOf('e'));
512
513    }
514
515    /**
516     * @tests java.lang.String#indexOf(int, int)
517     */
518    public void test_indexOfII() {
519        // Test for method int java.lang.String.indexOf(int, int)
520        assertEquals("Invalid character index returned", 5, hw1.indexOf('W', 2));
521
522    }
523
524    /**
525     * @tests java.lang.String#indexOf(java.lang.String)
526     */
527    public void test_indexOfLjava_lang_String() {
528        // Test for method int java.lang.String.indexOf(java.lang.String)
529        assertTrue("Failed to find string", hw1.indexOf("World") > 0);
530        assertTrue("Failed to find string", !(hw1.indexOf("ZZ") > 0));
531    }
532
533    /**
534     * @tests java.lang.String#indexOf(java.lang.String, int)
535     */
536    public void test_indexOfLjava_lang_StringI() {
537        // Test for method int java.lang.String.indexOf(java.lang.String, int)
538        assertTrue("Failed to find string", hw1.indexOf("World", 0) > 0);
539        assertTrue("Found string outside index", !(hw1.indexOf("Hello", 6) > 0));
540        assertEquals("Did not accept valid negative starting position", 0, hello1
541                .indexOf("", -5));
542        assertEquals("Reported wrong error code", 5, hello1.indexOf("", 5));
543        assertEquals("Wrong for empty in empty", 0, "".indexOf("", 0));
544    }
545
546    /**
547     * @tests java.lang.String#intern()
548     */
549    public void test_intern() {
550        // Test for method java.lang.String java.lang.String.intern()
551        assertTrue("Intern returned incorrect result", hw1.intern() == hw2
552                .intern());
553    }
554
555    /**
556     * @tests java.lang.String#lastIndexOf(int)
557     */
558    public void test_lastIndexOfI() {
559        // Test for method int java.lang.String.lastIndexOf(int)
560        assertEquals("Failed to return correct index", 5, hw1.lastIndexOf('W'));
561        assertEquals("Returned index for non-existent char",
562                -1, hw1.lastIndexOf('Z'));
563
564    }
565
566    /**
567     * @tests java.lang.String#lastIndexOf(int, int)
568     */
569    public void test_lastIndexOfII() {
570        // Test for method int java.lang.String.lastIndexOf(int, int)
571        assertEquals("Failed to return correct index",
572                5, hw1.lastIndexOf('W', 6));
573        assertEquals("Returned index for char out of specified range", -1, hw1
574                .lastIndexOf('W', 4));
575        assertEquals("Returned index for non-existent char", -1, hw1.lastIndexOf('Z',
576                9));
577
578    }
579
580    /**
581     * @tests java.lang.String#lastIndexOf(java.lang.String)
582     */
583    public void test_lastIndexOfLjava_lang_String() {
584        // Test for method int java.lang.String.lastIndexOf(java.lang.String)
585        assertEquals("Returned incorrect index", 5, hw1.lastIndexOf("World"));
586        assertEquals("Found String outside of index", -1, hw1
587                .lastIndexOf("HeKKKKKKKK"));
588    }
589
590    /**
591     * @tests java.lang.String#lastIndexOf(java.lang.String, int)
592     */
593    public void test_lastIndexOfLjava_lang_StringI() {
594        // Test for method int java.lang.String.lastIndexOf(java.lang.String,
595        // int)
596        assertEquals("Returned incorrect index", 5, hw1.lastIndexOf("World", 9));
597        int result = hw1.lastIndexOf("Hello", 2);
598        assertTrue("Found String outside of index: " + result, result == 0);
599        assertEquals("Reported wrong error code",
600                -1, hello1.lastIndexOf("", -5));
601        assertEquals("Did not accept valid large starting position", 5, hello1
602                .lastIndexOf("", 5));
603    }
604
605    /**
606     * @tests java.lang.String#length()
607     */
608    public void test_length() {
609        // Test for method int java.lang.String.length()
610        assertEquals("Invalid length returned", 11, comp11.length());
611    }
612
613    /**
614     * @tests java.lang.String#regionMatches(int, java.lang.String, int, int)
615     */
616    public void test_regionMatchesILjava_lang_StringII() {
617        // Test for method boolean java.lang.String.regionMatches(int,
618        // java.lang.String, int, int)
619        String bogusString = "xxcedkedkleiorem lvvwr e''' 3r3r 23r";
620
621        assertTrue("identical regions failed comparison", hw1.regionMatches(2,
622                hw2, 2, 5));
623        assertTrue("Different regions returned true", !hw1.regionMatches(2,
624                bogusString, 2, 5));
625    }
626
627    /**
628     * @tests java.lang.String#regionMatches(boolean, int, java.lang.String,
629     *        int, int)
630     */
631    public void test_regionMatchesZILjava_lang_StringII() {
632        // Test for method boolean java.lang.String.regionMatches(boolean, int,
633        // java.lang.String, int, int)
634
635        String bogusString = "xxcedkedkleiorem lvvwr e''' 3r3r 23r";
636
637        assertTrue("identical regions failed comparison", hw1.regionMatches(
638                false, 2, hw2, 2, 5));
639        assertTrue("identical regions failed comparison with different cases",
640                hw1.regionMatches(true, 2, hw2, 2, 5));
641        assertTrue("Different regions returned true", !hw1.regionMatches(true,
642                2, bogusString, 2, 5));
643        assertTrue("identical regions failed comparison with different cases",
644                hw1.regionMatches(false, 2, hw2, 2, 5));
645    }
646
647    /**
648     * @tests java.lang.String#replace(char, char)
649     */
650    public void test_replaceCC() {
651        // Test for method java.lang.String java.lang.String.replace(char, char)
652        assertEquals("Failed replace", "HezzoWorzd", hw1.replace('l', 'z'));
653    }
654
655    /**
656     * @tests java.lang.String#replace(CharSequence, CharSequence)
657     */
658    public void test_replaceLjava_langCharSequenceLjava_langCharSequence() {
659        assertEquals("Failed replace", "aaccdd", "aabbdd".replace(
660            new StringBuffer("bb"), "cc"));
661        assertEquals("Failed replace by bigger seq", "cccbccc", "aba".replace(
662            "a", "ccc"));
663        assertEquals("Failed replace by smaller seq", "$bba^",
664            "$aaaaa^".replace(new StringBuilder("aa"), "b"));
665    }
666
667    /**
668     * @tests java.lang.String#startsWith(java.lang.String)
669     */
670    public void test_startsWithLjava_lang_String() {
671        // Test for method boolean java.lang.String.startsWith(java.lang.String)
672        assertTrue("Failed to find string", hw1.startsWith("Hello"));
673        assertTrue("Found incorrect string", !hw1.startsWith("T"));
674    }
675
676    /**
677     * @tests java.lang.String#startsWith(java.lang.String, int)
678     */
679    public void test_startsWithLjava_lang_StringI() {
680        // Test for method boolean java.lang.String.startsWith(java.lang.String,
681        // int)
682        assertTrue("Failed to find string", hw1.startsWith("World", 5));
683        assertTrue("Found incorrect string", !hw1.startsWith("Hello", 5));
684    }
685
686    /**
687     * @tests java.lang.String#substring(int)
688     */
689    public void test_substringI() {
690        // Test for method java.lang.String java.lang.String.substring(int)
691        assertEquals("Incorrect substring returned",
692                "World", hw1.substring(5));
693        assertTrue("not identical", hw1.substring(0) == hw1);
694    }
695
696    /**
697     * @tests java.lang.String#substring(int, int)
698     */
699    public void test_substringII() {
700        // Test for method java.lang.String java.lang.String.substring(int, int)
701        assertTrue("Incorrect substring returned", hw1.substring(0, 5).equals(
702                "Hello")
703                && (hw1.substring(5, 10).equals("World")));
704        assertTrue("not identical", hw1.substring(0, hw1.length()) == hw1);
705    }
706
707    /**
708     * @tests java.lang.String#toCharArray()
709     */
710    public void test_toCharArray() {
711        // Test for method char [] java.lang.String.toCharArray()
712
713        String s = new String(buf, 0, buf.length);
714        char[] schars = s.toCharArray();
715        for (int i = 0; i < s.length(); i++)
716            assertTrue("Returned incorrect char aray", buf[i] == schars[i]);
717    }
718
719    /**
720     * @tests java.lang.String#toLowerCase()
721     */
722    public void test_toLowerCase() {
723        // Test for method java.lang.String java.lang.String.toLowerCase()
724        assertTrue("toLowerCase case conversion did not succeed", hwuc
725                .toLowerCase().equals(hwlc));
726
727        assertEquals("a) Sigma has same lower case value at end of word with Unicode 3.0",
728                "\u03c3", "\u03a3".toLowerCase());
729        assertEquals("b) Sigma has same lower case value at end of word with Unicode 3.0",
730                "a \u03c3", "a \u03a3".toLowerCase());
731    }
732
733    /**
734     * @tests java.lang.String#toLowerCase(java.util.Locale)
735     */
736    public void test_toLowerCaseLjava_util_Locale() {
737        // Test for method java.lang.String
738        // java.lang.String.toLowerCase(java.util.Locale)
739        assertTrue("toLowerCase case conversion did not succeed", hwuc
740                .toLowerCase(java.util.Locale.getDefault()).equals(hwlc));
741        assertEquals("Invalid \\u0049 for English", "\u0069", "\u0049".toLowerCase(
742                Locale.ENGLISH));
743        assertEquals("Invalid \\u0049 for Turkish", "\u0131", "\u0049".toLowerCase(
744                new Locale("tr", "")));
745    }
746
747    /**
748     * @tests java.lang.String#toString()
749     */
750    public void test_toString() {
751        // Test for method java.lang.String java.lang.String.toString()
752        assertTrue("Incorrect string returned", hw1.toString().equals(hw1));
753    }
754
755    /**
756     * @tests java.lang.String#toUpperCase()
757     */
758    public void test_toUpperCase() {
759        // Test for method java.lang.String java.lang.String.toUpperCase()
760        assertTrue("Returned string is not UpperCase", hwlc.toUpperCase()
761                .equals(hwuc));
762
763        assertEquals("Wrong conversion", "SS", "\u00df".toUpperCase());
764
765        String s = "a\u00df\u1f56";
766        assertTrue("Invalid conversion", !s.toUpperCase().equals(s));
767
768    }
769
770    /**
771     * @tests java.lang.String#toUpperCase(java.util.Locale)
772     */
773    public void test_toUpperCaseLjava_util_Locale() {
774        // Test for method java.lang.String
775        // java.lang.String.toUpperCase(java.util.Locale)
776        assertTrue("Returned string is not UpperCase", hwlc.toUpperCase()
777                .equals(hwuc));
778        assertEquals("Invalid \\u0069 for English", "\u0049", "\u0069".toUpperCase(
779                Locale.ENGLISH));
780        assertEquals("Invalid \\u0069 for Turkish", "\u0130", "\u0069".toUpperCase(
781                new Locale("tr", "")));
782    }
783
784    /**
785     * @tests java.lang.String#toUpperCase(java.util.Locale)
786     */
787    public void test_toUpperCaseLjava_util_Locale_subtest0() {
788        // Test for method java.lang.String
789        // java.lang.String.toUpperCase(java.util.Locale)
790    }
791
792    /**
793     * @tests java.lang.String#trim()
794     */
795    public void test_trim() {
796        // Test for method java.lang.String java.lang.String.trim()
797        assertTrue("Incorrect string returned", " HelloWorld ".trim().equals(
798                hw1));
799    }
800
801    /**
802     * @tests java.lang.String#valueOf(char[])
803     */
804    public void test_valueOf$C() {
805        // Test for method java.lang.String java.lang.String.valueOf(char [])
806        assertEquals("Returned incorrect String",
807                "World", String.valueOf(buf));
808    }
809
810    /**
811     * @tests java.lang.String#valueOf(char[], int, int)
812     */
813    public void test_valueOf$CII() {
814        // Test for method java.lang.String java.lang.String.valueOf(char [],
815        // int, int)
816        char[] t = { 'H', 'e', 'l', 'l', 'o', 'W', 'o', 'r', 'l', 'd' };
817        assertEquals("copyValueOf returned incorrect String", "World", String.valueOf(t,
818                5, 5));
819    }
820
821    /**
822     * @tests java.lang.String#valueOf(char)
823     */
824    public void test_valueOfC() {
825        // Test for method java.lang.String java.lang.String.valueOf(char)
826        for (int i = 0; i < 65536; i++)
827            assertTrue("Incorrect valueOf(char) returned: " + i, String
828                    .valueOf((char) i).charAt(0) == (char) i);
829    }
830
831    /**
832     * @tests java.lang.String#valueOf(double)
833     */
834    public void test_valueOfD() {
835        // Test for method java.lang.String java.lang.String.valueOf(double)
836        assertEquals("Incorrect double string returned", "1.7976931348623157E308", String.valueOf(
837                Double.MAX_VALUE));
838    }
839
840    /**
841     * @tests java.lang.String#valueOf(float)
842     */
843    public void test_valueOfF() {
844        // Test for method java.lang.String java.lang.String.valueOf(float)
845        assertTrue("incorrect float string returned--got: "
846                + String.valueOf(1.0F) + " wanted: 1.0", String.valueOf(1.0F)
847                .equals("1.0"));
848        assertTrue("incorrect float string returned--got: "
849                + String.valueOf(0.9F) + " wanted: 0.9", String.valueOf(0.9F)
850                .equals("0.9"));
851        assertTrue("incorrect float string returned--got: "
852                + String.valueOf(109.567F) + " wanted: 109.567", String
853                .valueOf(109.567F).equals("109.567"));
854    }
855
856    /**
857     * @tests java.lang.String#valueOf(int)
858     */
859    public void test_valueOfI() {
860        // Test for method java.lang.String java.lang.String.valueOf(int)
861        assertEquals("returned invalid int string", "1", String.valueOf(1));
862    }
863
864    /**
865     * @tests java.lang.String#valueOf(long)
866     */
867    public void test_valueOfJ() {
868        // Test for method java.lang.String java.lang.String.valueOf(long)
869        assertEquals("returned incorrect long string", "927654321098", String.valueOf(
870                927654321098L));
871    }
872
873    /**
874     * @tests java.lang.String#valueOf(java.lang.Object)
875     */
876    public void test_valueOfLjava_lang_Object() {
877        // Test for method java.lang.String
878        // java.lang.String.valueOf(java.lang.Object)
879        assertTrue("Incorrect Object string returned", obj.toString().equals(
880                String.valueOf(obj)));
881    }
882
883    /**
884     * @tests java.lang.String#valueOf(boolean)
885     */
886    public void test_valueOfZ() {
887        // Test for method java.lang.String java.lang.String.valueOf(boolean)
888        assertTrue("Incorrect boolean string returned", String.valueOf(false)
889                .equals("false")
890                && (String.valueOf(true).equals("true")));
891    }
892
893    /**
894     * @tests java.lang.String#contentEquals(CharSequence cs)
895     */
896    public void test_contentEqualsLjava_lang_CharSequence() {
897        // Test for method java.lang.String java.lang.String.contentEquals(CharSequence cs)
898        assertFalse("Incorrect result of compare", "qwerty".contentEquals(""));
899    }
900
901    /**
902     * @tests java.lang.String#format(Locale, String, Object[])
903     */
904    @SuppressWarnings("boxing")
905    public void test_format() {
906        assertEquals("13% of sum is 0x11",
907            String.format("%d%% of %s is 0x%x", 13, "sum", 17));
908        assertEquals("empty format", "", String.format("", 123, this));
909        try {
910        String.format(null);
911        fail("NPE is expected on null format");
912        } catch (NullPointerException ok){}
913    }
914
915    /**
916     * @tests java.lang.String#format(Locale, String, Object...)
917     */
918    @SuppressWarnings("boxing")
919    public void test_format_Locale() {
920        Locale l = new Locale("UK");
921        assertEquals("13% of sum is 0x11",
922                String.format(l, "%d%% of %s is 0x%x", 13, "sum", 17));
923        assertEquals("empty format", "", String.format("", 123, this));
924        try {
925            String.format(null);
926            fail("NPE is expected on null format");
927        } catch (NullPointerException ok){}
928    }
929}
930