StringBuilderWriterTest.java
/*
* Copyright (c) 2026 Contributors to the Eclipse Foundation. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Distribution License v. 1.0, which is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
package org.glassfish.jaxb.runtime.util;
import java.io.IOException;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
class StringBuilderWriterTest {
@Test
void testDefaultConstructor () {
try (final StringBuilderWriter writer = new StringBuilderWriter ()) {
assertNotNull (writer.getBuilder ());
assertEquals ("", writer.toString ());
}
}
@Test
void testConstructorWithInitialSize () {
try (final StringBuilderWriter writer = new StringBuilderWriter (64)) {
assertNotNull (writer.getBuilder ());
assertEquals ("", writer.toString ());
}
}
@Test
void testConstructorWithNegativeSize () {
assertThrows (IllegalArgumentException.class, () -> new StringBuilderWriter (-1));
}
@Test
void testConstructorWithStringBuilder () throws IOException {
final StringBuilder sb = new StringBuilder ("existing");
try (final StringBuilderWriter writer = new StringBuilderWriter (sb)) {
assertSame (sb, writer.getBuilder ());
assertEquals ("existing", writer.toString ());
writer.write ("More");
assertEquals ("existingMore", writer.toString ());
assertEquals ("existingMore", sb.toString ());
}
}
@Test
void testConstructorWithNullStringBuilder () {
try (final StringBuilderWriter writer = new StringBuilderWriter (null)) {
assertNotNull (writer.getBuilder ());
assertEquals ("", writer.toString ());
}
}
@Test
void testWriteChar () throws IOException {
try (final StringBuilderWriter writer = new StringBuilderWriter ()) {
writer.write ('\t');
writer.write ('\n');
assertEquals ("\t\n", writer.toString ());
}
}
@Test
void testWriteIntCastsToChar () throws IOException {
// Verify that write(int) treats the value as a character code point,
// not as a numeric string representation
try (final StringBuilderWriter writer = new StringBuilderWriter ()) {
writer.write (65); // 'A'
writer.write (0x20AC); // Euro sign
assertEquals ("A\u20AC", writer.toString ());
}
}
@Test
void testWriteCharArray () throws IOException {
try (final StringBuilderWriter writer = new StringBuilderWriter ()) {
writer.write (new char [] { 'H', 'e', 'l', 'l', 'o' }, 0, 5);
assertEquals ("Hello", writer.toString ());
}
}
@Test
void testWriteCharArrayWithOffset () throws IOException {
try (final StringBuilderWriter writer = new StringBuilderWriter ()) {
writer.write (new char [] { 'H', 'e', 'l', 'l', 'o' }, 1, 3);
assertEquals ("ell", writer.toString ());
}
}
@Test
void testWriteString () throws IOException {
try (final StringBuilderWriter writer = new StringBuilderWriter ()) {
writer.write ("Hello");
assertEquals ("Hello", writer.toString ());
}
}
@Test
void testWriteStringWithOffset () throws IOException {
try (final StringBuilderWriter writer = new StringBuilderWriter ()) {
writer.write ("Hello World", 6, 5);
assertEquals ("World", writer.toString ());
}
}
@Test
void testAppendChar () throws IOException {
try (final StringBuilderWriter writer = new StringBuilderWriter ()) {
writer.append ('\t');
writer.append ('\n');
assertEquals ("\t\n", writer.toString ());
}
}
@Test
void testAppendCharSequence () throws IOException {
try (final StringBuilderWriter writer = new StringBuilderWriter ()) {
writer.append ("Hello");
assertEquals ("Hello", writer.toString ());
}
}
@Test
void testAppendCharSequenceWithRange () throws IOException {
try (final StringBuilderWriter writer = new StringBuilderWriter ()) {
writer.append ("Hello World", 6, 11);
assertEquals ("World", writer.toString ());
}
}
@Test
void testFlushAndCloseAreNoOps () throws IOException {
@SuppressWarnings ("resource")
final StringBuilderWriter writer = new StringBuilderWriter ();
writer.write ("before");
writer.flush ();
writer.write ("after");
writer.close ();
writer.write ("afterClose");
assertEquals ("beforeafterafterClose", writer.toString ());
}
@Test
void testToString () throws IOException {
try (final StringBuilderWriter writer = new StringBuilderWriter ()) {
writer.write ("test");
assertEquals ("test", writer.toString ());
assertEquals (writer.getBuilder ().toString (), writer.toString ());
}
}
}