{-# LANGUAGE OverloadedStrings #-}
module Test.Object.Util
(
spec,
)
where
import Pdf.Core.Object
import Pdf.Core.Object.Util
import qualified Data.Vector as Vector
import qualified Data.HashMap.Strict as HashMap
import Test.Hspec
spec :: Spec
spec = describe "Object.Util" $ do
boolValueSpec
stringValueSpec
intValueSpec
realValueSpec
arrayValueSpec
dictValueSpec
nameValueSpec
refValueSpec
streamValueSpec
boolValueSpec :: Spec
boolValueSpec = describe "boolValue" $ do
it "should convert boolean value to Bool" $ do
boolValue (Bool True) `shouldBe` Just True
it "should return Nothing for other values" $ do
boolValue (String "hello") `shouldBe` Nothing
stringValueSpec :: Spec
stringValueSpec = describe "stringValue" $ do
it "should convert string value to ByteString" $ do
stringValue (String "hello") `shouldBe` Just "hello"
it "should return Nothing for other values" $ do
stringValue (Bool True) `shouldBe` Nothing
intValueSpec :: Spec
intValueSpec = describe "intValue" $ do
it "should convert int value to Int" $ do
intValue (Number 42) `shouldBe` Just 42
it "should not convert float value" $ do
intValue (Number 42.6) `shouldBe` Nothing
it "should not convert any other value" $ do
intValue (Bool True) `shouldBe` Nothing
realValueSpec :: Spec
realValueSpec = describe "realValue" $ do
it "should convert int value to Float" $ do
realValue (Number 42) `shouldBe` Just 42.0
it "should convert float value to Float" $ do
realValue (Number 42.4) `shouldBe` Just 42.4
it "should not convert any other value" $ do
realValue (Bool True) `shouldBe` Nothing
arrayValueSpec :: Spec
arrayValueSpec = describe "arrayValue" $ do
it "should convert array value to Array" $ do
let arr = Vector.fromList [Bool True]
arrayValue (Array arr) `shouldBe` Just arr
it "should return Nothing for any other value" $ do
arrayValue (Bool True) `shouldBe` Nothing
dictValueSpec :: Spec
dictValueSpec = describe "dictValue" $ do
it "should convert dict value to Dict" $ do
let dict = HashMap.fromList [("hello", Bool True)]
dictValue (Dict dict) `shouldBe` Just dict
it "should return Nothing for any other value" $ do
dictValue (Bool True) `shouldBe` Nothing
nameValueSpec :: Spec
nameValueSpec = describe "nameValue" $ do
it "should convert name value to Name" $ do
nameValue (Name "hello") `shouldBe` Just "hello"
it "should return Nothing for any other value" $ do
nameValue (Bool True) `shouldBe` Nothing
refValueSpec :: Spec
refValueSpec = describe "refValue" $ do
it "should convert ref value to Ref" $ do
let ref = R 42 24
refValue (Ref ref) `shouldBe` Just ref
it "should return Nothing for any other value" $ do
refValue (Bool True) `shouldBe` Nothing
streamValueSpec :: Spec
streamValueSpec = describe "streamValue" $ do
it "should convert stream value to Stream" $ do
let stream = S dict 42
dict = HashMap.fromList [("a", String "b")]
streamValue (Stream stream) `shouldBe` Just stream
it "should return Nothing for any other value" $ do
streamValue (Bool True) `shouldBe` (Nothing :: Maybe Stream)