From 166a205aeb4c595b40b8ffe4c7d745b13031e3b3 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Mon, 5 Oct 2015 22:26:29 +0100 Subject: Add support for static method calls to Python backend --- src/test/java/org/zwobble/couscous/tests/BackendEvalTests.java | 8 ++++++++ .../couscous/tests/backends/python/PythonMethodRunner.java | 4 ++-- .../couscous/tests/backends/python/PythonSerializerTests.java | 7 +++++++ .../org/zwobble/couscous/tests/interpreter/EvaluatorTests.java | 7 ------- 4 files changed, 17 insertions(+), 9 deletions(-) (limited to 'src/test/java/org') 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 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; @@ -144,6 +145,12 @@ public class PythonSerializerTests { assertEquals("x = 42\n", output); } + @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)); 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 @@ -93,13 +93,6 @@ public class EvaluatorTests extends BackendEvalTests { assertEquals(new UnexpectedValueType(IntegerValue.REF, StringValue.REF), exception); } - @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") -- cgit v1.2.3