@@ -63,8 +63,11 @@ chromeConfig fp = WD.useBrowser (WD.chrome { WD.chromeBinary = Just $ T.unpack f
6363-- parallel (requires port fix)
6464
6565main :: IO ()
66−main = hspec $ parallel $ beforeAll startSeleniumServer $ do
66+main = withSeleniumServer $ \stopServer ->
67+ hspec (parallel tests) `finally` stopServer
6768
69+tests :: Spec
70+tests = do
6871 describe "text" $ parallel $ do
6972 it "works" $ do
7073 testWidgetStatic (checkBodyText "hello world") $ do
@@ -595,14 +598,19 @@ main = hspec $ parallel $ beforeAll startSeleniumServer $ do
595598 (traverse_ elementShouldBeRemoved)
596599 (el "span" $ prerender (text "One") (text "Two"))
597600
598−startSeleniumServer :: IO ()
601+startSeleniumServer :: IO (IO ())
599602startSeleniumServer = do
600603 (_,_,_,ph) <- createProcess $ (proc "selenium-server" [])
601604 { std_in = NoStream
602605 , std_out = NoStream
603606 }
604− _ <- forkIO $ print =<< waitForProcess ph
607+ return $ terminateProcess ph
608+
609+withSeleniumServer :: (IO () -> IO ()) -> IO ()
610+withSeleniumServer f = do
611+ stopServer <- startSeleniumServer
605612 threadDelay $ 1000 * 1000 * 2 -- TODO poll or wait on a a signal to block on
613+ f stopServer
606614
607615assertAttr :: WD.Element -> Text -> Maybe Text -> WD ()
608616assertAttr e k v = liftIO . assertEqual "Incorrect attribute value" v =<< WD.attr e k