noredink-ui/tests/Spec/TabsInternalHelpers.elm

97 lines
3.0 KiB
Elm
Raw Normal View History

2022-10-05 22:43:01 +03:00
module Spec.TabsInternalHelpers exposing (..)
import Accessibility.Key as Key
import Accessibility.Role as Role
import Browser.Dom as Dom
import Expect
2022-10-06 00:25:05 +03:00
import Html.Styled exposing (..)
2022-10-05 22:43:01 +03:00
import ProgramTest exposing (..)
import Spec.KeyboardHelpers as KeyboardHelpers
import Test.Html.Query as Query
import Test.Html.Selector as Selector
type alias State =
{ selected : Int
}
init : State
init =
{ selected = 0
}
type Msg
= FocusAndSelectTab { select : Int, focus : Maybe String }
| Focused (Result Dom.Error ())
type alias TestContext =
ProgramTest State Msg ()
ensureTabbable : String -> TestContext -> TestContext
ensureTabbable word testContext =
testContext
|> ensureView
(Query.find [ Selector.attribute Role.tab, Selector.attribute (Key.tabbable True) ]
>> Query.has [ Selector.text word ]
)
ensurePanelsFocusable : List String -> TestContext -> TestContext
ensurePanelsFocusable words testContext =
testContext
|> ensureView
(Query.findAll [ Selector.attribute Role.tabPanel, Selector.attribute (Key.tabbable True) ]
>> Expect.all (List.indexedMap (\i w -> Query.index i >> Query.has [ Selector.text w ]) words)
)
ensurePanelDisplayed : String -> TestContext -> TestContext
ensurePanelDisplayed word testContext =
testContext
|> ensureView
(Query.find [ Selector.attribute Role.tabPanel, Selector.style "display" "block" ]
>> Query.has [ Selector.text word ]
)
ensureOnlyOnePanelDisplayed : List String -> TestContext -> TestContext
ensureOnlyOnePanelDisplayed panels testContext =
testContext
|> ensureView
(Query.findAll [ Selector.attribute Role.tabPanel, Selector.style "display" "block" ]
>> Query.count (Expect.equal 1)
)
|> ensureView
(Query.findAll [ Selector.attribute Role.tabPanel, Selector.style "display" "none" ]
>> Query.count (Expect.equal (List.length panels - 1))
)
ensureOnlyOneTabInSequence : List String -> TestContext -> TestContext
ensureOnlyOneTabInSequence tabs testContext =
testContext
|> ensureView
(Query.findAll [ Selector.attribute Role.tab, Selector.attribute (Key.tabbable True) ]
>> Query.count (Expect.equal 1)
)
|> ensureView
(Query.findAll [ Selector.attribute Role.tab, Selector.attribute (Key.tabbable False) ]
>> Query.count (Expect.equal (List.length tabs - 1))
)
releaseRightArrow : TestContext -> TestContext
releaseRightArrow =
KeyboardHelpers.releaseRightArrow { targetDetails = [] }
[ Selector.attribute Role.tab, Selector.attribute (Key.tabbable True) ]
releaseLeftArrow : TestContext -> TestContext
releaseLeftArrow =
KeyboardHelpers.releaseLeftArrow { targetDetails = [] }
[ Selector.attribute Role.tab, Selector.attribute (Key.tabbable True) ]