TestMergedReader.java
package wstxtest.io;
import java.io.*;
import junit.framework.TestCase;
import com.ctc.wstx.io.MergedReader;
/**
* Unit tests for {@link MergedReader}, specifically verifying
* that skip() returns the correct number of characters skipped.
*/
public class TestMergedReader extends TestCase
{
// Regression test: skip() returned 'amount' (total available) instead
// of 'n' (requested) when skip fits entirely in the buffered segment
public void testSkipReturnValue() throws IOException
{
char[] buf = "ABCDEFGHIJ".toCharArray();
StringReader underlying = new StringReader("xyz");
MergedReader reader = new MergedReader(null, underlying, buf, 0, buf.length);
// Skip 3, buffer has 10 available ��� should return 3, not 10
long skipped = reader.skip(3);
assertEquals("skip() should return the number actually skipped", 3L, skipped);
// After skipping 3, reading should yield 'D' (the 4th char)
assertEquals('D', (char) reader.read());
reader.close();
}
public void testSkipExactlyAvailable() throws IOException
{
char[] buf = "ABCDE".toCharArray();
StringReader underlying = new StringReader("xyz");
MergedReader reader = new MergedReader(null, underlying, buf, 0, buf.length);
// Skip exactly the buffered amount
long skipped = reader.skip(5);
assertEquals(5L, skipped);
// Should now read from underlying reader
assertEquals('x', (char) reader.read());
reader.close();
}
public void testSkipBeyondBuffer() throws IOException
{
char[] buf = "AB".toCharArray();
StringReader underlying = new StringReader("xyz");
MergedReader reader = new MergedReader(null, underlying, buf, 0, buf.length);
// Skip 4: 2 from buffer + 2 from underlying
long skipped = reader.skip(4);
assertEquals(4L, skipped);
// Should now read 'z' from underlying
assertEquals('z', (char) reader.read());
reader.close();
}
}