diff options
Diffstat (limited to 'src/test/java')
3 files changed, 65 insertions, 6 deletions
diff --git a/src/test/java/org/zwobble/couscous/tests/BackendMethodTests.java b/src/test/java/org/zwobble/couscous/tests/BackendMethodTests.java index e64542a..38887bd 100644 --- a/src/test/java/org/zwobble/couscous/tests/BackendMethodTests.java +++ b/src/test/java/org/zwobble/couscous/tests/BackendMethodTests.java @@ -1,11 +1,7 @@ package org.zwobble.couscous.tests; import org.junit.Test; -import org.zwobble.couscous.ast.ClassNode; -import org.zwobble.couscous.ast.FormalArgumentNode; -import org.zwobble.couscous.ast.LiteralNode; -import org.zwobble.couscous.ast.LocalVariableDeclarationNode; -import org.zwobble.couscous.ast.MethodNode; +import org.zwobble.couscous.ast.*; import org.zwobble.couscous.values.IntegerValue; import org.zwobble.couscous.values.PrimitiveValue; import org.zwobble.couscous.values.PrimitiveValues; @@ -42,6 +38,7 @@ public abstract class BackendMethodTests { @Test public void canReturnLiteralValue() { MethodNode.Builder method = staticMethod("hello") + .returns(StringValue.REF) .statement(returns(literal("hello, world!"))); final java.lang.Object result = runMethod(method); assertEquals(value("hello, world!"), result); @@ -52,6 +49,7 @@ public abstract class BackendMethodTests { FormalArgumentNode arg = formalArg(var(ANY_ID, "x", StringValue.REF)); MethodNode.Builder method = staticMethod("hello") .argument(arg) + .returns(StringValue.REF) .statement(returns(reference(arg))); final java.lang.Object result = runMethod(method, value("hello, world!")); assertEquals(value("hello, world!"), result); @@ -62,6 +60,7 @@ public abstract class BackendMethodTests { FormalArgumentNode arg = formalArg(var(ANY_ID, "x", StringValue.REF)); MethodNode.Builder method = staticMethod("hello") .argument(arg) + .returns(StringValue.REF) .statement(expressionStatement(assign( reference(arg), literal("[updated value]")))) @@ -74,6 +73,7 @@ public abstract class BackendMethodTests { public void canDeclareVariable() { LocalVariableDeclarationNode localVariableDeclaration = localVariableDeclaration(ANY_ID, "x", StringValue.REF, LiteralNode.literal("[initial value]")); MethodNode.Builder method = staticMethod("hello") + .returns(StringValue.REF) .statement(localVariableDeclaration) .statement(returns(reference(localVariableDeclaration))); final java.lang.Object result = runMethod(method); diff --git a/src/test/java/org/zwobble/couscous/tests/backends/csharp/CsharpCompilerMethodTests.java b/src/test/java/org/zwobble/couscous/tests/backends/csharp/CsharpCompilerMethodTests.java new file mode 100644 index 0000000..34bb2b1 --- /dev/null +++ b/src/test/java/org/zwobble/couscous/tests/backends/csharp/CsharpCompilerMethodTests.java @@ -0,0 +1,48 @@ +package org.zwobble.couscous.tests.backends.csharp; + +import org.junit.Ignore; +import org.junit.Test; +import org.zwobble.couscous.tests.BackendMethodTests; +import org.zwobble.couscous.tests.MethodRunner; + +public class CsharpCompilerMethodTests extends BackendMethodTests { + @Ignore + @Test + public void methodWithNoStatementsReturnsUnit() { + } + + @Ignore + @Test + public void canDeclareVariable() { + } + + @Ignore + @Test + public void canDeclareVariableAndThenAssignValues() { + } + + @Ignore + @Test + public void whenConditionIsTrueIfStatementExecutesTrueBranch() { + } + + @Ignore + @Test + public void whenConditionIsFalseIfStatementExecutesTrueBranch() { + } + + @Ignore + @Test + public void whileLoopIsExecutedWhileConditionIsTrue() { + } + + @Ignore + @Test + public void returnWillExitWhileLoopEarly() { + } + + @Override + protected MethodRunner buildMethodRunner() { + return new CsharpMethodRunner(); + } +} 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 104308b..5d9c27d 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 @@ -5,13 +5,16 @@ import com.google.common.collect.Iterators; import org.hamcrest.Matchers; import org.zwobble.couscous.Backend; import org.zwobble.couscous.ast.ClassNode; +import org.zwobble.couscous.ast.LiteralNode; import org.zwobble.couscous.ast.MethodSignature; import org.zwobble.couscous.ast.TypeName; import org.zwobble.couscous.backends.csharp.CsharpBackend; +import org.zwobble.couscous.backends.csharp.CsharpSerializer; import org.zwobble.couscous.backends.python.PythonCodeGenerator; import org.zwobble.couscous.tests.MethodRunner; import org.zwobble.couscous.tests.backends.Processes; import org.zwobble.couscous.util.ExtraLists; +import org.zwobble.couscous.values.ObjectValues; import org.zwobble.couscous.values.PrimitiveValue; import org.zwobble.couscous.values.StringValue; @@ -22,6 +25,7 @@ import java.util.List; import static java.lang.Integer.parseInt; import static org.hamcrest.MatcherAssert.assertThat; +import static org.zwobble.couscous.ast.MethodCallNode.staticMethodCall; import static org.zwobble.couscous.tests.util.ExtraFiles.deleteRecursively; import static org.zwobble.couscous.util.ExtraLists.eagerMap; import static org.zwobble.couscous.util.ExtraLists.list; @@ -57,10 +61,17 @@ public class CsharpMethodRunner implements MethodRunner { String csharpMethodName = PythonCodeGenerator.toName(new MethodSignature( methodName, eagerMap(arguments, argument -> argument.getType()))); + String value = CsharpSerializer.serialize( + staticMethodCall( + TypeName.of(NAMESPACE + "." + className.getQualifiedName()), + csharpMethodName, + eagerMap(arguments, LiteralNode::literal), + // TODO: pass in return type + ObjectValues.OBJECT)); String program = "public class MethodRunnerExample { " + " public static void Main() { " + - " var value = " + NAMESPACE + "." + className.getQualifiedName() + "." + csharpMethodName + "();" + + " var value = " + value + ";" + " System.Console.WriteLine(value.GetType());" + " System.Console.WriteLine(value);" + " }" + |
