diff options
| author | Michael Williamson <mike@zwobble.org> | 2016-02-06 17:38:26 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2016-02-06 17:38:26 +0000 |
| commit | 2e7d1bb669e3ee26efe060ca5ea92ef73cebff83 (patch) | |
| tree | 204c038ed8dff909f3bed79145144749b266d107 /src/test/java/org/zwobble/couscous/tests/backends | |
| parent | a063cdcec0ecfe449a22f0134dc559a40583fc09 (diff) | |
Add return type to MethodSignature
Diffstat (limited to 'src/test/java/org/zwobble/couscous/tests/backends')
3 files changed, 20 insertions, 18 deletions
diff --git a/src/test/java/org/zwobble/couscous/tests/backends/csharp/CsharpMethodRunner.java b/src/test/java/org/zwobble/couscous/tests/backends/csharp/CsharpMethodRunner.java index d293f84..88cce22 100644 --- a/src/test/java/org/zwobble/couscous/tests/backends/csharp/CsharpMethodRunner.java +++ b/src/test/java/org/zwobble/couscous/tests/backends/csharp/CsharpMethodRunner.java @@ -1,7 +1,6 @@ package org.zwobble.couscous.tests.backends.csharp; import com.google.common.collect.ImmutableList; -import com.google.common.collect.Iterables; import com.google.common.collect.Iterators; import org.hamcrest.Matchers; import org.zwobble.couscous.Backend; @@ -15,7 +14,10 @@ import org.zwobble.couscous.backends.csharp.CsharpSerializer; import org.zwobble.couscous.tests.MethodRunner; import org.zwobble.couscous.tests.backends.Processes; import org.zwobble.couscous.util.ExtraLists; -import org.zwobble.couscous.values.*; +import org.zwobble.couscous.values.PrimitiveValue; +import org.zwobble.couscous.values.PrimitiveValues; +import org.zwobble.couscous.values.StringValue; +import org.zwobble.couscous.values.UnitValue; import java.io.IOException; import java.nio.file.Files; @@ -34,17 +36,13 @@ public class CsharpMethodRunner implements MethodRunner { private static final String NAMESPACE = "Couscous"; @Override - public PrimitiveValue runMethod(List<ClassNode> classNodes, TypeName className, String methodName, List<PrimitiveValue> arguments) { + public PrimitiveValue runMethod(List<ClassNode> classNodes, TypeName className, String methodName, List<PrimitiveValue> arguments, TypeName returnType) { try { Path directoryPath = Files.createTempDirectory(null); Backend compiler = new CsharpBackend(directoryPath, NAMESPACE); try { compiler.compile(classNodes); - ClassNode classNode = Iterables.find(classNodes, c -> c.getName().equals(className)); - boolean isVoid = Iterables.find(classNode.getMethods(), method -> method.getName().equals(methodName)) - .getReturnType() - .equals(UnitValue.REF); - return runFunction(directoryPath, className, methodName, arguments, isVoid); + return runFunction(directoryPath, className, methodName, arguments, returnType); } finally { deleteRecursively(directoryPath.toFile()); } @@ -58,21 +56,22 @@ public class CsharpMethodRunner implements MethodRunner { TypeName className, String methodName, List<PrimitiveValue> arguments, - boolean isVoid) + TypeName returnType) throws IOException, InterruptedException { MethodSignature signature = new MethodSignature( methodName, - eagerMap(arguments, argument -> argument.getType())); + eagerMap(arguments, argument -> argument.getType()), + returnType); String csharpMethodName = Names.toUniqueName(signature); String value = CsharpSerializer.serialize( staticMethodCall( TypeName.of(NAMESPACE + "." + className.getQualifiedName()), csharpMethodName, eagerMap(arguments, LiteralNode::literal), - // TODO: pass in return type - ObjectValues.OBJECT)); + returnType)); + boolean isVoid = returnType.equals(UnitValue.REF); String body = isVoid ? value + ";" : "var value = " + value + ";" + diff --git a/src/test/java/org/zwobble/couscous/tests/backends/csharp/JavaToCsharpTests.java b/src/test/java/org/zwobble/couscous/tests/backends/csharp/JavaToCsharpTests.java index e578ef3..1ab76bd 100644 --- a/src/test/java/org/zwobble/couscous/tests/backends/csharp/JavaToCsharpTests.java +++ b/src/test/java/org/zwobble/couscous/tests/backends/csharp/JavaToCsharpTests.java @@ -47,7 +47,8 @@ public class JavaToCsharpTests extends CompilerTests { Path directory, TypeName type, String methodName, - List<PrimitiveValue> arguments) throws IOException, InterruptedException + List<PrimitiveValue> arguments, + TypeName returnType) throws IOException, InterruptedException { Path directoryPath = Files.createTempDirectory(null); try { @@ -55,7 +56,7 @@ public class JavaToCsharpTests extends CompilerTests { new JavaFrontend(), new CsharpBackend(directoryPath, "Couscous")); compiler.compileDirectory(list(directory), directory); - return CsharpMethodRunner.runFunction(directoryPath, type, methodName, arguments, false); + return CsharpMethodRunner.runFunction(directoryPath, type, methodName, arguments, returnType); } finally { deleteRecursively(directoryPath.toFile()); } 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 e541459..a4a57d1 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 @@ -28,13 +28,13 @@ import static org.zwobble.couscous.values.PrimitiveValues.value; public class PythonMethodRunner implements MethodRunner { @Override - public PrimitiveValue runMethod(List<ClassNode> classNodes, TypeName className, String methodName, List<PrimitiveValue> arguments) { + public PrimitiveValue runMethod(List<ClassNode> classNodes, TypeName className, String methodName, List<PrimitiveValue> arguments, TypeName returnType) { try { Path directoryPath = Files.createTempDirectory(null); PythonBackend compiler = new PythonBackend(directoryPath, "couscous"); try { compiler.compile(classNodes); - return runFunction(directoryPath, className, methodName, arguments); + return runFunction(directoryPath, className, methodName, arguments, returnType); } finally { deleteRecursively(directoryPath.toFile()); } @@ -47,13 +47,15 @@ public class PythonMethodRunner implements MethodRunner { Path directoryPath, TypeName className, String methodName, - List<PrimitiveValue> arguments) + List<PrimitiveValue> arguments, + TypeName returnType) throws IOException, InterruptedException { String argumentsString = Joiner.on(", ").join(arguments.stream().map(PythonCodeGenerator::generateCode).map(PythonSerializer::serialize).iterator()); MethodSignature signature = new MethodSignature( methodName, - eagerMap(arguments, argument -> argument.getType())); + eagerMap(arguments, argument -> argument.getType()), + returnType); String pythonMethodName = Names.toUniqueName(signature); String program = "from couscous." + className.getQualifiedName() + " import " + className.getSimpleName() + ";" + "value = " + className.getSimpleName() + "." + pythonMethodName + "(" + argumentsString + ");" + |
