{-| Description: Copyright: (c) 2020 Samuel May License: MPL-2.0 Maintainer: ag.eitilt@gmail.com Stability: experimental Portability: portable -} module Test.Willow.Unit.Encoding.Common ( decodeTest , decodeAscii , encodeTest , encodeAscii ) where import qualified Data.ByteString as BS import qualified Data.ByteString.Short as BS.SH import qualified Data.Text as T import qualified Data.Word as W import qualified Test.HUnit as U import Test.HUnit ( (~:), (~?=) ) import Web.Willow.Common.Encoding decodeTest :: Encoding -> String -> [W.Word8] -> Maybe String -> U.Test decodeTest enc name bs Nothing = name ~: fst (decode (initialDecoderState enc) $ BS.pack bs) ~?= [Left $ BS.SH.pack bs] decodeTest enc name bs (Just cs) = name ~: fst (decode' (initialDecoderState enc) $ BS.pack bs) ~?= T.pack cs decodeAscii :: Encoding -> Char -> U.Test decodeAscii enc char = decodeTest enc [char] [fromIntegral $ fromEnum char] $ Just [char] encodeTest :: Encoding -> String -> String -> Maybe [W.Word8] -> U.Test encodeTest enc name cs Nothing = name ~: fst (encode (initialEncoderState enc) $ T.pack cs) ~?= map Left cs encodeTest enc name cs (Just bs) = name ~: fst (encode' (initialEncoderState enc) $ T.pack cs) ~?= BS.pack bs encodeAscii :: Encoding -> Char -> U.Test encodeAscii enc char = encodeTest enc [char] [char] $ Just [fromIntegral $ fromEnum char]