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, [])