willow-0.1.0.0: test/Test/Willow/Unit/Encoding/Common.hs
{-|
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]