aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/org/zwobble/couscous/tests/BackendEvalTests.java27
-rw-r--r--src/test/java/org/zwobble/couscous/tests/JavaToPythonTests.java5
-rw-r--r--src/test/java/org/zwobble/couscous/tests/backends/python/PythonSerializerTests.java8
-rw-r--r--src/test/java/org/zwobble/couscous/tests/frontends/java/JavaReaderTests.java29
4 files changed, 62 insertions, 7 deletions
diff --git a/src/test/java/org/zwobble/couscous/tests/BackendEvalTests.java b/src/test/java/org/zwobble/couscous/tests/BackendEvalTests.java
index 63ac1a9..cac2fe0 100644
--- a/src/test/java/org/zwobble/couscous/tests/BackendEvalTests.java
+++ b/src/test/java/org/zwobble/couscous/tests/BackendEvalTests.java
@@ -1,5 +1,6 @@
package org.zwobble.couscous.tests;
+import java.util.Collections;
import java.util.List;
import org.junit.Test;
@@ -7,6 +8,7 @@ import org.zwobble.couscous.ast.ClassNode;
import org.zwobble.couscous.ast.ExpressionNode;
import org.zwobble.couscous.ast.FormalArgumentNode;
import org.zwobble.couscous.ast.MethodCallNode;
+import org.zwobble.couscous.ast.TypeName;
import org.zwobble.couscous.values.BooleanValue;
import org.zwobble.couscous.values.IntegerValue;
import org.zwobble.couscous.values.PrimitiveValue;
@@ -24,6 +26,7 @@ import static org.zwobble.couscous.ast.LiteralNode.literal;
import static org.zwobble.couscous.ast.MethodCallNode.methodCall;
import static org.zwobble.couscous.ast.MethodCallNode.not;
import static org.zwobble.couscous.ast.ReturnNode.returns;
+import static org.zwobble.couscous.ast.StaticMethodCallNode.same;
import static org.zwobble.couscous.ast.StaticMethodCallNode.staticMethodCall;
import static org.zwobble.couscous.ast.TernaryConditionalNode.ternaryConditional;
import static org.zwobble.couscous.ast.VariableDeclaration.var;
@@ -41,6 +44,15 @@ public abstract class BackendEvalTests {
}
@Test
+ public void equalityOnReferenceTypesChecksForIdentity() {
+ assertEquals(
+ value(false),
+ evalExpression(same(
+ constructorCall(TypeName.of("java.lang.Object"), Collections.emptyList()),
+ constructorCall(TypeName.of("java.lang.Object"), Collections.emptyList()))));
+ }
+
+ @Test
public void canEvaluateOperationsOnBooleans() {
assertEquals(
value(true),
@@ -136,8 +148,11 @@ public abstract class BackendEvalTests {
@Test
public void canCallBuiltinStaticMethod() {
- PrimitiveValue result = evalExpression(
- staticMethodCall("java.lang.Integer", "parseInt", literal("42")));
+ PrimitiveValue result = evalExpression(staticMethodCall(
+ "java.lang.Integer",
+ "parseInt",
+ asList(literal("42")),
+ IntegerValue.REF));
assertEquals(value(42), result);
}
@@ -145,10 +160,14 @@ public abstract class BackendEvalTests {
public void canCallStaticMethodFromUserDefinedStaticMethod() {
ClassNode classNode = ClassNode.builder("com.example.Example")
.staticMethod("main", method -> method
- .statement(returns(staticMethodCall("java.lang.Integer", "parseInt", literal("42")))))
+ .statement(returns(staticMethodCall(
+ "java.lang.Integer",
+ "parseInt",
+ asList(literal("42")),
+ IntegerValue.REF))))
.build();
PrimitiveValue result = evalExpression(asList(classNode),
- staticMethodCall("com.example.Example", "main"));
+ staticMethodCall("com.example.Example", "main", asList(), IntegerValue.REF));
assertEquals(value(42), result);
}
diff --git a/src/test/java/org/zwobble/couscous/tests/JavaToPythonTests.java b/src/test/java/org/zwobble/couscous/tests/JavaToPythonTests.java
index 29a5e2a..7493b55 100644
--- a/src/test/java/org/zwobble/couscous/tests/JavaToPythonTests.java
+++ b/src/test/java/org/zwobble/couscous/tests/JavaToPythonTests.java
@@ -30,6 +30,11 @@ public class JavaToPythonTests {
assertEquals(value(false), evalExpression("1 != 1"));
}
+ @Test
+ public void equalityOnReferenceTypesChecksForIdentity() {
+ assertEquals(value(false), evalExpression("new Object() == new Object()"));
+ }
+
private PrimitiveValue evalExpression(String expressionSource) {
try {
final java.lang.String javaClass = "package com.example;" + "public class Example {" + " public static Object main() {" + " return " + expressionSource + ";" + " }" + "}";
diff --git a/src/test/java/org/zwobble/couscous/tests/backends/python/PythonSerializerTests.java b/src/test/java/org/zwobble/couscous/tests/backends/python/PythonSerializerTests.java
index f8956e5..0f21758 100644
--- a/src/test/java/org/zwobble/couscous/tests/backends/python/PythonSerializerTests.java
+++ b/src/test/java/org/zwobble/couscous/tests/backends/python/PythonSerializerTests.java
@@ -10,6 +10,7 @@ import static org.junit.Assert.assertEquals;
import static org.zwobble.couscous.backends.python.PythonSerializer.serialize;
import static org.zwobble.couscous.backends.python.ast.PythonAssignmentNode.pythonAssignment;
import static org.zwobble.couscous.backends.python.ast.PythonAttributeAccessNode.pythonAttributeAccess;
+import static org.zwobble.couscous.backends.python.ast.PythonBinaryOperation.pythonIs;
import static org.zwobble.couscous.backends.python.ast.PythonBooleanLiteralNode.pythonBooleanLiteral;
import static org.zwobble.couscous.backends.python.ast.PythonCallNode.pythonCall;
import static org.zwobble.couscous.backends.python.ast.PythonConditionalExpressionNode.pythonConditionalExpression;
@@ -75,6 +76,13 @@ public class PythonSerializerTests {
}
@Test
+ public void binaryOperationIsSerializedUsingParenthesisedSubExpressions() {
+ assertEquals(
+ "(x) is (y)",
+ serialize(pythonIs(pythonVariableReference("x"), pythonVariableReference("y"))));
+ }
+
+ @Test
public void returnKeywordIsUsedForReturns() {
String output = serialize(pythonReturn(pythonIntegerLiteral(42)));
assertEquals("return 42\n", output);
diff --git a/src/test/java/org/zwobble/couscous/tests/frontends/java/JavaReaderTests.java b/src/test/java/org/zwobble/couscous/tests/frontends/java/JavaReaderTests.java
index c4e3791..7a6aab1 100644
--- a/src/test/java/org/zwobble/couscous/tests/frontends/java/JavaReaderTests.java
+++ b/src/test/java/org/zwobble/couscous/tests/frontends/java/JavaReaderTests.java
@@ -2,6 +2,7 @@ package org.zwobble.couscous.tests.frontends.java;
import java.nio.file.Files;
import java.nio.file.Path;
+import java.util.Collections;
import java.util.List;
import org.junit.Test;
@@ -32,6 +33,7 @@ import static org.zwobble.couscous.ast.FieldDeclarationNode.field;
import static org.zwobble.couscous.ast.LiteralNode.literal;
import static org.zwobble.couscous.ast.MethodCallNode.methodCall;
import static org.zwobble.couscous.ast.MethodCallNode.not;
+import static org.zwobble.couscous.ast.StaticMethodCallNode.same;
import static org.zwobble.couscous.ast.StaticMethodCallNode.staticMethodCall;
import static org.zwobble.couscous.ast.TernaryConditionalNode.ternaryConditional;
import static org.zwobble.couscous.ast.ThisReferenceNode.thisReference;
@@ -117,7 +119,11 @@ public class JavaReaderTests {
@Test
public void canReadStaticMethodCalls() {
assertEquals(
- staticMethodCall(TypeName.of("java.lang.Integer"), "parseInt", asList(literal("42"))),
+ staticMethodCall(
+ TypeName.of("java.lang.Integer"),
+ "parseInt",
+ asList(literal("42")),
+ IntegerValue.REF),
readExpression("Integer.parseInt(\"42\")"));
}
@@ -133,7 +139,8 @@ public class JavaReaderTests {
staticMethodCall(
TypeName.of("com.example.Example"),
"loop",
- asList()),
+ asList(),
+ StringValue.REF),
returnNode.getValue());
}
@@ -145,6 +152,21 @@ public class JavaReaderTests {
}
@Test
+ public void canUseOperatorsOnReferences() {
+ assertEquals(
+ same(
+ constructorCall(TypeName.of("java.lang.Object"), Collections.emptyList()),
+ constructorCall(TypeName.of("java.lang.Object"), Collections.emptyList())),
+ readExpression("new Object() == new Object()"));
+
+ assertEquals(
+ not(same(
+ constructorCall(TypeName.of("java.lang.Object"), Collections.emptyList()),
+ constructorCall(TypeName.of("java.lang.Object"), Collections.emptyList()))),
+ readExpression("new Object() != new Object()"));
+ }
+
+ @Test
public void canUseOperatorsOnIntegers() {
assertEquals(
methodCall(literal(1), "add", asList(literal(2)), IntegerValue.REF),
@@ -246,7 +268,8 @@ public class JavaReaderTests {
staticMethodCall(
TypeName.of("java.lang.Integer"),
"parseInt",
- asList(literal("42")))),
+ asList(literal("42")),
+ IntegerValue.REF)),
readStatement("Integer.parseInt(\"42\");"));
}