diff options
| author | Michael Williamson <mike@zwobble.org> | 2016-02-28 13:59:04 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2016-02-28 13:59:13 +0000 |
| commit | d8abd198a39e7c5ba6df1b04359288d833913cf8 (patch) | |
| tree | 8760e1210843ae0be3268639c97a424a7e9bdff5 | |
| parent | eee46d13e629c79f4acb60cc29aa773e2ed735c1 (diff) | |
C#: Write empty interfaces
| -rw-r--r-- | src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java | 20 | ||||
| -rw-r--r-- | src/test/java/org/zwobble/couscous/tests/backends/csharp/CsharpSerializerTests.java | 11 |
2 files changed, 30 insertions, 1 deletions
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 3cfcd33..81c5b78 100644 --- a/src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java +++ b/src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java @@ -326,7 +326,25 @@ public class CsharpSerializer implements NodeVisitor { @Override public void visit(InterfaceNode interfaceNode) { - throw new UnsupportedOperationException(); + // TODO: factor out duplication with visit(ClassNode) + writer.writeStatement(() -> { + writer.writeKeyword("namespace"); + writer.writeSpace(); + writer.writeIdentifier(interfaceNode.getName().getPackage().get()); + writer.startBlock(); + writer.writeStatement(() -> { + writer.writeKeyword("internal"); + writer.writeSpace(); + writer.writeKeyword("interface"); + writer.writeSpace(); + writer.writeIdentifier(interfaceNode.getName().getSimpleName()); + writer.startBlock(); + writeAll(interfaceNode.getMethods()); + writer.endBlock(); + }); + + writer.endBlock(); + }); } private void writeStaticConstructor(ClassNode classNode) { 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 635afca..95df6e4 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 @@ -13,6 +13,7 @@ import static org.zwobble.couscous.ast.ExpressionStatementNode.expressionStateme import static org.zwobble.couscous.ast.FieldAccessNode.fieldAccess; import static org.zwobble.couscous.ast.FormalArgumentNode.formalArg; import static org.zwobble.couscous.ast.IfStatementNode.ifStatement; +import static org.zwobble.couscous.ast.InterfaceNode.declareInterface; import static org.zwobble.couscous.ast.LiteralNode.literal; import static org.zwobble.couscous.ast.LocalVariableDeclarationNode.localVariableDeclaration; import static org.zwobble.couscous.ast.MethodCallNode.methodCall; @@ -25,6 +26,7 @@ import static org.zwobble.couscous.ast.VariableDeclaration.var; import static org.zwobble.couscous.ast.VariableReferenceNode.reference; import static org.zwobble.couscous.ast.WhileNode.whileLoop; import static org.zwobble.couscous.util.ExtraLists.list; +import static org.zwobble.couscous.util.ExtraSets.set; public class CsharpSerializerTests { @Test @@ -301,6 +303,15 @@ public class CsharpSerializerTests { assertEquals("namespace com.example {\n internal class Example {\n internal static X x;\n internal Y y;\n }\n}\n", output); } + @Test + public void interfaceIsInNamespace() { + Node node = declareInterface(TypeName.of("com.example.Example"), set(), list()); + + String output = serialize(node); + + assertEquals("namespace com.example {\n internal interface Example {\n }\n}\n", output); + } + private String serialize(Node node) { return CsharpSerializer.serialize(node); } |
