From caa7e3a069fa0dfe81834d48850384c38594dd3a Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Tue, 26 Apr 2016 20:54:03 +0100 Subject: Remove C# runtime from main, use for tests only --- .../tests/backends/csharp/CsharpMethodRunner.java | 3 +- .../tests/backends/csharp/CsharpTestBackend.java | 52 ++++++++++++++++++++++ .../tests/backends/csharp/JavaToCsharpTests.java | 3 +- 3 files changed, 54 insertions(+), 4 deletions(-) create mode 100644 src/test/java/org/zwobble/couscous/tests/backends/csharp/CsharpTestBackend.java (limited to 'src/test/java') 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 b9249aa..06e7987 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 @@ -7,7 +7,6 @@ import org.zwobble.couscous.Backend; import org.zwobble.couscous.ast.LiteralNode; import org.zwobble.couscous.ast.MethodSignature; import org.zwobble.couscous.ast.TypeNode; -import org.zwobble.couscous.backends.csharp.CsharpBackend; import org.zwobble.couscous.backends.csharp.CsharpCodeGenerator; import org.zwobble.couscous.backends.csharp.CsharpSerializer; import org.zwobble.couscous.tests.MethodRunner; @@ -39,7 +38,7 @@ public class CsharpMethodRunner implements MethodRunner { public PrimitiveValue runMethod(List classNodes, ScalarType className, String methodName, List arguments, Type returnType) { try { Path directoryPath = Files.createTempDirectory(null); - Backend compiler = new CsharpBackend(directoryPath.resolve("Program.cs"), NAMESPACE); + Backend compiler = new CsharpTestBackend(directoryPath, NAMESPACE); try { compiler.compile(classNodes); return runFunction(directoryPath, className, methodName, arguments, returnType); diff --git a/src/test/java/org/zwobble/couscous/tests/backends/csharp/CsharpTestBackend.java b/src/test/java/org/zwobble/couscous/tests/backends/csharp/CsharpTestBackend.java new file mode 100644 index 0000000..fcf7ab5 --- /dev/null +++ b/src/test/java/org/zwobble/couscous/tests/backends/csharp/CsharpTestBackend.java @@ -0,0 +1,52 @@ +package org.zwobble.couscous.tests.backends.csharp; + +import com.google.common.collect.ImmutableList; +import com.google.common.io.Resources; +import org.zwobble.couscous.Backend; +import org.zwobble.couscous.ast.TypeNode; +import org.zwobble.couscous.backends.csharp.CsharpBackend; + +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.List; + +import static com.google.common.collect.Iterables.transform; + +public class CsharpTestBackend implements Backend { + private static final List RUNTIME_FILES = ImmutableList.of( + "java/lang/Integer.cs", + "java/lang/Object.cs", + "java/util/Arrays.cs", + // TODO: implement Iterable/Iterator in Java + "java/lang/Iterable.cs", + "java/util/Iterator.cs"); + + private final Path outputDirectory; + private final String namespace; + + public CsharpTestBackend(Path outputDirectory, String namespace) { + this.outputDirectory = outputDirectory; + this.namespace = namespace; + } + + @Override + public void compile(List classes) throws IOException { + new CsharpBackend(outputDirectory.resolve("Program.cs"), namespace).compile(classes); + Files.write( + outputDirectory.resolve("Runtime.cs"), + transform( + RUNTIME_FILES, + runtimeFile -> readRuntimeFile(runtimeFile))); + } + + private String readRuntimeFile(String runtimeFile) { + try { + return Resources.toString(Resources.getResource("org/zwobble/couscous/tests/backends/csharp/runtime/" + runtimeFile), StandardCharsets.UTF_8) + .replace("namespace Couscous", "namespace " + namespace); + } catch (IOException exception) { + throw new RuntimeException(exception); + } + } +} 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 356b712..bcc44a8 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 @@ -1,7 +1,6 @@ package org.zwobble.couscous.tests.backends.csharp; import org.zwobble.couscous.CouscousCompiler; -import org.zwobble.couscous.backends.csharp.CsharpBackend; import org.zwobble.couscous.frontends.java.JavaFrontend; import org.zwobble.couscous.tests.CompilerTests; import org.zwobble.couscous.types.ScalarType; @@ -27,7 +26,7 @@ public class JavaToCsharpTests extends CompilerTests { try { CouscousCompiler compiler = new CouscousCompiler( new JavaFrontend(), - new CsharpBackend(directoryPath.resolve("Program.cs"), CsharpMethodRunner.NAMESPACE)); + new CsharpTestBackend(directoryPath, CsharpMethodRunner.NAMESPACE)); compiler.compileDirectory(list(directory), directory); return CsharpMethodRunner.runFunction(directoryPath, type, methodName, arguments, returnType); } finally { -- cgit v1.2.3