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 JavaArrayTest { // FIXME Tests in this class throw a number of RuntimeExceptions Prolog engine; @Before public void setUp() { engine = new Prolog(); } @Test public void getOutOfBound() throws PrologException { String goal = "java_object('java.lang.Integer[]', [3], A), java_array_get(A, 4, Obj)."; SolveInfo solution = engine.solve(goal); assertFalse(solution.isSuccess()); } @Test public void getPrimitiveOutOfBound() throws PrologException { String goal = "java_object('java.awt.Polygon', [], P), " + "P.xpoints <- get(XP), java_array_get_boolean(XP, 2, V)."; SolveInfo solution = engine.solve(goal); assertFalse(solution.isSuccess()); } @Test public void setUnboundElement() throws PrologException { String goal = "java_object('java.lang.String[]', [5], A), java_array_set(A, 2, X)."; SolveInfo solution = engine.solve(goal); assertFalse(solution.isSuccess()); } @Test public void setElementOfWrongType() throws PrologException { String goal = "java_object('java.lang.Integer[]', [5], A), java_array_set(A, 2, zero)."; SolveInfo solution = engine.solve(goal); assertFalse(solution.isSuccess()); } @Test public void setElementOfWrongPrimitiveType() throws PrologException { String goal = "java_object('java.awt.Polygon', [], P), " + "P.xpoints <- get(XP), java_array_set_boolean(XP, 3, 2)."; SolveInfo solution = engine.solve(goal); assertFalse(solution.isSuccess()); } @Test public void lengthOfNonarrayObject() throws PrologException { String goal = "java_object('java.lang.Object', [], Obj), java_array_length(Obj, Size)."; SolveInfo solution = engine.solve(goal); assertFalse(solution.isSuccess()); } @Test public void getElementFromNonarrayObject() throws PrologException { String goal = "java_object('java.lang.Object', [], Obj), java_array_get(Obj, 0, X)."; SolveInfo solution = engine.solve(goal); assertFalse(solution.isSuccess()); } @Test public void getPrimitiveFromNonarrayObject() throws PrologException { String goal = "java_object('java.lang.Object', [], Obj), java_array_get_int(Obj, 0, X)."; SolveInfo solution = engine.solve(goal); assertFalse(solution.isSuccess()); } @Test public void setElementOnNonarrayObject() throws PrologException { String goal = "java_object('java.lang.Integer', [0], I), java_array_set(I, 0, 5)."; SolveInfo solution = engine.solve(goal); assertFalse(solution.isSuccess()); } @Test public void setPrimitiveOnNonarrayObject() throws PrologException { String goal = "java_object('java.lang.Integer', [0], I), java_array_set_int(I, 0, 5)."; SolveInfo solution = engine.solve(goal); assertFalse(solution.isSuccess()); } @Test public void setAndGetElementAreEquals() throws PrologException { String goal = "java_object('java.lang.Object[]', [3], A), " + "java_object('java.lang.Object', [], Obj), " + "java_array_set(A, 2, Obj), java_array_get(A, 2, X), X == Obj."; SolveInfo solution = engine.solve(goal); assertTrue(solution.isSuccess()); } @Test public void arrayLength() throws PrologException { String goal = "java_object('java.lang.Integer[]', [3], A), java_array_length(A, Size)."; SolveInfo solution = engine.solve(goal); assertTrue(solution.isSuccess()); assertEquals(new Int(3), solution.getTerm("Size")); } @Test public void getValueFromUninizializedArray() throws PrologException { String goal = "java_object('java.lang.Integer[]', [3], A), java_array_get(A, 0, I)."; SolveInfo solution = engine.solve(goal); assertTrue(solution.isSuccess()); assertEquals(new Var(), solution.getTerm("I")); } @Test(expected=AssertionError.class) public void getPrimitiveElement() throws PrologException { String goal = "java_object('java.awt.Polygon', [], P), " + "P.xpoints <- get(XP), java_array_get_int(XP, 3, V)."; SolveInfo solution = engine.solve(goal); assertTrue(solution.isSuccess()); assertEquals(new Int(0), solution.getTerm("V")); } @Test(expected=AssertionError.class) public void getPrimitiveElementWithAutomaticCast() throws PrologException { String goal = "java_object('java.awt.Polygon', [], P), " + "P.xpoints <- get(XP), java_array_get_float(XP, 3, V)."; SolveInfo solution = engine.solve(goal); assertTrue(solution.isSuccess()); assertEquals(new alice.tuprolog.Float(0.0f), solution.getTerm("V")); } @Test public void setAndGetIntegerElement() throws PrologException { String goal = "java_object('java.lang.Integer[]', [3], A), " + "java_object('java.lang.Integer', [2], Two), " + "java_array_set(A, 2, Two), java_array_get(A, 2, X)."; SolveInfo solution = engine.solve(goal); assertTrue(solution.isSuccess()); assertEquals(new Int(2), solution.getTerm("X")); } @Test(expected=AssertionError.class) public void setAndGetPrimitiveElement() throws PrologException { String goal = "java_object('java.awt.Polygon', [], P), P.xpoints <- get(XP), " + "java_array_set_int(XP, 3, 2), java_array_get_int(XP, 3, V)."; SolveInfo solution = engine.solve(goal); assertTrue(solution.isSuccess()); assertEquals(new Int(2), solution.getTerm("V")); } @Test(expected=AssertionError.class) public void getPrimitiveElementWithoutAutomaticCast() throws PrologException { String goal = "java_object('java.awt.Polygon', [], P), P.xpoints <- get(XP), " + "java_array_set_float(XP, 3, 2), java_array_get_int(XP, 3, V)."; SolveInfo solution = engine.solve(goal); assertTrue(solution.isSuccess()); assertEquals(new alice.tuprolog.Float(2.0f), solution.getTerm("V")); } }