packages feed

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]