headroom-0.3.0.0: test/Headroom/Data/TextExtraSpec.hs
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TypeApplications #-}
module Headroom.Data.TextExtraSpec
( spec
)
where
import Headroom.Data.TextExtra
import RIO
import Test.Hspec
spec :: Spec
spec = do
describe "mapLines" $ do
it "should return same output for identity function" $ do
let sample = fromLines ["foo zz", "bar", "xx"]
mapLines id sample `shouldBe` sample
it "should map all lines using the function" $ do
let sample = fromLines ["foo zz", "bar", "xx"]
fn = ("L: " <>)
expected = fromLines ["L: foo zz", "L: bar", "L: xx"]
mapLines fn sample `shouldBe` expected
describe "read" $ do
it "parses value from given text using Read instance" $ do
read @Int "123" `shouldBe` Just 123
describe "fromLines" $ do
it "handles correctly empty linex" $ do
fromLines [] `shouldBe` ""
it "handles correctly single line text" $ do
fromLines ["foo"] `shouldBe` "foo"
it "joins lines of text" $ do
fromLines ["first", "second"] `shouldBe` "first\nsecond"
fromLines ["first", "second", ""] `shouldBe` "first\nsecond\n"
describe "toLines" $ do
it "handles correctly empty text" $ do
toLines "" `shouldBe` []
it "splits lines of text to list" $ do
toLines "first\nsecond" `shouldBe` ["first", "second"]
toLines "first\nsecond\n" `shouldBe` ["first", "second", ""]
describe "toLines . fromLines" $ do
it "does not alter newlines in processed text" $ do
(fromLines . toLines $ "first\nsecond") `shouldBe` "first\nsecond"
(fromLines . toLines $ "first\nsecond\n") `shouldBe` "first\nsecond\n"