package alice.tuprolog;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import org.junit.Before;
import org.junit.Test;
public class FieldAccessTest {
Prolog engine;
@Before
public void setUp() {
engine = new Prolog();
}
@Test public void getStaticUnboundField() throws PrologException {
SolveInfo solution = engine.solve("class('java.lang.Integer').MAX_VALUE <- get(V).");
assertFalse(solution.isSuccess());
}
@Test public void getStaticFieldValue() throws PrologException {
SolveInfo solution = engine.solve("class('java.lang.Integer').'MAX_VALUE' <- get(V), V > 0.");
assertTrue(solution.isSuccess());
}
@Test public void getStaticNonexistentField() throws PrologException {
SolveInfo solution = engine.solve("class('java.lang.Integer').'NON_EXISTENT_FIELD' <- get(X).");
assertFalse(solution.isSuccess());
}
@Test public void getNonexistentMember() throws PrologException {
String goal = "java_object('java.awt.Point', [], P), P.nonExistantField <- get(X).";
SolveInfo solution = engine.solve(goal);
assertFalse(solution.isSuccess());
}
@Test public void setNonexistentMember() throws PrologException {
String goal = "java_object('java.awt.Point', [], P), P.nonExistantField <- set(0).";
SolveInfo solution = engine.solve(goal);
assertFalse(solution.isSuccess());
}
@Test public void setUnboundMemberValue() throws PrologException {
SolveInfo solution = engine.solve("java_object('java.awt.Point', [], P), P.y <- set(X).");
assertFalse(solution.isSuccess());
}
@Test public void setAndGetValueAreEquals() throws PrologException {
String goal = "java_object('java.awt.GridBagConstraints', [], C), " +
"java_object('java.awt.Insets', [1,1,1,1], I1), " +
"C.insets <- set(I1), C.insets <- get(I2), I1 == I2.";
SolveInfo solution = engine.solve(goal);
assertTrue(solution.isSuccess());
}
@Test public void getIntMember() throws PrologException {
String goal = "java_object('java.awt.Point', [], P), P.x <- get(X).";
SolveInfo solution = engine.solve(goal);
assertTrue(solution.isSuccess());
assertEquals(new Int(0), solution.getTerm("X"));
}
@Test public void setAndGetIntMember() throws PrologException {
String goal = "java_object('java.awt.Point', [], P), P.y <- set(5), P.y <- get(Y).";
SolveInfo solution = engine.solve(goal);
assertTrue(solution.isSuccess());
assertEquals(new Int(5), solution.getTerm("Y"));
}
}