diff options
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)); + } +} |
