aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-07-08 12:17:47 +0100
committerMichael Williamson <mike@zwobble.org>2023-07-08 12:17:47 +0100
commita0d962a3609abee2148abcffe54fae9b09663830 (patch)
treee66aaf4c59bb742fe436aa3799ae7092216ca630 /src/test/java
parentb019bf9cebdea64773836f74c5d7db7623d11b18 (diff)
Type-check string addition
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/org/shedlang/compiler/ast/typed/TypedNodeMatchers.java7
-rw-r--r--src/test/java/org/shedlang/compiler/typechecker/TypeCheckerBinaryOperationTests.java13
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));
+ }
}