File: QuotedPrintableTest.hs

package info (click to toggle)
haskell-sandi 0.5-6
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 420 kB
  • sloc: haskell: 1,613; ansic: 1,519; makefile: 7
file content (54 lines) | stat: -rw-r--r-- 2,445 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
-- Copyright: (c) Magnus Therning, 2013-2015
-- License: BSD3, found in the LICENSE file

module Codec.Binary.QuotedPrintableTest where

import Codec.TestUtils
import qualified Codec.Binary.QuotedPrintable as QP

import qualified Data.ByteString as BS
import qualified Data.ByteString.Char8 as BSC
import Data.Word (Word8)

import Test.Tasty
import Test.Tasty.HUnit
import Test.Tasty.QuickCheck

case_enc_foobar :: IO ()
case_enc_foobar = do
    BS.empty          @=? QP.encode BS.empty
    BSC.pack "foobar" @=? QP.encode (BSC.pack "foobar")
    BSC.pack "foo=20bar" @=? QP.encode (BSC.pack "foo bar")
    BSC.pack "foo=09bar" @=? QP.encode (BSC.pack "foo\tbar")
    BSC.pack "foo=0Dbar" @=? QP.encode (BSC.pack "foo\rbar")
    BSC.pack "foo=0Abar" @=? QP.encode (BSC.pack "foo\nbar")

case_enc_splitting :: IO ()
case_enc_splitting = do
  BSC.pack "=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=\r\n=3D=3D=3D" @=? QP.encode (BSC.pack "===========================")
  (BSC.pack "=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=\r\n=3D=3D=3D", BSC.pack "") @=? QP.qpEncode (BSC.pack "===========================")
  (BSC.pack "=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D", BSC.pack "") @=? QP.qpEncodeSL (BSC.pack "===========================")

case_dec_foobar :: IO ()
case_dec_foobar = do
    Right BS.empty            @=? QP.decode BS.empty
    Right (BSC.pack "foobar") @=? QP.decode (BSC.pack "foobar")
    Right (BSC.pack "foo bar") @=? QP.decode (BSC.pack "foo bar")
    Right (BSC.pack "foo bar") @=? QP.decode (BSC.pack "foo=20bar")
    Right (BSC.pack "foo\tbar") @=? QP.decode (BSC.pack "foo\tbar")
    Right (BSC.pack "foo\tbar") @=? QP.decode (BSC.pack "foo=09bar")
    Right (BSC.pack "foo\r\nbar") @=? QP.decode (BSC.pack "foo\r\nbar")
    Right (BSC.pack "foobar") @=? QP.decode (BSC.pack "foo=\r\nbar")
    Left (BSC.pack "foo", BSC.pack "\nbar") @=? QP.decode (BSC.pack "foo\nbar")
    Left (BSC.pack "foo", BSC.pack "\rbar") @=? QP.decode (BSC.pack "foo\rbar")

prop_encdec :: [Word8] -> Bool
prop_encdec ws = BS.pack ws == fromRight (QP.decode $ QP.encode $ BS.pack ws)

tests :: TestTree
tests = testGroup
      "Codec.Binary.QuotedPrintableTest"
      [testProperty "encdec" prop_encdec,
       testCase "enc foobar" case_enc_foobar,
       testCase "enc splitting" case_enc_splitting,
       testCase "dec foobar" case_dec_foobar]