From 5a471db6d2518eaed974f5b9dade1bd3a4df719e Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 16 Jan 2016 15:08:09 +0000 Subject: Implement ternary conditionals in C# backend --- .../org/zwobble/couscous/backends/csharp/CsharpSerializer.java | 10 +++++++++- .../tests/backends/csharp/CsharpCompilerEvalTests.java | 10 ---------- .../couscous/tests/backends/csharp/CsharpSerializerTests.java | 7 +++++++ 3 files changed, 16 insertions(+), 11 deletions(-) (limited to 'src') diff --git a/src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java b/src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java index 360fea1..5a3da8e 100644 --- a/src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java +++ b/src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java @@ -87,7 +87,15 @@ public class CsharpSerializer implements NodeVisitor { @Override public void visit(TernaryConditionalNode ternaryConditional) { - throw new UnsupportedOperationException(); + write(ternaryConditional.getCondition()); + writer.writeSpace(); + writer.writeSymbol("?"); + writer.writeSpace(); + write(ternaryConditional.getIfTrue()); + writer.writeSpace(); + writer.writeSymbol(":"); + writer.writeSpace(); + write(ternaryConditional.getIfFalse()); } @Override diff --git a/src/test/java/org/zwobble/couscous/tests/backends/csharp/CsharpCompilerEvalTests.java b/src/test/java/org/zwobble/couscous/tests/backends/csharp/CsharpCompilerEvalTests.java index 9c51117..68870f4 100644 --- a/src/test/java/org/zwobble/couscous/tests/backends/csharp/CsharpCompilerEvalTests.java +++ b/src/test/java/org/zwobble/couscous/tests/backends/csharp/CsharpCompilerEvalTests.java @@ -25,16 +25,6 @@ public class CsharpCompilerEvalTests extends BackendEvalTests { public void canEvaluateOperationsOnIntegers() { } - @Test - @Ignore - public void whenConditionIsTrueThenValueOfConditionalTernaryIsTrueBranch() { - } - - @Test - @Ignore - public void whenConditionIsFalseThenValueOfConditionalTernaryIsFalseBranch() { - } - @Test @Ignore public void canCallMethodWithNoArgumentsOnBuiltin() { 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 582f3f0..875bcbf 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 @@ -7,6 +7,7 @@ import org.zwobble.couscous.backends.csharp.CsharpSerializer; import static org.junit.Assert.assertEquals; import static org.zwobble.couscous.ast.LiteralNode.literal; import static org.zwobble.couscous.ast.ReturnNode.returns; +import static org.zwobble.couscous.ast.TernaryConditionalNode.ternaryConditional; public class CsharpSerializerTests { @Test @@ -36,6 +37,12 @@ public class CsharpSerializerTests { assertEquals("typeof(Couscous.com.example.Example)", output); } + @Test + public void ternaryConditionalWritesConditionAndBranches() { + String output = serialize(ternaryConditional(literal(true), literal(1), literal(2))); + assertEquals("true ? 1 : 2", output); + } + @Test public void returnStatementUsesReturnStatement() { String output = serialize(returns(literal(true))); -- cgit v1.2.3