diff options
Diffstat (limited to 'src/test/java/org/zwobble')
| -rw-r--r-- | src/test/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerConstructedTypeTests.java | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/src/test/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerConstructedTypeTests.java b/src/test/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerConstructedTypeTests.java index fa511ba..09c0f8c 100644 --- a/src/test/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerConstructedTypeTests.java +++ b/src/test/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerConstructedTypeTests.java @@ -3,10 +3,12 @@ package org.zwobble.hobgoblin.compiler.typechecker; import org.junit.jupiter.api.Test; import org.zwobble.hobgoblin.compiler.ast.untyped.UntypedArb; import org.zwobble.hobgoblin.compiler.sources.NullSource; +import org.zwobble.hobgoblin.compiler.typechecker.errors.WrongNumberOfTypeLevelArgsError; import org.zwobble.hobgoblin.compiler.types.*; import java.util.List; +import static org.junit.jupiter.api.Assertions.assertThrows; import static org.zwobble.hobgoblin.compiler.ast.typed.TypedNodeMatchers.isTypedConstructedTypeNode; import static org.zwobble.precisely.AssertThat.assertThat; import static org.zwobble.precisely.Matchers.equalTo; @@ -31,4 +33,47 @@ public class TypeCheckerConstructedTypeTests { equalTo(new ConstructedNativeType(listTypeConstructor, List.of(int32Type))) )); } + + @Test + public void whenThereAreTooFewArgsThenErrorIsThrown() { + var untyped = UntypedArb.constructedType( + UntypedArb.typeLevelReference("List"), + List.of() + ); + var context = TypeCheckerContextArb.namespaceContext(); + var listType = SimpleNativeType.builtin("List"); + var listTypeConstructor = new TypeConstructor<>(List.of(new TypeParam("T")), listType); + context.declare("List", new TypeLevelValueType(listTypeConstructor), NullSource.INSTANCE); + + var error = assertThrows( + WrongNumberOfTypeLevelArgsError.class, + () -> TypeChecker.typeCheckTypeLevelExpression(untyped, context) + ); + + assertThat(error.expectedArgCount(), equalTo(1)); + assertThat(error.actualArgCount(), equalTo(0)); + } + + @Test + public void whenThereAreTooManyArgsThenErrorIsThrown() { + var untyped = UntypedArb.constructedType( + UntypedArb.typeLevelReference("List"), + List.of( + UntypedArb.typeLevelReference("Int32"), + UntypedArb.typeLevelReference("Int64") + ) + ); + var context = TypeCheckerContextArb.namespaceContext(); + var listType = SimpleNativeType.builtin("List"); + var listTypeConstructor = new TypeConstructor<>(List.of(new TypeParam("T")), listType); + context.declare("List", new TypeLevelValueType(listTypeConstructor), NullSource.INSTANCE); + + var error = assertThrows( + WrongNumberOfTypeLevelArgsError.class, + () -> TypeChecker.typeCheckTypeLevelExpression(untyped, context) + ); + + assertThat(error.expectedArgCount(), equalTo(1)); + assertThat(error.actualArgCount(), equalTo(2)); + } } |
