taskell-1.8.2.0: test/Events/State/HistoryTest.hs
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedStrings #-}
module Events.State.HistoryTest
( test_history
) where
import ClassyPrelude
import Test.Tasty
import Test.Tasty.HUnit
import Events.State.History
import Events.State.Types
make :: [Integer] -> Integer -> [Integer] -> History Integer
make = History
testHistory :: History Integer
testHistory = make empty 0 empty
-- tests
test_history :: TestTree
test_history =
testGroup
"Events.State.History"
[ testGroup
"undo"
[ testCase "empty" (assertEqual "Nothing changes" testHistory (undo testHistory))
, testCase
"one undo"
(assertEqual "Goes back" (make empty 0 [1]) (undo $ make [0] 1 empty))
, testCase
"two undo"
(assertEqual
"Goes back"
(make empty 0 [1, 2])
(undo . undo $ make [1, 0] 2 empty))
, testCase
"three undo"
(assertEqual
"Goes back"
(make empty 0 [1, 2, 3])
(undo . undo . undo $ make [2, 1, 0] 3 empty))
]
, testGroup
"redo"
[ testCase "empty" (assertEqual "Nothing changes" testHistory (redo testHistory))
, testCase
"one redo"
(assertEqual "Goes forward" (make [0] 1 empty) (redo $ make empty 0 [1]))
, testCase
"two redo"
(assertEqual
"Goes forward"
(make [1, 0] 2 empty)
(redo . redo $ make empty 0 [1, 2]))
, testCase
"three redo"
(assertEqual
"Goes forward"
(make [2, 1, 0] 3 empty)
(redo . redo . redo $ make empty 0 [1, 2, 3]))
]
, testGroup
"mix"
[ testCase
"empty"
(assertEqual
"Nothing changes"
testHistory
(undo . redo . undo . redo . undo $ testHistory))
, testCase
"redo undo"
(assertEqual
"Nothing changes"
(make [4, 3, 2, 1, 0] 5 [6, 7, 8, 9, 10])
(undo . redo $ make [4, 3, 2, 1, 0] 5 [6, 7, 8, 9, 10]))
, testCase
"undo redo"
(assertEqual
"Nothing changes"
(make [4, 3, 2, 1, 0] 5 [6, 7, 8, 9, 10])
(redo . undo $ make [4, 3, 2, 1, 0] 5 [6, 7, 8, 9, 10]))
]
, testGroup
"store"
[ testCase
"empty"
(assertEqual "Stores current value" (make [0] 0 empty) (store testHistory))
, testCase
"undo store redo"
(assertEqual
"Clears redo"
(make [4, 3, 2, 1, 0] 4 empty)
(redo . store . undo $ make [4, 3, 2, 1, 0] 5 [6, 7, 8, 9, 10]))
]
]