diff --git a/test/typecheck/function_params_test.gleam b/test/typecheck/function_params_test.gleam index c761c3f..77e4baa 100644 --- a/test/typecheck/function_params_test.gleam +++ b/test/typecheck/function_params_test.gleam @@ -2,6 +2,7 @@ import glance import gleam/option import gleeunit/should import glimpse/error +import glimpse/internal/typecheck/environment import typecheck/helpers pub fn int_param_test() { @@ -36,7 +37,18 @@ pub fn string_param_test() { |> should.equal(option.Some(glance.NamedType("String", option.None, []))) } -pub fn incorrect_param_return_fails() { +pub fn incorrect_param_return_fails_test() { helpers.error_function_typecheck("fn foo(a: String) -> Nil { a }") |> should.equal(error.InvalidReturnType("foo", "String", "Nil")) } + +pub fn custom_type_param_test() { + let function_out = + helpers.ok_function_env_typecheck( + environment.new() |> environment.add_custom_type("MyType"), + "fn foo(my_type: MyType) -> MyType { my_type }", + ) + + function_out.return + |> should.equal(option.Some(glance.NamedType("MyType", option.None, []))) +} diff --git a/test/typecheck/helpers.gleam b/test/typecheck/helpers.gleam index 5787452..f97f823 100644 --- a/test/typecheck/helpers.gleam +++ b/test/typecheck/helpers.gleam @@ -38,12 +38,19 @@ pub fn glance_function(definition: String) -> glance.Function { definition.definition } -pub fn ok_function_typecheck(definition: String) -> glance.Function { +pub fn ok_function_env_typecheck( + env: Environment, + definition: String, +) -> glance.Function { let function = glance_function(definition) - typecheck.function(environment.new(), function) + typecheck.function(env, function) |> should.be_ok } +pub fn ok_function_typecheck(definition: String) -> glance.Function { + ok_function_env_typecheck(environment.new(), definition) +} + pub fn error_function_typecheck(definition: String) -> error.TypeCheckError { let function = glance_function(definition) typecheck.function(environment.new(), function)