summaryrefslogtreecommitdiff
path: root/src/test/java/org
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/java/org')
-rw-r--r--src/test/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriterTests.java61
1 files changed, 61 insertions, 0 deletions
diff --git a/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriterTests.java b/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriterTests.java
new file mode 100644
index 0000000..0a614f4
--- /dev/null
+++ b/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriterTests.java
@@ -0,0 +1,61 @@
+package org.zwobble.hobgoblin.compiler.output.lang.java;
+
+import org.junit.jupiter.api.Test;
+import org.zwobble.hobgoblin.compiler.output.CodeWriter;
+import org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaInterfaceDeclaration;
+import org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaTypeRef;
+
+import java.io.IOException;
+import java.io.StringWriter;
+import java.util.List;
+
+import static org.zwobble.precisely.AssertThat.assertThat;
+import static org.zwobble.precisely.Matchers.equalTo;
+
+public class JavaWriterTests {
+ @Test
+ public void emptyInterfaceDeclaration() throws IOException {
+ var java = new JavaInterfaceDeclaration(
+ "Shape",
+ List.of()
+ );
+
+ var string = write(writer -> writer.writeTypeDeclaration(java));
+
+ assertThat(string, equalTo("""
+ public sealed interface Shape {
+ }
+ """
+ ));
+ }
+
+ @Test
+ public void sealedInterfaceDeclarationWithPermitsTypes() throws IOException {
+ var java = new JavaInterfaceDeclaration(
+ "Shape",
+ List.of(
+ new JavaTypeRef(List.of("abc", "def"), "One"),
+ new JavaTypeRef(List.of("abc", "def"), "Two")
+ )
+ );
+
+ var string = write(writer -> writer.writeTypeDeclaration(java));
+
+ assertThat(string, equalTo("""
+ public sealed interface Shape permits abc.def.One, abc.def.Two {
+ }
+ """
+ ));
+ }
+
+ private String write(Write write) throws IOException {
+ var stringWriter = new StringWriter();
+ var javaWriter = new JavaWriter(new CodeWriter(stringWriter));
+ write.write(javaWriter);
+ return stringWriter.toString();
+ }
+
+ private interface Write {
+ void write(JavaWriter writer) throws IOException;
+ }
+}