/* * Copyright 2008 Google Inc. * * 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.common.css; import junit.framework.TestCase; /** * Unit tests for {@link SourceCodeLocation} and * {@link SourceCodeLocation.SourceCodePoint}. * */ public class SourceCodeLocationTest extends TestCase { public void testCreation() { String testSource = "abc\ndefg"; SourceCodeLocation l = new SourceCodeLocation( new SourceCode("testfile", testSource), 2, 1, 3, 7, 2, 4); assertEquals("testfile", l.getSourceCode().getFileName()); assertEquals(testSource, l.getSourceCode().getFileContents()); assertEquals(2, l.getBeginCharacterIndex()); assertEquals(1, l.getBeginLineNumber()); assertEquals(3, l.getBeginIndexInLine()); assertEquals(7, l.getEndCharacterIndex()); assertEquals(2, l.getEndLineNumber()); assertEquals(4, l.getEndIndexInLine()); assertEquals('c', testSource.charAt(l.getBeginCharacterIndex())); assertEquals('g', testSource.charAt(l.getEndCharacterIndex())); assertEquals('c', "abc".charAt(l.getBeginIndexInLine() - 1)); assertEquals('g', "defg".charAt(l.getEndIndexInLine() - 1)); } public void testBadCreation1() { SourceCode sourceCode = new SourceCode("testfile", "abc\ndefg"); try { new SourceCodeLocation(sourceCode, 7, 2, 4, 2, 1, 3); fail(); } catch (IllegalArgumentException expected) { assertEquals("Beginning location must come before the end location.", expected.getMessage()); } } public void testComparisonOfEqualLocations1() { SourceCode sourceCode = new SourceCode("testfile", "abcdef"); SourceCodeLocation loc1 = new SourceCodeLocation(sourceCode, 0, 1, 1, 2, 1, 3); SourceCodeLocation loc2 = new SourceCodeLocation(sourceCode, 0, 1, 1, 2, 1, 3); assertTrue(loc1.equals(loc1)); assertTrue(loc1.equals(loc2)); assertTrue(loc2.equals(loc1)); assertTrue(loc2.equals(loc2)); assertEquals(0, loc1.compareTo(loc2)); assertEquals(0, loc1.compareTo(loc1)); assertEquals(0, loc2.compareTo(loc1)); assertEquals(0, loc2.compareTo(loc2)); assertEquals(loc1.hashCode(), loc2.hashCode()); } public void testComparisonOfEqualLocations2() { SourceCode sourceCode = new SourceCode("testfile", "abcdef"); SourceCodeLocation loc1 = new SourceCodeLocation(sourceCode, -1, 0, 0, -1, 0, 0); SourceCodeLocation loc2 = new SourceCodeLocation(sourceCode, -1, 0, 0, -1, 0, 0); assertTrue(loc1.equals(loc1)); assertTrue(loc1.equals(loc2)); assertTrue(loc2.equals(loc1)); assertTrue(loc2.equals(loc2)); assertEquals(0, loc1.compareTo(loc2)); assertEquals(0, loc1.compareTo(loc1)); assertEquals(0, loc2.compareTo(loc1)); assertEquals(0, loc2.compareTo(loc2)); assertEquals(loc1.hashCode(), loc2.hashCode()); } public void testComparisonOfEqualLocations3() { SourceCode sourceCode = new SourceCode("testfile", "abcdef"); SourceCodeLocation loc1 = new SourceCodeLocation(sourceCode, -1, 0, 0, -1, 0, 0); SourceCodeLocation loc2 = new SourceCodeLocation(sourceCode, 0, 1, 1, 2, 1, 3); assertFalse(loc1.equals(loc2)); assertFalse(loc2.equals(loc1)); assertEquals(-1, loc1.compareTo(loc2)); assertEquals(1, loc2.compareTo(loc1)); } public void testComparisonOfEqualLocations4() { SourceCode sourceCode = new SourceCode("testfile", "abcdef"); SourceCodeLocation loc1 = new SourceCodeLocation(sourceCode, 0, 1, 1, 2, 1, 3); SourceCodeLocation loc2 = new SourceCodeLocation(sourceCode, 0, 1, 1, 3, 1, 4); assertFalse(loc1.equals(loc2)); assertFalse(loc2.equals(loc1)); assertEquals(-1, loc1.compareTo(loc2)); assertEquals(1, loc2.compareTo(loc1)); } public void testComparisonOfEqualLocations5() { SourceCode sourceCode = new SourceCode("testfile", "abcdef"); SourceCodeLocation loc1 = new SourceCodeLocation(sourceCode, 0, 1, 1, 2, 1, 3); SourceCodeLocation loc2 = new SourceCodeLocation(sourceCode, 1, 1, 2, 2, 1, 3); assertFalse(loc1.equals(loc2)); assertFalse(loc2.equals(loc1)); assertEquals(-1, loc1.compareTo(loc2)); assertEquals(1, loc2.compareTo(loc1)); } public void testComparisonOfEqualLocations6() { SourceCode sourceCode1 = new SourceCode("testfile1", "abcdef"); SourceCodeLocation loc1 = new SourceCodeLocation(sourceCode1, 0, 1, 1, 2, 1, 3); SourceCode sourceCode2 = new SourceCode("testfile2", "abcdef"); SourceCodeLocation loc2 = new SourceCodeLocation(sourceCode2, 0, 1, 1, 2, 1, 3); assertFalse(loc1.equals(loc2)); assertFalse(loc2.equals(loc1)); } }