Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
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.java96
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 });
+ }
+}

Back to the top