unwitch-1.0.0: test/Test/Convert/LazyByteStringSpec.hs
module Test.Convert.LazyByteStringSpec (spec) where
import Test.Hspec
import Data.ByteString.Lazy qualified as LBS
import Data.Word (Word8)
import qualified Unwitch.Convert.LazyByteString as LazyByteString
import qualified Unwitch.Convert.ByteString as ByteString
spec :: Spec
spec = describe "Unwitch.Convert.LazyByteString" $ do
describe "toByteString / toLazyByteString round-trip" $
it "round-trips" $
let lbs = LBS.pack [10, 20, 30]
in ByteString.toLazyByteString (LazyByteString.toByteString lbs) `shouldBe` lbs
describe "toWord8s / fromWord8s" $ do
it "round-trips" $
let ws = [1, 2, 3, 4] :: [Word8]
in LazyByteString.toWord8s (LazyByteString.fromWord8s ws) `shouldBe` ws
it "empty list" $
LazyByteString.toWord8s (LazyByteString.fromWord8s []) `shouldBe` ([] :: [Word8])
describe "toLazyTextLatin1" $
it "decodes latin1 bytes" $
let lbs = LBS.pack [0xFC] -- u-umlaut
in LazyByteString.toLazyTextLatin1 lbs `shouldBe` "\x00FC"
describe "toLazyTextUtf8" $ do
it "decodes valid UTF-8" $
LazyByteString.toLazyTextUtf8 "hello" `shouldBe` Right "hello"
it "fails on invalid UTF-8" $
let lbs = LBS.pack [0xFF, 0xFE]
in case LazyByteString.toLazyTextUtf8 lbs of
Left _ -> pure ()
Right _ -> expectationFailure "expected Left"
describe "toLazyTextUtf16LE" $
it "decodes valid UTF-16LE" $
let lbs = LBS.pack [0x41, 0x00]
in LazyByteString.toLazyTextUtf16LE lbs `shouldBe` Right "A"
describe "toLazyTextUtf16BE" $
it "decodes valid UTF-16BE" $
let lbs = LBS.pack [0x00, 0x42]
in LazyByteString.toLazyTextUtf16BE lbs `shouldBe` Right "B"
describe "toLazyTextUtf32LE" $
it "decodes valid UTF-32LE" $
let lbs = LBS.pack [0x43, 0x00, 0x00, 0x00]
in LazyByteString.toLazyTextUtf32LE lbs `shouldBe` Right "C"
describe "toLazyTextUtf32BE" $
it "decodes valid UTF-32BE" $
let lbs = LBS.pack [0x00, 0x00, 0x00, 0x44]
in LazyByteString.toLazyTextUtf32BE lbs `shouldBe` Right "D"