quickcheck-webdriver-0.1.0.3: Test/QuickCheck/Monadic/WebDriver.hs
{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE OverloadedStrings #-}
-- |
-- Module: Test.QuickCheck.Monadic.WebDriver
-- Copyright: (c) 2014 Christian Brink
-- License: MIT
-- Maintainer: Christian Brink
--
-- Example usage:
--
-- > import Test.QuickCheck
-- > import Test.QuickCheck.Monadic (run, pick, assert)
-- > import Test.WebDriver
-- > prop_Example = monadicWD context $ do
-- > url <- pick $ oneof ("http://www.yesodweb.com", "http://snapframework.com/")
-- > run $ openPage url
-- > assert True
-- > runIO $ putStrLn $ "We've just evaluated a `Gen a` using `pick` and \
-- > \a `WD ()` using `run`, then asserted a that a \
-- > \property holds using `assert`."
-- > where context = SessionParams allCaps (return ())
module Test.QuickCheck.Monadic.WebDriver where
import Prelude
import Test.QuickCheck
import Test.QuickCheck.Property
import Test.QuickCheck.Monadic as QCM
import Test.WebDriver
import Control.Monad.IO.Class
data Context = ExistingSession WDSession
| SessionParams Capabilities (WD ())
-- |Patterned after `monadicIO` (and `ioProperty`).
monadicWD context wd = monadic wdProperty wd
where
wdProperty = ioProperty . runSesh
runSesh action = case context of
ExistingSession sesh -> runWD sesh action
SessionParams caps setup -> runSession defaultSession caps $ setup >> action
runIO :: IO a -> PropertyM WD a
runIO = QCM.run . liftIO
chromeOpts = [ "--log-level=0" ]
chrome' = chrome { chromeOptions = chromeOpts }
caps browser = allCaps {browser=browser}
capsChrome = caps chrome'
capsFirefox = caps firefox
seshParams browser = SessionParams (caps browser) $ return ()
seshParamsChrome = seshParams chrome'
seshParamsFirefox' = seshParams firefox
-- $example
--