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 InvokeReturnsTest { // FIXME Tests in this class throw a number of RuntimeExceptions Prolog engine; @Before public void setUp() { engine = new Prolog(); } @Test public void returnsVoid() throws PrologException { String goal = "java_object('java.util.ArrayList', [], L), L <- clear returns X."; SolveInfo solution = engine.solve(goal); assertTrue(solution.isSuccess()); } @Test public void passNonexistentParameter() throws PrologException { String goal = "java_object('java.util.ArrayList', [], L), L <- clear(10)."; SolveInfo solution = engine.solve(goal); assertFalse(solution.isSuccess()); } @Test public void omitReturnValue() throws PrologException { String goal = "java_object('java.util.ArrayList', [], L), L <- size."; SolveInfo solution = engine.solve(goal); assertTrue(solution.isSuccess()); } @Test public void nonexistentMethod() throws PrologException { String goal = "java_object('java.lang.Object', [], Obj), Obj <- nonExistentMethod."; SolveInfo solution = engine.solve(goal); assertFalse(solution.isSuccess()); } @Test public void passUnboundParameter() throws PrologException { String goal = "java_object('java.lang.Integer', [0], Z), Z <- compareTo(X)."; SolveInfo solution = engine.solve(goal); assertFalse(solution.isSuccess()); } @Test public void passParameterOfWrongType() throws PrologException { String goal = "java_object('java.lang.Integer', [0], Z), Z <- compareTo('ciao')."; SolveInfo solution = engine.solve(goal); assertFalse(solution.isSuccess()); } @Test public void booleanReturnType() throws PrologException { String goal = "java_object('java.util.ArrayList', [], L), L <- isEmpty returns true."; SolveInfo solution = engine.solve(goal); assertTrue(solution.isSuccess()); } @Test public void stringReturnType() throws PrologException { String goal = "java_object('java.lang.String', ['hello'], S), S <- toUpperCase returns 'HELLO'."; SolveInfo solution = engine.solve(goal); assertTrue(solution.isSuccess()); } @Test public void staticReturnsVoid() throws PrologException { SolveInfo solution = engine.solve("class('java.lang.System') <- gc returns X."); assertTrue(solution.isSuccess()); } @Test public void staticIntReturnType() throws PrologException { SolveInfo solution = engine.solve("class('java.lang.Integer') <- parseInt('15') returns 15."); assertTrue(solution.isSuccess()); } @Test public void staticPassParameterOfWrongType() throws PrologException { SolveInfo solution = engine.solve("class('java.lang.Integer') <- parseInt(10) returns N."); assertFalse(solution.isSuccess()); } @Test public void staticPassUnboundParameter() throws PrologException { SolveInfo solution = engine.solve("class('java.lang.Integer') <- parseInt(X) returns N."); assertFalse(solution.isSuccess()); } @Test public void staticOmitReturnValue() throws PrologException { SolveInfo solution = engine.solve("class('java.lang.System') <- currentTimeMillis."); assertTrue(solution.isSuccess()); } @Test public void staticPassNonexistentParameter() throws PrologException { SolveInfo solution = engine.solve("class('java.lang.System') <- currentTimeMillis(10)."); assertFalse(solution.isSuccess()); } @Test public void staticNonexistentClass() throws PrologException { SolveInfo solution = engine.solve("class('non.existent.Class') <- nonExistentMethod."); assertFalse(solution.isSuccess()); } @Test public void staticNonexistentMethod() throws PrologException { SolveInfo solution = engine.solve("class('java.lang.Integer') <- nonExistentMethod."); assertFalse(solution.isSuccess()); } @Test public void bindIntReturnValue() throws PrologException { String goal = "java_object('java.lang.Integer', [5], N), N <- intValue returns V."; SolveInfo solution = engine.solve(goal); assertTrue(solution.isSuccess()); assertEquals(new Int(5), solution.getTerm("V")); } @Test public void bindStringReturnValue() throws PrologException { String goal = "java_object('java.util.ArrayList', [], X), X <- toArray returns A."; SolveInfo solution = engine.solve(goal); assertTrue(solution.isSuccess()); assertEquals(new Struct("$obj_1"), solution.getTerm("A")); } /* See JVM bug 4071957 at http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4071957 */ @Test(expected=AssertionError.class) public void acceessPublicMethodsOfInnerClasses() throws PrologException { Theory t = new Theory("test_map(Size) :-\n" + " java_object('java.util.HashMap', [], map),\n" + " map <- put('key1', 'value1'),\n" + " map <- put('key2', 'value2'),\n" + " map <- put('key3', 'value3'),\n" + " map <- entrySet returns entries,\n" + " entries <- size returns Size."); engine.setTheory(t); SolveInfo solution = engine.solve("test_map(S)."); assertTrue(solution.isSuccess()); assertEquals(new Int(3), solution.getTerm("S")); } }