{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE RecursiveDo     #-}

module Potato.Flow.Deprecated.Controller.Manipulator.SelectSpec
  ( spec
  )
where

import           Relude                            hiding (empty, fromList)

import           Test.Hspec
import           Test.Hspec.Contrib.HUnit          (fromHUnitTest)
import           Test.HUnit

import           Potato.Flow
import           Potato.Flow.Common
import           Potato.Flow.TestStates


-- attempt to select 0 area objects and ensure behavior is correct
test_Select_zero :: Test
test_Select_zero = constructTest "zero" owlpfstate_zero bs expected where
  bs = [

      EWCLabel "select b1"
      , EWCTool Tool_Select
      , EWCMouse (LMouseData (V2 (-1) (-1)) False MouseButton_Left [] False)
      , EWCMouse (LMouseData (V2 1 1) True MouseButton_Left [] False)

      , EWCLabel "deselect"
      , EWCKeyboard (KeyboardData KeyboardKey_Esc [])

      , EWCLabel "select sl1"
      , EWCMouse (LMouseData (V2 9 9) False MouseButton_Left [] False)
      , EWCMouse (LMouseData (V2 11 11) True MouseButton_Left [] False)
    ]
  expected = [
      LabelCheck "select b1"
      , EqPredicate goatState_selectedTool Tool_Select
      , numSelectedEltsEqualPredicate 0
      , numSelectedEltsEqualPredicate 1

      , LabelCheck "deselect"
      , numSelectedEltsEqualPredicate 0

      , LabelCheck "select sl1"
      , numSelectedEltsEqualPredicate 0
      -- not possible to select zero area lines ATM (TODO fix)
      , numSelectedEltsEqualPredicate 0
    ]


spec :: Spec
spec = do
  describe "SelectHandler" $ do
    fromHUnitTest $ test_Select_zero