module Data.Text.ParagraphLayout.RichSpec (spec) where import Test.Hspec import System.FilePath (()) import Data.Text.ParagraphLayout import Data.Text.ParagraphLayout.FontLoader import Data.Text.ParagraphLayout.Internal.Paginable (paginateAll) import Data.Text.ParagraphLayout.PrettyShow import Data.Text.ParagraphLayout.PrettyShow.Golden import Data.Text.ParagraphLayout.Rich import Data.Text.ParagraphLayout.Rich.ParagraphData spec :: Spec spec = do describe "layoutRich" $ do let goldenDir = ".golden" "richParagraphLayout" shouldBeGolden = goldenTest goldenDir id id describe "with Latin font" $ do font <- runIO $ loadFont latinFont 0 testingOptions fontSmall <- runIO $ loadFont latinFont 0 testingOptionsSmall it "wraps lorem ipsum at 20em" $ do let opts = defaultParagraphOptions { paragraphMaxWidth = 20000 } let input = loremIpsumParagraph font opts let result = layoutRich input result `shouldBeGolden` "loremIpsum20em" it "handles mixed sizes" $ do let opts = defaultParagraphOptions let input = mixedSizesParagraph (font, fontSmall) opts let result = layoutRich input result `shouldBeGolden` "mixedSizes" it "handles nested boxes" $ do let opts = defaultParagraphOptions let input = nestedBoxesParagraph font opts let result = layoutRich input result `shouldBeGolden` "nestedBoxes" describe "paginate" $ do let goldenDir = ".golden" "paginatedRichParagraphLayout" shouldBeGolden = goldenTest goldenDir getRichPages RichPages describe "with Latin font" $ do font <- runIO $ loadFont latinFont 0 testingOptions it "wraps lorem ipsum at 20em" $ do let opts = defaultParagraphOptions { paragraphMaxWidth = 20000 } let input = loremIpsumParagraph font opts let pl = layoutRich input let popts = PageOptions { pageCurrentHeight = 2500 , pageNextHeight = 8500 , pageOrphans = 2 , pageWidows = 3 } let pages = paginateAll popts pl pages `shouldBeGolden` "loremIpsum20em"