netty5/common/src/test/java/io/netty/util/internal/AppendableCharSequenceTest.java
Norman Maurer a6e6a9151f
Fix AppendableCharSequence.subSequence(...) where start == end. (#8798)
Motivation:

To conform to the CharSequence interface we need to return an empty CharSequence when start == end index and a subSequence is requested.

Modifications:

- Correctly handle the case where start == end
- Add unit test

Result:

Fix https://github.com/netty/netty/issues/8796.
2019-01-30 09:45:54 +01:00

112 lines
3.3 KiB
Java

/*
* Copyright 2013 The Netty Project
*
* The Netty Project 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 io.netty.util.internal;
import org.junit.Test;
import static org.junit.Assert.*;
public class AppendableCharSequenceTest {
@Test
public void testSimpleAppend() {
testSimpleAppend0(new AppendableCharSequence(128));
}
@Test
public void testAppendString() {
testAppendString0(new AppendableCharSequence(128));
}
@Test
public void testAppendAppendableCharSequence() {
AppendableCharSequence seq = new AppendableCharSequence(128);
String text = "testdata";
AppendableCharSequence seq2 = new AppendableCharSequence(128);
seq2.append(text);
seq.append(seq2);
assertEquals(text, seq.toString());
assertEquals(text.substring(1, text.length() - 2), seq.substring(1, text.length() - 2));
assertEqualsChars(text, seq);
}
@Test
public void testSimpleAppendWithExpand() {
testSimpleAppend0(new AppendableCharSequence(2));
}
@Test
public void testAppendStringWithExpand() {
testAppendString0(new AppendableCharSequence(2));
}
@Test
public void testSubSequence() {
AppendableCharSequence master = new AppendableCharSequence(26);
master.append("abcdefghijlkmonpqrstuvwxyz");
assertEquals("abcdefghij", master.subSequence(0, 10).toString());
}
@Test
public void testEmptySubSequence() {
AppendableCharSequence master = new AppendableCharSequence(26);
master.append("abcdefghijlkmonpqrstuvwxyz");
AppendableCharSequence sub = master.subSequence(0, 0);
assertEquals(0, sub.length());
sub.append('b');
assertEquals('b', sub.charAt(0));
}
private static void testSimpleAppend0(AppendableCharSequence seq) {
String text = "testdata";
for (int i = 0; i < text.length(); i++) {
seq.append(text.charAt(i));
}
assertEquals(text, seq.toString());
assertEquals(text.substring(1, text.length() - 2), seq.substring(1, text.length() - 2));
assertEqualsChars(text, seq);
seq.reset();
assertEquals(0, seq.length());
}
private static void testAppendString0(AppendableCharSequence seq) {
String text = "testdata";
seq.append(text);
assertEquals(text, seq.toString());
assertEquals(text.substring(1, text.length() - 2), seq.substring(1, text.length() - 2));
assertEqualsChars(text, seq);
seq.reset();
assertEquals(0, seq.length());
}
private static void assertEqualsChars(CharSequence seq1, CharSequence seq2) {
assertEquals(seq1.length(), seq2.length());
for (int i = 0; i < seq1.length(); i++) {
assertEquals(seq1.charAt(i), seq2.charAt(i));
}
}
}