summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSam Truzjan <pxqr.sta@gmail.com>2013-10-04 13:15:57 +0400
committerSam Truzjan <pxqr.sta@gmail.com>2013-10-04 13:15:57 +0400
commit2534b8aff490a9e38e927ffc77d0a2e37c17db77 (patch)
treeaa8246ab665c6b522ccd1832338bb535e77905a3
parent4a5926d07371144df8147e6bb71f878df327ac8a (diff)
Add spec for lenient decoding
-rw-r--r--src/Data/ByteString/Base32.hs2
-rw-r--r--src/Data/ByteString/Base32/Hex.hs2
-rw-r--r--tests/Data/ByteString/Base32/HexSpec.hs20
-rw-r--r--tests/Data/ByteString/Base32Spec.hs20
4 files changed, 41 insertions, 3 deletions
diff --git a/src/Data/ByteString/Base32.hs b/src/Data/ByteString/Base32.hs
index fa15cdd..e9ac3ee 100644
--- a/src/Data/ByteString/Base32.hs
+++ b/src/Data/ByteString/Base32.hs
@@ -17,7 +17,7 @@ module Data.ByteString.Base32
17 ( Base32 17 ( Base32
18 , encode 18 , encode
19 , decode 19 , decode
20-- , decodeLenient 20 , decodeLenient
21 ) where 21 ) where
22 22
23import Data.ByteString as BS 23import Data.ByteString as BS
diff --git a/src/Data/ByteString/Base32/Hex.hs b/src/Data/ByteString/Base32/Hex.hs
index a7d4122..ce7682b 100644
--- a/src/Data/ByteString/Base32/Hex.hs
+++ b/src/Data/ByteString/Base32/Hex.hs
@@ -17,7 +17,7 @@ module Data.ByteString.Base32.Hex
17 ( Base32Hex 17 ( Base32Hex
18 , encode 18 , encode
19 , decode 19 , decode
20-- , decodeLenient 20 , decodeLenient
21 ) where 21 ) where
22 22
23import Data.ByteString as BS 23import Data.ByteString as BS
diff --git a/tests/Data/ByteString/Base32/HexSpec.hs b/tests/Data/ByteString/Base32/HexSpec.hs
index 4e41d09..3a04b09 100644
--- a/tests/Data/ByteString/Base32/HexSpec.hs
+++ b/tests/Data/ByteString/Base32/HexSpec.hs
@@ -45,3 +45,23 @@ spec = do
45 it "fail gracefully if encoded data contains non alphabet chars" $ do 45 it "fail gracefully if encoded data contains non alphabet chars" $ do
46 evaluate (decode "#=======") `shouldThrow` anyErrorCall 46 evaluate (decode "#=======") `shouldThrow` anyErrorCall
47 evaluate (decode "AAAAAAAA#=======") `shouldThrow` anyErrorCall 47 evaluate (decode "AAAAAAAA#=======") `shouldThrow` anyErrorCall
48
49 describe "decodeLenient" $ do
50 it "conform RFC examples" $ do
51 decodeLenient "" `shouldBe` ""
52 decodeLenient "MY======" `shouldBe` "f"
53 decodeLenient "MZXQ====" `shouldBe` "fo"
54 decodeLenient "MZXW6===" `shouldBe` "foo"
55 decodeLenient "MZXW6YQ=" `shouldBe` "foob"
56 decodeLenient "MZXW6YTB" `shouldBe` "fooba"
57 decodeLenient "MZXW6YTBOI======" `shouldBe` "foobar"
58
59 it "inverse for encode" $ property $ \bs ->
60 decodeLenient (encode bs) == bs
61
62 it "case insensitive" $ property $ \bs ->
63 decodeLenient (BC.map toLower (encode bs)) == bs
64
65 it "skip non alphabet chars" $ do
66 decodeLenient "|" `shouldBe` ""
67 decodeLenient "M|Y" `shouldBe` "f"
diff --git a/tests/Data/ByteString/Base32Spec.hs b/tests/Data/ByteString/Base32Spec.hs
index 66df53a..148539a 100644
--- a/tests/Data/ByteString/Base32Spec.hs
+++ b/tests/Data/ByteString/Base32Spec.hs
@@ -52,4 +52,22 @@ spec = do
52 evaluate (decode "0=======") `shouldThrow` anyErrorCall 52 evaluate (decode "0=======") `shouldThrow` anyErrorCall
53 evaluate (decode "AAAAAAAA0=======") `shouldThrow` anyErrorCall 53 evaluate (decode "AAAAAAAA0=======") `shouldThrow` anyErrorCall
54 54
55-- describe "decodeLenient" $ do 55 describe "decodeLenient" $ do
56 it "conform RFC examples" $ do
57 decodeLenient "" `shouldBe` ""
58 decodeLenient "MY======" `shouldBe` "f"
59 decodeLenient "MZXQ====" `shouldBe` "fo"
60 decodeLenient "MZXW6===" `shouldBe` "foo"
61 decodeLenient "MZXW6YQ=" `shouldBe` "foob"
62 decodeLenient "MZXW6YTB" `shouldBe` "fooba"
63 decodeLenient "MZXW6YTBOI======" `shouldBe` "foobar"
64
65 it "inverse for encode" $ property $ \bs ->
66 decodeLenient (encode bs) == bs
67
68 it "case insensitive" $ property $ \bs ->
69 decodeLenient (BC.map toLower (encode bs)) == bs
70
71 it "skip non alphabet chars" $ do
72 decodeLenient "|" `shouldBe` ""
73 decodeLenient "M|Y" `shouldBe` "f"