aboutsummaryrefslogtreecommitdiff
path: root/src/test
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2015-10-05 22:26:29 +0100
committerMichael Williamson <mike@zwobble.org>2015-10-05 22:26:29 +0100
commit166a205aeb4c595b40b8ffe4c7d745b13031e3b3 (patch)
treeaa493482f4ca312c1f23913ebc2f57b71d8aa590 /src/test
parent44e4b877baea47c0465e1029bdbedc848381999f (diff)
Add support for static method calls to Python backend
Diffstat (limited to 'src/test')
-rw-r--r--src/test/java/org/zwobble/couscous/tests/BackendEvalTests.java8
-rw-r--r--src/test/java/org/zwobble/couscous/tests/backends/python/PythonMethodRunner.java4
-rw-r--r--src/test/java/org/zwobble/couscous/tests/backends/python/PythonSerializerTests.java7
-rw-r--r--src/test/java/org/zwobble/couscous/tests/interpreter/EvaluatorTests.java7
4 files changed, 17 insertions, 9 deletions
diff --git a/src/test/java/org/zwobble/couscous/tests/BackendEvalTests.java b/src/test/java/org/zwobble/couscous/tests/BackendEvalTests.java
index 0554025..e2ce667 100644
--- a/src/test/java/org/zwobble/couscous/tests/BackendEvalTests.java
+++ b/src/test/java/org/zwobble/couscous/tests/BackendEvalTests.java
@@ -11,6 +11,7 @@ import static java.util.Arrays.asList;
import static org.junit.Assert.assertEquals;
import static org.zwobble.couscous.ast.LiteralNode.literal;
import static org.zwobble.couscous.ast.MethodCallNode.methodCall;
+import static org.zwobble.couscous.ast.StaticMethodCallNode.staticMethodCall;
import static org.zwobble.couscous.values.PrimitiveValues.value;
import lombok.val;
@@ -56,5 +57,12 @@ public abstract class BackendEvalTests {
assertEquals(value("ell"), result);
}
+ @Test
+ public void canCallBuiltinStaticMethod() {
+ val result = evalExpression(
+ staticMethodCall("java.lang.Integer", "parseInt", literal("42")));
+ assertEquals(value(42), result);
+ }
+
protected abstract PrimitiveValue evalExpression(ExpressionNode expression);
}
diff --git a/src/test/java/org/zwobble/couscous/tests/backends/python/PythonMethodRunner.java b/src/test/java/org/zwobble/couscous/tests/backends/python/PythonMethodRunner.java
index 549fb51..cd15b24 100644
--- a/src/test/java/org/zwobble/couscous/tests/backends/python/PythonMethodRunner.java
+++ b/src/test/java/org/zwobble/couscous/tests/backends/python/PythonMethodRunner.java
@@ -33,10 +33,10 @@ public class PythonMethodRunner implements MethodRunner {
ClassNode classNode,
String methodName,
List<PrimitiveValue> arguments) {
- val compiler = new PythonCompiler();
val directoryPath = Files.createTempDirectory(null);
+ val compiler = new PythonCompiler(directoryPath);
try {
- compiler.compile(asList(classNode), directoryPath);
+ compiler.compile(asList(classNode));
val argumentsString = Joiner.on(", ").join(arguments.stream()
.map(PythonCodeGenerator::generateCode)
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 2f6d856..ecd5d7c 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
@@ -13,6 +13,7 @@ import static org.zwobble.couscous.backends.python.ast.PythonBooleanLiteralNode.
import static org.zwobble.couscous.backends.python.ast.PythonCallNode.pythonCall;
import static org.zwobble.couscous.backends.python.ast.PythonConditionalExpressionNode.pythonConditionalExpression;
import static org.zwobble.couscous.backends.python.ast.PythonGetSliceNode.pythonGetSlice;
+import static org.zwobble.couscous.backends.python.ast.PythonImportNode.pythonImport;
import static org.zwobble.couscous.backends.python.ast.PythonIntegerLiteralNode.pythonIntegerLiteral;
import static org.zwobble.couscous.backends.python.ast.PythonModuleNode.pythonModule;
import static org.zwobble.couscous.backends.python.ast.PythonPassNode.PASS;
@@ -145,6 +146,12 @@ public class PythonSerializerTests {
}
@Test
+ public void importIsSerializedUsingImportKeyword() {
+ val output = serialize(pythonImport("com.example.Program"));
+ assertEquals("import com.example.Program\n", output);
+ }
+
+ @Test
public void moduleIsSerializedStatements() {
val classNode = pythonModule(asList(PASS));
val output = serialize(classNode);
diff --git a/src/test/java/org/zwobble/couscous/tests/interpreter/EvaluatorTests.java b/src/test/java/org/zwobble/couscous/tests/interpreter/EvaluatorTests.java
index ab134f4..bc6a205 100644
--- a/src/test/java/org/zwobble/couscous/tests/interpreter/EvaluatorTests.java
+++ b/src/test/java/org/zwobble/couscous/tests/interpreter/EvaluatorTests.java
@@ -94,13 +94,6 @@ public class EvaluatorTests extends BackendEvalTests {
}
@Test
- public void canCallStaticMethod() {
- val result = eval(emptyEnvironment(),
- staticMethodCall("java.lang.Integer", "parseInt", literal("42")));
- assertEquals(new IntegerInterpreterValue(42), result);
- }
-
- @Test
public void canCallStaticMethodFromAnotherStaticMethod() {
val classNode = ClassNode.builder("com.example.Program")
.method(MethodNode.staticMethod("main")