blob: fe6f597485f43a15c6f6b4e2f8d8f64ae0b12273 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2019 Thomas Wolf and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*******************************************************************************/
package org.eclipse.text.tests;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.eclipse.jface.text.ConfigurableLineTracker;
import org.eclipse.jface.text.DefaultLineTracker;
import org.eclipse.jface.text.GapTextStore;
public class ConfigurableLineTrackerTest extends AbstractLineTrackerTest {
@Before
public void setUp() {
fText= new GapTextStore();
}
@After
public void tearDown() {
fTracker= null;
fText= null;
}
/**
* Expected length of the tracked delimiter. First entry is length of first
* delimiter and so on.
*/
private int[] lineEndLengths;
@Override
protected int getLineOffset(int line, int[] lines) {
int offset= 0;
for (int i= 0; i < line; i++) {
offset += (lines[i] + lineEndLengths[i]);
}
return offset;
}
private void setLegalDelimiters(String... delimiters) {
fTracker = new ConfigurableLineTracker(delimiters);
}
@Test
public void testLongestMatch() throws Exception {
setLegalDelimiters(DefaultLineTracker.DELIMITERS);
set("xxxx\r\nxx");
lineEndLengths = new int[] {2};
checkLines(new int[] {4, 2});
}
@Test
public void testMixedDefaultDelimiter() throws Exception {
setLegalDelimiters(DefaultLineTracker.DELIMITERS);
set("1234\r\n123\r1234\n1234567\r");
lineEndLengths = new int[] { 2, 1, 1, 1 };
checkLines(new int[] { 4, 3, 4, 7, 0 });
set("first\r\r\nthird");
lineEndLengths = new int[] { 1, 2 };
checkLines(new int[] { 5, 0, 5 });
}
@Test
public void testSingleDelimiter() throws Exception {
setLegalDelimiters("\n");
set("xxxx\nxx");
lineEndLengths = new int[] { 1 };
checkLines(new int[] { 4, 2 });
}
@Test
public void testAlternativeDelimiters1() throws Exception {
// create a line tracker with "show whitespace" characters as delimiter
setLegalDelimiters("\u00a4", "\u00b6", "\u00a4\u00b6");
set("xxxx\u00a4\u00b6xx");
lineEndLengths = new int[] { 2 };
checkLines(new int[] { 4, 2 });
}
@Test
public void testAlternativeDelimiters2() throws Exception {
setLegalDelimiters("{NewLine}", "[NewLine]");
set("A line{NewLine}AnotherLine[NewLine}A third line[newline]End");
lineEndLengths = new int[] { 9 };
checkLines(new int[] { 6, 44 });
}
}