tinytools-0.1.0.4: test/Potato/Flow/Controller/Manipulator/LayersSpec.hs
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE RecursiveDo #-}
module Potato.Flow.Controller.Manipulator.LayersSpec (
spec
) where
import Relude hiding (empty,
fromList)
import Test.Hspec
import Potato.Flow.GoatTester
import Potato.Flow
import Potato.Flow.Controller.Manipulator.TestHelpers
import qualified Data.List as L
import qualified Data.Sequence as Seq
someFolderName :: Text
someFolderName = "testfolder"
verifyFolderSelected :: Text -> GoatTester ()
verifyFolderSelected name = verifySelectionIsAndOnlyIs ("selected " <> name) $
\sowl -> if hasOwlItem_name sowl == name && hasOwlItem_isFolder sowl
then Nothing
else Just $ "expected folder named \"" <> name <> "\", got: " <> show sowl
verifyLayersCount :: Int -> GoatTester ()
verifyLayersCount n = verifyState ("layers count is " <> show n) $ \s -> if (countentriesfn s) == n then Nothing else Just $ "expected " <> show n <> " elts, got " <> show (countentriesfn s)
where countentriesfn = Seq.length . _layersState_entries . _goatState_layersState
basic_test :: Spec
basic_test = hSpecGoatTesterWithOwlPFState emptyOwlPFState $ do
setMarker "create a folder"
verifyOwlCount 0
addFolder someFolderName
verifyOwlCount 1
verifyFolderSelected someFolderName
setMarker "press escape to unselect the folder"
pressEscape
verifySelectionCount 0
setMarker "select the folder"
layerMouseDownUp (5,0)
verifyFolderSelected someFolderName
rename_focus_test :: Spec
rename_focus_test = hSpecGoatTesterWithOwlPFState emptyOwlPFState $ do
setMarker "draw a box"
drawCanvasBox (0, 0, 100, 100)
verifyOwlCount 1
setMarker "select the box via layers"
layerMouseDownUpRel LMO_Normal 0 0
verifySelectionCount 1
setMarker "begin renaming the box"
layerMouseDownUpRel LMO_Normal 0 0
pressKeys "aoeu"
let
origname = "<box>"
-- NOTE, when when have multi-select, we should auto-select the previous name such that it gets deleted
expectedname = "aoeu<box>"
setMarker "verify the name has not been changed yet (no preview)"
verifyMostRecentlyCreatedOwl $ \sowl -> if hasOwlItem_name sowl == origname then Nothing else Just $ "expected name " <> show origname <> " got " <> show (hasOwlItem_name sowl)
setMarker "change focus and ensure rename took effect"
setFocusArea GoatFocusedArea_Other
verifyMostRecentlyCreatedOwl $ \sowl -> if hasOwlItem_name sowl == expectedname then Nothing else Just $ "expected name " <> show expectedname <> " got " <> show (hasOwlItem_name sowl)
create_in_folder_and_collapse_test :: Spec
create_in_folder_and_collapse_test = hSpecGoatTesterWithOwlPFState emptyOwlPFState $ do
setMarker "create a folder"
addFolder someFolderName
verifyFolderSelected someFolderName
verifyLayersCount 1
folder <- mustGetMostRecentlyCreatedOwl
setMarker "create a new element"
drawCanvasBox (0, 0, 100, 100)
verifyLayersCount 2
setMarker "ensure it has the correct parent"
verifyMostRecentlyCreatedOwl $ \sowl -> if _owlItemMeta_parent (_superOwl_meta sowl) == _superOwl_id folder then Nothing else Just $ "expected parent " <> show (_superOwl_id folder) <> " got " <> show sowl
setMarker "collapse the folder"
layerMouseDownUpRel LMO_Collapse 0 0
verifyLayersCount 1
setMarker "select the box and ensure the folders expand"
canvasMouseDownUp (50, 50)
verifyLayersCount 2
folder_collapse_test :: Spec
folder_collapse_test = hSpecGoatTesterWithOwlPFState emptyOwlPFState $ do
setMarker "create folders"
addFolder someFolderName
verifyFolderSelected someFolderName
verifyLayersCount 1
addFolder "2"
verifyFolderSelected "2"
verifyLayersCount 2
addFolder "3"
verifyFolderSelected "3"
verifyLayersCount 3
addFolder "4"
verifyFolderSelected "4"
verifyLayersCount 4
setMarker "collapse the second folder"
layerMouseDownUpRel LMO_Collapse 1 1
verifyLayersCount 2
setMarker "collapse the first folder"
layerMouseDownUpRel LMO_Collapse 0 0
verifyLayersCount 1
setMarker "expand the first folder"
layerMouseDownUpRel LMO_Collapse 0 0
verifyLayersCount 2
setMarker "expand the second folder"
layerMouseDownUpRel LMO_Collapse 1 1
verifyLayersCount 4
lock_or_hide_select_test :: LayerMouseOp -> Spec
lock_or_hide_select_test lmo = hSpecGoatTesterWithOwlPFState emptyOwlPFState $ do
setMarker "draw a box"
drawCanvasBox (0,0,10,10)
verifySelectionCount 1
setMarker "lock or hide the box"
layerMouseDownUpRel lmo 0 0
verifySelectionCount 1
setMarker "deselect"
pressEscape
verifySelectionCount 0
setMarker "try and select the box via canvas"
canvasMouseDown (5,5)
canvasMouseUp (5,5)
verifySelectionCount 0
setMarker "select the box via layers"
layerMouseDownUpRel LMO_Normal 0 0
verifySelectionCount 1
setMarker "deselect"
pressEscape
verifySelectionCount 0
setMarker "unlock or unhide the box"
layerMouseDownUpRel lmo 0 0
setMarker "select the box via canvas"
canvasMouseDownUp (5,5)
verifySelectionCount 1
spec :: Spec
spec = do
describe "Layers" $ do
describe "basic" $ basic_test
describe "rename_focus_test" $ rename_focus_test
describe "create_in_folder_and_collapse_test" $ create_in_folder_and_collapse_test
describe "folder_collapse_test" $ folder_collapse_test
describe "hide_select_test" $ lock_or_hide_select_test LMO_Hide
describe "lock_select_test" $ lock_or_hide_select_test LMO_Lock