@@ -63,8 +63,11 @@ chromeConfig fp = WD.useBrowser (WD.chrome { WD.chromeBinary = Just $ T.unpack f
63-- parallel (requires port fix)
63-- parallel (requires port fix)
65main :: IO ()
65main :: IO ()
66−main = hspec $ parallel $ beforeAll startSeleniumServer $ do
66+main = withSeleniumServer $ \stopServer ->
67+ hspec (parallel tests) `finally` stopServer
68 describe "text" $ parallel $ do
71 describe "text" $ parallel $ do
69 it "works" $ do
72 it "works" $ do
70 testWidgetStatic (checkBodyText "hello world") $ do
73 testWidgetStatic (checkBodyText "hello world") $ do
@@ -595,14 +598,19 @@ main = hspec $ parallel $ beforeAll startSeleniumServer $ do
595 (traverse_ elementShouldBeRemoved)
598 (traverse_ elementShouldBeRemoved)
596 (el "span" $ prerender (text "One") (text "Two"))
599 (el "span" $ prerender (text "One") (text "Two"))
598−startSeleniumServer :: IO ()
601+startSeleniumServer :: IO (IO ())
599startSeleniumServer = do
602startSeleniumServer = do
600 (_,_,_,ph) <- createProcess $ (proc "selenium-server" [])
603 (_,_,_,ph) <- createProcess $ (proc "selenium-server" [])
601 { std_in = NoStream
604 { std_in = NoStream
602 , std_out = NoStream
605 , std_out = NoStream
604− _ <- forkIO $ print =<< waitForProcess ph
607+ return $ terminateProcess ph
609+withSeleniumServer :: (IO () -> IO ()) -> IO ()
610+withSeleniumServer f = do
611+ stopServer <- startSeleniumServer
605 threadDelay $ 1000 * 1000 * 2 -- TODO poll or wait on a a signal to block on
612 threadDelay $ 1000 * 1000 * 2 -- TODO poll or wait on a a signal to block on
607assertAttr :: WD.Element -> Text -> Maybe Text -> WD ()
615assertAttr :: WD.Element -> Text -> Maybe Text -> WD ()
608assertAttr e k v = liftIO . assertEqual "Incorrect attribute value" v =<< WD.attr e k
616assertAttr e k v = liftIO . assertEqual "Incorrect attribute value" v =<< WD.attr e k