| /******************************************************************************* |
| * Copyright (c) 2006, 2008 IBM Corporation 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 |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.text.tests; |
| |
| import org.junit.After; |
| import org.junit.Before; |
| import org.junit.Test; |
| |
| public class AdaptiveGapTextTest extends AbstractGapTextTest { |
| |
| @Before |
| public void setUp() { |
| fText= new GapText(2, 10, 0.5f); |
| fText.set("xxxxx"); |
| } |
| |
| @After |
| public void tearDown () { |
| fText= null; |
| } |
| |
| @Test |
| public void testSet() { |
| assertGap(5, 7); |
| } |
| |
| @Test |
| public void testGetText1() { |
| String[] expected= { |
| "xyxxxx", |
| "xyxyxxx", |
| "xyxyxyxx", |
| "xyxyxyxyx", |
| "xyxyxyxyxy" |
| }; |
| |
| for (int i= 1; i < 5; i++) { |
| fText.replace(2 * i - 1, 0, "y"); |
| assertContents(expected[i - 1]); |
| } |
| |
| } |
| |
| @Test |
| public void testGetText2() { |
| String[] expected= { |
| "yxxxxx", |
| "yxyxxxx", |
| "yxyxyxxx", |
| "yxyxyxyxx", |
| "yxyxyxyxyx" |
| }; |
| |
| for (int i= 1; i < 5; i++) { |
| fText.replace(2 * (i - 1), 0, "y"); |
| assertContents(expected[i - 1]); |
| } |
| |
| } |
| |
| @Test |
| public void testInsert() { |
| fText.replace(2, 0, "y"); |
| assertGap(3, 4); |
| |
| |
| for (int i= 1; i <= 1; i++) { |
| fText.replace(2 + i, 0, "y"); |
| assertGap(3 + i, 4); |
| } |
| |
| fText.replace(7, 0, "y"); |
| assertGap(8, 10); |
| } |
| |
| @Test |
| public void testRemoveGapOverlapping() { |
| fText.replace(2, 2, null); |
| assertGap(2, 6); |
| |
| fText.replace(1, 2, null); |
| assertGap(1, 3); |
| } |
| |
| @Test |
| public void testRemoveGapOverlapping2() { |
| fText.replace(0, 0, "aaaaazzzzzyyyyy"); |
| assertGap(15, 21); |
| assertContents("aaaaazzzzzyyyyyxxxxx"); |
| |
| |
| fText.replace(5, 12, null); |
| assertGap(5, 7); |
| assertContents("aaaaaxxx"); |
| } |
| |
| @Test |
| public void testRemoveRemoteFromGap() { |
| fText.replace(0, 0, "aaaaazzzzzyyyyy"); |
| assertGap(15, 21); |
| assertContents("aaaaazzzzzyyyyyxxxxx"); |
| |
| // before gap |
| fText.replace(5, 2, null); |
| assertGap(5, 13); |
| assertContents("aaaaazzzyyyyyxxxxx"); |
| |
| // after gap |
| fText.replace(7, 10, null); |
| assertGap(7, 9); |
| assertContents("aaaaazzx"); |
| |
| } |
| |
| @Test |
| public void testRemoveAtLeftGapEdge() { |
| fText.replace(4, 0, "xxx"); |
| assertGap(7, 9); |
| fText.replace(6, 0, "x"); |
| assertGap(7, 8); |
| fText.replace(6, 1, null); |
| assertGap(6, 8); |
| } |
| |
| @Test |
| public void testRemoveAtRightGapEdge() { |
| fText.replace(4, 0, "xxx"); |
| assertGap(7, 9); |
| fText.replace(6, 0, "x"); |
| assertGap(7, 8); |
| fText.replace(7, 1, null); |
| assertGap(7, 9); |
| } |
| |
| @Test |
| public void testReplace() { |
| fText.replace(2, 2, "yy"); |
| assertGap(4, 6); |
| |
| fText.replace(2, 1, "yyyyyyyyyyyy"); |
| assertGap(14, 19); |
| |
| fText.replace(14, 0, "yyy"); |
| assertGap(17, 19); |
| } |
| |
| @Test |
| public void testRemoveReallocateBeforeGap() throws Exception { |
| fText.replace(0, 0, "yyyyyzzzzz"); |
| assertGap(10, 15); |
| assertContents("yyyyyzzzzzxxxxx"); |
| |
| fText.replace(2, 6, null); |
| assertGap(2, 5); |
| assertContents("yyzzxxxxx"); |
| } |
| } |