aboutsummaryrefslogtreecommitdiff
path: root/src/test/java/org
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-01-16 15:51:06 +0000
committerMichael Williamson <mike@zwobble.org>2016-01-16 15:51:06 +0000
commit11627e103110f1abfe6de7f391f6c90475ca888c (patch)
treefd661e497518fcd3e259a04d0fd9c94d8feeb3fc /src/test/java/org
parentd2c8f4478ad23e7a2a01773bdd5a6333f8d56c7d (diff)
Implement non-dynamic return types in C# backend
Diffstat (limited to 'src/test/java/org')
-rw-r--r--src/test/java/org/zwobble/couscous/tests/BackendEvalTests.java3
-rw-r--r--src/test/java/org/zwobble/couscous/tests/MethodRunner.java1
-rw-r--r--src/test/java/org/zwobble/couscous/tests/backends/csharp/CsharpMethodRunner.java9
-rw-r--r--src/test/java/org/zwobble/couscous/tests/backends/csharp/CsharpSerializerTests.java19
4 files changed, 26 insertions, 6 deletions
diff --git a/src/test/java/org/zwobble/couscous/tests/BackendEvalTests.java b/src/test/java/org/zwobble/couscous/tests/BackendEvalTests.java
index bdd492d..3bac39d 100644
--- a/src/test/java/org/zwobble/couscous/tests/BackendEvalTests.java
+++ b/src/test/java/org/zwobble/couscous/tests/BackendEvalTests.java
@@ -154,6 +154,7 @@ public abstract class BackendEvalTests {
public void canCallStaticMethodFromUserDefinedStaticMethod() {
ClassNode classNode = ClassNode.builder("com.example.Example")
.staticMethod("main", method -> method
+ .returns(IntegerValue.REF)
.statement(returns(staticMethodCall(
"java.lang.Integer",
"parseInt",
@@ -169,6 +170,7 @@ public abstract class BackendEvalTests {
public void canCallInstanceMethodWithNoArgumentsOnUserDefinedClass() {
ClassNode classNode = ClassNode.builder("com.example.Example")
.method("main", method -> method
+ .returns(IntegerValue.REF)
.statement(returns(literal(42))))
.build();
PrimitiveValue result = evalExpression(list(classNode),
@@ -182,6 +184,7 @@ public abstract class BackendEvalTests {
ClassNode classNode = ClassNode.builder("com.example.Example")
.method("main", method -> method
.argument(argument)
+ .returns(IntegerValue.REF)
.statement(returns(reference(argument))))
.build();
diff --git a/src/test/java/org/zwobble/couscous/tests/MethodRunner.java b/src/test/java/org/zwobble/couscous/tests/MethodRunner.java
index 1a856ba..ed486fc 100644
--- a/src/test/java/org/zwobble/couscous/tests/MethodRunner.java
+++ b/src/test/java/org/zwobble/couscous/tests/MethodRunner.java
@@ -19,6 +19,7 @@ public interface MethodRunner {
default PrimitiveValue evalExpression(List<ClassNode> classes, ExpressionNode expression) {
ClassNode programNode = ClassNode.builder("Program")
.method(MethodNode.staticMethod("run")
+ .returns(expression.getType())
.statement(ReturnNode.returns(expression))
.build())
.build();
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 0adb5fc..104308b 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
@@ -13,6 +13,7 @@ import org.zwobble.couscous.tests.MethodRunner;
import org.zwobble.couscous.tests.backends.Processes;
import org.zwobble.couscous.util.ExtraLists;
import org.zwobble.couscous.values.PrimitiveValue;
+import org.zwobble.couscous.values.StringValue;
import java.io.IOException;
import java.nio.file.Files;
@@ -97,8 +98,12 @@ public class CsharpMethodRunner implements MethodRunner {
case "System.Boolean":
return value(value.equals("True"));
case "System.MonoType":
- assertThat(value, Matchers.startsWith(NAMESPACE_PREFIX));
- return value(TypeName.of(value.substring(NAMESPACE_PREFIX.length())));
+ if (value.equals("System.String")) {
+ return value(StringValue.REF);
+ } else {
+ assertThat(value, Matchers.startsWith(NAMESPACE_PREFIX));
+ return value(TypeName.of(value.substring(NAMESPACE_PREFIX.length())));
+ }
default:
throw new RuntimeException("Unhandled type: " + type);
}
diff --git a/src/test/java/org/zwobble/couscous/tests/backends/csharp/CsharpSerializerTests.java b/src/test/java/org/zwobble/couscous/tests/backends/csharp/CsharpSerializerTests.java
index 22eeac0..2ca2917 100644
--- a/src/test/java/org/zwobble/couscous/tests/backends/csharp/CsharpSerializerTests.java
+++ b/src/test/java/org/zwobble/couscous/tests/backends/csharp/CsharpSerializerTests.java
@@ -112,13 +112,24 @@ public class CsharpSerializerTests {
@Test
public void methodHasDynamicReturnType() {
String output = serialize(MethodNode.staticMethod("nothing").build());
- assertEquals("internal static dynamic nothing() {\n}\n", output);
+ assertEquals("internal static void nothing() {\n}\n", output);
}
@Test
public void instanceMethodHasNoStaticKeword() {
String output = serialize(MethodNode.builder("nothing").build());
- assertEquals("internal dynamic nothing() {\n}\n", output);
+ assertEquals("internal void nothing() {\n}\n", output);
+ }
+
+ @Test
+ public void methodWithReturnType() {
+ MethodNode methodNode = MethodNode.staticMethod("nothing")
+ .returns(TypeName.of("X"))
+ .build();
+
+ String output = serialize(methodNode);
+
+ assertEquals("internal static Couscous.X nothing() {\n}\n", output);
}
@Test
@@ -130,7 +141,7 @@ public class CsharpSerializerTests {
String output = serialize(methodNode);
- assertEquals("internal static dynamic nothing(Couscous.X x, Couscous.Y y) {\n}\n", output);
+ assertEquals("internal static void nothing(Couscous.X x, Couscous.Y y) {\n}\n", output);
}
@Test
@@ -139,7 +150,7 @@ public class CsharpSerializerTests {
.statement(returns(literal(true)))
.build();
String output = serialize(method);
- assertEquals("internal static dynamic nothing() {\n return true;\n}\n", output);
+ assertEquals("internal static void nothing() {\n return true;\n}\n", output);
}
@Test