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"