aboutsummaryrefslogtreecommitdiff
path: root/src/test/java/org/shedlang/compiler/parser
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-10-22 13:44:07 +0100
committerMichael Williamson <mike@zwobble.org>2023-10-22 13:44:13 +0100
commitbc94a020433c8b7dc0adaa2a6adf235da9c9b4e9 (patch)
tree0c5229feca5ef3a03d1c9321fad3a7531c555d17 /src/test/java/org/shedlang/compiler/parser
parent21a0bdcedd03ac7664bbd3c3fdb5e3ac544a9813 (diff)
Parse visibility for sum type
Diffstat (limited to 'src/test/java/org/shedlang/compiler/parser')
-rw-r--r--src/test/java/org/shedlang/compiler/parser/ParserSumTypeDefinitionTests.java50
1 files changed, 41 insertions, 9 deletions
diff --git a/src/test/java/org/shedlang/compiler/parser/ParserSumTypeDefinitionTests.java b/src/test/java/org/shedlang/compiler/parser/ParserSumTypeDefinitionTests.java
index 65a8ef6f..32392389 100644
--- a/src/test/java/org/shedlang/compiler/parser/ParserSumTypeDefinitionTests.java
+++ b/src/test/java/org/shedlang/compiler/parser/ParserSumTypeDefinitionTests.java
@@ -1,11 +1,13 @@
package org.shedlang.compiler.parser;
import org.junit.jupiter.api.Test;
+import org.shedlang.compiler.types.Visibility;
-import static org.shedlang.compiler.ast.untyped.UntypedNodeMatchers.*;
+import static org.shedlang.compiler.ast.untyped.UntypedNodeMatchers.isUntypedSumTypeDefinitionNode;
+import static org.shedlang.compiler.ast.untyped.UntypedNodeMatchers.isUntypedTypeLevelReferenceNode;
import static org.shedlang.compiler.parser.ParserTesting.parseString;
import static org.zwobble.precisely.AssertThat.assertThat;
-import static org.zwobble.precisely.Matchers.isSequence;
+import static org.zwobble.precisely.Matchers.*;
public class ParserSumTypeDefinitionTests {
@Test
@@ -16,9 +18,11 @@ public class ParserSumTypeDefinitionTests {
assertThat(
node,
- isUntypedSumTypeDefinitionNode("Option", isSequence(
- isUntypedTypeLevelReferenceNode("Some")
- ))
+ isUntypedSumTypeDefinitionNode()
+ .withName("Option")
+ .withVariants(isSequence(
+ isUntypedTypeLevelReferenceNode("Some")
+ ))
);
}
@@ -30,10 +34,38 @@ public class ParserSumTypeDefinitionTests {
assertThat(
node,
- isUntypedSumTypeDefinitionNode("Option", isSequence(
- isUntypedTypeLevelReferenceNode("Some"),
- isUntypedTypeLevelReferenceNode("None")
- ))
+ isUntypedSumTypeDefinitionNode()
+ .withName("Option")
+ .withVariants(isSequence(
+ isUntypedTypeLevelReferenceNode("Some"),
+ isUntypedTypeLevelReferenceNode("None")
+ ))
+ );
+ }
+
+ @Test
+ public void defaultVisibilityIsPrivate() {
+ var source = "sumtype Option = Some;";
+
+ var node = parseString(source, Parser::parseNamespaceStatement);
+
+ assertThat(
+ node,
+ isUntypedSumTypeDefinitionNode()
+ .withVisibility(Visibility.PRIVATE)
+ );
+ }
+
+ @Test
+ public void whenHasPubPrefixThenVisibilityIsPublic() {
+ var source = "pub sumtype Option = Some;";
+
+ var node = parseString(source, Parser::parseNamespaceStatement);
+
+ assertThat(
+ node,
+ isUntypedSumTypeDefinitionNode()
+ .withVisibility(Visibility.PUBLIC)
);
}
}