Implement wordWrap and paginate
This commit is contained in:
parent
67b691d410
commit
b783faef1a
4 changed files with 62 additions and 5 deletions
|
|
@ -1,12 +1,12 @@
|
|||
-- {-# LANGUAGE GHC2021 #-}
|
||||
|
||||
module HCatSpec (spec) where
|
||||
|
||||
import HCat.Internal (chunksOf, parseArgs)
|
||||
import HCat.Internal
|
||||
|
||||
import Test.Hspec
|
||||
import Test.Hspec.QuickCheck (prop)
|
||||
import Test.QuickCheck (Positive (getPositive))
|
||||
|
||||
import Test.QuickCheck (Positive (getPositive), getNonPositive)
|
||||
import Test.QuickCheck.Instances.Text ()
|
||||
|
||||
spec :: Spec
|
||||
spec = do
|
||||
|
|
@ -15,6 +15,7 @@ spec = do
|
|||
parseArgs ["foo"] `shouldBe` Right "foo"
|
||||
parseArgs [] `shouldBe` Left "No filename given!"
|
||||
parseArgs ["foo", "bar"] `shouldBe` Left "Only a single file is supported"
|
||||
|
||||
describe "chunksOf" $ do
|
||||
prop "each chunk contains at most N items" $ \n xs ->
|
||||
let chunkLengths = length <$> chunksOf n (xs :: [Int])
|
||||
|
|
@ -25,3 +26,19 @@ spec = do
|
|||
prop "the sum of all lengths is equal to the length of the input" $ \n xs ->
|
||||
let chunkLengths = length <$> chunksOf (getPositive n) (xs :: [Int])
|
||||
in sum chunkLengths `shouldBe` length xs
|
||||
|
||||
describe "wordWrap" do
|
||||
prop "non positive margins result in empty result" $ \margin ->
|
||||
wordWrap (getNonPositive margin) "abc" `shouldBe` ["abc"]
|
||||
|
||||
it "wraps the given text at the given margin" do
|
||||
wordWrap 4 "abc" `shouldBe` ["abc"]
|
||||
wordWrap 4 "abcdefg" `shouldBe` ["abcd", "efg"]
|
||||
|
||||
prop "concatenating the result equals the input" $ \txt ->
|
||||
let wrapped = wordWrap 4 txt
|
||||
in mconcat wrapped `shouldBe` txt
|
||||
|
||||
describe "paginate" do
|
||||
it "wraps the given text at the given margin" do
|
||||
paginate (ScreenDimensions 3 2) "abcdefghijkl" `shouldBe` ["ab\ncd\nef\n", "gh\nij\nkl\n"]
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue