Path: blob/master/test/jdk/java/lang/StringBuffer/ToStringCache.java
41149 views
/*1* Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.2* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.3*4* This code is free software; you can redistribute it and/or modify it5* under the terms of the GNU General Public License version 2 only, as6* published by the Free Software Foundation.7*8* This code is distributed in the hope that it will be useful, but WITHOUT9* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or10* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License11* version 2 for more details (a copy is included in the LICENSE file that12* accompanied this code).13*14* You should have received a copy of the GNU General Public License version15* 2 along with this work; if not, write to the Free Software Foundation,16* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.17*18* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA19* or visit www.oracle.com if you need additional information or have any20* questions.21*/2223/* @test24* @bug 8013395 801481425* @summary Test StringBuffer.toString caching26*/2728public class ToStringCache {2930// we can't test that we actually use a cached value (the benchmarks31// verify that) but we have to test that the cache is cleared when32// expected3334public static void main(String[] args) throws Exception {35String original = "The original String";3637StringBuffer sb = new StringBuffer(original);3839String a = sb.toString();40checkEqual(a, original);4142String b = sb.toString();43checkEqual(a, b);4445// mutating methods4647sb.setLength(12);48b = sb.toString();49checkUnequal(a, b);50a = b;5152sb.setCharAt(0, 'X');53b = sb.toString();54checkUnequal(a, b);55a = b;5657sb.append(new Character('X'));58b = sb.toString();59checkUnequal(a, b);60a = b;6162sb.append("More text");63b = sb.toString();64checkUnequal(a, b);65a = b;6667sb.append(sb);68b = sb.toString();69checkUnequal(a, b);70a = b;7172sb.append(new StringBuilder("Build"));73b = sb.toString();74checkUnequal(a, b);75a = b;7677sb.append(new StringBuilder("Build2"), 0, 1);78b = sb.toString();79checkUnequal(a, b);80a = b;8182sb.append(new char[] { 'a', 'b' });83b = sb.toString();84checkUnequal(a, b);85a = b;8687sb.append(true);88b = sb.toString();89checkUnequal(a, b);90a = b;9192sb.append('c');93b = sb.toString();94checkUnequal(a, b);95a = b;9697sb.append(23);98b = sb.toString();99checkUnequal(a, b);100a = b;101102sb.appendCodePoint(Character.codePointAt(new char[] { 'X'}, 0));103b = sb.toString();104checkUnequal(a, b);105a = b;106107sb.append(1L);108b = sb.toString();109checkUnequal(a, b);110a = b;111112sb.append(1.0f);113b = sb.toString();114checkUnequal(a, b);115a = b;116117sb.append(1.0d);118b = sb.toString();119checkUnequal(a, b);120a = b;121122sb.delete(0, 5);123b = sb.toString();124checkUnequal(a, b);125a = b;126127sb.deleteCharAt(0);128b = sb.toString();129checkUnequal(a, b);130a = b;131132sb.replace(0,2, "123");133b = sb.toString();134checkUnequal(a, b);135a = b;136137sb.insert(0, new char[] { 'a', 'b', 'c'}, 0, 3);138b = sb.toString();139checkUnequal(a, b);140a = b;141142sb.insert(0, new Object());143b = sb.toString();144checkUnequal(a, b);145a = b;146147sb.insert(0, "abc");148b = sb.toString();149checkUnequal(a, b);150a = b;151152sb.insert(0, new char[] { 'a', 'b', 'c' });153b = sb.toString();154checkUnequal(a, b);155a = b;156157sb.insert(0, new StringBuilder("Build"));158b = sb.toString();159checkUnequal(a, b);160a = b;161162sb.insert(0, new StringBuilder("Build"), 0, 1);163b = sb.toString();164checkUnequal(a, b);165a = b;166167sb.insert(0, false);168b = sb.toString();169checkUnequal(a, b);170a = b;171172sb.insert(0, 'X');173b = sb.toString();174checkUnequal(a, b);175a = b;176177sb.insert(0, 1);178b = sb.toString();179checkUnequal(a, b);180a = b;181182sb.insert(0, 1L);183b = sb.toString();184checkUnequal(a, b);185a = b;186187sb.insert(0, 1.0f);188b = sb.toString();189checkUnequal(a, b);190a = b;191192sb.insert(0, 1.0d);193b = sb.toString();194checkUnequal(a, b);195a = b;196197sb.reverse();198b = sb.toString();199checkUnequal(a, b);200201// Extra checks that append(null) works correctly202203sb.append((String)null);204b = sb.toString();205checkUnequal(a, b);206a = b;207208sb.append((StringBuffer)null);209b = sb.toString();210checkUnequal(a, b);211a = b;212213sb.append((StringBuilder)null);214b = sb.toString();215checkUnequal(a, b);216a = b;217218sb.append((CharSequence)null);219b = sb.toString();220checkUnequal(a, b);221a = b;222223// non-mutating methods224225// Reset to known value226sb = new StringBuffer(original);227a = sb.toString();228b = sb.toString();229checkEqual(a, b);230231int l = sb.length();232b = sb.toString();233checkEqual(a, b);234235int cap = sb.capacity();236b = sb.toString();237checkEqual(a, b);238239sb.ensureCapacity(100);240b = sb.toString();241checkEqual(a, b);242243sb.trimToSize();244b = sb.toString();245checkEqual(a, b);246247char c = sb.charAt(1);248b = sb.toString();249checkEqual(a, b);250251int cp = sb.codePointAt(1);252b = sb.toString();253checkEqual(a, b);254255cp = sb.codePointBefore(2);256b = sb.toString();257checkEqual(a, b);258259int count = sb.codePointCount(0,1);260b = sb.toString();261checkEqual(a, b);262263count = sb.offsetByCodePoints(0, 1);264b = sb.toString();265checkEqual(a, b);266267sb.getChars(0, 1, new char[2], 0);268b = sb.toString();269checkEqual(a, b);270271String sub = sb.substring(0);272b = sb.toString();273checkEqual(a, b);274275CharSequence cs = sb.subSequence(0,1);276b = sb.toString();277checkEqual(a, b);278279sub = sb.substring(0, 3);280b = sb.toString();281checkEqual(a, b);282283int index = sb.indexOf("rig");284b = sb.toString();285checkEqual(a, b);286287index = sb.indexOf("rig", 2);288b = sb.toString();289checkEqual(a, b);290291index = sb.lastIndexOf("rig");292b = sb.toString();293checkEqual(a, b);294295index = sb.lastIndexOf("rig", 3);296b = sb.toString();297checkEqual(a, b);298299}300301private static void checkEqual(String s1, String s2) {302if (!s1.equals(s2))303throw new RuntimeException("Unmatched strings: s1 = "304+ s1 + " s2 = " + s2);305}306private static void checkUnequal(String s1, String s2) {307if (s1.equals(s2))308throw new RuntimeException("Unexpected matched strings: " + s1);309}310}311312313