diff options
Diffstat (limited to 'org.eclipse.text.tests/src/org/eclipse/text/tests/ConfigurableLineTrackerTest.java')
-rw-r--r-- | org.eclipse.text.tests/src/org/eclipse/text/tests/ConfigurableLineTrackerTest.java | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/org.eclipse.text.tests/src/org/eclipse/text/tests/ConfigurableLineTrackerTest.java b/org.eclipse.text.tests/src/org/eclipse/text/tests/ConfigurableLineTrackerTest.java new file mode 100644 index 00000000000..fe6f597485f --- /dev/null +++ b/org.eclipse.text.tests/src/org/eclipse/text/tests/ConfigurableLineTrackerTest.java @@ -0,0 +1,96 @@ +/******************************************************************************* + * 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 }); + } +} |