aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-07-03 12:03:51 +0100
committerMichael Williamson <mike@zwobble.org>2023-07-03 12:05:09 +0100
commit79886c47c164aafb25c533ecc20cb93554fa2c08 (patch)
tree090782aa2ca0d281d3e84444e8718d9baed6e9a3 /src/test/java
parent16120bc80e13a557a6065f08c1da24453920241a (diff)
Type-check components of val node
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/org/shedlang/compiler/ast/typed/TypedNodeMatchers.java18
-rw-r--r--src/test/java/org/shedlang/compiler/ast/untyped/Untyped.java11
-rw-r--r--src/test/java/org/shedlang/compiler/typechecker/TypeCheckerValTests.java21
3 files changed, 50 insertions, 0 deletions
diff --git a/src/test/java/org/shedlang/compiler/ast/typed/TypedNodeMatchers.java b/src/test/java/org/shedlang/compiler/ast/typed/TypedNodeMatchers.java
index 26e6acbc..48c67ad1 100644
--- a/src/test/java/org/shedlang/compiler/ast/typed/TypedNodeMatchers.java
+++ b/src/test/java/org/shedlang/compiler/ast/typed/TypedNodeMatchers.java
@@ -106,6 +106,13 @@ public class TypedNodeMatchers {
);
}
+ public static Matcher<TypedTargetNode> isTypedTargetVariable(String name) {
+ return instanceOf(
+ TypedTargetNode.Variable.class,
+ has("name", x -> x.name(), equalTo(name))
+ );
+ }
+
public static Matcher<TypedTypeLevelExpressionNode<?>> isTypedTypeLevelReferenceNode(
String name,
TypeLevelValue value
@@ -116,4 +123,15 @@ public class TypedNodeMatchers {
has("value", x -> x.value(), equalTo(value))
);
}
+
+ public static Matcher<TypedFunctionStatementNode> isTypedValNode(
+ Matcher<TypedTargetNode> target,
+ Matcher<TypedExpressionNode> expression
+ ) {
+ return instanceOf(
+ TypedValNode.class,
+ has("target", x -> x.target(), target),
+ has("expression", x -> x.expression(), expression)
+ );
+ }
}
diff --git a/src/test/java/org/shedlang/compiler/ast/untyped/Untyped.java b/src/test/java/org/shedlang/compiler/ast/untyped/Untyped.java
index f93b7d5a..4d61dfc2 100644
--- a/src/test/java/org/shedlang/compiler/ast/untyped/Untyped.java
+++ b/src/test/java/org/shedlang/compiler/ast/untyped/Untyped.java
@@ -69,7 +69,18 @@ public class Untyped {
return new UntypedStringLiteralNode(value, Sources.NULL);
}
+ public static UntypedTargetNode targetVariable(String name) {
+ return new UntypedTargetNode.Variable(name, Sources.NULL);
+ }
+
public static UntypedTypeLevelReferenceNode typeLevelReference(String name) {
return new UntypedTypeLevelReferenceNode(name, Sources.NULL);
}
+
+ public static UntypedValNode val(
+ UntypedTargetNode target,
+ UntypedExpressionNode expression
+ ) {
+ return new UntypedValNode(target, expression, Sources.NULL);
+ }
}
diff --git a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerValTests.java b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerValTests.java
new file mode 100644
index 00000000..ec1e3c8a
--- /dev/null
+++ b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerValTests.java
@@ -0,0 +1,21 @@
+package org.shedlang.compiler.typechecker;
+
+import org.junit.jupiter.api.Test;
+import org.shedlang.compiler.ast.untyped.Untyped;
+
+import static org.shedlang.compiler.ast.typed.TypedNodeMatchers.*;
+import static org.zwobble.precisely.AssertThat.assertThat;
+
+public class TypeCheckerValTests {
+ @Test
+ public void expressionIsTypeChecked() {
+ var untyped = Untyped.val(Untyped.targetVariable("x"), Untyped.stringLiteral("hello"));
+
+ var typed = TypeChecker.typeCheckFunctionStatement(untyped, TypeCheckerContext.EMPTY);
+
+ assertThat(typed.value(), isTypedValNode(
+ isTypedTargetVariable("x"),
+ isTypedStringLiteralNode("hello")
+ ));
+ }
+}