import Test.Framework (defaultMain, testGroup) import Test.Framework.Providers.HUnit import Test.HUnit import Codec.Encryption.OpenPGP.ASCIIArmor (armor, decodeArmor) import Codec.Encryption.OpenPGP.ASCIIArmor.Types import Data.ByteString (ByteString) import qualified Data.ByteString as B import qualified Data.ByteString.Char8 as BC8 import Data.Digest.CRC24 (crc24) import Data.Word (Word32) testCRC24 :: ByteString -> Word32 -> Assertion testCRC24 bs crc = assertEqual "crc24" crc (crc24 bs) testArmorDecode :: FilePath -> FilePath -> Assertion testArmorDecode fp target = do bs <- B.readFile $ "tests/data/" ++ fp tbs <- B.readFile $ "tests/data/" ++ target case decodeArmor bs of Left e -> assertFailure $ "Decode failed (" ++ e ++ ") on " ++ fp Right (Armor at hdrs pl) -> do assertEqual ("for " ++ fp) tbs pl testArmorEncode :: FilePath -> FilePath -> Assertion testArmorEncode fp target = do bs <- B.readFile $ "tests/data/" ++ fp tbs <- B.readFile $ "tests/data/" ++ target assertEqual ("literaldata") (armor (Armor ArmorMessage [("Version","OpenPrivacy 0.99")] bs)) tbs tests = [ testGroup "CRC24" [ testCase "CRC24: A" (testCRC24 (BC8.pack "A") 16680698) , testCase "CRC24: Haskell" (testCRC24 (BC8.pack "Haskell") 15612750) , testCase "CRC24: hOpenPGP and friends" (testCRC24 (BC8.pack "hOpenPGP and friends") 11940960) ] , testGroup "ASCII armor" [ testCase "Decode sample armor" (testArmorDecode "msg1.asc" "msg1.gpg") , testCase "Encode sample armor" (testArmorEncode "msg1.gpg" "msg1.asc") ] ] main = defaultMain tests