module Data.Text.ParagraphLayout.Internal.TextContainerSpec (spec) where import Data.Text (pack) import Data.Text.Glyphize (Direction(..)) import Test.Hspec import Data.Text.ParagraphLayout.Internal.Run import Data.Text.ParagraphLayout.Internal.TextContainer inputRuns :: [Run] inputRuns = [ Run -- TODO: We might want both parentheses in the same run. { runOffsetInSpan = 0 , runText = pack "Vikipedija (" , runDirection = Just DirLTR , runScript = Just "Latn" } , Run { runOffsetInSpan = 12 , runText = pack "Википедија)" , runDirection = Just DirLTR , runScript = Just "Cyrl" } ] spec :: Spec spec = do describe "splitTextsAt8" $ do it "negative value splits at beginning of first run" $ do splitTextsAt8 (-1) inputRuns `shouldBe` ([], inputRuns) it "zero splits at beginning of first run" $ do splitTextsAt8 0 inputRuns `shouldBe` ([], inputRuns) it "splits in first run" $ do splitTextsAt8 11 inputRuns `shouldBe` ( [ Run { runOffsetInSpan = 0 , runText = pack "Vikipedija " , runDirection = Just DirLTR , runScript = Just "Latn" } ] , [ Run { runOffsetInSpan = 11 , runText = pack "(" , runDirection = Just DirLTR , runScript = Just "Latn" } , Run { runOffsetInSpan = 12 , runText = pack "Википедија)" , runDirection = Just DirLTR , runScript = Just "Cyrl" } ] ) it "split at run edges does not generate extra run" $ do splitTextsAt8 12 inputRuns `shouldBe` (take 1 inputRuns, drop 1 inputRuns) it "splits in second run" $ do splitTextsAt8 20 inputRuns `shouldBe` ( [ Run { runOffsetInSpan = 0 , runText = pack "Vikipedija (" , runDirection = Just DirLTR , runScript = Just "Latn" } , Run { runOffsetInSpan = 12 , runText = pack "Вики" , runDirection = Just DirLTR , runScript = Just "Cyrl" } ] , [ Run { runOffsetInSpan = 20 , runText = pack "педија)" , runDirection = Just DirLTR , runScript = Just "Cyrl" } ] ) it "split at end does not generate extra run" $ do splitTextsAt8 33 inputRuns `shouldBe` (inputRuns, []) it "large value splits at end of last run" $ do splitTextsAt8 999 inputRuns `shouldBe` (inputRuns, [])