/*
* Copyright (c) 2013, the Dart project authors.
*
* Licensed under the Eclipse Public License v1.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.eclipse.org/legal/epl-v10.html
*
* 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.dart.engine.utilities.source;
import com.google.common.collect.ImmutableList;
import com.google.dart.engine.ast.AstNode;
import com.google.dart.engine.element.Element;
import com.google.dart.engine.element.ShowElementCombinator;
import com.google.dart.engine.error.AnalysisError;
import com.google.dart.engine.scanner.Token;
import junit.framework.TestCase;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import java.util.List;
public class SourceRangeFactoryTest extends TestCase {
private static void assertRange(SourceRange range, int offset, int length) {
assertEquals(offset, range.getOffset());
assertEquals(length, range.getLength());
}
private static void assertRangeEnd(SourceRange range, int offset, int end) {
assertEquals(offset, range.getOffset());
assertEquals(end, range.getEnd());
}
private static AstNode mockNode(int offset, int length) {
AstNode node = mock(AstNode.class);
when(node.getOffset()).thenReturn(offset);
when(node.getLength()).thenReturn(length);
when(node.getEnd()).thenReturn(offset + length);
return node;
}
private static Token mockToken(int offset, int length) {
Token token = mock(Token.class);
when(token.getOffset()).thenReturn(offset);
when(token.getLength()).thenReturn(length);
when(token.getEnd()).thenReturn(offset + length);
return token;
}
public void test_rangeElementName() throws Exception {
Element element = mock(Element.class);
when(element.getNameOffset()).thenReturn(5);
when(element.getDisplayName()).thenReturn("MyClass");
SourceRange range = SourceRangeFactory.rangeElementName(element);
assertRange(range, 5, 7);
}
public void test_rangeEndEnd_NI() throws Exception {
AstNode a = mockNode(10, 1);
SourceRange range = SourceRangeFactory.rangeEndEnd(a, 30);
assertRangeEnd(range, 10 + 1, 30);
}
public void test_rangeEndEnd_NN() throws Exception {
AstNode a = mockNode(10, 1);
AstNode b = mockNode(20, 2);
SourceRange range = SourceRangeFactory.rangeEndEnd(a, b);
assertRangeEnd(range, 10 + 1, 20 + 2);
}
public void test_rangeEndEnd_NR() throws Exception {
AstNode a = mockNode(10, 1);
SourceRange b = new SourceRange(20, 2);
SourceRange range = SourceRangeFactory.rangeEndEnd(a, b);
assertRangeEnd(range, 10 + 1, 20 + 2);
}
public void test_rangeEndEnd_RN() throws Exception {
SourceRange a = new SourceRange(10, 1);
AstNode b = mockNode(20, 2);
SourceRange range = SourceRangeFactory.rangeEndEnd(a, b);
assertRangeEnd(range, 10 + 1, 20 + 2);
}
public void test_rangeEndEnd_RR() throws Exception {
SourceRange a = new SourceRange(10, 1);
SourceRange b = new SourceRange(20, 2);
SourceRange range = SourceRangeFactory.rangeEndEnd(a, b);
assertRangeEnd(range, 10 + 1, 20 + 2);
}
public void test_rangeEndLength_NI() throws Exception {
AstNode a = mockNode(10, 1);
SourceRange range = SourceRangeFactory.rangeEndLength(a, 5);
assertRange(range, 10 + 1, 5);
}
public void test_rangeEndLength_RI() throws Exception {
SourceRange a = new SourceRange(10, 1);
SourceRange range = SourceRangeFactory.rangeEndLength(a, 5);
assertRange(range, 10 + 1, 5);
}
public void test_rangeEndStart_NI() throws Exception {
AstNode a = mockNode(10, 1);
SourceRange range = SourceRangeFactory.rangeEndStart(a, 20);
assertRangeEnd(range, 10 + 1, 20);
}
public void test_rangeEndStart_NN() throws Exception {
AstNode a = mockNode(10, 1);
AstNode b = mockNode(20, 2);
SourceRange range = SourceRangeFactory.rangeEndStart(a, b);
assertRangeEnd(range, 10 + 1, 20);
}
public void test_rangeEndStart_NT() throws Exception {
AstNode a = mockNode(10, 1);
Token b = mockToken(20, 2);
SourceRange range = SourceRangeFactory.rangeEndStart(a, b);
assertRangeEnd(range, 10 + 1, 20);
}
public void test_rangeEndStart_RR() throws Exception {
SourceRange a = new SourceRange(10, 1);
SourceRange b = new SourceRange(20, 2);
SourceRange range = SourceRangeFactory.rangeEndStart(a, b);
assertRangeEnd(range, 10 + 1, 20);
}
public void test_rangeError() throws Exception {
AnalysisError error = mock(AnalysisError.class);
when(error.getOffset()).thenReturn(1);
when(error.getLength()).thenReturn(10);
SourceRange range = SourceRangeFactory.rangeError(error);
assertRange(range, 1, 10);
}
public void test_rangeError_null() throws Exception {
SourceRange range = SourceRangeFactory.rangeError(null);
assertNull(range);
}
public void test_rangeFromBase_NI() throws Exception {
AstNode a = mockNode(10, 1);
int base = 4;
SourceRange range = SourceRangeFactory.rangeFromBase(a, base);
assertRange(range, 6, 1);
}
public void test_rangeFromBase_NR() throws Exception {
AstNode a = mockNode(10, 1);
SourceRange base = new SourceRange(4, 50);
SourceRange range = SourceRangeFactory.rangeFromBase(a, base);
assertRange(range, 6, 1);
}
public void test_rangeFromBase_RR() throws Exception {
SourceRange a = new SourceRange(10, 1);
SourceRange base = new SourceRange(4, 50);
SourceRange range = SourceRangeFactory.rangeFromBase(a, base);
assertRange(range, 6, 1);
}
public void test_rangeNode() throws Exception {
AstNode node = mockNode(1, 10);
SourceRange range = SourceRangeFactory.rangeNode(node);
assertRange(range, 1, 10);
}
public void test_rangeNode_null() throws Exception {
SourceRange range = SourceRangeFactory.rangeNode((AstNode) null);
assertNull(range);
}
public void test_rangeNodes() throws Exception {
AstNode first = mockNode(10, 1);
AstNode middle = mockNode(15, 1);
AstNode last = mockNode(20, 2);
List<AstNode> nodes = ImmutableList.of(first, middle, last);
SourceRange range = SourceRangeFactory.rangeNodes(nodes);
assertRangeEnd(range, 10, 20 + 2);
}
public void test_rangeNodes_empty() throws Exception {
List<AstNode> nodes = ImmutableList.of();
SourceRange range = SourceRangeFactory.rangeNodes(nodes);
assertRange(range, 0, 0);
}
public void test_rangeShowCombinator() throws Exception {
ShowElementCombinator element = mock(ShowElementCombinator.class);
when(element.getOffset()).thenReturn(5);
when(element.getEnd()).thenReturn(20);
SourceRange range = SourceRangeFactory.rangeShowCombinator(element);
assertRange(range, 5, 20 - 5);
}
public void test_rangeStartEnd_IN() throws Exception {
AstNode b = mockNode(20, 2);
SourceRange range = SourceRangeFactory.rangeStartEnd(10, b);
assertRangeEnd(range, 10, 20 + 2);
}
public void test_rangeStartEnd_NI() throws Exception {
AstNode a = mockNode(10, 1);
SourceRange range = SourceRangeFactory.rangeStartEnd(a, 22);
assertRangeEnd(range, 10, 22);
}
public void test_rangeStartEnd_NN() throws Exception {
AstNode a = mockNode(10, 1);
AstNode b = mockNode(20, 2);
SourceRange range = SourceRangeFactory.rangeStartEnd(a, b);
assertRangeEnd(range, 10, 20 + 2);
}
public void test_rangeStartEnd_NT() throws Exception {
AstNode a = mockNode(10, 1);
Token b = mockToken(20, 2);
SourceRange range = SourceRangeFactory.rangeStartEnd(a, b);
assertRangeEnd(range, 10, 20 + 2);
}
public void test_rangeStartEnd_RI() throws Exception {
SourceRange a = new SourceRange(10, 1);
SourceRange range = SourceRangeFactory.rangeStartEnd(a, 22);
assertRangeEnd(range, 10, 22);
}
public void test_rangeStartEnd_RN() throws Exception {
SourceRange a = new SourceRange(10, 1);
AstNode b = mockNode(20, 2);
SourceRange range = SourceRangeFactory.rangeStartEnd(a, b);
assertRangeEnd(range, 10, 20 + 2);
}
public void test_rangeStartEnd_RR() throws Exception {
SourceRange a = new SourceRange(10, 1);
SourceRange b = new SourceRange(20, 2);
SourceRange range = SourceRangeFactory.rangeStartEnd(a, b);
assertRangeEnd(range, 10, 20 + 2);
}
public void test_rangeStartEnd_TI() throws Exception {
Token a = mockToken(10, 1);
int b = 22;
SourceRange range = SourceRangeFactory.rangeStartEnd(a, b);
assertRangeEnd(range, 10, 22);
}
public void test_rangeStartEnd_TN() throws Exception {
Token a = mockToken(10, 1);
AstNode b = mockNode(20, 2);
SourceRange range = SourceRangeFactory.rangeStartEnd(a, b);
assertRangeEnd(range, 10, 20 + 2);
}
public void test_rangeStartEnd_TT() throws Exception {
Token a = mockToken(10, 1);
Token b = mockToken(20, 2);
SourceRange range = SourceRangeFactory.rangeStartEnd(a, b);
assertRangeEnd(range, 10, 20 + 2);
}
public void test_rangeStartLength_NI() throws Exception {
AstNode a = mockNode(10, 1);
SourceRange range = SourceRangeFactory.rangeStartLength(a, 5);
assertRange(range, 10, 5);
}
public void test_rangeStartLength_RI() throws Exception {
SourceRange a = new SourceRange(10, 1);
SourceRange range = SourceRangeFactory.rangeStartLength(a, 5);
assertRange(range, 10, 5);
}
public void test_rangeStartStart_IN() throws Exception {
AstNode b = mockNode(20, 2);
SourceRange range = SourceRangeFactory.rangeStartStart(10, b);
assertRangeEnd(range, 10, 20);
}
public void test_rangeStartStart_NN() throws Exception {
AstNode a = mockNode(10, 1);
AstNode b = mockNode(20, 2);
SourceRange range = SourceRangeFactory.rangeStartStart(a, b);
assertRangeEnd(range, 10, 20);
}
public void test_rangeStartStart_RN() throws Exception {
SourceRange a = new SourceRange(10, 1);
AstNode b = mockNode(20, 2);
SourceRange range = SourceRangeFactory.rangeStartStart(a, b);
assertRangeEnd(range, 10, 20);
}
public void test_rangeStartStart_RR() throws Exception {
SourceRange a = new SourceRange(10, 1);
SourceRange b = new SourceRange(20, 2);
SourceRange range = SourceRangeFactory.rangeStartStart(a, b);
assertRangeEnd(range, 10, 20);
}
public void test_rangeToken() throws Exception {
Token token = mockToken(10, 5);
SourceRange range = SourceRangeFactory.rangeToken(token);
assertRange(range, 10, 5);
}
public void test_rangeWithBase_IR() throws Exception {
int base = 4;
SourceRange r = new SourceRange(10, 1);
SourceRange range = SourceRangeFactory.rangeWithBase(base, r);
assertRange(range, 14, 1);
}
public void test_rangeWithBase_NR() throws Exception {
AstNode base = mockNode(4, 100);
SourceRange r = new SourceRange(10, 1);
SourceRange range = SourceRangeFactory.rangeWithBase(base, r);
assertRange(range, 14, 1);
}
public void test_rangeWithBase_RR() throws Exception {
SourceRange base = new SourceRange(4, 100);
SourceRange r = new SourceRange(10, 1);
SourceRange range = SourceRangeFactory.rangeWithBase(base, r);
assertRange(range, 14, 1);
}
}