summaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-07-02 09:51:11 +0100
committerMichael Williamson <mike@zwobble.org>2026-07-02 09:57:26 +0100
commit3d6034f51eba69de538ce2b7ccdd59654870db1d (patch)
treefb729409d57958a01b0755defbb77eb1293e88d7 /src/test/java
parent514a0eefe86174ba535f46f3fb3481c539b79f96 (diff)
Add rust enums
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/org/zwobble/hobgoblin/compiler/output/lang/rust/RustWriterTests.java64
-rw-r--r--src/test/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustEnumMatcher.java45
-rw-r--r--src/test/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustEnumVariantMatcher.java41
-rw-r--r--src/test/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustEnumVariantTupleMatcher.java37
-rw-r--r--src/test/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustTupleFieldMatcher.java37
5 files changed, 224 insertions, 0 deletions
diff --git a/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/rust/RustWriterTests.java b/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/rust/RustWriterTests.java
index f4103c2..84a1056 100644
--- a/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/rust/RustWriterTests.java
+++ b/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/rust/RustWriterTests.java
@@ -37,6 +37,70 @@ public class RustWriterTests {
// == Items ==
@Test
+ public void emptyEnum() throws IOException {
+ var rust = RustEnum.arbitrary().withName(new RustIdentifier("Shape")).build();
+
+ var string = write(writer -> writer.writeItem(rust));
+
+ assertThat(string, equalTo("""
+ pub enum Shape {
+ }"""));
+ }
+
+ @Test
+ public void enumWithTupleVariants() throws IOException {
+ var rust = RustEnum.arbitrary()
+ .withName(new RustIdentifier("Shape"))
+ .withVariants(List.of(
+ RustEnumVariant.arbitrary()
+ .withName(new RustIdentifier("Rectangle"))
+ .withFields(
+ RustEnumVariantTuple.arbitrary()
+ .withFields(List.of(
+ RustTupleField.arbitrary().withType(RustTypePath.of("i32")).build(),
+ RustTupleField.arbitrary().withType(RustTypePath.of("i32")).build()
+ ))
+ .build()
+ )
+ .build(),
+ RustEnumVariant.arbitrary()
+ .withName(new RustIdentifier("Circle"))
+ .withFields(
+ RustEnumVariantTuple.arbitrary()
+ .withFields(List.of(
+ RustTupleField.arbitrary().withType(RustTypePath.of("u64")).build()
+ ))
+ .build()
+ )
+ .build()
+ ))
+ .build();
+
+ var string = write(writer -> writer.writeItem(rust));
+
+ assertThat(string, equalTo("""
+ pub enum Shape {
+ Rectangle(i32, i32),
+ Circle(u64),
+ }"""));
+ }
+
+ @Test
+ public void enumWithDocComment() throws IOException {
+ var rust = RustEnum.arbitrary()
+ .withName(new RustIdentifier("Shape"))
+ .withDocComment(new DocComment("A 2D shape."))
+ .build();
+
+ var string = write(writer -> writer.writeItem(rust));
+
+ assertThat(string, equalTo("""
+ /// A 2D shape.
+ pub enum Shape {
+ }"""));
+ }
+
+ @Test
public void emptyStruct() throws IOException {
var rust = RustStructStruct.arbitrary().withName(new RustIdentifier("Rectangle")).build();
diff --git a/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustEnumMatcher.java b/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustEnumMatcher.java
new file mode 100644
index 0000000..c4668d0
--- /dev/null
+++ b/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustEnumMatcher.java
@@ -0,0 +1,45 @@
+// Generated by hobgoblin.
+
+package org.zwobble.hobgoblin.compiler.output.lang.rust.ast;
+
+// Custom area start: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumMatcher imports
+// Custom area end: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumMatcher imports
+
+public class RustEnumMatcher implements org.zwobble.precisely.Matcher<java.lang.Object> {
+ public static org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumMatcher isRustEnum() {
+ return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumMatcher(java.util.List.of());
+ }
+
+ private final java.util.List<org.zwobble.precisely.Matcher<? super org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnum>> submatchers;
+
+ private RustEnumMatcher(java.util.List<org.zwobble.precisely.Matcher<? super org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnum>> submatchers) {
+ this.submatchers = submatchers;
+ }
+
+ public org.zwobble.precisely.MatchResult match(java.lang.Object actual) {
+ return this.toMatcher().match(actual);
+ }
+
+ public org.zwobble.precisely.TextTree describe() {
+ return this.toMatcher().describe();
+ }
+
+ private org.zwobble.precisely.Matcher<java.lang.Object> toMatcher() {
+ return org.zwobble.precisely.Matchers.instanceOf(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnum.class, this.submatchers);
+ }
+
+ public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumMatcher withName(org.zwobble.precisely.Matcher<? super org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIdentifier> name) {
+ return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumMatcher(java.util.stream.Stream.concat(this.submatchers.stream(), java.util.stream.Stream.of(org.zwobble.precisely.Matchers.has("name", org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnum::name, name))).toList());
+ }
+
+ public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumMatcher withVariants(org.zwobble.precisely.Matcher<? super java.util.List<org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariant>> variants) {
+ return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumMatcher(java.util.stream.Stream.concat(this.submatchers.stream(), java.util.stream.Stream.of(org.zwobble.precisely.Matchers.has("variants", org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnum::variants, variants))).toList());
+ }
+
+ public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumMatcher withDocComment(org.zwobble.precisely.Matcher<? super org.zwobble.hobgoblin.compiler.ast.DocComment> docComment) {
+ return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumMatcher(java.util.stream.Stream.concat(this.submatchers.stream(), java.util.stream.Stream.of(org.zwobble.precisely.Matchers.has("docComment", org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnum::docComment, docComment))).toList());
+ }
+
+ // Custom area start: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumMatcher body
+ // Custom area end: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumMatcher body
+}
diff --git a/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustEnumVariantMatcher.java b/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustEnumVariantMatcher.java
new file mode 100644
index 0000000..2d38854
--- /dev/null
+++ b/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustEnumVariantMatcher.java
@@ -0,0 +1,41 @@
+// Generated by hobgoblin.
+
+package org.zwobble.hobgoblin.compiler.output.lang.rust.ast;
+
+// Custom area start: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariantMatcher imports
+// Custom area end: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariantMatcher imports
+
+public class RustEnumVariantMatcher implements org.zwobble.precisely.Matcher<java.lang.Object> {
+ public static org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariantMatcher isRustEnumVariant() {
+ return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariantMatcher(java.util.List.of());
+ }
+
+ private final java.util.List<org.zwobble.precisely.Matcher<? super org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariant>> submatchers;
+
+ private RustEnumVariantMatcher(java.util.List<org.zwobble.precisely.Matcher<? super org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariant>> submatchers) {
+ this.submatchers = submatchers;
+ }
+
+ public org.zwobble.precisely.MatchResult match(java.lang.Object actual) {
+ return this.toMatcher().match(actual);
+ }
+
+ public org.zwobble.precisely.TextTree describe() {
+ return this.toMatcher().describe();
+ }
+
+ private org.zwobble.precisely.Matcher<java.lang.Object> toMatcher() {
+ return org.zwobble.precisely.Matchers.instanceOf(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariant.class, this.submatchers);
+ }
+
+ public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariantMatcher withName(org.zwobble.precisely.Matcher<? super org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIdentifier> name) {
+ return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariantMatcher(java.util.stream.Stream.concat(this.submatchers.stream(), java.util.stream.Stream.of(org.zwobble.precisely.Matchers.has("name", org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariant::name, name))).toList());
+ }
+
+ public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariantMatcher withFields(org.zwobble.precisely.Matcher<? super org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariantFields> fields) {
+ return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariantMatcher(java.util.stream.Stream.concat(this.submatchers.stream(), java.util.stream.Stream.of(org.zwobble.precisely.Matchers.has("fields", org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariant::fields, fields))).toList());
+ }
+
+ // Custom area start: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariantMatcher body
+ // Custom area end: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariantMatcher body
+}
diff --git a/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustEnumVariantTupleMatcher.java b/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustEnumVariantTupleMatcher.java
new file mode 100644
index 0000000..fd168be
--- /dev/null
+++ b/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustEnumVariantTupleMatcher.java
@@ -0,0 +1,37 @@
+// Generated by hobgoblin.
+
+package org.zwobble.hobgoblin.compiler.output.lang.rust.ast;
+
+// Custom area start: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariantTupleMatcher imports
+// Custom area end: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariantTupleMatcher imports
+
+public class RustEnumVariantTupleMatcher implements org.zwobble.precisely.Matcher<java.lang.Object> {
+ public static org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariantTupleMatcher isRustEnumVariantTuple() {
+ return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariantTupleMatcher(java.util.List.of());
+ }
+
+ private final java.util.List<org.zwobble.precisely.Matcher<? super org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariantTuple>> submatchers;
+
+ private RustEnumVariantTupleMatcher(java.util.List<org.zwobble.precisely.Matcher<? super org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariantTuple>> submatchers) {
+ this.submatchers = submatchers;
+ }
+
+ public org.zwobble.precisely.MatchResult match(java.lang.Object actual) {
+ return this.toMatcher().match(actual);
+ }
+
+ public org.zwobble.precisely.TextTree describe() {
+ return this.toMatcher().describe();
+ }
+
+ private org.zwobble.precisely.Matcher<java.lang.Object> toMatcher() {
+ return org.zwobble.precisely.Matchers.instanceOf(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariantTuple.class, this.submatchers);
+ }
+
+ public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariantTupleMatcher withFields(org.zwobble.precisely.Matcher<? super java.util.List<org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustTupleField>> fields) {
+ return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariantTupleMatcher(java.util.stream.Stream.concat(this.submatchers.stream(), java.util.stream.Stream.of(org.zwobble.precisely.Matchers.has("fields", org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariantTuple::fields, fields))).toList());
+ }
+
+ // Custom area start: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariantTupleMatcher body
+ // Custom area end: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariantTupleMatcher body
+}
diff --git a/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustTupleFieldMatcher.java b/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustTupleFieldMatcher.java
new file mode 100644
index 0000000..bfbf63e
--- /dev/null
+++ b/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustTupleFieldMatcher.java
@@ -0,0 +1,37 @@
+// Generated by hobgoblin.
+
+package org.zwobble.hobgoblin.compiler.output.lang.rust.ast;
+
+// Custom area start: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustTupleFieldMatcher imports
+// Custom area end: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustTupleFieldMatcher imports
+
+public class RustTupleFieldMatcher implements org.zwobble.precisely.Matcher<java.lang.Object> {
+ public static org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustTupleFieldMatcher isRustTupleField() {
+ return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustTupleFieldMatcher(java.util.List.of());
+ }
+
+ private final java.util.List<org.zwobble.precisely.Matcher<? super org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustTupleField>> submatchers;
+
+ private RustTupleFieldMatcher(java.util.List<org.zwobble.precisely.Matcher<? super org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustTupleField>> submatchers) {
+ this.submatchers = submatchers;
+ }
+
+ public org.zwobble.precisely.MatchResult match(java.lang.Object actual) {
+ return this.toMatcher().match(actual);
+ }
+
+ public org.zwobble.precisely.TextTree describe() {
+ return this.toMatcher().describe();
+ }
+
+ private org.zwobble.precisely.Matcher<java.lang.Object> toMatcher() {
+ return org.zwobble.precisely.Matchers.instanceOf(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustTupleField.class, this.submatchers);
+ }
+
+ public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustTupleFieldMatcher withType(org.zwobble.precisely.Matcher<? super org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustType> type) {
+ return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustTupleFieldMatcher(java.util.stream.Stream.concat(this.submatchers.stream(), java.util.stream.Stream.of(org.zwobble.precisely.Matchers.has("type", org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustTupleField::type, type))).toList());
+ }
+
+ // Custom area start: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustTupleFieldMatcher body
+ // Custom area end: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustTupleFieldMatcher body
+}