summaryrefslogtreecommitdiff
path: root/test-src/DataencUT.hs
diff options
context:
space:
mode:
Diffstat (limited to 'test-src/DataencUT.hs')
-rw-r--r--test-src/DataencUT.hs225
1 files changed, 225 insertions, 0 deletions
diff --git a/test-src/DataencUT.hs b/test-src/DataencUT.hs
new file mode 100644
index 0000000..af91a0f
--- /dev/null
+++ b/test-src/DataencUT.hs
@@ -0,0 +1,225 @@
1{-# OPTIONS_GHC -XTemplateHaskell #-}
2{-
3 - Copyright : (c) 2007 Magnus Therning
4 - License : BSD3
5 -}
6
7module DataencUT
8 where
9
10import Test.HUnit
11import Control.Monad
12import System.Exit
13import Data.Maybe
14import qualified Test.Framework.Providers.API as TFAPI
15import Test.Framework.TH
16import Test.Framework.Providers.HUnit
17
18import Codec.Binary.DataEncoding
19import qualified Codec.Binary.Yenc as Yenc
20
21-- {{{1 checkAssertions
22checkAssertions (suite, desc, enc, dec, codec) = do
23 enc @=? encode codec dec
24 dec @=? fromJust (decode codec enc)
25
26-- {{{1 uuencode tests
27uuTestData =
28 [ ("uu", "empty", "", [], uu)
29 , ("uu", "\\0", "``", [0], uu)
30 , ("uu", "\\255", "_P", [255], uu)
31 , ("uu", "AA", "04$", [65, 65], uu)
32 , ("uu", "AAA", "04%!", [65, 65, 65], uu)
33 , ("uu", "AAAA", "04%!00", [65, 65, 65, 65], uu)
34 , ("uu", "Example", "17AA;7!L90", [69,120,97,109,112,108,101], uu)
35 ]
36case_uuTests = mapM_ checkAssertions uuTestData
37
38case_uuTests2 = do
39 "EI2" @=? unchop uu (chop uu 1 "EI2")
40 "EI3-" @=? unchop uu (chop uu 1 "EI3-")
41 "EI3-EE" @=? unchop uu (chop uu 1 "EI3-EE")
42 [0..255] @=? fromJust (decode uu $ unchop uu $ chop uu 1 $ encode uu [0..255])
43 [0..255] @=? fromJust (decode uu $ unchop uu $ chop uu 61 $ encode uu [0..255])
44 [0..255] @=? fromJust (decode uu $ unchop uu $ chop uu 100 $ encode uu [0..255])
45
46case_uuTestsFail = do
47 Nothing @=? decode uu "A"
48 Nothing @=? decode uu "aa"
49
50-- {{{1 xxencode tests
51xxTestData =
52 [ ("xx", "empty", "", [], xx)
53 , ("xx", "\\0", "++", [0], xx)
54 , ("xx", "\\255", "zk", [255], xx)
55 , ("xx", "AA", "EI2", [65, 65], xx)
56 , ("xx", "AAA", "EI3-", [65, 65, 65], xx)
57 , ("xx", "AAAA", "EI3-EE", [65, 65, 65, 65], xx)
58 , ("xx", "Example", "FLVVPL-gNE", [69,120,97,109,112,108,101], xx)
59 ]
60case_xxTest = mapM_ checkAssertions xxTestData
61
62case_xxTests2 = do
63 "EI2" @=? unchop xx (chop xx 1 "EI2")
64 "EI3-" @=? unchop xx (chop xx 1 "EI3-")
65 "EI3-EE" @=? unchop xx (chop xx 1 "EI3-EE")
66 [0..255] @=? fromJust (decode xx $ unchop xx $ chop xx 1 $ encode xx [0..255])
67 [0..255] @=? fromJust (decode xx $ unchop xx $ chop xx 61 $ encode xx [0..255])
68 [0..255] @=? fromJust (decode xx $ unchop xx $ chop xx 100 $ encode xx [0..255])
69
70case_xxTestsFail = do
71 Nothing @=? decode xx "A"
72 Nothing @=? decode xx "''"
73
74-- {{{1 base85 tests
75base85TestData =
76 [ ("base85", "empty", "", [], base85)
77 , ("base85", "f", "Ac", [102], base85)
78 , ("base85", "fo", "Ao@", [102,111], base85)
79 , ("base85", "foo", "AoDS", [102,111,111], base85)
80 , ("base85", "foob", "AoDTs", [102,111,111,98], base85)
81 , ("base85", "fooba", "AoDTs@/", [102,111,111,98,97], base85)
82 , ("base85", "foobar", "AoDTs@<)", [102,111,111,98,97,114], base85)
83 , ("base85", "\0", "!!", [0], base85)
84 , ("base85", "foob\0\0\0\0ar", "AoDTszEW", [102,111,111,98,0,0,0,0,114], base85)
85 , ("base85", "Example", "7<i6XE,9(", [69,120,97,109,112,108,101], base85)
86 , ("base85", "zeros", "z", [0, 0, 0, 0], base85)
87 , ("base85", "spaces", "y", [0x20, 0x20, 0x20, 0x20], base85)
88 ]
89case_base85Tests = mapM_ checkAssertions base85TestData
90
91case_base85TestsFail = do
92 Nothing @=? decode base85 "A"
93 Nothing @=? decode base85 "!z"
94 Nothing @=? decode base85 "!z!"
95 Nothing @=? decode base85 "!z!z"
96
97-- {{{1 base64 tests
98base64TestData =
99 [ ("base64", "empty", "", [], base64)
100 , ("base64", "f", "Zg==", [102], base64)
101 , ("base64", "fo", "Zm8=", [102,111], base64)
102 , ("base64", "foo", "Zm9v", [102,111,111], base64)
103 , ("base64", "foob", "Zm9vYg==", [102,111,111,98], base64)
104 , ("base64", "fooba", "Zm9vYmE=", [102,111,111,98,97], base64)
105 , ("base64", "foobar", "Zm9vYmFy", [102,111,111,98,97,114], base64)
106 , ("base64", "\0", "AA==", [0], base64)
107 , ("base64", "\255", "/w==", [255], base64)
108 , ("base64", "Example", "RXhhbXBsZQ==", [69,120,97,109,112,108,101], base64)
109 ]
110case_base64Tests = mapM_ checkAssertions base64TestData
111
112case_base64TestsFail = do
113 Nothing @=? decode base64 "A"
114 Nothing @=? decode base64 "!!"
115
116-- {{{1 base64url tests
117base64UrlTestData =
118 [ ("base64url", "empty", "", [], base64Url)
119 , ("base64url", "\0", "AA==", [0], base64Url)
120 , ("base64url", "\255", "_w==", [255], base64Url)
121 , ("base64url", "Example", "RXhhbXBsZQ==", [69,120,97,109,112,108,101], base64Url)
122 ]
123case_base64UrlTests = mapM_ checkAssertions base64UrlTestData
124
125-- {{{1 base32 tests
126base32TestData =
127 [ ("base32", "empty", "", [], base32)
128 , ("base32", "f", "MY======", [102], base32)
129 , ("base32", "fo", "MZXQ====", [102,111], base32)
130 , ("base32", "foo", "MZXW6===", [102,111,111], base32)
131 , ("base32", "foob", "MZXW6YQ=", [102,111,111,98], base32)
132 , ("base32", "fooba", "MZXW6YTB", [102,111,111,98,97], base32)
133 , ("base32", "foobar", "MZXW6YTBOI======", [102,111,111,98,97,114], base32)
134 ]
135case_base32Tests = mapM_ checkAssertions base32TestData
136
137case_base32TestsFail = do
138 Nothing @=? decode base32 "A"
139 Nothing @=? decode base32 "gh"
140
141-- {{{1 base32hex tests
142base32HexTestData =
143 [ ("base32hex", "empty", "", [], base32Hex)
144 , ("base32hex", "f", "CO======", [102], base32Hex)
145 , ("base32hex", "fo", "CPNG====", [102,111], base32Hex)
146 , ("base32hex", "foo", "CPNMU===", [102,111,111], base32Hex)
147 , ("base32hex", "foob", "CPNMUOG=", [102,111,111,98], base32Hex)
148 , ("base32hex", "fooba", "CPNMUOJ1", [102,111,111,98,97], base32Hex)
149 , ("base32hex", "foobar", "CPNMUOJ1E8======", [102,111,111,98,97,114], base32Hex)
150 ]
151case_base32HexTests = mapM_ checkAssertions base32HexTestData
152
153case_base32HexTestsFail = do
154 Nothing @=? decode base32Hex "A"
155 Nothing @=? decode base32Hex "gh"
156
157-- {{{1 base16 (hex)
158base16TestData =
159 [ ("base16", "empty", "", [], base16)
160 , ("base16", "f", "66", [102], base16)
161 , ("base16", "fo", "666F", [102,111], base16)
162 , ("base16", "foo", "666F6F", [102,111,111], base16)
163 , ("base16", "foob", "666F6F62", [102,111,111,98], base16)
164 , ("base16", "fooba", "666F6F6261", [102,111,111,98,97], base16)
165 , ("base16", "foobar", "666F6F626172", [102,111,111,98,97,114], base16)
166 ]
167case_base16Tests = mapM_ checkAssertions base16TestData
168
169case_base16TestsFail = do
170 Nothing @=? decode base16 "A"
171 Nothing @=? decode base16 "GH"
172
173-- {{{1 yEncoding
174case_yencTests = do
175 [] @=? Yenc.encode []
176 Just [] @=? Yenc.decode []
177 [0x90] @=? Yenc.encode [0x66]
178 Just [0x66] @=? Yenc.decode [0x90]
179 [0x90, 0x99, 0x99, 0x8c, 0x8b, 0x9c] @=? Yenc.encode [0x66, 0x6f, 0x6f, 0x62, 0x61, 0x72]
180 Just [0x66, 0x6f, 0x6f, 0x62, 0x61, 0x72] @=? Yenc.decode [0x90, 0x99, 0x99, 0x8c, 0x8b, 0x9c]
181 [0x3d, 0x40, 0x01] @=? Yenc.encode [0xd6, 0xd7]
182 Just [0xd6, 0xd7] @=? Yenc.decode [0x3d, 0x40, 0x01]
183 [0x3d, 0x40, 0x3d, 0x4a, 0x3d, 0x4d, 0x3d, 0x7d] @=? Yenc.encode [0xd6, 0xe0, 0xe3, 0x13]
184 Just [0xd6, 0xe0, 0xe3, 0x13] @=? Yenc.decode [0x3d, 0x40, 0x3d, 0x4a, 0x3d, 0x4d, 0x3d, 0x7d]
185 [[0x3d, 0x40], [0x01, 0x3d, 0x4a]] @=? Yenc.chop 2 [0x3d, 0x40, 0x01, 0x3d, 0x4a]
186
187-- {{{1 quoted-printable
188qpTestData =
189 [ ("qp", "empty", "", [], qp)
190 , ("qp", "foo=bar", "foo=3Dbar", [102,111,111,61,98,97,114], qp)
191 ]
192case_qpTests = mapM_ checkAssertions qpTestData
193
194case_qpTestsSucc = do
195 ["foo=","=3D=","bar"] @=? chop qp 4 "foo=3Dbar"
196
197case_qpTestsFail = do
198 Nothing @=? decode qp "=4"
199 Nothing @=? decode qp "=G"
200
201-- {{{1 python string
202pyTestData =
203 [ ("py", "empty", "", [], py)
204 , ("py", "<0x00><0x1f><0x20><0x7e><0x7f><0xff>", "\\x00\\x1F ~\\x7F\\xFF", [0x00, 0x1f, 0x20, 0x7e, 0x7f, 0xff], py)
205 , ("py", "\"\'\\", "\\\"\\'\\\\", [34, 39, 92], py)
206 ]
207case_pyTests = mapM_ checkAssertions pyTestData
208
209case_pyTestsFail = do
210 Nothing @=? decode py "\\z"
211
212-- {{{1 url encoding
213urlTestData =
214 [ ("url", "empty", "", [], url)
215 , ("url", "aA", "aA", [97, 65], url)
216 , ("url", "~ ", "~%20", [126, 0x20], url)
217 ]
218case_urlTests = mapM_ checkAssertions urlTestData
219
220case_urlTestsFail = do
221 Nothing @=? decode url "%ga"
222 Nothing @=? decode url "%%"
223
224-- {{{1 all the tests
225allTests = $(testGroupGenerator)