package com.spotify.heroic.grammar;
import com.fasterxml.jackson.annotation.JsonTypeName;
import org.junit.Test;
import org.mockito.Mockito;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.doReturn;
public class ContextTest {
private final Context c1 = new Context(0, 0, 10, 10);
private final Context c2 = new Context(10, 10, 20, 20);
@Test
public void joinTest() {
assertEquals(new Context(0, 0, 20, 20), c1.join(c2));
}
@Test
public void nameTest() {
assertEquals("a", Context.name(A.class));
assertEquals("B", Context.name(B.class));
}
@Test
public void errorTest() {
final ParseException p = c1.error("message");
assertEquals("0:0: message", p.getMessage());
assertEquals(null, p.getCause());
assertEquals(0, p.getLine());
assertEquals(0, p.getCol());
assertEquals(10, p.getLineEnd());
assertEquals(10, p.getColEnd());
}
@Test
public void errorTestCause() {
final Exception e = new Exception("message");
final ParseException p = c1.error(e);
assertEquals("0:0: " + e.getMessage(), p.getMessage());
assertEquals(e, p.getCause());
assertEquals(0, p.getLine());
assertEquals(0, p.getCol());
assertEquals(10, p.getLineEnd());
assertEquals(10, p.getColEnd());
}
@Test
public void castErrorTest() {
final Expression o = Mockito.mock(Expression.class);
doReturn("object").when(o).toRepr();
final ParseException p = c1.castError(o, A.class);
assertEquals("0:0: object cannot be cast to a", p.getMessage());
assertEquals(null, p.getCause());
assertEquals(0, p.getLine());
assertEquals(0, p.getCol());
assertEquals(10, p.getLineEnd());
assertEquals(10, p.getColEnd());
}
@Test
public void scopeLookupErrorTest() {
final ParseException p = c1.scopeLookupError("foo");
assertEquals("0:0: cannot find reference (foo) in the current scope", p.getMessage());
assertEquals(null, p.getCause());
assertEquals(0, p.getLine());
assertEquals(0, p.getCol());
assertEquals(10, p.getLineEnd());
assertEquals(10, p.getColEnd());
}
@JsonTypeName("a")
interface A {
}
interface B {
}
}