/* * Copyright 2000-2006 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package jetbrains.communicator.util; import junit.framework.TestCase; import jetbrains.communicator.mock.MockIDEFacade; /** * @author kir */ public class PositionCorrectorTest extends TestCase { public void testNoContents() throws Exception { assertPositionCorrection(null, null, 5, 5); assertPositionCorrection("adfadsf", null, 5, 5); assertPositionCorrection(null, "ssss", 5, 5); } public void testOutsideBoundary() throws Exception { assertPositionCorrection("aaa", "ssss", -1, 0); assertPositionCorrection("aaa", "ssss", 5, 0); } public void testLinesChanges() throws Exception { assertPositionCorrection("aaa", "ssss", 0, 0); assertPositionCorrection("aaa\nddd", "bbb\nddd", 0, 0); assertPositionCorrection("aaa\nddd", "bbb\nddd", 1, 1); } public void testLineAdded() throws Exception { assertPositionCorrection("aaa", "aaa\nbbb", 0, 0); assertPositionCorrection("aaa", "bbb\naaa", 0, 1); assertPositionCorrection("aaa\rbbb", "ccc\naaa\nbbb\naaa", 1, 2); assertPositionCorrection("aaa\rbbb", "ccc\naaa\nqqqq\nbbb", 1, 3); } public void testLineDeleted() throws Exception { assertPositionCorrection("aaa\nbbb", "aaa", 0, 0); assertPositionCorrection("aaa\nbbb", "aaa", 1, 0); assertPositionCorrection("aaa\nbbb", "bbb", 1, 0); assertPositionCorrection("aaa\nbbb\nccc\nddd", "bbb\nccc", 2, 1); assertPositionCorrection("aaa\nccc\nddd", "ccc", 1, 0); assertPositionCorrection("aaa\nbbb", "bbb", 0, 0); assertPositionCorrection("aaa\nbbb\naaa", "bbb", 1, 0); assertPositionCorrection("aaa\nbbb\naaa", "", 1, 0); assertPositionCorrection("ccc\naaa\nbbb\naaa", "aaa\naaa", 3, 1); assertPositionCorrection("ccc\naaa\nbbb\nzzz", "zzz\naaa", 3, 0); } public void testChange() throws Exception { assertPositionCorrection("aaa\nbbb", "ccc\nbbb", 0, 0); assertPositionCorrection("aaa\nbbb", "ccc\nbbb", 1, 1); } public void testDeleteAndInsert() throws Exception { String src = "aaa\n" + "bbb\n" + "ccc\n" + "ddd\n" + "eee\n"; String dst = "aaa\n" + "1111\n" + "bbb\n" + "eee\n"; assertPositionCorrection(src, dst, 0, 0); assertPositionCorrection(src, dst, 1, 2); assertPositionCorrection(src, dst, 2, 1); assertPositionCorrection(src, dst, 3, 2); assertPositionCorrection(src, dst, 4, 3); } public static void assertPositionCorrection(String src, String dest, int srcLine, int expectedLine) { PositionCorrector positionCorrector = new PositionCorrector(new MockIDEFacade(), src, dest); assertEquals("Invalid correction for line " + srcLine + '\n' + src + "\n-----------\n" + dest + '\n', expectedLine, positionCorrector.getCorrectedLine(srcLine)); } }