jwt-0.4.4: tests/src/Web/Base64Tests.hs
{-# LANGUAGE BangPatterns, OverloadedStrings, ScopedTypeVariables, TemplateHaskell #-}
{-# LANGUAGE TypeSynonymInstances, FlexibleInstances #-}
module Web.Base64Tests
(
main
, defaultTestGroup
) where
import Control.Applicative
import Test.Tasty
import Test.Tasty.TH
import Test.Tasty.HUnit
import Test.Tasty.QuickCheck
import qualified Test.QuickCheck as QC
import qualified Data.Map as Map
import qualified Data.Text as T
import qualified Data.Text.Lazy as TL
import Data.Aeson.Types
import Data.Maybe
import Data.String (fromString, IsString)
import Web.Base64
defaultTestGroup :: TestTree
defaultTestGroup = $(testGroupGenerator)
main :: IO ()
main = defaultMain defaultTestGroup
case_base64EncodeString = do
let header = "{\"typ\":\"JWT\",\r\n \"alg\":\"HS256\"}"
"eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9" @=? base64Encode header
case_base64EncodeStringNoPadding = do
let header = "sdjkfhaks jdhfak sjldhfa lkjsdf"
"c2Rqa2ZoYWtzIGpkaGZhayBzamxkaGZhIGxranNkZg" @=? base64Encode header
case_base64EncodeDecodeStringNoPadding = do
let header = "sdjkfhaks jdhfak sjldhfa lkjsdf"
header @=? base64Decode (base64Encode header)
case_base64DecodeString = do
let str = "eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9"
"{\"typ\":\"JWT\",\r\n \"alg\":\"HS256\"}" @=? base64Decode str
prop_base64_encode_decode = f
where f :: T.Text -> Bool
f input = base64Decode (base64Encode input) == input
instance Arbitrary T.Text where
arbitrary = fromString <$> (arbitrary :: QC.Gen String)
instance Arbitrary TL.Text where
arbitrary = fromString <$> (arbitrary :: QC.Gen String)