blob: 5a91d3022ec97cbaa2388b3ff506cba9a83e12e5 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.commons.text;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.fail;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import java.text.DecimalFormatSymbols;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
import org.apache.commons.lang3.ArrayUtils;
import org.junit.jupiter.api.Test;
/**
* Unit tests for {@link TextStringBuilder}.
*/
public class TextStringBuilderAppendInsertTest {
/** The system line separator. */
private static final String SEP = System.lineSeparator();
/** Test subclass of Object, with a toString method. */
private static final Object FOO = new Object() {
@Override
public String toString() {
return "foo";
}
};
@Test
public void testAppend_Boolean() {
final TextStringBuilder sb = new TextStringBuilder();
sb.append(true);
assertThat(sb.toString()).isEqualTo("true");
sb.append(false);
assertThat(sb.toString()).isEqualTo("truefalse");
sb.append('!');
assertThat(sb.toString()).isEqualTo("truefalse!");
}
@Test
public void testAppend_CharArray() {
TextStringBuilder sb = new TextStringBuilder();
sb.setNullText("NULL").append((char[]) null);
assertThat(sb.toString()).isEqualTo("NULL");
sb = new TextStringBuilder();
sb.append(ArrayUtils.EMPTY_CHAR_ARRAY);
assertThat(sb.toString()).isEqualTo("");
sb.append(new char[] {'f', 'o', 'o'});
assertThat(sb.toString()).isEqualTo("foo");
}
@Test
public void testAppend_CharArray_int_int() {
TextStringBuilder sb = new TextStringBuilder();
sb.setNullText("NULL").append((char[]) null, 0, 1);
assertThat(sb.toString()).isEqualTo("NULL");
sb = new TextStringBuilder();
sb.append(new char[] {'f', 'o', 'o'}, 0, 3);
assertThat(sb.toString()).isEqualTo("foo");
try {
sb.append(new char[] {'b', 'a', 'r'}, -1, 1);
fail("append(char[], -1,) expected IndexOutOfBoundsException");
} catch (final IndexOutOfBoundsException e) {
// expected
}
try {
sb.append(new char[] {'b', 'a', 'r'}, 3, 1);
fail("append(char[], 3,) expected IndexOutOfBoundsException");
} catch (final IndexOutOfBoundsException e) {
// expected
}
try {
sb.append(new char[] {'b', 'a', 'r'}, 1, -1);
fail("append(char[],, -1) expected IndexOutOfBoundsException");
} catch (final IndexOutOfBoundsException e) {
// expected
}
try {
sb.append(new char[] {'b', 'a', 'r'}, 1, 3);
fail("append(char[], 1, 3) expected IndexOutOfBoundsException");
} catch (final IndexOutOfBoundsException e) {
// expected
}
try {
sb.append(new char[] {'b', 'a', 'r'}, -1, 3);
fail("append(char[], -1, 3) expected IndexOutOfBoundsException");
} catch (final IndexOutOfBoundsException e) {
// expected
}
try {
sb.append(new char[] {'b', 'a', 'r'}, 4, 0);
fail("append(char[], 4, 0) expected IndexOutOfBoundsException");
} catch (final IndexOutOfBoundsException e) {
// expected
}
sb.append(new char[] {'b', 'a', 'r'}, 3, 0);
assertThat(sb.toString()).isEqualTo("foo");
sb.append(new char[] {'a', 'b', 'c', 'b', 'a', 'r', 'd', 'e', 'f'}, 3, 3);
assertThat(sb.toString()).isEqualTo("foobar");
}
@Test
public void testAppend_FormattedString() {
TextStringBuilder sb;
sb = new TextStringBuilder();
sb.append("Hi", (Object[]) null);
assertThat(sb.toString()).isEqualTo("Hi");
sb = new TextStringBuilder();
sb.append("Hi", "Alice");
assertThat(sb.toString()).isEqualTo("Hi");
sb = new TextStringBuilder();
sb.append("Hi %s", "Alice");
assertThat(sb.toString()).isEqualTo("Hi Alice");
sb = new TextStringBuilder();
sb.append("Hi %s %,d", "Alice", 5000);
// group separator depends on system locale
final char groupingSeparator = DecimalFormatSymbols.getInstance().getGroupingSeparator();
final String expected = "Hi Alice 5" + groupingSeparator + "000";
assertThat(sb.toString()).isEqualTo(expected);
}
@Test
public void testAppend_Object() {
final TextStringBuilder sb = new TextStringBuilder();
sb.appendNull();
assertThat(sb.toString()).isEqualTo("");
sb.append((Object) null);
assertThat(sb.toString()).isEqualTo("");
sb.append(FOO);
assertThat(sb.toString()).isEqualTo("foo");
sb.append((StringBuffer) null);
assertThat(sb.toString()).isEqualTo("foo");
sb.append(new StringBuffer("baz"));
assertThat(sb.toString()).isEqualTo("foobaz");
sb.append(new TextStringBuilder("yes"));
assertThat(sb.toString()).isEqualTo("foobazyes");
sb.append((CharSequence) "Seq");
assertThat(sb.toString()).isEqualTo("foobazyesSeq");
sb.append(new StringBuilder("bld")); // Check it supports StringBuilder
assertThat(sb.toString()).isEqualTo("foobazyesSeqbld");
}
@Test
public void testAppend_PrimitiveNumber() {
final TextStringBuilder sb = new TextStringBuilder();
sb.append(0);
assertThat(sb.toString()).isEqualTo("0");
sb.append(1L);
assertThat(sb.toString()).isEqualTo("01");
sb.append(2.3f);
assertThat(sb.toString()).isEqualTo("012.3");
sb.append(4.5d);
assertThat(sb.toString()).isEqualTo("012.34.5");
}
@Test
public void testAppend_String() {
TextStringBuilder sb = new TextStringBuilder();
sb.setNullText("NULL").append((String) null);
assertThat(sb.toString()).isEqualTo("NULL");
sb = new TextStringBuilder();
sb.append("foo");
assertThat(sb.toString()).isEqualTo("foo");
sb.append("");
assertThat(sb.toString()).isEqualTo("foo");
sb.append("bar");
assertThat(sb.toString()).isEqualTo("foobar");
}
@Test
public void testAppend_String_int_int() {
TextStringBuilder sb = new TextStringBuilder();
sb.setNullText("NULL").append((String) null, 0, 1);
assertThat(sb.toString()).isEqualTo("NULL");
sb = new TextStringBuilder();
sb.append("foo", 0, 3);
assertThat(sb.toString()).isEqualTo("foo");
try {
sb.append("bar", -1, 1);
fail("append(char[], -1,) expected IndexOutOfBoundsException");
} catch (final IndexOutOfBoundsException e) {
// expected
}
try {
sb.append("bar", 3, 1);
fail("append(char[], 3,) expected IndexOutOfBoundsException");
} catch (final IndexOutOfBoundsException e) {
// expected
}
try {
sb.append("bar", 1, -1);
fail("append(char[],, -1) expected IndexOutOfBoundsException");
} catch (final IndexOutOfBoundsException e) {
// expected
}
try {
sb.append("bar", 1, 3);
fail("append(char[], 1, 3) expected IndexOutOfBoundsException");
} catch (final IndexOutOfBoundsException e) {
// expected
}
try {
sb.append("bar", -1, 3);
fail("append(char[], -1, 3) expected IndexOutOfBoundsException");
} catch (final IndexOutOfBoundsException e) {
// expected
}
try {
sb.append("bar", 4, 0);
fail("append(char[], 4, 0) expected IndexOutOfBoundsException");
} catch (final IndexOutOfBoundsException e) {
// expected
}
try {
sb.append((CharSequence) "bar", 2, 1);
fail("append(char[], 2, 1) expected IndexOutOfBoundsException");
} catch (final IndexOutOfBoundsException e) {
// expected
}
try {
sb.append((CharSequence) "bar", 2, 2);
fail("append(char[], 2, 2) expected IndexOutOfBoundsException");
} catch (final IndexOutOfBoundsException e) {
// expected
}
try {
sb.append((CharSequence) "bar", 2, -2);
fail("append(char[], 2, -2) expected IndexOutOfBoundsException");
} catch (final IndexOutOfBoundsException e) {
// expected
}
try {
sb.append((CharSequence) "bar", 2, 0);
fail("append(char[], 2, 0) expected IndexOutOfBoundsException");
} catch (final IndexOutOfBoundsException e) {
// expected
}
sb.append("bar", 3, 0);
assertThat(sb.toString()).isEqualTo("foo");
sb.append("abcbardef", 3, 3);
assertThat(sb.toString()).isEqualTo("foobar");
sb.append((CharSequence) "abcbardef", 4, 7);
assertThat(sb.toString()).isEqualTo("foobarard");
}
@Test
public void testAppend_StringBuffer() {
TextStringBuilder sb = new TextStringBuilder();
sb.setNullText("NULL").append((StringBuffer) null);
assertThat(sb.toString()).isEqualTo("NULL");
sb = new TextStringBuilder();
sb.append(new StringBuffer("foo"));
assertThat(sb.toString()).isEqualTo("foo");
sb.append(new StringBuffer(""));
assertThat(sb.toString()).isEqualTo("foo");
sb.append(new StringBuffer("bar"));
assertThat(sb.toString()).isEqualTo("foobar");
}
@Test
public void testAppend_StringBuffer_int_int() {
TextStringBuilder sb = new TextStringBuilder();
sb.setNullText("NULL").append((StringBuffer) null, 0, 1);
assertThat(sb.toString()).isEqualTo("NULL");
sb = new TextStringBuilder();
sb.append(new StringBuffer("foo"), 0, 3);
assertThat(sb.toString()).isEqualTo("foo");
try {
sb.append(new StringBuffer("bar"), -1, 1);
fail("append(char[], -1,) expected IndexOutOfBoundsException");
} catch (final IndexOutOfBoundsException e) {
// expected
}
try {
sb.append(new StringBuffer("bar"), 3, 1);
fail("append(char[], 3,) expected IndexOutOfBoundsException");
} catch (final IndexOutOfBoundsException e) {
// expected
}
try {
sb.append(new StringBuffer("bar"), 1, -1);
fail("append(char[],, -1) expected IndexOutOfBoundsException");
} catch (final IndexOutOfBoundsException e) {
// expected
}
try {
sb.append(new StringBuffer("bar"), 1, 3);
fail("append(char[], 1, 3) expected IndexOutOfBoundsException");
} catch (final IndexOutOfBoundsException e) {
// expected
}
try {
sb.append(new StringBuffer("bar"), -1, 3);
fail("append(char[], -1, 3) expected IndexOutOfBoundsException");
} catch (final IndexOutOfBoundsException e) {
// expected
}
try {
sb.append(new StringBuffer("bar"), 4, 0);
fail("append(char[], 4, 0) expected IndexOutOfBoundsException");
} catch (final IndexOutOfBoundsException e) {
// expected
}
sb.append(new StringBuffer("bar"), 3, 0);
assertThat(sb.toString()).isEqualTo("foo");
sb.append(new StringBuffer("abcbardef"), 3, 3);
assertThat(sb.toString()).isEqualTo("foobar");
}
@Test
public void testAppend_StringBuilder() {
TextStringBuilder sb = new TextStringBuilder();
sb.setNullText("NULL").append((String) null);
assertThat(sb.toString()).isEqualTo("NULL");
sb = new TextStringBuilder();
sb.append(new StringBuilder("foo"));
assertThat(sb.toString()).isEqualTo("foo");
sb.append(new StringBuilder(""));
assertThat(sb.toString()).isEqualTo("foo");
sb.append(new StringBuilder("bar"));
assertThat(sb.toString()).isEqualTo("foobar");
}
@Test
public void testAppend_StringBuilder_int_int() {
TextStringBuilder sb = new TextStringBuilder();
sb.setNullText("NULL").append((String) null, 0, 1);
assertThat(sb.toString()).isEqualTo("NULL");
sb = new TextStringBuilder();
sb.append(new StringBuilder("foo"), 0, 3);
assertThat(sb.toString()).isEqualTo("foo");
try {
sb.append(new StringBuilder("bar"), -1, 1);
fail("append(StringBuilder, -1,) expected IndexOutOfBoundsException");
} catch (final IndexOutOfBoundsException e) {
// expected
}
try {
sb.append(new StringBuilder("bar"), 3, 1);
fail("append(StringBuilder, 3,) expected IndexOutOfBoundsException");
} catch (final IndexOutOfBoundsException e) {
// expected
}
try {
sb.append(new StringBuilder("bar"), 1, -1);
fail("append(StringBuilder,, -1) expected IndexOutOfBoundsException");
} catch (final IndexOutOfBoundsException e) {
// expected
}
try {
sb.append(new StringBuilder("bar"), 1, 3);
fail("append(StringBuilder, 1, 3) expected IndexOutOfBoundsException");
} catch (final IndexOutOfBoundsException e) {
// expected
}
try {
sb.append(new StringBuilder("bar"), -1, 3);
fail("append(StringBuilder, -1, 3) expected IndexOutOfBoundsException");
} catch (final IndexOutOfBoundsException e) {
// expected
}
try {
sb.append(new StringBuilder("bar"), 4, 0);
fail("append(StringBuilder, 4, 0) expected IndexOutOfBoundsException");
} catch (final IndexOutOfBoundsException e) {
// expected
}
sb.append(new StringBuilder("bar"), 3, 0);
assertThat(sb.toString()).isEqualTo("foo");
sb.append(new StringBuilder("abcbardef"), 3, 3);
assertThat(sb.toString()).isEqualTo("foobar");
sb.append(new StringBuilder("abcbardef"), 4, 3);
assertThat(sb.toString()).isEqualTo("foobarard");
}
@Test
public void testAppend_TextStringBuilder() {
TextStringBuilder sb = new TextStringBuilder();
sb.setNullText("NULL").append((TextStringBuilder) null);
assertThat(sb.toString()).isEqualTo("NULL");
sb = new TextStringBuilder();
sb.append(new TextStringBuilder("foo"));
assertThat(sb.toString()).isEqualTo("foo");
sb.append(new TextStringBuilder(""));
assertThat(sb.toString()).isEqualTo("foo");
sb.append(new TextStringBuilder("bar"));
assertThat(sb.toString()).isEqualTo("foobar");
}
@Test
public void testAppend_TextStringBuilder_int_int() {
TextStringBuilder sb = new TextStringBuilder();
sb.setNullText("NULL").append((TextStringBuilder) null, 0, 1);
assertThat(sb.toString()).isEqualTo("NULL");
sb = new TextStringBuilder();
sb.append(new TextStringBuilder("foo"), 0, 3);
assertThat(sb.toString()).isEqualTo("foo");
try {
sb.append(new TextStringBuilder("bar"), -1, 1);
fail("append(char[], -1,) expected IndexOutOfBoundsException");
} catch (final IndexOutOfBoundsException e) {
// expected
}
try {
sb.append(new TextStringBuilder("bar"), 3, 1);
fail("append(char[], 3,) expected IndexOutOfBoundsException");
} catch (final IndexOutOfBoundsException e) {
// expected
}
try {
sb.append(new TextStringBuilder("bar"), 1, -1);
fail("append(char[],, -1) expected IndexOutOfBoundsException");
} catch (final IndexOutOfBoundsException e) {
// expected
}
try {
sb.append(new TextStringBuilder("bar"), 1, 3);
fail("append(char[], 1, 3) expected IndexOutOfBoundsException");
} catch (final IndexOutOfBoundsException e) {
// expected
}
try {
sb.append(new TextStringBuilder("bar"), -1, 3);
fail("append(char[], -1, 3) expected IndexOutOfBoundsException");
} catch (final IndexOutOfBoundsException e) {
// expected
}
try {
sb.append(new TextStringBuilder("bar"), 4, 0);
fail("append(char[], 4, 0) expected IndexOutOfBoundsException");
} catch (final IndexOutOfBoundsException e) {
// expected
}
sb.append(new TextStringBuilder("bar"), 3, 0);
assertThat(sb.toString()).isEqualTo("foo");
sb.append(new TextStringBuilder("abcbardef"), 3, 3);
assertThat(sb.toString()).isEqualTo("foobar");
}
@Test
public void testAppendAll_Array() {
final TextStringBuilder sb = new TextStringBuilder();
sb.appendAll((Object[]) null);
assertThat(sb.toString()).isEqualTo("");
sb.clear();
sb.appendAll();
assertThat(sb.toString()).isEqualTo("");
sb.clear();
sb.appendAll("foo", "bar", "baz");
assertThat(sb.toString()).isEqualTo("foobarbaz");
sb.clear();
sb.appendAll("foo", "bar", "baz");
assertThat(sb.toString()).isEqualTo("foobarbaz");
}
@Test
public void testAppendAll_Collection() {
final TextStringBuilder sb = new TextStringBuilder();
sb.appendAll((Collection<?>) null);
assertThat(sb.toString()).isEqualTo("");
sb.clear();
sb.appendAll(Collections.EMPTY_LIST);
assertThat(sb.toString()).isEqualTo("");
sb.clear();
sb.appendAll(Arrays.asList("foo", "bar", "baz"));
assertThat(sb.toString()).isEqualTo("foobarbaz");
}
@Test
public void testAppendAll_Iterator() {
final TextStringBuilder sb = new TextStringBuilder();
sb.appendAll((Iterator<?>) null);
assertThat(sb.toString()).isEqualTo("");
sb.clear();
sb.appendAll(Collections.EMPTY_LIST.iterator());
assertThat(sb.toString()).isEqualTo("");
sb.clear();
sb.appendAll(Arrays.asList("foo", "bar", "baz").iterator());
assertThat(sb.toString()).isEqualTo("foobarbaz");
}
@Test
public void testAppendFixedWidthPadLeft() {
final TextStringBuilder sb = new TextStringBuilder();
sb.appendFixedWidthPadLeft("foo", -1, '-');
assertThat(sb.toString()).isEqualTo("");
sb.clear();
sb.appendFixedWidthPadLeft("foo", 0, '-');
assertThat(sb.toString()).isEqualTo("");
sb.clear();
sb.appendFixedWidthPadLeft("foo", 1, '-');
assertThat(sb.toString()).isEqualTo("o");
sb.clear();
sb.appendFixedWidthPadLeft("foo", 2, '-');
assertThat(sb.toString()).isEqualTo("oo");
sb.clear();
sb.appendFixedWidthPadLeft("foo", 3, '-');
assertThat(sb.toString()).isEqualTo("foo");
sb.clear();
sb.appendFixedWidthPadLeft("foo", 4, '-');
assertThat(sb.toString()).isEqualTo("-foo");
sb.clear();
sb.appendFixedWidthPadLeft("foo", 10, '-');
assertThat(sb.length()).isEqualTo(10);
// 1234567890
assertThat(sb.toString()).isEqualTo("-------foo");
sb.clear();
sb.setNullText("null");
sb.appendFixedWidthPadLeft(null, 5, '-');
assertThat(sb.toString()).isEqualTo("-null");
}
@Test
public void testAppendFixedWidthPadLeft_int() {
final TextStringBuilder sb = new TextStringBuilder();
sb.appendFixedWidthPadLeft(123, -1, '-');
assertThat(sb.toString()).isEqualTo("");
sb.clear();
sb.appendFixedWidthPadLeft(123, 0, '-');
assertThat(sb.toString()).isEqualTo("");
sb.clear();
sb.appendFixedWidthPadLeft(123, 1, '-');
assertThat(sb.toString()).isEqualTo("3");
sb.clear();
sb.appendFixedWidthPadLeft(123, 2, '-');
assertThat(sb.toString()).isEqualTo("23");
sb.clear();
sb.appendFixedWidthPadLeft(123, 3, '-');
assertThat(sb.toString()).isEqualTo("123");
sb.clear();
sb.appendFixedWidthPadLeft(123, 4, '-');
assertThat(sb.toString()).isEqualTo("-123");
sb.clear();
sb.appendFixedWidthPadLeft(123, 10, '-');
assertThat(sb.length()).isEqualTo(10);
// 1234567890
assertThat(sb.toString()).isEqualTo("-------123");
}
@Test
public void testAppendFixedWidthPadRight() {
final TextStringBuilder sb = new TextStringBuilder();
sb.appendFixedWidthPadRight("foo", -1, '-');
assertThat(sb.toString()).isEqualTo("");
sb.clear();
sb.appendFixedWidthPadRight("foo", 0, '-');
assertThat(sb.toString()).isEqualTo("");
sb.clear();
sb.appendFixedWidthPadRight("foo", 1, '-');
assertThat(sb.toString()).isEqualTo("f");
sb.clear();
sb.appendFixedWidthPadRight("foo", 2, '-');
assertThat(sb.toString()).isEqualTo("fo");
sb.clear();
sb.appendFixedWidthPadRight("foo", 3, '-');
assertThat(sb.toString()).isEqualTo("foo");
sb.clear();
sb.appendFixedWidthPadRight("foo", 4, '-');
assertThat(sb.toString()).isEqualTo("foo-");
sb.clear();
sb.appendFixedWidthPadRight("foo", 10, '-');
assertThat(sb.length()).isEqualTo(10);
// 1234567890
assertThat(sb.toString()).isEqualTo("foo-------");
sb.clear();
sb.setNullText("null");
sb.appendFixedWidthPadRight(null, 5, '-');
assertThat(sb.toString()).isEqualTo("null-");
}
@Test
public void testAppendFixedWidthPadRight_int() {
final TextStringBuilder sb = new TextStringBuilder();
sb.appendFixedWidthPadRight(123, -1, '-');
assertThat(sb.toString()).isEqualTo("");
sb.clear();
sb.appendFixedWidthPadRight(123, 0, '-');
assertThat(sb.toString()).isEqualTo("");
sb.clear();
sb.appendFixedWidthPadRight(123, 1, '-');
assertThat(sb.toString()).isEqualTo("1");
sb.clear();
sb.appendFixedWidthPadRight(123, 2, '-');
assertThat(sb.toString()).isEqualTo("12");
sb.clear();
sb.appendFixedWidthPadRight(123, 3, '-');
assertThat(sb.toString()).isEqualTo("123");
sb.clear();
sb.appendFixedWidthPadRight(123, 4, '-');
assertThat(sb.toString()).isEqualTo("123-");
sb.clear();
sb.appendFixedWidthPadRight(123, 10, '-');
assertThat(sb.length()).isEqualTo(10);
// 1234567890
assertThat(sb.toString()).isEqualTo("123-------");
}
@Test
public void testAppendln_Boolean() {
final TextStringBuilder sb = new TextStringBuilder();
sb.appendln(true);
assertThat(sb.toString()).isEqualTo("true" + SEP);
sb.clear();
sb.appendln(false);
assertThat(sb.toString()).isEqualTo("false" + SEP);
}
@Test
public void testAppendln_CharArray() {
final TextStringBuilder sb = spy(new TextStringBuilder());
final char[] input = "foo".toCharArray();
sb.appendln(input);
assertThat(sb.toString()).isEqualTo("foo" + SEP);
verify(sb, times(1)).append(input);
verify(sb, times(1)).appendNewLine();
}
@Test
public void testAppendln_CharArray_int_int() {
final TextStringBuilder sb = spy(new TextStringBuilder());
final char[] input = "foo".toCharArray();
sb.appendln(input, 0, 3);
assertThat(sb.toString()).isEqualTo("foo" + SEP);
verify(sb, times(1)).append(input, 0, 3);
verify(sb, times(1)).appendNewLine();
}
@Test
public void testAppendln_FormattedString() {
final TextStringBuilder sb = spy(new TextStringBuilder());
sb.appendln("Hello %s", "Alice");
assertThat(sb.toString()).isEqualTo("Hello Alice" + SEP);
verify(sb, times(2)).append(anyString()); // appendNewLine() calls append(String)
verify(sb, times(1)).appendNewLine();
}
@Test
public void testAppendln_Object() {
final TextStringBuilder sb = new TextStringBuilder();
sb.appendln((Object) null);
assertThat(sb.toString()).isEqualTo("" + SEP);
sb.appendln(FOO);
assertThat(sb.toString()).isEqualTo(SEP + "foo" + SEP);
sb.appendln(Integer.valueOf(6));
assertThat(sb.toString()).isEqualTo(SEP + "foo" + SEP + "6" + SEP);
}
@Test
public void testAppendln_PrimitiveNumber() {
final TextStringBuilder sb = new TextStringBuilder();
sb.appendln(0);
assertThat(sb.toString()).isEqualTo("0" + SEP);
sb.clear();
sb.appendln(1L);
assertThat(sb.toString()).isEqualTo("1" + SEP);
sb.clear();
sb.appendln(2.3f);
assertThat(sb.toString()).isEqualTo("2.3" + SEP);
sb.clear();
sb.appendln(4.5d);
assertThat(sb.toString()).isEqualTo("4.5" + SEP);
}
@Test
public void testAppendln_String() {
final TextStringBuilder sb = spy(new TextStringBuilder());
sb.appendln("foo");
assertThat(sb.toString()).isEqualTo("foo" + SEP);
verify(sb, times(2)).append(anyString()); // appendNewLine() calls append(String)
verify(sb, times(1)).appendNewLine();
}
@Test
public void testAppendln_String_int_int() {
final TextStringBuilder sb = spy(new TextStringBuilder());
sb.appendln("foo", 0, 3);
assertThat(sb.toString()).isEqualTo("foo" + SEP);
verify(sb, times(2)).append(anyString(), anyInt(), anyInt()); // appendNewLine() calls append(String)
verify(sb, times(1)).appendNewLine();
}
@Test
public void testAppendln_StringBuffer() {
final TextStringBuilder sb = spy(new TextStringBuilder());
sb.appendln(new StringBuffer("foo"));
assertThat(sb.toString()).isEqualTo("foo" + SEP);
verify(sb, times(1)).append(any(StringBuffer.class));
verify(sb, times(1)).appendNewLine();
}
@Test
public void testAppendln_StringBuffer_int_int() {
final TextStringBuilder sb = spy(new TextStringBuilder());
sb.appendln(new StringBuffer("foo"), 0, 3);
assertThat(sb.toString()).isEqualTo("foo" + SEP);
verify(sb, times(1)).append(any(StringBuffer.class), anyInt(), anyInt());
verify(sb, times(1)).appendNewLine();
}
@Test
public void testAppendln_StringBuilder() {
final TextStringBuilder sb = spy(new TextStringBuilder());
sb.appendln(new StringBuilder("foo"));
assertThat(sb.toString()).isEqualTo("foo" + SEP);
verify(sb, times(1)).append(any(StringBuilder.class));
verify(sb, times(1)).appendNewLine();
}
@Test
public void testAppendln_StringBuilder_int_int() {
final TextStringBuilder sb = spy(new TextStringBuilder());
sb.appendln(new StringBuilder("foo"), 0, 3);
assertThat(sb.toString()).isEqualTo("foo" + SEP);
verify(sb, times(1)).append(any(StringBuilder.class), anyInt(), anyInt());
verify(sb, times(1)).appendNewLine();
}
@Test
public void testAppendln_TextStringBuilder() {
final TextStringBuilder sb = spy(new TextStringBuilder());
sb.appendln(new TextStringBuilder("foo"));
assertThat(sb.toString()).isEqualTo("foo" + SEP);
verify(sb, times(1)).append(any(TextStringBuilder.class));
verify(sb, times(1)).appendNewLine();
}
@Test
public void testAppendln_TextStringBuilder_int_int() {
final TextStringBuilder sb = spy(new TextStringBuilder());
sb.appendln(new TextStringBuilder("foo"), 0, 3);
assertThat(sb.toString()).isEqualTo("foo" + SEP);
verify(sb, times(1)).append(any(TextStringBuilder.class), anyInt(), anyInt());
verify(sb, times(1)).appendNewLine();
}
@Test
public void testAppendNewLine() {
TextStringBuilder sb = new TextStringBuilder("---");
sb.appendNewLine().append("+++");
assertThat(sb.toString()).isEqualTo("---" + SEP + "+++");
sb = new TextStringBuilder("---");
sb.setNewLineText("#").appendNewLine().setNewLineText(null).appendNewLine();
assertThat(sb.toString()).isEqualTo("---#" + SEP);
}
@Test
public void testAppendPadding() {
final TextStringBuilder sb = new TextStringBuilder();
sb.append("foo");
assertThat(sb.toString()).isEqualTo("foo");
sb.appendPadding(-1, '-');
assertThat(sb.toString()).isEqualTo("foo");
sb.appendPadding(0, '-');
assertThat(sb.toString()).isEqualTo("foo");
sb.appendPadding(1, '-');
assertThat(sb.toString()).isEqualTo("foo-");
sb.appendPadding(16, '-');
assertThat(sb.length()).isEqualTo(20);
// 12345678901234567890
assertThat(sb.toString()).isEqualTo("foo-----------------");
}
@Test
public void testAppendSeparator_char() {
final TextStringBuilder sb = new TextStringBuilder();
sb.appendSeparator(','); // no effect
assertThat(sb.toString()).isEqualTo("");
sb.append("foo");
assertThat(sb.toString()).isEqualTo("foo");
sb.appendSeparator(',');
assertThat(sb.toString()).isEqualTo("foo,");
}
@Test
public void testAppendSeparator_char_char() {
final TextStringBuilder sb = new TextStringBuilder();
final char startSeparator = ':';
final char standardSeparator = ',';
final String foo = "foo";
sb.appendSeparator(standardSeparator, startSeparator); // no effect
assertThat(sb.toString()).isEqualTo(String.valueOf(startSeparator));
sb.append(foo);
assertThat(sb.toString()).isEqualTo(String.valueOf(startSeparator) + foo);
sb.appendSeparator(standardSeparator, startSeparator);
assertThat(sb.toString()).isEqualTo(String.valueOf(startSeparator) + foo + standardSeparator);
}
@Test
public void testAppendSeparator_char_int() {
final TextStringBuilder sb = new TextStringBuilder();
sb.appendSeparator(',', 0); // no effect
assertThat(sb.toString()).isEqualTo("");
sb.append("foo");
assertThat(sb.toString()).isEqualTo("foo");
sb.appendSeparator(',', 1);
assertThat(sb.toString()).isEqualTo("foo,");
sb.appendSeparator(',', -1); // no effect
assertThat(sb.toString()).isEqualTo("foo,");
}
@Test
public void testAppendSeparator_String() {
final TextStringBuilder sb = new TextStringBuilder();
sb.appendSeparator(","); // no effect
assertThat(sb.toString()).isEqualTo("");
sb.append("foo");
assertThat(sb.toString()).isEqualTo("foo");
sb.appendSeparator(",");
assertThat(sb.toString()).isEqualTo("foo,");
}
@Test
public void testAppendSeparator_String_int() {
final TextStringBuilder sb = new TextStringBuilder();
sb.appendSeparator(null, -1); // no effect
assertThat(sb.toString()).isEqualTo("");
sb.appendSeparator(null, 0); // no effect
assertThat(sb.toString()).isEqualTo("");
sb.appendSeparator(null, 1); // no effect
assertThat(sb.toString()).isEqualTo("");
sb.appendSeparator(",", -1); // no effect
assertThat(sb.toString()).isEqualTo("");
sb.appendSeparator(",", 0); // no effect
assertThat(sb.toString()).isEqualTo("");
sb.append("foo");
assertThat(sb.toString()).isEqualTo("foo");
sb.appendSeparator(",", 1);
assertThat(sb.toString()).isEqualTo("foo,");
sb.appendSeparator(",", -1); // no effect
assertThat(sb.toString()).isEqualTo("foo,");
}
@Test
public void testAppendSeparator_String_String() {
final TextStringBuilder sb = new TextStringBuilder();
final String startSeparator = "order by ";
final String standardSeparator = ",";
final String foo = "foo";
sb.appendSeparator(null, null);
assertThat(sb.toString()).isEqualTo("");
sb.appendSeparator(standardSeparator, null);
assertThat(sb.toString()).isEqualTo("");
sb.appendSeparator(standardSeparator, startSeparator);
assertThat(sb.toString()).isEqualTo(startSeparator);
sb.appendSeparator(null, null);
assertThat(sb.toString()).isEqualTo(startSeparator);
sb.appendSeparator(null, startSeparator);
assertThat(sb.toString()).isEqualTo(startSeparator);
sb.append(foo);
assertThat(sb.toString()).isEqualTo(startSeparator + foo);
sb.appendSeparator(standardSeparator, startSeparator);
assertThat(sb.toString()).isEqualTo(startSeparator + foo + standardSeparator);
}
@Test
public void testAppendWithNullText() {
final TextStringBuilder sb = new TextStringBuilder();
sb.setNullText("NULL");
assertThat(sb.toString()).isEqualTo("");
sb.appendNull();
assertThat(sb.toString()).isEqualTo("NULL");
sb.append((Object) null);
assertThat(sb.toString()).isEqualTo("NULLNULL");
sb.append(FOO);
assertThat(sb.toString()).isEqualTo("NULLNULLfoo");
sb.append((String) null);
assertThat(sb.toString()).isEqualTo("NULLNULLfooNULL");
sb.append("");
assertThat(sb.toString()).isEqualTo("NULLNULLfooNULL");
sb.append("bar");
assertThat(sb.toString()).isEqualTo("NULLNULLfooNULLbar");
sb.append((StringBuffer) null);
assertThat(sb.toString()).isEqualTo("NULLNULLfooNULLbarNULL");
sb.append(new StringBuffer("baz"));
assertThat(sb.toString()).isEqualTo("NULLNULLfooNULLbarNULLbaz");
}
@Test
public void testAppendWithSeparators_Array() {
final TextStringBuilder sb = new TextStringBuilder();
sb.appendWithSeparators((Object[]) null, ",");
assertThat(sb.toString()).isEqualTo("");
sb.clear();
sb.appendWithSeparators(new Object[0], ",");
assertThat(sb.toString()).isEqualTo("");
sb.clear();
sb.appendWithSeparators(new Object[] {"foo", "bar", "baz"}, ",");
assertThat(sb.toString()).isEqualTo("foo,bar,baz");
sb.clear();
sb.appendWithSeparators(new Object[] {"foo", "bar", "baz"}, null);
assertThat(sb.toString()).isEqualTo("foobarbaz");
sb.clear();
sb.appendWithSeparators(new Object[] {"foo", null, "baz"}, ",");
assertThat(sb.toString()).isEqualTo("foo,,baz");
}
@Test
public void testAppendWithSeparators_Collection() {
final TextStringBuilder sb = new TextStringBuilder();
sb.appendWithSeparators((Collection<?>) null, ",");
assertThat(sb.toString()).isEqualTo("");
sb.clear();
sb.appendWithSeparators(Collections.EMPTY_LIST, ",");
assertThat(sb.toString()).isEqualTo("");
sb.clear();
sb.appendWithSeparators(Arrays.asList("foo", "bar", "baz"), ",");
assertThat(sb.toString()).isEqualTo("foo,bar,baz");
sb.clear();
sb.appendWithSeparators(Arrays.asList("foo", "bar", "baz"), null);
assertThat(sb.toString()).isEqualTo("foobarbaz");
sb.clear();
sb.appendWithSeparators(Arrays.asList("foo", null, "baz"), ",");
assertThat(sb.toString()).isEqualTo("foo,,baz");
}
@Test
public void testAppendWithSeparators_Iterator() {
final TextStringBuilder sb = new TextStringBuilder();
sb.appendWithSeparators((Iterator<?>) null, ",");
assertThat(sb.toString()).isEqualTo("");
sb.clear();
sb.appendWithSeparators(Collections.EMPTY_LIST.iterator(), ",");
assertThat(sb.toString()).isEqualTo("");
sb.clear();
sb.appendWithSeparators(Arrays.asList("foo", "bar", "baz").iterator(), ",");
assertThat(sb.toString()).isEqualTo("foo,bar,baz");
sb.clear();
sb.appendWithSeparators(Arrays.asList("foo", "bar", "baz").iterator(), null);
assertThat(sb.toString()).isEqualTo("foobarbaz");
sb.clear();
sb.appendWithSeparators(Arrays.asList("foo", null, "baz").iterator(), ",");
assertThat(sb.toString()).isEqualTo("foo,,baz");
}
@Test
public void testAppendWithSeparatorsWithNullText() {
final TextStringBuilder sb = new TextStringBuilder();
sb.setNullText("null");
sb.appendWithSeparators(new Object[] {"foo", null, "baz"}, ",");
assertThat(sb.toString()).isEqualTo("foo,null,baz");
sb.clear();
sb.appendWithSeparators(Arrays.asList("foo", null, "baz"), ",");
assertThat(sb.toString()).isEqualTo("foo,null,baz");
}
@Test
public void testInsert() {
final TextStringBuilder sb = new TextStringBuilder();
sb.append("barbaz");
assertThat(sb.toString()).isEqualTo("barbaz");
assertThrows(IndexOutOfBoundsException.class, () -> sb.insert(-1, FOO));
assertThrows(IndexOutOfBoundsException.class, () -> sb.insert(7, FOO));
sb.insert(0, (Object) null);
assertThat(sb.toString()).isEqualTo("barbaz");
sb.insert(0, FOO);
assertThat(sb.toString()).isEqualTo("foobarbaz");
sb.clear();
sb.append("barbaz");
assertThat(sb.toString()).isEqualTo("barbaz");
assertThrows(IndexOutOfBoundsException.class, () -> sb.insert(-1, "foo"));
assertThrows(IndexOutOfBoundsException.class, () -> sb.insert(7, "foo"));
sb.insert(0, (String) null);
assertThat(sb.toString()).isEqualTo("barbaz");
sb.insert(0, "foo");
assertThat(sb.toString()).isEqualTo("foobarbaz");
sb.clear();
sb.append("barbaz");
assertThat(sb.toString()).isEqualTo("barbaz");
assertThrows(IndexOutOfBoundsException.class, () -> sb.insert(-1, new char[] {'f', 'o', 'o'}));
assertThrows(IndexOutOfBoundsException.class, () -> sb.insert(7, new char[] {'f', 'o', 'o'}));
sb.insert(0, (char[]) null);
assertThat(sb.toString()).isEqualTo("barbaz");
sb.insert(0, ArrayUtils.EMPTY_CHAR_ARRAY);
assertThat(sb.toString()).isEqualTo("barbaz");
sb.insert(0, new char[] {'f', 'o', 'o'});
assertThat(sb.toString()).isEqualTo("foobarbaz");
sb.clear();
sb.append("barbaz");
assertThat(sb.toString()).isEqualTo("barbaz");
assertThrows(IndexOutOfBoundsException.class,
() -> sb.insert(-1, new char[] {'a', 'b', 'c', 'f', 'o', 'o', 'd', 'e', 'f'}, 3, 3));
assertThrows(IndexOutOfBoundsException.class,
() -> sb.insert(7, new char[] {'a', 'b', 'c', 'f', 'o', 'o', 'd', 'e', 'f'}, 3, 3));
sb.insert(0, (char[]) null, 0, 0);
assertThat(sb.toString()).isEqualTo("barbaz");
sb.insert(0, ArrayUtils.EMPTY_CHAR_ARRAY, 0, 0);
assertThat(sb.toString()).isEqualTo("barbaz");
assertThrows(IndexOutOfBoundsException.class,
() -> sb.insert(0, new char[] {'a', 'b', 'c', 'f', 'o', 'o', 'd', 'e', 'f'}, -1, 3));
assertThrows(IndexOutOfBoundsException.class,
() -> sb.insert(0, new char[] {'a', 'b', 'c', 'f', 'o', 'o', 'd', 'e', 'f'}, 10, 3));
assertThrows(IndexOutOfBoundsException.class,
() -> sb.insert(0, new char[] {'a', 'b', 'c', 'f', 'o', 'o', 'd', 'e', 'f'}, 0, -1));
assertThrows(IndexOutOfBoundsException.class,
() -> sb.insert(0, new char[] {'a', 'b', 'c', 'f', 'o', 'o', 'd', 'e', 'f'}, 0, 10));
sb.insert(0, new char[] {'a', 'b', 'c', 'f', 'o', 'o', 'd', 'e', 'f'}, 0, 0);
assertThat(sb.toString()).isEqualTo("barbaz");
sb.insert(0, new char[] {'a', 'b', 'c', 'f', 'o', 'o', 'd', 'e', 'f'}, 3, 3);
assertThat(sb.toString()).isEqualTo("foobarbaz");
sb.clear();
sb.append("barbaz");
assertThat(sb.toString()).isEqualTo("barbaz");
assertThrows(IndexOutOfBoundsException.class, () -> sb.insert(-1, true));
assertThrows(IndexOutOfBoundsException.class, () -> sb.insert(7, true));
sb.insert(0, true);
assertThat(sb.toString()).isEqualTo("truebarbaz");
sb.insert(0, false);
assertThat(sb.toString()).isEqualTo("falsetruebarbaz");
sb.clear();
sb.append("barbaz");
assertThat(sb.toString()).isEqualTo("barbaz");
assertThrows(IndexOutOfBoundsException.class, () -> sb.insert(-1, '!'));
assertThrows(IndexOutOfBoundsException.class, () -> sb.insert(7, '!'));
sb.insert(0, '!');
assertThat(sb.toString()).isEqualTo("!barbaz");
sb.clear();
sb.append("barbaz");
assertThat(sb.toString()).isEqualTo("barbaz");
assertThrows(IndexOutOfBoundsException.class, () -> sb.insert(-1, 0));
assertThrows(IndexOutOfBoundsException.class, () -> sb.insert(7, 0));
sb.insert(0, '0');
assertThat(sb.toString()).isEqualTo("0barbaz");
sb.clear();
sb.append("barbaz");
assertThat(sb.toString()).isEqualTo("barbaz");
assertThrows(IndexOutOfBoundsException.class, () -> sb.insert(-1, 1L));
assertThrows(IndexOutOfBoundsException.class, () -> sb.insert(7, 1L));
sb.insert(0, 1L);
assertThat(sb.toString()).isEqualTo("1barbaz");
sb.clear();
sb.append("barbaz");
assertThat(sb.toString()).isEqualTo("barbaz");
assertThrows(IndexOutOfBoundsException.class, () -> sb.insert(-1, 2.3F));
assertThrows(IndexOutOfBoundsException.class, () -> sb.insert(7, 2.3F));
sb.insert(0, 2.3F);
assertThat(sb.toString()).isEqualTo("2.3barbaz");
sb.clear();
sb.append("barbaz");
assertThat(sb.toString()).isEqualTo("barbaz");
assertThrows(IndexOutOfBoundsException.class, () -> sb.insert(-1, 4.5D));
assertThrows(IndexOutOfBoundsException.class, () -> sb.insert(7, 4.5D));
sb.insert(0, 4.5D);
assertThat(sb.toString()).isEqualTo("4.5barbaz");
}
@Test
public void testInsertWithNullText() {
final TextStringBuilder sb = new TextStringBuilder();
sb.setNullText("null");
sb.append("barbaz");
assertThat(sb.toString()).isEqualTo("barbaz");
assertThrows(IndexOutOfBoundsException.class, () -> sb.insert(-1, FOO));
assertThrows(IndexOutOfBoundsException.class, () -> sb.insert(7, FOO));
sb.insert(0, (Object) null);
assertThat(sb.toString()).isEqualTo("nullbarbaz");
sb.insert(0, FOO);
assertThat(sb.toString()).isEqualTo("foonullbarbaz");
sb.clear();
sb.append("barbaz");
assertThat(sb.toString()).isEqualTo("barbaz");
assertThrows(IndexOutOfBoundsException.class, () -> sb.insert(-1, "foo"));
assertThrows(IndexOutOfBoundsException.class, () -> sb.insert(7, "foo"));
sb.insert(0, (String) null);
assertThat(sb.toString()).isEqualTo("nullbarbaz");
sb.insert(0, "foo");
assertThat(sb.toString()).isEqualTo("foonullbarbaz");
sb.insert(0, (char[]) null);
assertThat(sb.toString()).isEqualTo("nullfoonullbarbaz");
sb.insert(0, (char[]) null, 0, 0);
assertThat(sb.toString()).isEqualTo("nullnullfoonullbarbaz");
}
// See: https://issues.apache.org/jira/browse/LANG-299
@Test
public void testLang299() {
final TextStringBuilder sb = new TextStringBuilder(1);
sb.appendFixedWidthPadRight("foo", 1, '-');
assertThat(sb.toString()).isEqualTo("f");
}
}