diff options
| author | Michael Williamson <mike@zwobble.org> | 2026-07-02 09:51:11 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2026-07-02 09:57:26 +0100 |
| commit | 3d6034f51eba69de538ce2b7ccdd59654870db1d (patch) | |
| tree | fb729409d57958a01b0755defbb77eb1293e88d7 /src/test/java | |
| parent | 514a0eefe86174ba535f46f3fb3481c539b79f96 (diff) | |
Add rust enums
Diffstat (limited to 'src/test/java')
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 +} |
