From 08fa3c8b03ba9b8054ae2c7d4e110c968eebc203 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Wed, 7 Oct 2015 16:32:31 +0100 Subject: Add initial JavaFrontend --- .../zwobble/couscous/tests/JavaToPythonTests.java | 56 ++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 src/test/java/org/zwobble/couscous/tests/JavaToPythonTests.java (limited to 'src/test/java/org/zwobble') diff --git a/src/test/java/org/zwobble/couscous/tests/JavaToPythonTests.java b/src/test/java/org/zwobble/couscous/tests/JavaToPythonTests.java new file mode 100644 index 0000000..cbd8ca5 --- /dev/null +++ b/src/test/java/org/zwobble/couscous/tests/JavaToPythonTests.java @@ -0,0 +1,56 @@ +package org.zwobble.couscous.tests; + +import java.nio.file.Files; + +import org.junit.Test; +import org.zwobble.couscous.ast.TypeName; +import org.zwobble.couscous.frontends.java.JavaFrontend; +import org.zwobble.couscous.tests.backends.python.PythonMethodRunner; +import org.zwobble.couscous.values.PrimitiveValue; + +import static java.util.Arrays.asList; +import static org.junit.Assert.assertEquals; +import static org.zwobble.couscous.tests.util.ExtraFiles.deleteRecursively; +import static org.zwobble.couscous.values.PrimitiveValues.value; + +import lombok.SneakyThrows; +import lombok.val; + +public class JavaToPythonTests { + @Test + public void canEvaluateLiterals() { + assertEquals(value("hello"), evalExpression("\"hello\"")); + assertEquals(value(true), evalExpression("true")); + assertEquals(value(false), evalExpression("false")); + assertEquals(value(42), evalExpression("42")); + } + + @SneakyThrows + private PrimitiveValue evalExpression(String expressionSource) { + val javaClass = + "package com.example;" + + "public class Example {" + + " public static Object main() {" + + " return " + expressionSource + ";" + + " }" + + "}"; + + val directoryPath = Files.createTempDirectory(null); + try { + Files.createDirectories(directoryPath.resolve("com/example")); + Files.write( + directoryPath.resolve("com/example/Example.java"), + asList(javaClass)); + + val classNodes = JavaFrontend.readSourceDirectory(directoryPath); + + return new PythonMethodRunner().runMethod( + classNodes, + TypeName.of("com.example.Example"), + "main", + asList()); + } finally { + deleteRecursively(directoryPath.toFile()); + } + } +} -- cgit v1.2.3