packages feed

pdf-toolbox-content-0.1.1: test/Test/FontDescriptor.hs

{-# LANGUAGE OverloadedStrings #-}

module Test.FontDescriptor
(
  spec,
)
where

import Pdf.Content.FontDescriptor

import Data.Int
import Test.Hspec

spec :: Spec
spec = describe "FontDescriptor" $ do
  testFlagSet

defFD :: FontDescriptor
defFD = FontDescriptor
  { fdFontName = "test"
  , fdFontFamily = Nothing
  , fdFontStretch = Nothing
  , fdFontWeight = Nothing
  , fdFlags = 5
  , fdFontBBox = Nothing
  , fdItalicAngle = -12.5
  , fdDescent = Nothing
  , fdAscent = Nothing
  , fdLeading = Nothing
  , fdCapHeight = Nothing
  , fdXHeight = Nothing
  , fdStemV = Nothing
  , fdStemH = Nothing
  , fdAvgWidth = Nothing
  , fdMaxWidth = Nothing
  , fdMissingWidth = Nothing
  , fdCharSet = Nothing
  }

testFlagSet :: Spec
testFlagSet = describe "flagSet" $ do
  it "should return True when testing FixedPitch on 5" $ do
    let res = flagSet defFD FixedPitch
    res `shouldSatisfy` (==True)

  it "should return False when testing Serif on 5" $ do
    let res = flagSet defFD Serif
    res `shouldSatisfy` (==False)

  it "should return True when testing Symbolic on 5" $ do
    let res = flagSet defFD Symbolic
    res `shouldSatisfy` (==True)

  it "should return False when testing Script on 5" $ do
    let res = flagSet defFD Script
    res `shouldSatisfy` (==False)

  it "should return False when testing ForceBold on 5" $ do
    let res = flagSet defFD ForceBold
    res `shouldSatisfy` (==False)

  it "should return True when testing ForceBold on (2^32)-1" $ do
    let res = flagSet (defFD {fdFlags = (power64 2 32)-1})  ForceBold
    res `shouldSatisfy` (==True)

  it "should return False when testing ForceBold on 0" $ do
    let res = flagSet (defFD {fdFlags = 0}) ForceBold
    res `shouldSatisfy` (==False)

  where
    power64 :: Int64 -> Int64 -> Int64
    power64 _ 0 = 1
    power64 b e = b * power64 b (e-1)