@@ -852,17 +852,15 @@ tests wdConfig caps _selenium = do
852852 it "postBuild works in replaced widget" $ runWD $ do
853853 replaceChan <- liftIO newChan
854854 pbLock <- liftIO newEmptyMVar
855− let check = do
856− liftIO $ do
857− writeChan replaceChan ()
858− takeMVar pbLock
855+ let check = liftIO $ do
856+ writeChan replaceChan ()
857+ takeMVar pbLock
859858 testWidget (pure ()) check $ void $ do
860859 replace <- triggerEventWithChan replaceChan
861860 runWithReplace (pure ()) $ ffor replace $ \() -> do
862861 pb <- getPostBuild
863862 performEvent_ $ liftIO (putMVar pbLock ()) <$ pb
864−
865− it "can be nested in event widget" $ runWD $ do -- Test is broken, I think
863+ it "can be nested in event widget" $ runWD $ do
866864 replaceChan1 :: Chan Text <- liftIO newChan
867865 replaceChan2 :: Chan Text <- liftIO newChan
868866 lock :: MVar () <- liftIO newEmptyMVar
@@ -888,7 +886,33 @@ tests wdConfig caps _selenium = do
888886 [ el "span" . text <$> replace2
889887 , el "div" (text "pb") <$ pb
890888 ]
891−
889+ it "prerender works in replaced widget" $ runWD $ do
890+ replaceChan <- liftIO newChan
891+ lock :: MVar () <- liftIO newEmptyMVar
892+ pbLock :: MVar () <- liftIO newEmptyMVar
893+ let check = do
894+ liftIO $ do
895+ writeChan replaceChan ()
896+ takeMVar lock
897+ takeMVar pbLock
898+ testWidget (pure ()) check $ void $ do
899+ replace <- triggerEventWithChan replaceChan
900+ runWithReplace (pure ()) $ ffor replace $ \() -> do
901+ prerender_ (pure ()) $ do
902+ liftIO $ putMVar lock ()
903+ pb <- getPostBuild
904+ performEvent_ $ liftIO (putMVar pbLock ()) <$ pb
905+ it "prerender returns in immediate mode" $ runWD $ do
906+ replaceChan <- liftIO newChan
907+ pbLock <- liftIO newEmptyMVar
908+ let check = liftIO $ do
909+ writeChan replaceChan ()
910+ takeMVar pbLock
911+ testWidget (pure ()) check $ void $ do
912+ replace <- triggerEventWithChan replaceChan
913+ runWithReplace (pure ()) $ ffor replace $ \() -> do
914+ prerender_ (pure ()) (pure ())
915+ liftIO $ putMVar pbLock ()
892916 it "works in immediate mode (RHS of prerender)" $ runWD $ do
893917 replaceChan :: Chan Text <- liftIO newChan
894918 let check = do
@@ -1257,6 +1281,7 @@ withSeleniumServer f = do
12571281triggerEventWithChan :: (Reflex t, TriggerEvent t m, Prerender t m) => Chan a -> m (Event t a)
12581282triggerEventWithChan chan = do
12591283 (e, trigger) <- newTriggerEvent
1284+ -- In prerender because we only want to do this on the client
12601285 prerender_ (pure ()) $ void $ liftIO $ forkIO $ forever $ trigger =<< readChan chan
12611286 pure e
12621287