{- Copyright © 2007 Magnus Therning - - This file is part of dataenc. - - Dataenc is free software: you can redistribute it and/or modify it under - the terms of the GNU Lesser General Public License as published by the - Free Software Foundation, either version 3 of the License, or (at your - option) any later version. - - Dataenc is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with dataenc. If not, see -} module Main where import Test.HUnit import Control.Monad import System.Exit import Data.Maybe import qualified Codec.Binary.Uu as Uu import qualified Codec.Binary.Base64 as Base64 import qualified Codec.Binary.Base64Url as Base64Url import qualified Codec.Binary.Base32 as Base32 import qualified Codec.Binary.Base32Hex as Base32Hex import qualified Codec.Binary.Base16 as Base16 -- {{{1 buildTestList -- builds a list of successful tests based on a tuple (suite, description, -- encoded data, decoded data, encoding function, decoding function) buildTestList td = TestList $ concat [ [TestLabel (suite ++ " encode " ++ desc) (enc ~=? (fenc dec)), TestLabel (suite ++ " decode " ++ desc) (dec ~=? (fromJust $ fdec enc))] | (suite, desc, enc, dec, fenc, fdec) <- td ] -- {{{1 uuencode tests uuTestData = [ ("uu", "empty", "", [], Uu.encode, Uu.decode) , ("uu", "\0", "``", [0], Uu.encode, Uu.decode) , ("uu", "\255", "_P", [255], Uu.encode, Uu.decode) , ("uu", "Example", "17AA;7!L90", [69,120,97,109,112,108,101], Uu.encode, Uu.decode) ] uuTests = buildTestList uuTestData uuTestData2 = [("uu test5", "chop . encode Example", ["'17AA;7!L90"], [69,120,97,109,112,108,101], (Uu.chop 61 . Uu.encode), (Uu.decode . Uu.unchop)) ] uuTests2 = buildTestList uuTestData2 -- {{{1 base64 tests base64TestData = [ ("base64", "empty", "", [], Base64.encode, Base64.decode) , ("base64", "f", "Zg==", [102], Base64.encode, Base64.decode) , ("base64", "fo", "Zm8=", [102,111], Base64.encode, Base64.decode) , ("base64", "foo", "Zm9v", [102,111,111], Base64.encode, Base64.decode) , ("base64", "foob", "Zm9vYg==", [102,111,111,98], Base64.encode, Base64.decode) , ("base64", "fooba", "Zm9vYmE=", [102,111,111,98,97], Base64.encode, Base64.decode) , ("base64", "foobar", "Zm9vYmFy", [102,111,111,98,97,114], Base64.encode, Base64.decode) , ("base64url", "\0", "AA==", [0], Base64.encode, Base64.decode) , ("base64url", "\255", "/w==", [255], Base64.encode, Base64.decode) , ("base64", "Example", "RXhhbXBsZQ==", [69,120,97,109,112,108,101], Base64.encode, Base64.decode) ] base64Tests = buildTestList base64TestData -- {{{1 base64url tests base64UrlTestData = [ ("base64url", "empty", "", [], Base64Url.encode, Base64Url.decode) , ("base64url", "\0", "AA==", [0], Base64Url.encode, Base64Url.decode) , ("base64url", "\255", "_w==", [255], Base64Url.encode, Base64Url.decode) , ("base64url", "Example", "RXhhbXBsZQ==", [69,120,97,109,112,108,101], Base64Url.encode, Base64Url.decode) ] base64UrlTests = buildTestList base64UrlTestData -- {{{1 base32 tests base32TestData = [ ("base32", "empty", "", [], Base32.encode, Base32.decode) , ("base32", "f", "MY======", [102], Base32.encode, Base32.decode) , ("base32", "fo", "MZXQ====", [102,111], Base32.encode, Base32.decode) , ("base32", "foo", "MZXW6===", [102,111,111], Base32.encode, Base32.decode) , ("base32", "foob", "MZXW6YQ=", [102,111,111,98], Base32.encode, Base32.decode) , ("base32", "fooba", "MZXW6YTB", [102,111,111,98,97], Base32.encode, Base32.decode) , ("base32", "foobar", "MZXW6YTBOI======", [102,111,111,98,97,114], Base32.encode, Base32.decode) ] base32Tests = buildTestList base32TestData -- {{{1 base32hex tests base32HexTestData = [ ("base32hex", "empty", "", [], Base32Hex.encode, Base32Hex.decode) , ("base32hex", "f", "CO======", [102], Base32Hex.encode, Base32Hex.decode) , ("base32hex", "fo", "CPNG====", [102,111], Base32Hex.encode, Base32Hex.decode) , ("base32hex", "foo", "CPNMU===", [102,111,111], Base32Hex.encode, Base32Hex.decode) , ("base32hex", "foob", "CPNMUOG=", [102,111,111,98], Base32Hex.encode, Base32Hex.decode) , ("base32hex", "fooba", "CPNMUOJ1", [102,111,111,98,97], Base32Hex.encode, Base32Hex.decode) , ("base32hex", "foobar", "CPNMUOJ1E8======", [102,111,111,98,97,114], Base32Hex.encode, Base32Hex.decode) ] base32HexTests = buildTestList base32HexTestData -- {{{1 base16 (hex) base16TestData = [ ("base16", "empty", "", [], Base16.encode, Base16.decode) , ("base16", "f", "66", [102], Base16.encode, Base16.decode) , ("base16", "fo", "666F", [102,111], Base16.encode, Base16.decode) , ("base16", "foo", "666F6F", [102,111,111], Base16.encode, Base16.decode) , ("base16", "foob", "666F6F62", [102,111,111,98], Base16.encode, Base16.decode) , ("base16", "fooba", "666F6F6261", [102,111,111,98,97], Base16.encode, Base16.decode) , ("base16", "foobar", "666F6F626172", [102,111,111,98,97,114], Base16.encode, Base16.decode) ] base16Tests = buildTestList base16TestData -- {{{1 test list and main testList = TestList [uuTests, uuTests2, base64Tests, base64UrlTests, base32Tests, base32HexTests, base16Tests ] main :: IO () main = do counts <- runTestTT testList when ((errors counts, failures counts) /= (0, 0)) $ exitWith (ExitFailure 1)