@@ -852,17 +852,15 @@ tests wdConfig caps _selenium = do
852 it "postBuild works in replaced widget" $ runWD $ do
852 it "postBuild works in replaced widget" $ runWD $ do
853 replaceChan <- liftIO newChan
853 replaceChan <- liftIO newChan
854 pbLock <- liftIO newEmptyMVar
854 pbLock <- liftIO newEmptyMVar
856− liftIO $ do
855+ let check = liftIO $ do
857− writeChan replaceChan ()
856+ writeChan replaceChan ()
858− takeMVar pbLock
857+ takeMVar pbLock
859 testWidget (pure ()) check $ void $ do
858 testWidget (pure ()) check $ void $ do
860 replace <- triggerEventWithChan replaceChan
859 replace <- triggerEventWithChan replaceChan
861 runWithReplace (pure ()) $ ffor replace $ \() -> do
860 runWithReplace (pure ()) $ ffor replace $ \() -> do
862 pb <- getPostBuild
861 pb <- getPostBuild
863 performEvent_ $ liftIO (putMVar pbLock ()) <$ pb
862 performEvent_ $ liftIO (putMVar pbLock ()) <$ pb
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
866 replaceChan1 :: Chan Text <- liftIO newChan
864 replaceChan1 :: Chan Text <- liftIO newChan
867 replaceChan2 :: Chan Text <- liftIO newChan
865 replaceChan2 :: Chan Text <- liftIO newChan
868 lock :: MVar () <- liftIO newEmptyMVar
866 lock :: MVar () <- liftIO newEmptyMVar
@@ -888,7 +886,33 @@ tests wdConfig caps _selenium = do
888 [ el "span" . text <$> replace2
886 [ el "span" . text <$> replace2
889 , el "div" (text "pb") <$ pb
887 , el "div" (text "pb") <$ pb
891−
889+ it "prerender works in replaced widget" $ runWD $ do
890+ replaceChan <- liftIO newChan
891+ lock :: MVar () <- liftIO newEmptyMVar
892+ pbLock :: MVar () <- liftIO newEmptyMVar
895+ writeChan replaceChan ()
898+ testWidget (pure ()) check $ void $ do
899+ replace <- triggerEventWithChan replaceChan
900+ runWithReplace (pure ()) $ ffor replace $ \() -> do
901+ prerender_ (pure ()) $ do
902+ liftIO $ putMVar lock ()
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 ()
911+ testWidget (pure ()) check $ void $ do
912+ replace <- triggerEventWithChan replaceChan
913+ runWithReplace (pure ()) $ ffor replace $ \() -> do
914+ prerender_ (pure ()) (pure ())
915+ liftIO $ putMVar pbLock ()
892 it "works in immediate mode (RHS of prerender)" $ runWD $ do
916 it "works in immediate mode (RHS of prerender)" $ runWD $ do
893 replaceChan :: Chan Text <- liftIO newChan
917 replaceChan :: Chan Text <- liftIO newChan
894 let check = do
918 let check = do
@@ -1257,6 +1281,7 @@ withSeleniumServer f = do
1257triggerEventWithChan :: (Reflex t, TriggerEvent t m, Prerender t m) => Chan a -> m (Event t a)
1281triggerEventWithChan :: (Reflex t, TriggerEvent t m, Prerender t m) => Chan a -> m (Event t a)
1258triggerEventWithChan chan = do
1282triggerEventWithChan chan = do
1259 (e, trigger) <- newTriggerEvent
1283 (e, trigger) <- newTriggerEvent
1284+ -- In prerender because we only want to do this on the client
1260 prerender_ (pure ()) $ void $ liftIO $ forkIO $ forever $ trigger =<< readChan chan
1285 prerender_ (pure ()) $ void $ liftIO $ forkIO $ forever $ trigger =<< readChan chan