binrep-0.2.0: test/Binrep/Extra/HexByteStringSpec.hs
{-# LANGUAGE OverloadedStrings #-}
module Binrep.Extra.HexByteStringSpec ( spec ) where
import Binrep.Extra.HexByteString
import Test.Hspec
import Data.ByteString qualified as B
import Text.Megaparsec
import Data.Void ( Void )
megaparsecParseFromCharStream :: forall s a. (Stream s, Token s ~ Char) => Parsec Void s a -> s -> Maybe a
megaparsecParseFromCharStream parser text = parseMaybe parser text
spec :: Spec
spec = do
let bs = B.pack
describe "parse" $ do
let p = megaparsecParseFromCharStream @String (parseHexByteString B.pack)
it "parses valid hex bytestrings" $ do
p "00" `shouldBe` Just (bs [0x00])
p "FF" `shouldBe` Just (bs [0xFF])
p "1234" `shouldBe` Just (bs [0x12, 0x34])
p "01 9A FE" `shouldBe` Just (bs [0x01, 0x9A, 0xFE])
p "FFFFFFFF" `shouldBe` Just (B.replicate 4 0xFF)
p "12 34 AB CD" `shouldBe` Just (bs [0x12, 0x34, 0xAB, 0xCD])
it "fails to parse invalid hex bytestrings" $ do
p "-00" `shouldBe` Nothing
p "FG" `shouldBe` Nothing
it "fails to parse 0x prefix" $ do
p "1234" `shouldBe` Just (bs [0x12, 0x34])
p "0x1234" `shouldBe` Nothing
describe "print" $ do
it "prints pretty hex bytestrings" $ do
let p = prettyHexByteString B.unpack
p (bs [0x5a, 0x7d]) `shouldBe` "5A 7D"
it "prints compact hex bytestrings" $ do
let pc = prettyHexByteStringCompact B.unpack
pc (bs [0xab, 0x25]) `shouldBe` "ab25"