monomer-1.0.0.0: test/unit/Monomer/Widgets/Singles/ExternalLinkSpec.hs
{-|
Module : Monomer.Widgets.Singles.ExternalLinkSpec
Copyright : (c) 2018 Francisco Vallarino
License : BSD-3-Clause (see the LICENSE file)
Maintainer : fjvallarino@gmail.com
Stability : experimental
Portability : non-portable
Unit tests for ExternalLink widget.
-}
module Monomer.Widgets.Singles.ExternalLinkSpec (spec) where
import Data.Default
import Test.Hspec
import qualified Data.Sequence as Seq
import Monomer.Core
import Monomer.Core.Combinators
import Monomer.Event
import Monomer.TestEventUtil
import Monomer.TestUtil
import Monomer.Widgets.Singles.ExternalLink
data TestEvent
= GotFocus Path
| LostFocus Path
deriving (Eq, Show)
spec :: Spec
spec = describe "ExternalLink" $ do
handleEvent
getSizeReq
handleEvent :: Spec
handleEvent = describe "handleEvent" $ do
it "should not generate an event if clicked outside" $
clickReqs (Point 3000 3000) `shouldBe` Seq.empty
it "should generate a widget task when clicked" $
Seq.index (clickReqs (Point 100 100)) 0 `shouldSatisfy` isRunTask
it "should generate a user provided event when Enter/Space is pressed" $
Seq.index (keyReqs keyReturn) 0 `shouldSatisfy` isRunTask
it "should generate an event when focus is received" $
events evtFocus `shouldBe` Seq.singleton (GotFocus emptyPath)
it "should generate an event when focus is lost" $
events evtBlur `shouldBe` Seq.singleton (LostFocus emptyPath)
where
wenv = mockWenv ()
btnNode = externalLink_ "Link" "Url" [onFocus GotFocus, onBlur LostFocus]
clickReqs p = nodeHandleEventReqs wenv [evtClick p] btnNode
keyReqs key = nodeHandleEventReqs wenv [KeyAction def key KeyPressed] btnNode
events evt = nodeHandleEventEvts wenv [evt] btnNode
getSizeReq :: Spec
getSizeReq = describe "getSizeReq" $ do
it "should return width = Fixed 40" $
sizeReqW `shouldBe` fixedSize 40
it "should return height = Fixed 20" $
sizeReqH `shouldBe` fixedSize 20
where
wenv = mockWenvEvtUnit ()
(sizeReqW, sizeReqH) = nodeGetSizeReq wenv (externalLink "Link" "Url")