diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-07-08 12:17:47 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-07-08 12:17:47 +0100 |
| commit | a0d962a3609abee2148abcffe54fae9b09663830 (patch) | |
| tree | e66aaf4c59bb742fe436aa3799ae7092216ca630 /src/test/java | |
| parent | b019bf9cebdea64773836f74c5d7db7623d11b18 (diff) | |
Type-check string addition
Diffstat (limited to 'src/test/java')
| -rw-r--r-- | src/test/java/org/shedlang/compiler/ast/typed/TypedNodeMatchers.java | 7 | ||||
| -rw-r--r-- | src/test/java/org/shedlang/compiler/typechecker/TypeCheckerBinaryOperationTests.java | 13 |
2 files changed, 20 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 9b432d5e..d32e0d23 100644 --- a/src/test/java/org/shedlang/compiler/ast/typed/TypedNodeMatchers.java +++ b/src/test/java/org/shedlang/compiler/ast/typed/TypedNodeMatchers.java @@ -153,6 +153,13 @@ public class TypedNodeMatchers { ); } + public static Matcher<TypedExpressionNode> isTypedStringAddNode( + Matcher<TypedExpressionNode> left, + Matcher<TypedExpressionNode> right + ) { + return isTypedBinaryOperationNode(TypedBinaryOperator.STRING_ADD, left, right); + } + public static Matcher<TypedExpressionNode> isTypedStringLiteralNode(String value) { return instanceOf( TypedStringLiteralNode.class, diff --git a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerBinaryOperationTests.java b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerBinaryOperationTests.java index e7721d1d..0a07f682 100644 --- a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerBinaryOperationTests.java +++ b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerBinaryOperationTests.java @@ -92,4 +92,17 @@ public class TypeCheckerBinaryOperationTests { assertThat(error.left(), equalTo(Types.INT)); assertThat(error.right(), equalTo(Types.STRING)); } + + @Test + public void whenBothOperandsAreStringAndOperatorIsAddThenIsTypedAsStringAdd() { + var untyped = Untyped.add(Untyped.stringLiteral("a"), Untyped.stringLiteral("b")); + + var typed = TypeChecker.typeCheckExpression(untyped, TypeCheckerContext.EMPTY); + + assertThat(typed.value(), isTypedStringAddNode( + isTypedStringLiteralNode("a"), + isTypedStringLiteralNode("b") + )); + assertThat(typed.value().type(), equalTo(Types.STRING)); + } } |
