module Data.Base32StringSpec where import Data.Base32String.Default ( b32String , fromBytes , toBytes ) import qualified Data.ByteString as BS import qualified Data.ByteString.Char8 as BS8 import Test.Hspec spec :: Spec spec = do describe "when constructing a hex string" $ do it "should accept strings that fall within a valid range" $ b32String (BS8.pack "LPB2B3KOSMDI53DG") `shouldBe` b32String (BS8.pack "LPB2B3KOSMDI53DG") it "should reject strings outside the range" $ do putStrLn (show (b32String (BS8.pack "1"))) `shouldThrow` anyErrorCall putStrLn (show (b32String (BS8.pack "8"))) `shouldThrow` anyErrorCall putStrLn (show (b32String (BS8.pack "@"))) `shouldThrow` anyErrorCall putStrLn (show (b32String (BS8.pack "["))) `shouldThrow` anyErrorCall describe "when interpreting a hex string" $ do it "should convert the hex string properly when interpreting as bytes" $ toBytes (b32String (BS8.pack "AH7")) `shouldBe` BS8.pack "\0\255" it "should convert bytes to the proper hex string" $ fromBytes (BS8.pack "\0\255") `shouldBe` b32String (BS8.pack "AH7") it "should be less bytes than the original" $ BS.length (toBytes (b32String (BS8.pack "LPB2B3KOSMDI53DG"))) `shouldSatisfy` (<= BS.length (BS8.pack "LPB2B3KOSMDI53DG"))