diff --git a/test/possum_test/handle_test.gleam b/test/possum_test/handle_test.gleam new file mode 100644 index 0000000..14b265f --- /dev/null +++ b/test/possum_test/handle_test.gleam @@ -0,0 +1,68 @@ +import gleam/list +import possum/handle + +pub fn parse_test() -> Nil { + // syntactically valid examples + let assert Ok(_) = + list.try_fold( + [ + "jay.bsky.social", + "8.cn", + "name.t--t", + "XX.LCS.MIT.EDU", + "a.co", + "xn--notarealidn.com", + "xn--fiqa61au8b7zsevnm8ak20mc4a87e.xn--fiqs8s", + "xn--ls8h.test", + "example.t", + ], + Nil, + fn(_, item) { + case handle.parse(item) { + Ok(_) -> Ok(Nil) + Error(err) -> Error(err) + } + }, + ) + + // invalid syntax + let assert Error(handle.InvalidSyntax(_)) = + list.try_fold( + [ + "jo@hn.test", + "💩.test", + "john..test", + "xn--bcher-.tld", + "john.0", + "cn.8", + "www.masełkowski.pl.com", + "org", + "name.org.", + ], + Nil, + fn(_, item) { + case handle.parse(item) { + Ok(_) -> Ok(Nil) + Error(err) -> Error(err) + } + }, + ) + + // valid syntax, but domain is not allowed + let assert Error(handle.DisallowedTopLevelDomain(_)) = + list.try_fold( + [ + "2gzyxa5ihm7nsggfxnu52rck2vv4rvmdlkiu3zzui5du4xyclen53wid.onion", + "laptop.local", + "blah.arpa", + ], + Nil, + fn(_, item) { + case handle.parse(item) { + Ok(_) -> Ok(Nil) + Error(err) -> Error(err) + } + }, + ) + Nil +}