packages feed

taskell-1.3.5.0: test/Data/Taskell/ListsTest.hs

{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedStrings #-}

module Data.Taskell.ListsTest
    ( test_lists
    ) where

import ClassyPrelude hiding (delete)

import Test.Tasty
import Test.Tasty.HUnit

import qualified Data.Taskell.List           as L
import           Data.Taskell.Lists.Internal
import qualified Data.Taskell.Task           as T

-- test data
list1, list2, list3 :: L.List
list1 = foldl' (flip L.append) (L.empty "List 1") [T.new "One", T.new "Two", T.new "Three"]

list2 = foldl' (flip L.append) (L.empty "List 2") [T.new "1", T.new "2", T.new "3"]

list3 = foldl' (flip L.append) (L.empty "List 3") [T.new "01", T.new "10", T.new "11"]

testLists :: Lists
testLists = fromList [list1, list2, list3]

-- tests
test_lists :: TestTree
test_lists =
    testGroup
        "Data.Taskell.Lists"
        [ testCase
              "initial"
              (assertEqual
                   "Returns To Do and Done lists"
                   (fromList [L.empty "To Do", L.empty "Done"])
                   initial)
        , testCase
              "updateLists"
              (assertEqual
                   "Replaces the middle list"
                   (fromList [list1, list1, list3])
                   (updateLists 1 list1 testLists))
        , testGroup
              "count"
              [ testCase
                    "list exists"
                    (assertEqual "Returns length of middle list" 3 (count 1 testLists))
              , testCase "list does not exist" (assertEqual "Returns 0" 0 (count 10 testLists))
              ]
        , testGroup
              "get"
              [ testCase
                    "list exists"
                    (assertEqual "Returns the list" (Just list2) (get testLists 1))
              , testCase "list does not exist" (assertEqual "Nothing" Nothing (get testLists 10))
              ]
        , testGroup
              "changeList"
              [ testCase
                    "right"
                    (assertEqual
                         "Returns updated lists"
                         (Just
                              (fromList
                                   [ list1
                                   , foldl'
                                         (flip L.append)
                                         (L.empty "List 2")
                                         [T.new "1", T.new "3"]
                                   , foldl'
                                         (flip L.append)
                                         (L.empty "List 3")
                                         [T.new "01", T.new "10", T.new "11", T.new "2"]
                                   ]))
                         (changeList (1, 1) testLists 1))
              , testCase
                    "left"
                    (assertEqual
                         "Returns updated lists"
                         (Just
                              (fromList
                                   [ foldl'
                                         (flip L.append)
                                         (L.empty "List 1")
                                         [T.new "One", T.new "Two", T.new "Three", T.new "2"]
                                   , foldl'
                                         (flip L.append)
                                         (L.empty "List 2")
                                         [T.new "1", T.new "3"]
                                   , list3
                                   ]))
                         (changeList (1, 1) testLists (-1)))
              , testCase
                    "out of bounds list"
                    (assertEqual "Nothing" Nothing (changeList (5, 1) testLists 1))
              , testCase
                    "out of bounds task"
                    (assertEqual "Nothing" Nothing (changeList (1, 10) testLists 1))
              ]
        , testCase
              "newList"
              (assertEqual
                   "Returns lists with new list"
                   (fromList [list1, list2, list3, L.empty "Hello"])
                   (newList "Hello" testLists))
        , testCase
              "delete"
              (assertEqual
                   "Returns lists with middle list removed"
                   (fromList [list1, list3])
                   (delete 1 testLists))
        , testGroup
              "exists"
              [ testCase "list exists" (assertEqual "Returns True" True (exists 1 testLists))
              , testCase
                    "list does not exist"
                    (assertEqual "Returns False" False (exists 10 testLists))
              ]
        , testGroup
              "shiftBy"
              [ testCase
                    "right"
                    (assertEqual
                         "Returns updated lists"
                         (Just (fromList [list1, list3, list2]))
                         (shiftBy 1 1 testLists))
              , testCase
                    "left"
                    (assertEqual
                         "Returns updated lists"
                         (Just (fromList [list2, list1, list3]))
                         (shiftBy 1 (-1) testLists))
              , testCase
                    "out of bounds list"
                    (assertEqual "Nothing" Nothing (shiftBy 5 1 testLists))
              , testCase
                    "out of bounds shift"
                    (assertEqual
                         "Returns updated lists"
                         (Just (fromList [list2, list1, list3]))
                         (shiftBy 1 (-10) testLists))
              ]
        , testGroup
              "search"
              [ testCase
                    "term exists"
                    (assertEqual
                         "Returns filtered lists"
                         (fromList
                              [ foldl' (flip L.append) (L.empty "List 1") [T.new "One"]
                              , L.empty "List 2"
                              , L.empty "List 3"
                              ])
                         (search "One" testLists))
              , testCase
                    "term doesn't exist"
                    (assertEqual
                         "Returns updated lists"
                         (fromList [L.empty "List 1", L.empty "List 2", L.empty "List 3"])
                         (search "Fish" testLists))
              ]
        , testGroup
              "appendToLast"
              [ testCase
                    "previous list exists"
                    (assertEqual
                         "Returns updated lists"
                         (fromList
                              [ list1
                              , list2
                              , foldl'
                                    (flip L.append)
                                    (L.empty "List 3")
                                    [T.new "01", T.new "10", T.new "11", T.new "Blah"]
                              ])
                         (appendToLast (T.new "Blah") testLists))
              , testCase
                    "previous list doesn't exist"
                    (assertEqual "Returns original list" empty (appendToLast (T.new "Blah") empty))
              ]
        , testCase
              "analyse"
              (assertEqual
                   "Returns an analysis"
                   "test.md\nLists: 3\nTasks: 9"
                   (analyse "test.md" testLists))
        ]