octane-0.4.0: 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
shouldBe
(decodePCString "\1\0\0\0\0")
(Right ("", 5, PCString ""))
shouldBe
(decodePCString "\6\0\0\0ascii\0")
(Right ("", 10, PCString "ascii"))
shouldBe
(decodePCString "\8\0\0\0\251\241\239\231\248d\233\0")
(Right ("", 12, PCString "ûñïçødé"))
it "can be encoded" $ do
shouldBe
(Binary.encode (PCString ""))
"\1\0\0\0\0"
shouldBe
(Binary.encode (PCString "ascii"))
"\6\0\0\0ascii\0"
shouldBe
(Binary.encode (PCString "ûñïçødé"))
"\8\0\0\0\251\241\239\231\248d\233\0"
it "does not decode strings of length 0" $ do
shouldBe
(decodePCString "\0\0\0\0")
(Left ("", 4, "invalid PCString size 0"))
decodePCString :: BSL.ByteString -> Either (BSL.ByteString, Binary.ByteOffset, String) (BSL.ByteString, Binary.ByteOffset, PCString)
decodePCString = Binary.decodeOrFail