StringBuffer2Test.java revision 561ee011997c6c2f1befbfaa9d5f0a99771c1d63
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
20public class StringBuffer2Test extends junit.framework.TestCase {
21
22	StringBuffer testBuffer;
23
24	/**
25	 * @tests java.lang.StringBuffer#StringBuffer()
26	 */
27	public void test_Constructor() {
28		// Test for method java.lang.StringBuffer()
29		new StringBuffer();
30		assertTrue("Invalid buffer created", true);
31	}
32
33	/**
34	 * @tests java.lang.StringBuffer#StringBuffer(int)
35	 */
36	public void test_ConstructorI() {
37		// Test for method java.lang.StringBuffer(int)
38		StringBuffer sb = new StringBuffer(8);
39		assertEquals("Newly constructed buffer is of incorrect length", 0, sb
40				.length());
41	}
42
43	/**
44	 * @tests java.lang.StringBuffer#StringBuffer(java.lang.String)
45	 */
46	public void test_ConstructorLjava_lang_String() {
47		// Test for method java.lang.StringBuffer(java.lang.String)
48
49		StringBuffer sb = new StringBuffer("HelloWorld");
50
51		assertTrue("Invalid buffer created", sb.length() == 10
52				&& (sb.toString().equals("HelloWorld")));
53
54		boolean pass = false;
55		try {
56			new StringBuffer(null);
57		} catch (NullPointerException e) {
58			pass = true;
59		}
60		assertTrue("Should throw NullPointerException", pass);
61	}
62
63	/**
64	 * @tests java.lang.StringBuffer#append(char[])
65	 */
66	public void test_append$C() {
67		// Test for method java.lang.StringBuffer
68		// java.lang.StringBuffer.append(char [])
69		char buf[] = new char[4];
70		"char".getChars(0, 4, buf, 0);
71		testBuffer.append(buf);
72		assertEquals("Append of char[] failed",
73				"This is a test bufferchar", testBuffer.toString());
74	}
75
76	/**
77	 * @tests java.lang.StringBuffer#append(char[], int, int)
78	 */
79	public void test_append$CII() {
80		// Test for method java.lang.StringBuffer
81		// java.lang.StringBuffer.append(char [], int, int)
82		StringBuffer sb = new StringBuffer();
83		char[] buf1 = { 'H', 'e', 'l', 'l', 'o' };
84		char[] buf2 = { 'W', 'o', 'r', 'l', 'd' };
85		sb.append(buf1, 0, buf1.length);
86		assertEquals("Buffer is invalid length after append", 5, sb.length());
87		sb.append(buf2, 0, buf2.length);
88		assertEquals("Buffer is invalid length after append", 10, sb.length());
89		assertTrue("Buffer contains invalid chars", (sb.toString()
90				.equals("HelloWorld")));
91	}
92
93	/**
94	 * @tests java.lang.StringBuffer#append(char)
95	 */
96	public void test_appendC() {
97		// Test for method java.lang.StringBuffer
98		// java.lang.StringBuffer.append(char)
99		StringBuffer sb = new StringBuffer();
100		char buf1 = 'H';
101		char buf2 = 'W';
102		sb.append(buf1);
103		assertEquals("Buffer is invalid length after append", 1, sb.length());
104		sb.append(buf2);
105		assertEquals("Buffer is invalid length after append", 2, sb.length());
106		assertTrue("Buffer contains invalid chars",
107				(sb.toString().equals("HW")));
108	}
109
110	/**
111	 * @tests java.lang.StringBuffer#append(double)
112	 */
113	public void test_appendD() {
114		// Test for method java.lang.StringBuffer
115		// java.lang.StringBuffer.append(double)
116		StringBuffer sb = new StringBuffer();
117		sb.append(Double.MAX_VALUE);
118		assertEquals("Buffer is invalid length after append", 22, sb.length());
119		assertEquals("Buffer contains invalid characters",
120				"1.7976931348623157E308", sb.toString());
121	}
122
123	/**
124	 * @tests java.lang.StringBuffer#append(float)
125	 */
126	public void test_appendF() {
127		// Test for method java.lang.StringBuffer
128		// java.lang.StringBuffer.append(float)
129		StringBuffer sb = new StringBuffer();
130		final float floatNum = 900.87654F;
131		sb.append(floatNum);
132		assertTrue("Buffer is invalid length after append: " + sb.length(), sb
133				.length() == String.valueOf(floatNum).length());
134		assertTrue("Buffer contains invalid characters", sb.toString().equals(
135				String.valueOf(floatNum)));
136	}
137
138	/**
139	 * @tests java.lang.StringBuffer#append(int)
140	 */
141	public void test_appendI() {
142		// Test for method java.lang.StringBuffer
143		// java.lang.StringBuffer.append(int)
144		StringBuffer sb = new StringBuffer();
145		sb.append(9000);
146		assertEquals("Buffer is invalid length after append", 4, sb.length());
147		sb.append(1000);
148		assertEquals("Buffer is invalid length after append", 8, sb.length());
149		assertEquals("Buffer contains invalid characters",
150				"90001000", sb.toString());
151	}
152
153	/**
154	 * @tests java.lang.StringBuffer#append(long)
155	 */
156	public void test_appendJ() {
157		// Test for method java.lang.StringBuffer
158		// java.lang.StringBuffer.append(long)
159
160		StringBuffer sb = new StringBuffer();
161		long t = 927654321098L;
162		sb.append(t);
163		assertEquals("Buffer is of invlaid length", 12, sb.length());
164		assertEquals("Buffer contains invalid characters",
165				"927654321098", sb.toString());
166	}
167
168	/**
169	 * @tests java.lang.StringBuffer#append(java.lang.Object)
170	 */
171	public void test_appendLjava_lang_Object() {
172		// Test for method java.lang.StringBuffer
173		// java.lang.StringBuffer.append(java.lang.Object)
174		StringBuffer sb = new StringBuffer();
175		Object obj1 = new Object();
176		Object obj2 = new Object();
177		sb.append(obj1);
178		sb.append(obj2);
179		assertTrue("Buffer contains invalid characters", sb.toString().equals(
180				obj1.toString() + obj2.toString()));
181	}
182
183	/**
184	 * @tests java.lang.StringBuffer#append(java.lang.String)
185	 */
186	public void test_appendLjava_lang_String() {
187		// Test for method java.lang.StringBuffer
188		// java.lang.StringBuffer.append(java.lang.String)
189		StringBuffer sb = new StringBuffer();
190		String buf1 = "Hello";
191		String buf2 = "World";
192		sb.append(buf1);
193		assertEquals("Buffer is invalid length after append", 5, sb.length());
194		sb.append(buf2);
195		assertEquals("Buffer is invalid length after append", 10, sb.length());
196		assertTrue("Buffer contains invalid chars", (sb.toString()
197				.equals("HelloWorld")));
198	}
199
200	/**
201	 * @tests java.lang.StringBuffer#append(boolean)
202	 */
203	public void test_appendZ() {
204		// Test for method java.lang.StringBuffer
205		// java.lang.StringBuffer.append(boolean)
206		StringBuffer sb = new StringBuffer();
207		sb.append(false);
208		assertEquals("Buffer is invalid length after append", 5, sb.length());
209		sb.append(true);
210		assertEquals("Buffer is invalid length after append", 9, sb.length());
211		assertTrue("Buffer is invalid length after append", (sb.toString()
212				.equals("falsetrue")));
213	}
214
215	/**
216	 * @tests java.lang.StringBuffer#capacity()
217	 */
218	public void test_capacity() {
219		// Test for method int java.lang.StringBuffer.capacity()
220		StringBuffer sb = new StringBuffer(10);
221		assertEquals("Returned incorrect capacity", 10, sb.capacity());
222		sb.ensureCapacity(100);
223		assertTrue("Returned incorrect capacity", sb.capacity() >= 100);
224	}
225
226	/**
227	 * @tests java.lang.StringBuffer#charAt(int)
228	 */
229	public void test_charAtI() {
230		// Test for method char java.lang.StringBuffer.charAt(int)
231		assertEquals("Returned incorrect char", 's', testBuffer.charAt(3));
232
233		// Test for StringIndexOutOfBoundsException
234		boolean exception = false;
235		try {
236			testBuffer.charAt(-1);
237		} catch (StringIndexOutOfBoundsException e) {
238			exception = true;
239		} catch (ArrayIndexOutOfBoundsException e) {
240		}
241		assertTrue("Should throw StringIndexOutOfBoundsException", exception);
242	}
243
244	/**
245	 * @tests java.lang.StringBuffer#delete(int, int)
246	 */
247	public void test_deleteII() {
248		// Test for method java.lang.StringBuffer
249		// java.lang.StringBuffer.delete(int, int)
250		testBuffer.delete(7, 7);
251		assertEquals("Deleted chars when start == end", "This is a test buffer", testBuffer.toString()
252				);
253		testBuffer.delete(4, 14);
254		assertEquals("Deleted incorrect chars",
255				"This buffer", testBuffer.toString());
256
257		testBuffer = new StringBuffer("This is a test buffer");
258		String sharedStr = testBuffer.toString();
259		testBuffer.delete(0, testBuffer.length());
260		assertEquals("Didn't clone shared buffer", "This is a test buffer", sharedStr
261				);
262		assertTrue("Deleted incorrect chars", testBuffer.toString().equals(""));
263		testBuffer.append("more stuff");
264		assertEquals("Didn't clone shared buffer 2", "This is a test buffer", sharedStr
265				);
266		assertEquals("Wrong contents", "more stuff", testBuffer.toString());
267		try {
268			testBuffer.delete(-5, 2);
269		} catch (IndexOutOfBoundsException e) {
270		}
271		assertEquals("Wrong contents 2",
272				"more stuff", testBuffer.toString());
273	}
274
275	/**
276	 * @tests java.lang.StringBuffer#deleteCharAt(int)
277	 */
278	public void test_deleteCharAtI() {
279		// Test for method java.lang.StringBuffer
280		// java.lang.StringBuffer.deleteCharAt(int)
281		testBuffer.deleteCharAt(3);
282		assertEquals("Deleted incorrect char",
283				"Thi is a test buffer", testBuffer.toString());
284	}
285
286	/**
287	 * @tests java.lang.StringBuffer#ensureCapacity(int)
288	 */
289	public void test_ensureCapacityI() {
290		// Test for method void java.lang.StringBuffer.ensureCapacity(int)
291		StringBuffer sb = new StringBuffer(10);
292
293		sb.ensureCapacity(100);
294		assertTrue("Failed to increase capacity", sb.capacity() >= 100);
295	}
296
297	/**
298	 * @tests java.lang.StringBuffer#getChars(int, int, char[], int)
299	 */
300	public void test_getCharsII$CI() {
301		// Test for method void java.lang.StringBuffer.getChars(int, int, char
302		// [], int)
303
304		char[] buf = new char[10];
305		testBuffer.getChars(4, 8, buf, 2);
306		assertTrue("Returned incorrect chars", new String(buf, 2, 4)
307				.equals(testBuffer.toString().substring(4, 8)));
308
309		boolean exception = false;
310		try {
311			StringBuffer buf2 = new StringBuffer("");
312			buf2.getChars(0, 0, new char[5], 2);
313		} catch (IndexOutOfBoundsException e) {
314			exception = true;
315		}
316		assertTrue("did not expect IndexOutOfBoundsException", !exception);
317	}
318
319	/**
320	 * @tests java.lang.StringBuffer#insert(int, char[])
321	 */
322	public void test_insertI$C() {
323		// Test for method java.lang.StringBuffer
324		// java.lang.StringBuffer.insert(int, char [])
325		char buf[] = new char[4];
326		"char".getChars(0, 4, buf, 0);
327		testBuffer.insert(15, buf);
328		assertEquals("Insert test failed",
329				"This is a test charbuffer", testBuffer.toString());
330
331		boolean exception = false;
332		StringBuffer buf1 = new StringBuffer("abcd");
333		try {
334			buf1.insert(-1, (char[]) null);
335		} catch (StringIndexOutOfBoundsException e) {
336			exception = true;
337		} catch (NullPointerException e) {
338		}
339		assertTrue("Should throw StringIndexOutOfBoundsException", exception);
340	}
341
342	/**
343	 * @tests java.lang.StringBuffer#insert(int, char[], int, int)
344	 */
345	public void test_insertI$CII() {
346		// Test for method java.lang.StringBuffer
347		// java.lang.StringBuffer.insert(int, char [], int, int)
348		char[] c = new char[] { 'n', 'o', 't', ' ' };
349		testBuffer.insert(8, c, 0, 4);
350		assertEquals("This is not a test buffer", testBuffer.toString());
351
352		StringBuffer buf1 = new StringBuffer("abcd");
353		try {
354			buf1.insert(-1, (char[]) null, 0, 0);
355            fail("Should throw StringIndexOutOfBoundsException");
356		} catch (StringIndexOutOfBoundsException e) {
357            //expected
358		}
359
360        try {
361            testBuffer.insert(testBuffer.length() - 1, c, -1, 1);
362        } catch (StringIndexOutOfBoundsException e) {
363            //expected
364        }
365
366	}
367
368	/**
369	 * @tests java.lang.StringBuffer#insert(int, char)
370	 */
371	public void test_insertIC() {
372		// Test for method java.lang.StringBuffer
373		// java.lang.StringBuffer.insert(int, char)
374		testBuffer.insert(15, 'T');
375		assertEquals("Insert test failed",
376				"This is a test Tbuffer", testBuffer.toString());
377	}
378
379	/**
380	 * @tests java.lang.StringBuffer#insert(int, double)
381	 */
382	public void test_insertID() {
383		// Test for method java.lang.StringBuffer
384		// java.lang.StringBuffer.insert(int, double)
385		testBuffer.insert(15, Double.MAX_VALUE);
386		assertTrue("Insert test failed", testBuffer.toString().equals(
387				"This is a test " + Double.MAX_VALUE + "buffer"));
388	}
389
390	/**
391	 * @tests java.lang.StringBuffer#insert(int, float)
392	 */
393	public void test_insertIF() {
394		// Test for method java.lang.StringBuffer
395		// java.lang.StringBuffer.insert(int, float)
396		testBuffer.insert(15, Float.MAX_VALUE);
397		String testBufferString = testBuffer.toString();
398		String expectedResult = "This is a test "
399				+ String.valueOf(Float.MAX_VALUE) + "buffer";
400		assertTrue("Insert test failed, got: " + "\'" + testBufferString + "\'"
401				+ " but wanted: " + "\'" + expectedResult + "\'",
402				testBufferString.equals(expectedResult));
403	}
404
405	/**
406	 * @tests java.lang.StringBuffer#insert(int, int)
407	 */
408	public void test_insertII() {
409		// Test for method java.lang.StringBuffer
410		// java.lang.StringBuffer.insert(int, int)
411		testBuffer.insert(15, 100);
412		assertEquals("Insert test failed",
413				"This is a test 100buffer", testBuffer.toString());
414	}
415
416	/**
417	 * @tests java.lang.StringBuffer#insert(int, long)
418	 */
419	public void test_insertIJ() {
420		// Test for method java.lang.StringBuffer
421		// java.lang.StringBuffer.insert(int, long)
422		testBuffer.insert(15, 88888888888888888L);
423		assertEquals("Insert test failed",
424				"This is a test 88888888888888888buffer", testBuffer.toString());
425	}
426
427	/**
428	 * @tests java.lang.StringBuffer#insert(int, java.lang.Object)
429	 */
430	public void test_insertILjava_lang_Object() {
431		// Test for method java.lang.StringBuffer
432		// java.lang.StringBuffer.insert(int, java.lang.Object)
433		Object obj1 = new Object();
434		testBuffer.insert(15, obj1);
435		assertTrue("Insert test failed", testBuffer.toString().equals(
436				"This is a test " + obj1.toString() + "buffer"));
437	}
438
439	/**
440	 * @tests java.lang.StringBuffer#insert(int, java.lang.String)
441	 */
442	public void test_insertILjava_lang_String() {
443		// Test for method java.lang.StringBuffer
444		// java.lang.StringBuffer.insert(int, java.lang.String)
445
446		testBuffer.insert(15, "STRING ");
447		assertEquals("Insert test failed",
448				"This is a test STRING buffer", testBuffer.toString());
449	}
450
451	/**
452	 * @tests java.lang.StringBuffer#insert(int, boolean)
453	 */
454	public void test_insertIZ() {
455		// Test for method java.lang.StringBuffer
456		// java.lang.StringBuffer.insert(int, boolean)
457		testBuffer.insert(15, true);
458		assertEquals("Insert test failed",
459				"This is a test truebuffer", testBuffer.toString());
460	}
461
462	/**
463	 * @tests java.lang.StringBuffer#length()
464	 */
465	public void test_length() {
466		// Test for method int java.lang.StringBuffer.length()
467		assertEquals("Incorrect length returned", 21, testBuffer.length());
468	}
469
470	/**
471	 * @tests java.lang.StringBuffer#replace(int, int, java.lang.String)
472	 */
473	public void test_replaceIILjava_lang_String() {
474		// Test for method java.lang.StringBuffer
475		// java.lang.StringBuffer.replace(int, int, java.lang.String)
476		testBuffer.replace(5, 9, "is a replaced");
477		assertTrue("Replace failed, wanted: " + "\'"
478				+ "This is a replaced test buffer" + "\'" + " but got: " + "\'"
479				+ testBuffer.toString() + "\'", testBuffer.toString().equals(
480				"This is a replaced test buffer"));
481		assertEquals("insert1", "text", new StringBuffer().replace(0, 0, "text")
482				.toString());
483		assertEquals("insert2", "123text", new StringBuffer("123").replace(3, 3, "text")
484				.toString());
485		assertEquals("insert2", "1text23", new StringBuffer("123").replace(1, 1, "text")
486				.toString());
487	}
488
489	private String writeString(String in) {
490		StringBuffer result = new StringBuffer();
491		result.append("\"");
492		for (int i = 0; i < in.length(); i++) {
493			result.append(" 0x" + Integer.toHexString(in.charAt(i)));
494		}
495		result.append("\"");
496		return result.toString();
497	}
498
499	private void reverseTest(String id, String org, String rev, String back) {
500		// create non-shared StringBuffer
501		StringBuffer sb = new StringBuffer(org);
502		sb.reverse();
503		String reversed = sb.toString();
504		assertTrue("reversed surrogate " + id + ": " + writeString(reversed),
505				reversed.equals(rev));
506		// create non-shared StringBuffer
507		sb = new StringBuffer(reversed);
508		sb.reverse();
509		reversed = sb.toString();
510		assertTrue("reversed surrogate " + id + "a: " + writeString(reversed),
511				reversed.equals(back));
512
513		// test algorithm when StringBuffer is shared
514		sb = new StringBuffer(org);
515		String copy = sb.toString();
516		assertEquals(org, copy);
517		sb.reverse();
518		reversed = sb.toString();
519		assertTrue("reversed surrogate " + id + ": " + writeString(reversed),
520				reversed.equals(rev));
521		sb = new StringBuffer(reversed);
522		copy = sb.toString();
523		assertEquals(rev, copy);
524		sb.reverse();
525		reversed = sb.toString();
526		assertTrue("reversed surrogate " + id + "a: " + writeString(reversed),
527				reversed.equals(back));
528
529	}
530
531	/**
532	 * @tests java.lang.StringBuffer#reverse()
533	 */
534	public void test_reverse() {
535		// Test for method java.lang.StringBuffer
536		// java.lang.StringBuffer.reverse()
537		String org;
538		org = "a";
539		reverseTest("0", org, org, org);
540
541		org = "ab";
542		reverseTest("1", org, "ba", org);
543
544		org = "abcdef";
545		reverseTest("2", org, "fedcba", org);
546
547		org = "abcdefg";
548		reverseTest("3", org, "gfedcba", org);
549
550	}
551
552	/**
553	 * @tests java.lang.StringBuffer#setCharAt(int, char)
554	 */
555	public void test_setCharAtIC() {
556		// Test for method void java.lang.StringBuffer.setCharAt(int, char)
557		StringBuffer s = new StringBuffer("HelloWorld");
558		s.setCharAt(4, 'Z');
559		assertEquals("Returned incorrect char", 'Z', s.charAt(4));
560	}
561
562	/**
563	 * @tests java.lang.StringBuffer#setLength(int)
564	 */
565	public void test_setLengthI() {
566		// Test for method void java.lang.StringBuffer.setLength(int)
567		testBuffer.setLength(1000);
568		assertEquals("Failed to increase length", 1000, testBuffer.length());
569		assertTrue("Increase in length trashed buffer", testBuffer.toString()
570				.startsWith("This is a test buffer"));
571		testBuffer.setLength(2);
572		assertEquals("Failed to decrease length", 2, testBuffer.length());
573		assertEquals("Decrease in length failed",
574				"Th", testBuffer.toString());
575	}
576
577	/**
578	 * @tests java.lang.StringBuffer#substring(int)
579	 */
580	public void test_substringI() {
581		// Test for method java.lang.String
582		// java.lang.StringBuffer.substring(int)
583		assertEquals("Returned incorrect substring", "is a test buffer", testBuffer.substring(5)
584				);
585	}
586
587	/**
588	 * @tests java.lang.StringBuffer#substring(int, int)
589	 */
590	public void test_substringII() {
591		// Test for method java.lang.String
592		// java.lang.StringBuffer.substring(int, int)
593		assertEquals("Returned incorrect substring", "is", testBuffer.substring(5, 7)
594				);
595	}
596
597	/**
598	 * @tests java.lang.StringBuffer#toString()
599	 */
600	public void test_toString() {
601		// Test for method java.lang.String java.lang.StringBuffer.toString()
602		assertEquals("Incorrect string value returned", "This is a test buffer", testBuffer.toString()
603				);
604	}
605
606	@Override
607    protected void setUp() {
608		testBuffer = new StringBuffer("This is a test buffer");
609	}
610}
611