noredink-ui/tests/Spec/KeyboardHelpers.elm
Tessa Kelly d6cb57e47e Adds regression test
a bit difficult to say whether this will actually catch this kind of issue, but better to have the test than not
2023-02-14 16:56:14 -07:00

173 lines
5.0 KiB
Elm

module Spec.KeyboardHelpers exposing (..)
import Json.Encode as Encode
import ProgramTest exposing (ProgramTest)
import Test.Html.Event as Event
import Test.Html.Query as Query
import Test.Html.Selector exposing (Selector)
pressKey :
{ targetDetails : List ( String, Encode.Value )
, keyCode : Int
, shiftKey : Bool
}
-> List Selector
-> ProgramTest model msg effect
-> ProgramTest model msg effect
pressKey { targetDetails, keyCode, shiftKey } selectors =
ProgramTest.simulateDomEvent
(Query.find selectors)
(Event.custom
"keydown"
(Encode.object
[ ( "keyCode", Encode.int keyCode )
, ( "shiftKey", Encode.bool shiftKey )
, ( "target"
, Encode.object targetDetails
)
]
)
)
releaseKey :
{ targetDetails : List ( String, Encode.Value )
, keyCode : Int
, shiftKey : Bool
}
-> List Selector
-> ProgramTest model msg effect
-> ProgramTest model msg effect
releaseKey { targetDetails, keyCode, shiftKey } selectors =
ProgramTest.simulateDomEvent
(Query.find selectors)
(Event.custom
"keyup"
(Encode.object
[ ( "keyCode", Encode.int keyCode )
, ( "shiftKey", Encode.bool shiftKey )
, ( "target"
, Encode.object targetDetails
)
]
)
)
pressTabKey :
{ targetDetails : List ( String, Encode.Value ) }
-> List Selector
-> ProgramTest model msg effect
-> ProgramTest model msg effect
pressTabKey { targetDetails } =
pressKey { targetDetails = targetDetails, keyCode = 9, shiftKey = False }
pressTabBackKey :
{ targetDetails : List ( String, Encode.Value ) }
-> List Selector
-> ProgramTest model msg effect
-> ProgramTest model msg effect
pressTabBackKey { targetDetails } =
pressKey { targetDetails = targetDetails, keyCode = 9, shiftKey = True }
pressEscKey :
{ targetDetails : List ( String, Encode.Value ) }
-> List Selector
-> ProgramTest model msg effect
-> ProgramTest model msg effect
pressEscKey { targetDetails } =
pressKey { targetDetails = targetDetails, keyCode = 27, shiftKey = False }
pressSpaceKey :
{ targetDetails : List ( String, Encode.Value ) }
-> List Selector
-> ProgramTest model msg effect
-> ProgramTest model msg effect
pressSpaceKey { targetDetails } =
pressKey { targetDetails = targetDetails, keyCode = 32, shiftKey = False }
pressDownArrow :
{ targetDetails : List ( String, Encode.Value ) }
-> List Selector
-> ProgramTest model msg effect
-> ProgramTest model msg effect
pressDownArrow { targetDetails } =
pressKey { targetDetails = targetDetails, keyCode = 40, shiftKey = False }
pressRightArrow :
{ targetDetails : List ( String, Encode.Value ) }
-> List Selector
-> ProgramTest model msg effect
-> ProgramTest model msg effect
pressRightArrow { targetDetails } =
pressKey { targetDetails = targetDetails, keyCode = 39, shiftKey = False }
pressLeftArrow :
{ targetDetails : List ( String, Encode.Value ) }
-> List Selector
-> ProgramTest model msg effect
-> ProgramTest model msg effect
pressLeftArrow { targetDetails } =
pressKey { targetDetails = targetDetails, keyCode = 37, shiftKey = False }
pressShiftRight :
{ targetDetails : List ( String, Encode.Value ) }
-> List Selector
-> ProgramTest model msg effect
-> ProgramTest model msg effect
pressShiftRight { targetDetails } =
pressKey { targetDetails = targetDetails, keyCode = 39, shiftKey = True }
pressShiftLeft :
{ targetDetails : List ( String, Encode.Value ) }
-> List Selector
-> ProgramTest model msg effect
-> ProgramTest model msg effect
pressShiftLeft { targetDetails } =
pressKey { targetDetails = targetDetails, keyCode = 37, shiftKey = True }
releaseRightArrow :
{ targetDetails : List ( String, Encode.Value ) }
-> List Selector
-> ProgramTest model msg effect
-> ProgramTest model msg effect
releaseRightArrow { targetDetails } =
releaseKey { targetDetails = targetDetails, keyCode = 39, shiftKey = False }
releaseLeftArrow :
{ targetDetails : List ( String, Encode.Value ) }
-> List Selector
-> ProgramTest model msg effect
-> ProgramTest model msg effect
releaseLeftArrow { targetDetails } =
releaseKey { targetDetails = targetDetails, keyCode = 37, shiftKey = False }
releaseShiftRight :
{ targetDetails : List ( String, Encode.Value ) }
-> List Selector
-> ProgramTest model msg effect
-> ProgramTest model msg effect
releaseShiftRight { targetDetails } =
releaseKey { targetDetails = targetDetails, keyCode = 39, shiftKey = True }
releaseShiftLeft :
{ targetDetails : List ( String, Encode.Value ) }
-> List Selector
-> ProgramTest model msg effect
-> ProgramTest model msg effect
releaseShiftLeft { targetDetails } =
releaseKey { targetDetails = targetDetails, keyCode = 37, shiftKey = True }