{-# 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 :: String <- pick $ elements ["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 = monadic wdProperty 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 prop_Example = monadicWD context $ do url :: String <- pick $ elements ["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 ())