packages feed

bluesky-tools-0.2.0.0: test/Handle.hs

module Handle where

import Data.Text (Text)

import Bluesky.Handle

testAccept :: Text -> IO ()
testAccept t = case makeHandle t of
  Left err -> error $ "Did not accept " <> show t <> ": " <> show err
  Right _ -> pure ()

testReject :: HandleError -> Text -> IO ()
testReject expectedErr t = case makeHandle t of
  Left actualErr
    | expectedErr == actualErr -> pure ()
    | otherwise -> error $ "Wrong error for " <> show t <> ": " <> show actualErr
  Right _ -> error $ "Incorrectly accepted " <> show t

main :: IO ()
main = do
  mapM_ testAccept
    [ "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"
    ]
  testReject BadCharacters "jo@hn.test"
  testReject BadCharacters "💩.test"
  testReject EmptySegment "john..test"
  testReject SegmentEndsWithHyphen "xn--bcher-.tld"
  testReject LastSegmentStartsWithNumber "john.0"
  testReject LastSegmentStartsWithNumber "cn.8"
  testReject BadCharacters "www.masełkowski.pl.com"
  testReject OnlyOneSegment "org"
  testReject EmptySegment "name.org."