aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java20
-rw-r--r--src/test/java/org/zwobble/couscous/tests/backends/csharp/CsharpSerializerTests.java11
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);
}