blob: 6259e27d0e33738eb870294a323813579bd1101b [file] [log] [blame]
dholmes847997a2013-05-15 00:36:03 -04001/*
2 * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24/* @test
25 * @bug 8013395
26 * @summary Test StringBuffer.toString caching
27 */
28
29public class ToStringCache {
30
31 // we can't test that we actually use a cached value (the benchmarks
32 // verify that) but we have to test that the cache is cleared when
33 // expected
34
35 public static void main(String[] args) throws Exception {
36 String original = "The original String";
37
38 StringBuffer sb = new StringBuffer(original);
39
40 String a = sb.toString();
41 checkEqual(a, original);
42
43 String b = sb.toString();
44 checkEqual(a, b);
45
46 // mutating methods
47
48 sb.setLength(12);
49 b = sb.toString();
50 checkUnequal(a, b);
51 a = b;
52
53 sb.setCharAt(0, 'X');
54 b = sb.toString();
55 checkUnequal(a, b);
56 a = b;
57
58 sb.append(new Character('X'));
59 b = sb.toString();
60 checkUnequal(a, b);
61 a = b;
62
63 sb.append("More text");
64 b = sb.toString();
65 checkUnequal(a, b);
66 a = b;
67
68 sb.append(sb);
69 b = sb.toString();
70 checkUnequal(a, b);
71 a = b;
72
73 sb.append(new StringBuilder("Build"));
74 b = sb.toString();
75 checkUnequal(a, b);
76 a = b;
77
78 sb.append(new StringBuilder("Build2"), 0, 1);
79 b = sb.toString();
80 checkUnequal(a, b);
81 a = b;
82
83 sb.append(new char[] { 'a', 'b' });
84 b = sb.toString();
85 checkUnequal(a, b);
86 a = b;
87
88 sb.append(true);
89 b = sb.toString();
90 checkUnequal(a, b);
91 a = b;
92
93 sb.append('c');
94 b = sb.toString();
95 checkUnequal(a, b);
96 a = b;
97
98 sb.append(23);
99 b = sb.toString();
100 checkUnequal(a, b);
101 a = b;
102
103 sb.appendCodePoint(Character.codePointAt(new char[] { 'X'}, 0));
104 b = sb.toString();
105 checkUnequal(a, b);
106 a = b;
107
108 sb.append(1L);
109 b = sb.toString();
110 checkUnequal(a, b);
111 a = b;
112
113 sb.append(1.0f);
114 b = sb.toString();
115 checkUnequal(a, b);
116 a = b;
117
118 sb.append(1.0d);
119 b = sb.toString();
120 checkUnequal(a, b);
121 a = b;
122
123 sb.delete(0, 5);
124 b = sb.toString();
125 checkUnequal(a, b);
126 a = b;
127
128 sb.deleteCharAt(0);
129 b = sb.toString();
130 checkUnequal(a, b);
131 a = b;
132
133 sb.replace(0,2, "123");
134 b = sb.toString();
135 checkUnequal(a, b);
136 a = b;
137
138 sb.insert(0, new char[] { 'a', 'b', 'c'}, 0, 3);
139 b = sb.toString();
140 checkUnequal(a, b);
141 a = b;
142
143 sb.insert(0, new Object());
144 b = sb.toString();
145 checkUnequal(a, b);
146 a = b;
147
148 sb.insert(0, "abc");
149 b = sb.toString();
150 checkUnequal(a, b);
151 a = b;
152
153 sb.insert(0, new char[] { 'a', 'b', 'c' });
154 b = sb.toString();
155 checkUnequal(a, b);
156 a = b;
157
158 sb.insert(0, new StringBuilder("Build"));
159 b = sb.toString();
160 checkUnequal(a, b);
161 a = b;
162
163 sb.insert(0, new StringBuilder("Build"), 0, 1);
164 b = sb.toString();
165 checkUnequal(a, b);
166 a = b;
167
168 sb.insert(0, false);
169 b = sb.toString();
170 checkUnequal(a, b);
171 a = b;
172
173 sb.insert(0, 'X');
174 b = sb.toString();
175 checkUnequal(a, b);
176 a = b;
177
178 sb.insert(0, 1);
179 b = sb.toString();
180 checkUnequal(a, b);
181 a = b;
182
183 sb.insert(0, 1L);
184 b = sb.toString();
185 checkUnequal(a, b);
186 a = b;
187
188 sb.insert(0, 1.0f);
189 b = sb.toString();
190 checkUnequal(a, b);
191 a = b;
192
193 sb.insert(0, 1.0d);
194 b = sb.toString();
195 checkUnequal(a, b);
196 a = b;
197
198 sb.reverse();
199 b = sb.toString();
200 checkUnequal(a, b);
201
202 // non-mutating methods
203
204 // Reset to known value
205 sb = new StringBuffer(original);
206 a = sb.toString();
207 b = sb.toString();
208 checkEqual(a, b);
209
210 int l = sb.length();
211 b = sb.toString();
212 checkEqual(a, b);
213
214 int cap = sb.capacity();
215 b = sb.toString();
216 checkEqual(a, b);
217
218 sb.ensureCapacity(100);
219 b = sb.toString();
220 checkEqual(a, b);
221
222 sb.trimToSize();
223 b = sb.toString();
224 checkEqual(a, b);
225
226 char c = sb.charAt(1);
227 b = sb.toString();
228 checkEqual(a, b);
229
230 int cp = sb.codePointAt(1);
231 b = sb.toString();
232 checkEqual(a, b);
233
234 cp = sb.codePointBefore(2);
235 b = sb.toString();
236 checkEqual(a, b);
237
238 int count = sb.codePointCount(0,1);
239 b = sb.toString();
240 checkEqual(a, b);
241
242 count = sb.offsetByCodePoints(0, 1);
243 b = sb.toString();
244 checkEqual(a, b);
245
246 sb.getChars(0, 1, new char[2], 0);
247 b = sb.toString();
248 checkEqual(a, b);
249
250 String sub = sb.substring(0);
251 b = sb.toString();
252 checkEqual(a, b);
253
254 CharSequence cs = sb.subSequence(0,1);
255 b = sb.toString();
256 checkEqual(a, b);
257
258 sub = sb.substring(0, 3);
259 b = sb.toString();
260 checkEqual(a, b);
261
262 int index = sb.indexOf("rig");
263 b = sb.toString();
264 checkEqual(a, b);
265
266 index = sb.indexOf("rig", 2);
267 b = sb.toString();
268 checkEqual(a, b);
269
270 index = sb.lastIndexOf("rig");
271 b = sb.toString();
272 checkEqual(a, b);
273
274 index = sb.lastIndexOf("rig", 3);
275 b = sb.toString();
276 checkEqual(a, b);
277
278 }
279
280 private static void checkEqual(String s1, String s2) {
281 if (!s1.equals(s2))
282 throw new RuntimeException("Unmatched strings: s1 = "
283 + s1 + " s2 = " + s2);
284 }
285 private static void checkUnequal(String s1, String s2) {
286 if (s1.equals(s2))
287 throw new RuntimeException("Unexpected matched strings: " + s1);
288 }
289}