transcendental-lisp/test/table/ExecutionContextTest.java

105 lines
2.9 KiB
Java
Raw Normal View History

package table;
2017-11-18 09:24:45 -05:00
import static org.hamcrest.Matchers.is;
2017-11-12 09:42:25 -05:00
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertNull;
2017-11-18 09:24:45 -05:00
import static org.junit.Assert.assertThat;
import static sexpression.Nil.NIL;
import static sexpression.Symbol.T;
2017-11-12 09:42:25 -05:00
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
2017-03-15 13:37:39 -04:00
public class ExecutionContextTest {
private ExecutionContext executionContext;
2017-03-15 13:37:39 -04:00
public ExecutionContextTest() {
this.executionContext = ExecutionContext.getInstance();
}
@Before
public void setUp() {
executionContext.clearContext();
}
@After
public void tearDown() {
executionContext.clearContext();
}
@Test
public void assignANewScope() {
SymbolTable scope = new SymbolTable();
executionContext.setScope(scope);
assertEquals(scope, executionContext.getScope());
}
@Test
public void clearContext() {
SymbolTable scope = new SymbolTable();
executionContext.setScope(scope);
assertEquals(scope, executionContext.getScope());
executionContext.clearContext();
assertNotEquals(scope, executionContext.getScope());
assertNull(executionContext.getScope().getParent());
}
@Test
public void lookupVariable() {
executionContext.getScope().put("test", T);
assertEquals(T, executionContext.lookupSymbolValue("test"));
}
@Test
public void lookupLocalVariable() {
SymbolTable scope = new SymbolTable(executionContext.getScope());
scope.put("local", T);
executionContext.setScope(scope);
assertEquals(T, executionContext.lookupSymbolValue("local"));
}
@Test
public void lookupGlobalVariable() {
SymbolTable scope = new SymbolTable(executionContext.getScope());
executionContext.getScope().put("global", T);
executionContext.setScope(scope);
assertEquals(T, executionContext.lookupSymbolValue("global"));
}
@Test
public void lookupShadowedVariable() {
SymbolTable scope = new SymbolTable(executionContext.getScope());
scope.put("shadowed", NIL);
executionContext.getScope().put("shadowed", T);
executionContext.setScope(scope);
assertEquals(NIL, executionContext.lookupSymbolValue("shadowed"));
}
2017-11-18 09:24:45 -05:00
@Test
public void restoreGlobalContext() {
SymbolTable global = executionContext.getScope();
SymbolTable scope1 = new SymbolTable(global);
SymbolTable scope2 = new SymbolTable(scope1);
SymbolTable scope3 = new SymbolTable(scope2);
executionContext.setScope(scope3);
assertThat(executionContext.getScope().isGlobal(), is(false));
executionContext.restoreGlobalScope();
assertThat(executionContext.getScope().isGlobal(), is(true));
assertThat(executionContext.getScope(), is(global));
}
}