octane-0.2.1: test-suite/Octane/Type/Primitive/PCStringSpec.hs
{-# LANGUAGE OverloadedStrings #-}
module Octane.Type.Primitive.PCStringSpec (spec) where
import qualified Data.Binary as Binary
import qualified Data.Binary.Get as Binary
import qualified Data.ByteString.Lazy as BSL
import Octane
import Test.Tasty.Hspec
spec :: Spec
spec = describe "PCString" $ do
it "can be decoded" $ do
decodePCString "\1\0\0\0\0" `shouldBe` Right ("", 5, NewPCString "")
decodePCString "\6\0\0\0ascii\0" `shouldBe` Right ("", 10, NewPCString "ascii")
decodePCString "\8\0\0\0\251\241\239\231\248d\233\0" `shouldBe` Right ("", 12, NewPCString "ûñïçødé")
it "can be encoded" $ do
Binary.encode (NewPCString "") `shouldBe` "\1\0\0\0\0"
Binary.encode (NewPCString "ascii") `shouldBe` "\6\0\0\0ascii\0"
Binary.encode (NewPCString "ûñïçødé") `shouldBe` "\8\0\0\0\251\241\239\231\248d\233\0"
it "does not decode strings of length 0" $ do
decodePCString "\0\0\0\0" `shouldBe` Left ("", 4, "invalid size")
decodePCString :: BSL.ByteString -> Either (BSL.ByteString, Binary.ByteOffset, String) (BSL.ByteString, Binary.ByteOffset, PCString)
decodePCString = Binary.decodeOrFail