packages feed

tinytools-0.1.0.0: test/Potato/Flow/Controller/Manipulator/PanSpec.hs

module Potato.Flow.Controller.Manipulator.PanSpec (
  spec
) where

import           Relude                                         hiding (empty,
                                                                 fromList)

import           Test.Hspec

import           Potato.Flow.GoatTester

import           Potato.Flow
import           Potato.Flow.Controller.Manipulator.TestHelpers



-- | verifies that the number of owls (elts) in the state is what is expected, includes folders in the count
verifyPan :: (Int, Int) -> GoatTester ()
verifyPan expected = verifyState "verifyPan" f where
  f gs = if pan == expected
    then Nothing
    else Just $ "got " <> show pan <> " expected " <> show expected
    where
      V2 x y = _goatState_pan gs
      pan = (x,y)



-- TODO broken...
basic_test :: Spec
basic_test = hSpecGoatTesterWithOwlPFState emptyOwlPFState $ do

  setMarker "draw a box"
  drawCanvasBox (0, 0, 10, 10)
  -- TODO verify box position

  let pan = (5, -7)
  setMarker "pan"
  verifyPan (0,0)
  setTool Tool_Pan
  canvasMouseDown (0, 0)
  canvasMouseDown (1, 1)
  verifyPan (1, 1)
  canvasMouseDown pan
  verifyPan pan
  canvasMouseUp pan
  verifyPan pan

  setMarker "draw a box"
  drawCanvasBox (0, 0, 10, 10)
  -- TODO verify box position is offset by pan


cancel_test :: Spec
cancel_test = hSpecGoatTesterWithOwlPFState emptyOwlPFState $ do
  let pan = (5, -7)
  setMarker "pan and cancel"
  verifyPan (0,0)
  setTool Tool_Pan
  canvasMouseDown (0, 0)
  canvasMouseDown pan
  verifyPan pan
  pressEscape
  canvasMouseDown pan
  verifyPan (0, 0)


middle_button_pan_test :: Spec
middle_button_pan_test = hSpecGoatTesterWithOwlPFState emptyOwlPFState $ do

  setMarker "set tool to box, then pan using middle mouse button"
  setTool Tool_Box
  mouse True False [] MouseButton_Middle (V2 0 0)
  mouse True False [] MouseButton_Middle (V2 10 10)
  mouse True True [] MouseButton_Middle (V2 10 10)

  setMarker "check we went back to box handler"
  verifyOwlCount 0
  canvasMouseDown (0, 0)
  canvasMouseDown (1, 1)
  canvasMouseUp (1, 1)
  verifyOwlCount 1


spec :: Spec
spec = do
  describe "Pan" $ do
    --describe "basic_test" $ basic_test
    describe "cancel_test" $ cancel_test
    describe "middle_button_pan_test" $ middle_button_pan_test