pdf-toolbox-core-0.1.1: test/Test/Object/Builder.hs
{-# LANGUAGE OverloadedStrings #-}
module Test.Object.Builder
(
spec,
)
where
import Pdf.Core.Object
import Pdf.Core.Object.Builder
import qualified Data.ByteString.Builder as Builder
import qualified Data.Vector as Vector
import qualified Data.HashMap.Strict as HashMap
import Test.Hspec
spec :: Spec
spec = describe "Object.Builder" $ do
buildBoolSpec
buildStringSpec
buildNameSpec
buildNumberSpec
buildArraySpec
buildDictSpec
buildRefSpec
buildStreamSpec
buildBoolSpec :: Spec
buildBoolSpec = describe "buildBool" $ do
it "should build 'true' for True" $ do
let res = buildBool True
Builder.toLazyByteString res `shouldBe` "true"
it "should build 'false' for False" $ do
let res = buildBool False
Builder.toLazyByteString res `shouldBe` "false"
buildStringSpec :: Spec
buildStringSpec = describe "buildString" $ do
it "should produce literal string when all chars are printable" $ do
let res = buildString "hello"
Builder.toLazyByteString res `shouldBe` "(hello)"
it "should produce hex string when there are not printable chars" $ do
let res = buildString "\NUL\255"
Builder.toLazyByteString res `shouldBe` "<00ff>"
it "should escape special chars" $ do
let res = buildString "()\\"
Builder.toLazyByteString res `shouldBe` "(\\(\\)\\\\)"
buildNameSpec :: Spec
buildNameSpec = describe "buildName" $ do
it "should build a name" $ do
let res = buildName "hello"
Builder.toLazyByteString res `shouldBe` "/hello"
buildNumberSpec :: Spec
buildNumberSpec = describe "buildNumber" $ do
it "should build int" $ do
let res = buildNumber 42
Builder.toLazyByteString res `shouldBe` "42"
it "should build float" $ do
let res = buildNumber 42.4
Builder.toLazyByteString res `shouldBe` "42.4"
buildArraySpec :: Spec
buildArraySpec = describe "buildArray" $ do
it "should build an array" $ do
let res = buildArray (Vector.fromList [Number 42, Bool False])
Builder.toLazyByteString res `shouldBe` "[42 false]"
it "should build empty array" $ do
let res = buildArray Vector.empty
Builder.toLazyByteString res `shouldBe` "[]"
buildDictSpec :: Spec
buildDictSpec = describe "buildDict" $ do
it "should build a dictionary" $ do
let res = buildDict (HashMap.fromList [("hello", Bool False)])
Builder.toLazyByteString res `shouldBe` "<</hello false>>"
buildRefSpec :: Spec
buildRefSpec = describe "buildRef" $ do
it "should build a ref" $ do
let res = buildRef (R 42 24)
Builder.toLazyByteString res `shouldBe` "42 24 R"
buildStreamSpec :: Spec
buildStreamSpec = describe "buildStream" $ do
it "should build a stream" $ do
let res = buildStream dict "hello"
dict = HashMap.fromList [("a", String "b")]
Builder.toLazyByteString res
`shouldBe` "<</a (b)>>stream\nhello\nendstream"