package org.netbeans.gradle.project.output; import java.io.IOException; import java.io.StringReader; import java.io.StringWriter; import org.junit.Test; import static org.junit.Assert.*; public class ReplaceLineFeedReaderTest { private static ReplaceLineFeedReader newCrLFReader(String text, String lineSeparator) { return new ReplaceLineFeedReader(new StringReader(text), lineSeparator); } private static String readString(String text, String lineSeparator, int bufferOffset, int... bufferLengths) throws IOException { ReplaceLineFeedReader reader = newCrLFReader(text, lineSeparator); StringWriter result = new StringWriter(2 * text.length()); int bufferIndex = 0; char[] buffer = null; while (true) { int requiredBufferLength = bufferLengths[bufferIndex] + bufferOffset; bufferIndex = (bufferIndex + 1) % bufferLengths.length; if (buffer == null || buffer.length != requiredBufferLength) { buffer = new char[requiredBufferLength]; } int readCount = reader.read(buffer, bufferOffset, buffer.length - bufferOffset); if (readCount < 0) { break; } result.write(buffer, bufferOffset, readCount); } assertEquals("Must consitently return EOF", -1, reader.read()); return result.toString(); } private static void testReadString(String text, String lineSeparator, int bufferOffset, int... bufferLengths) throws IOException { String output = readString(text, lineSeparator, bufferOffset, bufferLengths); assertEquals(text.replace("\n", lineSeparator), output); } private static void testReadStringWithConstBuffer(String text, String lineSeparator) throws IOException { testReadString(text, lineSeparator, 0, 1); testReadString(text, lineSeparator, 0, 2); testReadString(text, lineSeparator, 0, 3); testReadString(text, lineSeparator, 0, 1024); testReadString(text, lineSeparator, 1, 1); testReadString(text, lineSeparator, 1, 2); testReadString(text, lineSeparator, 1, 3); testReadString(text, lineSeparator, 1, 1024); } private static void testReadStringWithConstBuffer(String text) throws IOException { testReadStringWithConstBuffer(text, "\r"); testReadStringWithConstBuffer(text, "\r\n"); } @Test public void testEmptyIput() throws Exception { testReadStringWithConstBuffer(""); } @Test public void testSingleLf() throws Exception { testReadStringWithConstBuffer("\n"); } @Test public void testLong() throws Exception { testReadStringWithConstBuffer("First line\nSecond Line\nThird Line"); } @Test public void testEmptyLines() throws Exception { testReadStringWithConstBuffer("First line\n\n\n\nEND\n\n"); } @Test public void testDoNotReplaceCrLf() throws Exception { String text = "\r\nFirst Line\r\nSecond Line\nThird Line\r\n"; String lineSeparator = "\r\n"; String output = readString(text, lineSeparator, 0, 1); assertEquals("\r\nFirst Line\r\nSecond Line\r\nThird Line\r\n", output); } }