diff options
9 files changed, 57 insertions, 32 deletions
diff --git a/src/main/java/org/zwobble/couscous/backends/csharp/CsharpBackend.java b/src/main/java/org/zwobble/couscous/backends/csharp/CsharpBackend.java index bccbe98..a086fe2 100644 --- a/src/main/java/org/zwobble/couscous/backends/csharp/CsharpBackend.java +++ b/src/main/java/org/zwobble/couscous/backends/csharp/CsharpBackend.java @@ -1,13 +1,9 @@ package org.zwobble.couscous.backends.csharp; -import com.google.common.collect.ImmutableList; -import com.google.common.collect.Iterables; -import com.google.common.io.Resources; import org.zwobble.couscous.Backend; import org.zwobble.couscous.ast.TypeNode; import java.io.IOException; -import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.util.List; @@ -15,14 +11,6 @@ import java.util.List; import static com.google.common.collect.Iterables.transform; public class CsharpBackend implements Backend { - private static final List<String> 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 outputFilePath; private final String namespace; @@ -36,22 +24,9 @@ public class CsharpBackend implements Backend { outputFilePath.getParent().toFile().mkdirs(); Files.write( outputFilePath, - Iterables.<String>concat( - transform( - classes, - classNode -> compileClass(classNode)), - transform( - RUNTIME_FILES, - runtimeFile -> readRuntimeFile(runtimeFile)))); - } - - private String readRuntimeFile(String runtimeFile) { - try { - return Resources.toString(Resources.getResource("csharp/runtime/" + runtimeFile), StandardCharsets.UTF_8) - .replace("namespace Couscous", "namespace " + namespace); - } catch (IOException exception) { - throw new RuntimeException(exception); - } + transform( + classes, + classNode -> compileClass(classNode))); } private String compileClass(TypeNode classNode) { 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<TypeNode> classNodes, ScalarType className, String methodName, List<PrimitiveValue> 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<String> 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<TypeNode> 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 { diff --git a/src/main/resources/csharp/runtime/java/lang/Integer.cs b/src/test/resources/org/zwobble/couscous/tests/backends/csharp/runtime/java/lang/Integer.cs index 6ed87db..6ed87db 100644 --- a/src/main/resources/csharp/runtime/java/lang/Integer.cs +++ b/src/test/resources/org/zwobble/couscous/tests/backends/csharp/runtime/java/lang/Integer.cs diff --git a/src/main/resources/csharp/runtime/java/lang/Iterable.cs b/src/test/resources/org/zwobble/couscous/tests/backends/csharp/runtime/java/lang/Iterable.cs index 314dbce..314dbce 100644 --- a/src/main/resources/csharp/runtime/java/lang/Iterable.cs +++ b/src/test/resources/org/zwobble/couscous/tests/backends/csharp/runtime/java/lang/Iterable.cs diff --git a/src/main/resources/csharp/runtime/java/lang/Object.cs b/src/test/resources/org/zwobble/couscous/tests/backends/csharp/runtime/java/lang/Object.cs index 14a8f44..14a8f44 100644 --- a/src/main/resources/csharp/runtime/java/lang/Object.cs +++ b/src/test/resources/org/zwobble/couscous/tests/backends/csharp/runtime/java/lang/Object.cs diff --git a/src/main/resources/csharp/runtime/java/util/Arrays.cs b/src/test/resources/org/zwobble/couscous/tests/backends/csharp/runtime/java/util/Arrays.cs index 96b31d4..96b31d4 100644 --- a/src/main/resources/csharp/runtime/java/util/Arrays.cs +++ b/src/test/resources/org/zwobble/couscous/tests/backends/csharp/runtime/java/util/Arrays.cs diff --git a/src/main/resources/csharp/runtime/java/util/Iterator.cs b/src/test/resources/org/zwobble/couscous/tests/backends/csharp/runtime/java/util/Iterator.cs index 9c0098a..9c0098a 100644 --- a/src/main/resources/csharp/runtime/java/util/Iterator.cs +++ b/src/test/resources/org/zwobble/couscous/tests/backends/csharp/runtime/java/util/Iterator.cs |
