blob: 58856dca90c7b64d86496730ac68b26aabe2d95b [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007, 2013 David Green and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* David Green - initial API and implementation
*******************************************************************************/
package org.eclipse.mylyn.wikitext.internal.util;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.StringReader;
import org.eclipse.mylyn.wikitext.util.LocationTrackingReader;
import junit.framework.TestCase;
/**
* @author David Green
*/
@SuppressWarnings("resource")
public class LocationTrackingReaderTest extends TestCase {
public void testCharOffset() throws IOException {
String content = "aaflkjsdf \nas;dfj asl;fj\r\naslfkjasd";
int count = 0;
LocationTrackingReader reader = new LocationTrackingReader(new StringReader(content), 16);
int c;
while ((c = reader.read()) != -1) {
++count;
assertEquals(content.charAt(count - 1), (char) c);
assertEquals(count - 1, reader.getOffset());
}
assertEquals(content.length(), count);
}
public void testReadLine() throws IOException {
String content = "\rabc\ndef\r\rfoo bar";
int bufSize = 3;
int[] lineOffsets = new int[] { 0, 1, 5, 9, 10, 17 };
doTest(content, lineOffsets, bufSize);
}
private void doTest(String content, int[] lineOffsets, int bufSize) throws IOException {
LocationTrackingReader reader = new LocationTrackingReader(new StringReader(content), bufSize);
BufferedReader refReader = new BufferedReader(new StringReader(content));
int lineNumber = 0;
String testLine = null;
String refLine = null;
do {
int expectedOffset = lineOffsets[lineNumber++];
testLine = reader.readLine();
refLine = refReader.readLine();
assertEquals(refLine, testLine);
assertEquals(expectedOffset, reader.getLineOffset());
assertEquals(lineNumber - 1, reader.getLineNumber());
} while (testLine != null && refLine != null);
assertTrue(refLine == null);
assertTrue(testLine == null);
}
public void testReadLineWithWindowsNewlines() throws IOException {
String content = "abc\r\ndef\r\n\r\nfoo bar";
int bufSize = 3;
int[] lineOffsets = new int[] { 0, 5, 10, 12, 19 };
doTest(content, lineOffsets, bufSize);
}
public void testReadLineWithTerminatingEOLs() throws IOException {
String content = "abc\n";
int bufSize = 3;
int[] lineOffsets = new int[] { 0, 4 };
doTest(content, lineOffsets, bufSize);
content = "abc\r\n";
bufSize = 3;
lineOffsets = new int[] { 0, 5 };
doTest(content, lineOffsets, bufSize);
content = "abc\r";
bufSize = 3;
lineOffsets = new int[] { 0, 4 };
doTest(content, lineOffsets, bufSize);
}
}