// Copyright 2012 Google Inc. All Rights Reserved. // // 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 com.google.collide.shared.document; import com.google.collide.shared.document.util.PositionUtils; import com.google.common.base.Joiner; import junit.framework.TestCase; /** * Tests for the {@link LineUtils} class. * */ public class LineUtilsTests extends TestCase { /** Tests are dependent on these values, do not change. */ private static final String[] LINES = {"Hello world\n", "Foo bar\n", "Something else\n"}; private Document doc; private Line line; public void testGetPositionBackwards() { Position pos; line = doc.getLastLine(); pos = PositionUtils.getPosition(line, -1, 5, -1); assertPosition(line, 4, pos); pos = PositionUtils.getPosition(line, -1, 5, -3); assertPosition(line, 2, pos); pos = PositionUtils.getPosition(line, -1, 0, -1); assertPosition(line.getPreviousLine(), line.getPreviousLine().getText().length() - 1, pos); pos = PositionUtils.getPosition(line, -1, 5, -6); assertPosition(line.getPreviousLine(), line.getPreviousLine().getText().length() - 1, pos); pos = PositionUtils.getPosition(line, -1, 5, -5 - line.getPreviousLine().getText().length()); assertPosition(line.getPreviousLine(), 0, pos); pos = PositionUtils.getPosition(line, -1, 5, -6 - line.getPreviousLine().getText().length()); assertPosition(line.getPreviousLine().getPreviousLine(), line.getPreviousLine() .getPreviousLine().getText().length() - 1, pos); pos = PositionUtils.getPosition(line, -1, 5, -6 - line.getPreviousLine().getText().length() - line.getPreviousLine().getPreviousLine().getText().length()); assertPosition(line.getPreviousLine().getPreviousLine().getPreviousLine(), line .getPreviousLine().getPreviousLine().getPreviousLine().getText().length() - 1, pos); } public void testGetPositionForward() { Position pos; pos = PositionUtils.getPosition(line, -1, 0, 1); assertPosition(line, 1, pos); pos = PositionUtils.getPosition(line, -1, 0, 5); assertPosition(line, 5, pos); pos = PositionUtils.getPosition(line, -1, 3, 5); assertPosition(line, 8, pos); pos = PositionUtils.getPosition(line, -1, 11, 1); assertPosition(line.getNextLine(), 0, pos); pos = PositionUtils.getPosition(line, -1, 0, line.getText().length()); assertPosition(line.getNextLine(), 0, pos); pos = PositionUtils.getPosition(line, -1, 0, line.getText().length() + 5); assertPosition(line.getNextLine(), 5, pos); pos = PositionUtils.getPosition(line, -1, 3, line.getText().length()); assertPosition(line.getNextLine(), 3, pos); pos = PositionUtils.getPosition(line, -1, 0, line.getText().length() + line.getNextLine().getText().length()); assertPosition(line.getNextLine().getNextLine(), 0, pos); pos = PositionUtils.getPosition(line, -1, 3, line.getText().length() + line.getNextLine().getText().length() + 5); assertPosition(line.getNextLine().getNextLine(), 8, pos); pos = PositionUtils.getPosition(line, -1, 0, line.getText().length() + line.getNextLine().getText().length() + 5); assertPosition(line.getNextLine().getNextLine(), 5, pos); } public void testGetPositionOutOfBoundsBeginning() { try { PositionUtils.getPosition(line, -1, 0, -1); fail(); } catch (PositionOutOfBoundsException e) { } } public void testGetPositionForwardAtDocumentEnd() { line = doc.getLastLine(); Position pos = PositionUtils.getPosition(line, -1, line.getText().length() - 1, 1); assertPosition(doc.getLastLine(), doc.getLastLine().getText().length(), pos); } public void testGetPositionOutOfBoundsEnd() { line = doc.getLastLine(); try { PositionUtils.getPosition(line, -1, line.getText().length() - 1, 2); fail(); } catch (PositionOutOfBoundsException e) { } } @Override protected void setUp() throws Exception { doc = Document.createFromString(Joiner.on("").join(LINES)); line = doc.getFirstLine(); } private void assertPosition(Line expectedLine, int expectedColumn, Position actualPosition) { assertEquals(expectedLine, actualPosition.getLine()); assertEquals(expectedColumn, actualPosition.getColumn()); } }