packages feed

webdriver-precore-0.2.0.0: test/BiDi/Demos/OtherDemos.hs

module BiDi.Demos.OtherDemos where

import BiDi.Actions (BiDiActions (..))
import BiDi.DemoUtils
import Config (Config)
import ConfigLoader (loadConfig)
import Data.Text (Text)
import IOUtils (DemoActions (..))
import TestData (navigation1Url, navigation2Url)
import BiDi.BiDiUrl (parseUrl)
import WebDriverPreCore.BiDi.Protocol
  ( KnownSubscriptionType (..),
    Navigate (..),
    ReadinessState (..),
  )
import Utils (txt)
import Prelude hiding (log, putStrLn)

-- low level demos -  TODO turn into tests ---

-- >>> parseUrlDemo
-- "Right\n  MkBiDiUrl\n    { host = \"127.0.0.1\"\n    , port = 9222\n    , path = \"/session/e43698d9-b02a-4284-a936-12041deb3552\"\n    }"
parseUrlDemo :: Text
parseUrlDemo = txt $ parseUrl "ws://127.0.0.1:9222/session/e43698d9-b02a-4284-a936-12041deb3552"


-- Check expected errors when rigged to fail

-- >>> evalFail getFailDemo
getFailDemo :: Config -> IO ()
getFailDemo c = expectErrorText "getfail" "Forced failure for testing: get" $ runDemoFail' c 0 2 0 failDemo

-- >>> evalFail sendFailDemo
sendFailDemo :: Config -> IO ()
sendFailDemo c = expectErrorText "sendfail" "Forced failure for testing: send" $ runDemoFail' c 2 0 0 failDemo

-- >>> evalFail eventFailDemo
eventFailDemo :: Config -> IO ()
eventFailDemo c = expectErrorText "eventfail" "Forced failure for testing: eventhandler (call #2)" $ runDemoFail' c 0 0 2 failDemo
evalFail :: (Config -> IO ()) -> IO ()
evalFail failAction = do
  c <- loadConfig
  failAction c

-- >>> runDemo dummyDemo
failDemo :: BiDiDemo
failDemo =
  demo "Fail demo" action
  where
    action :: DemoActions -> BiDiActions -> IO ()
    action utils@MkDemoActions {pause, logTxt, logShow, timeLimitLog} bidi@MkBiDiActions {..} = do
      bc <- rootContext utils bidi

      logTxt "Subscribe to navigation started events"
      (startedEventFired, waitStartedEventFired) <- timeLimitLog BrowsingContextNavigationStarted
      subscribeBrowsingContextNavigationStarted startedEventFired

      logTxt "Navigate to navigation1.html"
      nav1 <- navigation1Url
      navResult1 <- browsingContextNavigate $ MkNavigate {context = bc, url = nav1, wait = Just Complete}
      logShow "Navigation result 1" navResult1
      pause

      logTxt "Navigate to navigation2.html"
      nav2 <- navigation2Url
      navResult2 <- browsingContextNavigate $ MkNavigate {context = bc, url = nav2, wait = Just Complete}
      logShow "Navigation result 2" navResult2
      pause

      waitStartedEventFired