edits-0.1.0.0: test/Test/Data/Text/ShortenSpec.hs
module Test.Data.Text.ShortenSpec where
import Data.Text qualified as T
import Data.Text.Shorten
import Data.Text.Token
import Protolude
import Test.Tasty.Hedgehogx
test_shorten = test "shorten difference" $ do
shorten "abcd" === "abcd"
shorten "abcdefghijkl[mn]opqr" === "...hijkl[mn]opqr"
shorten "abcdefghijkl[mn]" === "...hijkl[mn]"
shorten "[mn]abcdefghijkl" === "[mn]abcde..."
shorten "abcdefghijkl[mn]opqrstuv" === "...hijkl[mn]opqrs..."
shorten "hijkl[zz]abcdefghijklmno[xx]abcde" === "hijkl[zz]ab...no[xx]abcde"
shorten "hijkl[]xxabcdefghijklmno[]xxabcde" === "hijkl[]xx...no[]xxabc..."
shorten "abcdef[]ghijkl" === "...bcdef[]ghijk..."
shorten "abcdefg[zz]abcdefghijklmno[xx]abcdefg" === "...cdefg[zz]ab...no[xx]abcde..."
-- * Helpers
shorten :: Text -> Text
shorten t = do
let tokens =
toS t <&> \(c :: Char) ->
if c == '['
then Delimiter "["
else
if c == ']'
then Delimiter "]"
else Kept (T.singleton c)
showTokens $ shortenTokens shortenOptions (Delimiter "[") (Delimiter "]") tokens
where
shortenOptions = ShortenOptions 5 "..."