~jaro/balkon

ref: 74594e80185c479dd7d4b10db0864ff580f3cb1d balkon/test/Data/Text/ParagraphLayout/Internal/TextContainerSpec.hs -rw-r--r-- 3.3 KiB
74594e80Jaro Use internal library to hide non-public modules. 1 year, 9 months ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
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, [])