module Data.Text.ParagraphLayout.PlainSpec (spec) where import Data.List (intersperse) import Test.Hspec import Test.Hspec.Golden import System.FilePath (()) import Data.Text.ParagraphLayout.Plain import Data.Text.ParagraphLayout.FontLoader prettyShow :: ParagraphLayout -> String prettyShow (ParagraphLayout pr sls) = showParagraphLayout where showParagraphLayout = concat [ "ParagraphLayout {paragraphRect = " , show pr , ", spanLayouts = [" , newline , showSpanLayouts , newline , "]}" , newline ] showSpanLayouts = concat $ intersperse commaNewline $ map showSpanLayout sls showSpanLayout (SpanLayout boxes) = concat [ indent1 , "SpanLayout [" , concat $ map showBox boxes , "]" ] showBox (r, glyphs) = concat [ "(" , show r , commaNewline , indent2 , "[" , showGlyphs glyphs , "]" , newline , indent1 , ")" ] showGlyphs = concat . intersperse (commaNewline ++ indent2) . map show indent1 = " " indent2 = indent1 ++ indent1 newline = "\n" commaNewline = "," ++ newline shouldBeGolden :: ParagraphLayout -> FilePath -> Golden ParagraphLayout shouldBeGolden output_ name = Golden { output = output_ , encodePretty = show , writeToFile = \path -> writeFile path . prettyShow , readFromFile = \path -> readFile path >>= return . read , goldenFile = ".golden" name "golden" , actualFile = Just (".golden" name "actual") , failFirstTime = False } spec :: Spec spec = do -- Note: This font does not contain Japanese glyphs. describe "layoutPlain" $ before loadUbuntuRegular $ do it "stub works" $ \font -> do let result = layoutPlain (exampleParagraph font) result `shouldBeGolden` "exampleParagraph"