diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-06-09 17:59:45 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-06-09 17:59:45 +0100 |
| commit | f8174b842a7b2fdab34146c543dade8f92e45b1d (patch) | |
| tree | 5cf8cf3f67473ab4c0e27028f4e9f5dee988c3af /src/test/java | |
| parent | 5bddd28d6ba1bcf1b6245771ae3ce715c3079f93 (diff) | |
Add type checking for string literal
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 new file mode 100644 index 00000000..35b15902 --- /dev/null +++ b/src/test/java/org/shedlang/compiler/ast/typed/TypedNodeMatchers.java @@ -0,0 +1,17 @@ +package org.shedlang.compiler.ast.typed; + +import org.zwobble.precisely.Matcher; + +import static org.zwobble.precisely.Matchers.*; + +public class TypedNodeMatchers { + private TypedNodeMatchers() { + } + + public static Matcher<TypedExpressionNode> isTypedStringLiteralNode(String value) { + return instanceOf( + TypedStringLiteralNode.class, + has("value", x -> x.value(), equalTo(value)) + ); + } +} diff --git a/src/test/java/org/shedlang/compiler/ast/untyped/Untyped.java b/src/test/java/org/shedlang/compiler/ast/untyped/Untyped.java new file mode 100644 index 00000000..932ceae1 --- /dev/null +++ b/src/test/java/org/shedlang/compiler/ast/untyped/Untyped.java @@ -0,0 +1,12 @@ +package org.shedlang.compiler.ast.untyped; + +import org.shedlang.compiler.sources.Sources; + +public class Untyped { + private Untyped() { + } + + public static UntypedStringLiteralNode stringLiteral(String value) { + return new UntypedStringLiteralNode(value, Sources.NULL); + } +} diff --git a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerStringLiteralTests.java b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerStringLiteralTests.java new file mode 100644 index 00000000..352fbef9 --- /dev/null +++ b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerStringLiteralTests.java @@ -0,0 +1,21 @@ +package org.shedlang.compiler.typechecker; + +import org.junit.jupiter.api.Test; +import org.shedlang.compiler.ast.untyped.Untyped; +import org.shedlang.compiler.types.Types; + +import static org.shedlang.compiler.ast.typed.TypedNodeMatchers.isTypedStringLiteralNode; +import static org.zwobble.precisely.AssertThat.assertThat; +import static org.zwobble.precisely.Matchers.equalTo; + +public class TypeCheckerStringLiteralTests { + @Test + public void stringLiteralIsTypeCheckedAsString() { + var untyped = Untyped.stringLiteral("hello"); + + var typed = TypeChecker.typeCheckExpression(untyped, TypeCheckerContext.EMPTY); + + assertThat(typed, isTypedStringLiteralNode("hello")); + assertThat(typed.type(), equalTo(Types.STRING)); + } +} |
