test/tools/javac/StringConversion.java

Tue, 25 May 2010 15:54:51 -0700

author
ohair
date
Tue, 25 May 2010 15:54:51 -0700
changeset 554
9d9f26857129
parent 1
9a66ca7c79fa
child 2525
2eb010b6cb22
permissions
-rw-r--r--

6943119: Rebrand source copyright notices
Reviewed-by: darcy

duke@1 1 /*
ohair@554 2 * Copyright (c) 1997, 1998, Oracle and/or its affiliates. All rights reserved.
duke@1 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
duke@1 4 *
duke@1 5 * This code is free software; you can redistribute it and/or modify it
duke@1 6 * under the terms of the GNU General Public License version 2 only, as
duke@1 7 * published by the Free Software Foundation.
duke@1 8 *
duke@1 9 * This code is distributed in the hope that it will be useful, but WITHOUT
duke@1 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
duke@1 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
duke@1 12 * version 2 for more details (a copy is included in the LICENSE file that
duke@1 13 * accompanied this code).
duke@1 14 *
duke@1 15 * You should have received a copy of the GNU General Public License version
duke@1 16 * 2 along with this work; if not, write to the Free Software Foundation,
duke@1 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
duke@1 18 *
ohair@554 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
ohair@554 20 * or visit www.oracle.com if you need additional information or have any
ohair@554 21 * questions.
duke@1 22 */
duke@1 23
duke@1 24 /*
duke@1 25 * @test
duke@1 26 * @bug 4030173 4071548
duke@1 27 * @summary Verify correct conversion of non-string arguments in string concatenation.
duke@1 28 * @author maddox
duke@1 29 *
duke@1 30 * @compile StringConversion.java
duke@1 31 * @run main StringConversion
duke@1 32 */
duke@1 33
duke@1 34 class FooBar {
duke@1 35 public String toString(){
duke@1 36 return null;
duke@1 37 }
duke@1 38 }
duke@1 39
duke@1 40 public class StringConversion {
duke@1 41
duke@1 42 static void check(int testid, String have, String expect)
duke@1 43 throws Exception {
duke@1 44 if ((have == null && have != expect) ||
duke@1 45 (have != null && !have.equals(expect))) {
duke@1 46 String msg =
duke@1 47 "TEST " + testid + ": HAVE \"" +
duke@1 48 have + "\" EXPECT \"" + expect + "\"";
duke@1 49 System.out.println("StringConversion: " + msg);
duke@1 50 throw new Exception(msg);
duke@1 51 }
duke@1 52 }
duke@1 53
duke@1 54 public static void main(String[] args) throws Exception {
duke@1 55
duke@1 56 String s;
duke@1 57 String n = null;
duke@1 58 Object o = null;
duke@1 59 FooBar m = new FooBar();
duke@1 60
duke@1 61 // Null reference must be converted to "null"
duke@1 62
duke@1 63 // Conversion will be done by 'StringBuffer.append'.
duke@1 64 s = "foo" + n;
duke@1 65 check(11, s, "foonull");
duke@1 66 s = n + "bar";
duke@1 67 check(12, s, "nullbar");
duke@1 68 s = "foo" + o;
duke@1 69 check(13, s, "foonull");
duke@1 70 s = o + "bar";
duke@1 71 check(14, s, "nullbar");
duke@1 72
duke@1 73 // Conversion will be done by 'String.valueOf'.
duke@1 74 s = "" + n;
duke@1 75 check(21, s, "null");
duke@1 76 s = n + "";
duke@1 77 check(22, s, "null");
duke@1 78 s = "" + o;
duke@1 79 check(23, s, "null");
duke@1 80 s = o + "";
duke@1 81 check(24, s, "null");
duke@1 82
duke@1 83 // Null 'toString' result must be converted to "null"
duke@1 84
duke@1 85 // Conversion will be done by 'StringBuffer.append'.
duke@1 86 s = "foo" + m;
duke@1 87 check(31, s, "foonull");
duke@1 88 s = m + "bar";
duke@1 89 check(32, s, "nullbar");
duke@1 90
duke@1 91 // Conversion will be done by 'String.valueOf'.
duke@1 92 s = "" + m;
duke@1 93 check(43, s, "null");
duke@1 94 s = m + "";
duke@1 95 check(44, s, "null");
duke@1 96
duke@1 97 // A character array must be converted as if by
duke@1 98 // 'toString', i.e., it is treated as an 'Object'.
duke@1 99
duke@1 100 s = "polymorph";
duke@1 101 char[] ca = {'i', 's', 'm'};
duke@1 102
duke@1 103 check(51, s + ca, s + ca.toString());
duke@1 104 check(52, ca + s, ca.toString() + s);
duke@1 105
duke@1 106 System.out.println("OK");
duke@1 107 }
duke@1 108 }

mercurial