{-# OPTIONS_GHC -XTemplateHaskell #-} {- - Copyright : (c) 2007 Magnus Therning - License : BSD3 -} module DataencUT where import Test.HUnit import Control.Monad import System.Exit import Data.Maybe import qualified Test.Framework.Providers.API as TFAPI import Test.Framework.TH import Test.Framework.Providers.HUnit import Codec.Binary.DataEncoding import qualified Codec.Binary.Yenc as Yenc -- {{{1 checkAssertions checkAssertions (suite, desc, enc, dec, codec) = do enc @=? encode codec dec dec @=? fromJust (decode codec enc) -- {{{1 uuencode tests uuTestData = [ ("uu", "empty", "", [], uu) , ("uu", "\\0", "``", [0], uu) , ("uu", "\\255", "_P", [255], uu) , ("uu", "AA", "04$", [65, 65], uu) , ("uu", "AAA", "04%!", [65, 65, 65], uu) , ("uu", "AAAA", "04%!00", [65, 65, 65, 65], uu) , ("uu", "Example", "17AA;7!L90", [69,120,97,109,112,108,101], uu) ] case_uuTests = mapM_ checkAssertions uuTestData case_uuTests2 = do "EI2" @=? unchop uu (chop uu 1 "EI2") "EI3-" @=? unchop uu (chop uu 1 "EI3-") "EI3-EE" @=? unchop uu (chop uu 1 "EI3-EE") [0..255] @=? fromJust (decode uu $ unchop uu $ chop uu 1 $ encode uu [0..255]) [0..255] @=? fromJust (decode uu $ unchop uu $ chop uu 61 $ encode uu [0..255]) [0..255] @=? fromJust (decode uu $ unchop uu $ chop uu 100 $ encode uu [0..255]) case_uuTestsFail = do Nothing @=? decode uu "A" Nothing @=? decode uu "aa" -- {{{1 xxencode tests xxTestData = [ ("xx", "empty", "", [], xx) , ("xx", "\\0", "++", [0], xx) , ("xx", "\\255", "zk", [255], xx) , ("xx", "AA", "EI2", [65, 65], xx) , ("xx", "AAA", "EI3-", [65, 65, 65], xx) , ("xx", "AAAA", "EI3-EE", [65, 65, 65, 65], xx) , ("xx", "Example", "FLVVPL-gNE", [69,120,97,109,112,108,101], xx) ] case_xxTest = mapM_ checkAssertions xxTestData case_xxTests2 = do "EI2" @=? unchop xx (chop xx 1 "EI2") "EI3-" @=? unchop xx (chop xx 1 "EI3-") "EI3-EE" @=? unchop xx (chop xx 1 "EI3-EE") [0..255] @=? fromJust (decode xx $ unchop xx $ chop xx 1 $ encode xx [0..255]) [0..255] @=? fromJust (decode xx $ unchop xx $ chop xx 61 $ encode xx [0..255]) [0..255] @=? fromJust (decode xx $ unchop xx $ chop xx 100 $ encode xx [0..255]) case_xxTestsFail = do Nothing @=? decode xx "A" Nothing @=? decode xx "''" -- {{{1 base85 tests base85TestData = [ ("base85", "empty", "", [], base85) , ("base85", "f", "Ac", [102], base85) , ("base85", "fo", "Ao@", [102,111], base85) , ("base85", "foo", "AoDS", [102,111,111], base85) , ("base85", "foob", "AoDTs", [102,111,111,98], base85) , ("base85", "fooba", "AoDTs@/", [102,111,111,98,97], base85) , ("base85", "foobar", "AoDTs@<)", [102,111,111,98,97,114], base85) , ("base85", "\0", "!!", [0], base85) , ("base85", "foob\0\0\0\0ar", "AoDTszEW", [102,111,111,98,0,0,0,0,114], base85) , ("base85", "Example", "7<0x1f><0x20><0x7e><0x7f><0xff>", "\\x00\\x1F ~\\x7F\\xFF", [0x00, 0x1f, 0x20, 0x7e, 0x7f, 0xff], py) , ("py", "\"\'\\", "\\\"\\'\\\\", [34, 39, 92], py) ] case_pyTests = mapM_ checkAssertions pyTestData case_pyTestsFail = do Nothing @=? decode py "\\z" -- {{{1 url encoding urlTestData = [ ("url", "empty", "", [], url) , ("url", "aA", "aA", [97, 65], url) , ("url", "~ ", "~%20", [126, 0x20], url) ] case_urlTests = mapM_ checkAssertions urlTestData case_urlTestsFail = do Nothing @=? decode url "%ga" Nothing @=? decode url "%%" -- {{{1 all the tests allTests = $(testGroupGenerator)