diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-07-03 12:03:51 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-07-03 12:05:09 +0100 |
| commit | 79886c47c164aafb25c533ecc20cb93554fa2c08 (patch) | |
| tree | 090782aa2ca0d281d3e84444e8718d9baed6e9a3 /src/test/java | |
| parent | 16120bc80e13a557a6065f08c1da24453920241a (diff) | |
Type-check components of val node
Diffstat (limited to 'src/test/java')
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") + )); + } +} |
