on develop help sign in
15 files changed+195−57
since splitsnapshots
unifiedsplit
.github/workflows/haskell.yml+47 cabal.project+10−1 cabal.project-nogtk+14 reflex-dom-core/ChangeLog.md+8 reflex-dom-core/reflex-dom-core.cabal+19−7 reflex-dom-core/src/Reflex/Dom/Builder/Class.hs+2−1 reflex-dom-core/src/Reflex/Dom/Builder/Immediate.hs+12−4 reflex-dom-core/src/Reflex/Dom/Builder/Static.hs+1−1 reflex-dom-core/src/Reflex/Dom/Main.hs+38−10 reflex-dom-core/src/Reflex/Dom/Widget/Lazy.hs+1−1 reflex-dom-core/test/hlint.hs+1−1 reflex-dom-core/test/hydration.hs+34−27 reflex-dom-test-selenium/reflex-dom-test-selenium.cabal+1−1 reflex-dom/ChangeLog.md+4 reflex-dom/reflex-dom.cabal+3−3
.github/workflows/haskell.ymlnew file+47
@@ -0,0 +1,47 @@
1+name: github-action
2+
3+on: [push, pull_request]
4+
5+jobs:
6+ build:
7+ strategy:
8+ matrix:
9+ ghc: ['8.4.4', '8.6.5', '8.8.4', '8.10.2']
10+ os: ['ubuntu-latest', 'macos-latest']
11+ exclude:
12+ # There are some linker warnings in 802 on darwin that
13+ # cause compilation to fail
14+ # See https://github.com/NixOS/nixpkgs/issues/25139
15+ - ghc: '8.0.2'
16+ os: 'macos-latest'
17+ runs-on: ${{ matrix.os }}
18+
19+ name: GHC ${{ matrix.ghc }} on ${{ matrix.os }}
20+ steps:
21+ - uses: actions/checkout@v2
22+ - uses: actions/setup-haskell@v1
23+ with:
24+ ghc-version: ${{ matrix.ghc }}
25+ - name: Cache
26+ uses: actions/cache@v1
27+ env:
28+ cache-name: cache-cabal
29+ with:
30+ path: ~/.cabal
31+ key: ${{ runner.os }}-${{ matrix.ghc }}-build-${{ env.cache-name }}-${{ hashFiles('**/*.cabal') }}-${{ hashFiles('**/cabal.project') }}
32+ restore-keys: |
33+ ${{ runner.os }}-${{ matrix.ghc }}-build-${{ env.cache-name }}-
34+ ${{ runner.os }}-${{ matrix.ghc }}-build-
35+ ${{ runner.os }}-${{ matrix.ghc }}-
36+ ${{ runner.os }}
37+
38+ - name: Set up cabal project file to avoid webkit2gtk
39+ run: cp cabal.project-nogtk cabal.project
40+ - name: Install dependencies
41+ run: |
42+ cabal update
43+ cabal build --only-dependencies --enable-tests --enable-benchmarks all
44+ - name: Build
45+ run: cabal build --enable-tests --enable-benchmarks all
46+ - name: Run tests
47+ run: cabal test all
cabal.project+10−1
@@ -1 +1,10 @@
1−packages: chrome-test-utils, reflex-dom-core, reflex-dom, reflex-dom-test-selenium
1+packages:
2+ reflex-dom-core/
3+ reflex-dom/
4+ chrome-test-utils/
5+ reflex-dom-test-selenium/
6+
7+source-repository-package
8+ type: git
9+ location: https://github.com/dfordivam/hspec-webdriver-clone
10+ tag: 0d748b7bb7cd74dce0a55a1ec86b01dbb8a71cd8
cabal.project-nogtknew file+14
@@ -0,0 +1,14 @@
1+packages:
2+ reflex-dom-core/
3+ reflex-dom/
4+
5+package reflex-dom-core
6+ flags: -hydration-tests -gc-tests
7+
8+package reflex-dom
9+ flags: +use-warp -webkit2gtk
10+
11+source-repository-package
12+ type: git
13+ location: https://github.com/dfordivam/hspec-webdriver-clone
14+ tag: 0d748b7bb7cd74dce0a55a1ec86b01dbb8a71cd8
reflex-dom-core/ChangeLog.md+8
@@ -1,5 +1,13 @@
11# Revision history for reflex-dom-core
22
3+## 0.6.2.1
4+
5+* Fix hlint complaints with newer GHC.
6+
7+## 0.6.2.0
8+
9+* ([#400](https://github.com/reflex-frp/reflex-dom/pull/400/files)) Set value of input elements in static renderer
10+
311## 0.6.1.0
412
513* Bump version bounds
reflex-dom-core/reflex-dom-core.cabal+19−7
@@ -1,6 +1,6 @@
11cabal-version: 1.24
22Name: reflex-dom-core
3−Version: 0.6.1.0
3+Version: 0.6.2.1
44Synopsis: Functional Reactive Web Apps with Reflex
55Description:
66 Web applications without callbacks or side-effects.
@@ -54,11 +54,21 @@ flag split-these
5454 manual: False
5555 default: True
5656
57+flag hydration-tests
58+ description: Whether to run the hydration tests (currently only available on linux)
59+ default: True
60+ manual: True
61+
62+flag gc-tests
63+ description: Whether to run the gc tests (currently only available on linux)
64+ default: True
65+ manual: True
66+
5767library
5868 hs-source-dirs: src
5969 build-depends:
60− aeson >= 0.8 && < 1.5,
61− base >= 4.7 && < 4.14,
70+ aeson >= 0.8 && < 1.6,
71+ base >= 4.7 && < 4.15,
6272 bifunctors >= 4.2 && < 6,
6373 bimap >= 0.3 && < 0.5,
6474 blaze-builder >= 0.4.1 && < 0.5,
@@ -159,14 +169,16 @@ library
159169 if flag(use-template-haskell)
160170 build-depends:
161171 dependent-sum-template >= 0.1 && < 0.2,
162− template-haskell >= 2.12.0 && < 2.16
172+ template-haskell >= 2.12.0 && < 2.17
163173 other-extensions: TemplateHaskell
164174 cpp-options: -DUSE_TEMPLATE_HASKELL
165175 other-modules:
166176 Reflex.Dom.Builder.Class.TH
167177
168178test-suite hlint
169− build-depends: base, hlint
179+ build-depends:
180+ base,
181+ hlint >= 2.0 && < 4.0
170182 hs-source-dirs: test
171183 main-is: hlint.hs
172184 type: exitcode-stdio-1.0
@@ -218,7 +230,7 @@ test-suite hydration
218230 main-is: hydration.hs
219231 type: exitcode-stdio-1.0
220232 default-language: Haskell98
221− if !os(linux) || !arch(x86_64) || flag(profile-reflex)
233+ if !os(linux) || !arch(x86_64) || flag(profile-reflex) || !flag(hydration-tests)
222234 buildable: False
223235
224236-- broken test on base 4.11 & ghc 8.4.3
@@ -238,7 +250,7 @@ test-suite gc
238250 main-is: gc.hs
239251 type: exitcode-stdio-1.0
240252 default-language: Haskell98
241− if !os(linux) || !arch(x86_64)
253+ if !os(linux) || !arch(x86_64) || !flag(gc-tests)
242254 buildable: False
243255
244256source-repository head
reflex-dom-core/src/Reflex/Dom/Builder/Class.hs+2−1
@@ -9,11 +9,12 @@
99{-# LANGUAGE GeneralizedNewtypeDeriving #-}
1010#if !MIN_VERSION_base(4,9,0)
1111{-# LANGUAGE ImpredicativeTypes #-}
12+#else
13+{-# LANGUAGE Rank2Types #-} -- Implied by ImpredicativeTypes
1214#endif
1315{-# LANGUAGE LambdaCase #-}
1416{-# LANGUAGE OverloadedStrings #-}
1517{-# LANGUAGE PolyKinds #-}
16−{-# LANGUAGE Rank2Types #-}
1718{-# LANGUAGE RecursiveDo #-}
1819{-# LANGUAGE ScopedTypeVariables #-}
1920{-# LANGUAGE StandaloneDeriving #-}
reflex-dom-core/src/Reflex/Dom/Builder/Immediate.hs+12−4
@@ -2,7 +2,6 @@
22{-# LANGUAGE CPP #-}
33{-# LANGUAGE ConstraintKinds #-}
44{-# LANGUAGE DataKinds #-}
5−{-# LANGUAGE DeriveFunctor #-}
65{-# LANGUAGE DeriveTraversable #-}
76{-# LANGUAGE EmptyDataDecls #-}
87{-# LANGUAGE FlexibleContexts #-}
@@ -49,6 +48,7 @@ module Reflex.Dom.Builder.Immediate
4948 , HydrationMode (..)
5049 , HydrationRunnerT (..)
5150 , runHydrationRunnerT
51+ , runHydrationRunnerTWithFailure
5252 , ImmediateDomBuilderT
5353 , runHydrationDomBuilderT
5454 , getHydrationMode
@@ -292,15 +292,23 @@ localRunner (HydrationRunnerT m) s parent = do
292292
293293{-# INLINABLE runHydrationRunnerT #-}
294294runHydrationRunnerT
295+ :: (MonadRef m, Ref m ~ IORef, Monad m, PerformEvent t m, MonadFix m, MonadReflexCreateTrigger t m, MonadJSM m, MonadJSM (Performable m))
296+ => HydrationRunnerT t m a -> Maybe Node -> Node -> Chan [DSum (EventTriggerRef t) TriggerInvocation] -> m a
297+runHydrationRunnerT m = runHydrationRunnerTWithFailure m (pure ())
298+
299+{-# INLINABLE runHydrationRunnerTWithFailure #-}
300+runHydrationRunnerTWithFailure
295301 :: (MonadRef m, Ref m ~ IORef, Monad m, PerformEvent t m, MonadFix m, MonadReflexCreateTrigger t m, MonadJSM m, MonadJSM (Performable m))
296302 => HydrationRunnerT t m a -> IO () -> Maybe Node -> Node -> Chan [DSum (EventTriggerRef t) TriggerInvocation] -> m a
297−runHydrationRunnerT (HydrationRunnerT m) onFailure s parent events = flip runDomRenderHookT events $ flip runReaderT parent $ do
303+runHydrationRunnerTWithFailure (HydrationRunnerT m) onFailure s parent events = flip runDomRenderHookT events $ flip runReaderT parent $ do
298304 (a, s') <- runStateT m (HydrationState s False)
299305 traverse_ removeSubsequentNodes $ _hydrationState_previousNode s'
300306 when (_hydrationState_failed s') $ liftIO $ putStrLn "reflex-dom warning: hydration failed: the DOM was not as expected at switchover time. This may be due to invalid HTML which the browser has altered upon parsing, some external JS altering the DOM, or the page being served from an outdated cache."
301307 when (_hydrationState_failed s') $ liftIO onFailure
302308 pure a
303309
310+
311+
304312instance MonadReflexCreateTrigger t m => MonadReflexCreateTrigger t (HydrationRunnerT t m) where
305313 {-# INLINABLE newEventWithTrigger #-}
306314 newEventWithTrigger = lift . newEventWithTrigger
@@ -1868,14 +1876,14 @@ hoistTraverseWithKeyWithAdjust base mapPatch updateChildUnreadiness applyDomUpda
18681876 getHydrationMode >>= \case
18691877 HydrationMode_Hydrating -> addHydrationStepWithSetup (holdIncremental children0 children') $ \children -> do
18701878 dm :: DMap k (Compose (TraverseChild t m (Some k)) v') <- sample $ currentIncremental children
1871− phs <- traverse id $ weakenDMapWith (either _traverseChildHydration_delayed (pure . _traverseChildImmediate_placeholder) . _traverseChild_mode . getCompose) dm
1879+ phs <- sequenceA $ weakenDMapWith (either _traverseChildHydration_delayed (pure . _traverseChildImmediate_placeholder) . _traverseChild_mode . getCompose) dm
18721880 liftIO $ writeIORef placeholders $! phs
18731881 insertAfterPreviousNode lastPlaceholder
18741882 HydrationMode_Immediate -> do
18751883 let activate i = do
18761884 append $ toNode $ _traverseChildImmediate_fragment i
18771885 pure $ _traverseChildImmediate_placeholder i
1878− phs <- traverse id $ weakenDMapWith (either (error "impossible") activate . _traverseChild_mode . getCompose) children0
1886+ phs <- sequenceA $ weakenDMapWith (either (error "impossible") activate . _traverseChild_mode . getCompose) children0
18791887 liftIO $ writeIORef placeholders $! phs
18801888 append $ toNode lastPlaceholder
18811889 requestDomAction_ $ ffor children' $ \p -> do
reflex-dom-core/src/Reflex/Dom/Builder/Static.hs+1−1
@@ -274,7 +274,7 @@ instance SupportsStaticDomBuilder t m => DomBuilder t (StaticDomBuilderT t m) wh
274274 --TODO: Do not escape quotation marks; see https://stackoverflow.com/questions/25612166/what-characters-must-be-escaped-in-html-5
275275 shouldEscape <- asks _staticDomBuilderEnv_shouldEscape
276276 let escape = if shouldEscape then fromHtmlEscapedText else byteString . encodeUtf8
277− modify . (:) =<< (\c -> "<!--" <> c <> "-->") <$> case mSetContents of
277+ (modify . (:)) . (\c -> "<!--" <> c <> "-->") =<< case mSetContents of
278278 Nothing -> return (pure (escape initialContents))
279279 Just setContents -> hold (escape initialContents) $ fmapCheap escape setContents --Only because it doesn't get optimized when profiling is on
280280 return $ CommentNode ()
reflex-dom-core/src/Reflex/Dom/Main.hs+38−10
@@ -5,7 +5,6 @@
55{-# LANGUAGE GADTs #-}
66{-# LANGUAGE MultiParamTypeClasses #-}
77{-# LANGUAGE NoMonomorphismRestriction #-}
8−{-# LANGUAGE PatternSynonyms #-}
98{-# LANGUAGE RankNTypes #-}
109{-# LANGUAGE RecursiveDo #-}
1110{-# LANGUAGE ScopedTypeVariables #-}
@@ -64,22 +63,41 @@ mainHydrationWidgetWithHead = mainHydrationWidgetWithHead'
6463{-# INLINABLE mainHydrationWidgetWithHead' #-}
6564-- | Warning: `mainHydrationWidgetWithHead'` is provided only as performance tweak. It is expected to disappear in future releases.
6665mainHydrationWidgetWithHead' :: HydrationWidget () () -> HydrationWidget () () -> JSM ()
67−mainHydrationWidgetWithHead' = mainHydrationWidgetWithSwitchoverAction' (pure ()) (pure ())
66+mainHydrationWidgetWithHead' = mainHydrationWidgetWithSwitchoverAction' (pure ())
6867
6968{-# INLINE mainHydrationWidgetWithSwitchoverAction #-}
70−mainHydrationWidgetWithSwitchoverAction :: IO () -> JSM () -> (forall x. HydrationWidget x ()) -> (forall x. HydrationWidget x ()) -> JSM ()
69+mainHydrationWidgetWithSwitchoverAction :: JSM () -> (forall x. HydrationWidget x ()) -> (forall x. HydrationWidget x ()) -> JSM ()
7170mainHydrationWidgetWithSwitchoverAction = mainHydrationWidgetWithSwitchoverAction'
7271
7372{-# INLINABLE mainHydrationWidgetWithSwitchoverAction' #-}
7473-- | Warning: `mainHydrationWidgetWithSwitchoverAction'` is provided only as performance tweak. It is expected to disappear in future releases.
75−mainHydrationWidgetWithSwitchoverAction' :: IO () -> JSM () -> HydrationWidget () () -> HydrationWidget () () -> JSM ()
76−mainHydrationWidgetWithSwitchoverAction' onFailure switchoverAction head' body = do
77− runHydrationWidgetWithHeadAndBody onFailure switchoverAction $ \appendHead appendBody -> do
74+mainHydrationWidgetWithSwitchoverAction' :: JSM () -> HydrationWidget () () -> HydrationWidget () () -> JSM ()
75+mainHydrationWidgetWithSwitchoverAction' = mainHydrationWidgetWithSwitchoverActionWithFailure' (pure ())
76+
77+
78+{-# INLINABLE mainHydrationWidgetWithSwitchoverActionWithFailure' #-}
79+-- | Warning: `mainHydrationWidgetWithSwitchoverActionWithFaiilure'` is provided only as performance tweak. It is expected to disappear in future releases.
80+mainHydrationWidgetWithSwitchoverActionWithFailure' :: IO () -> JSM () -> HydrationWidget () () -> HydrationWidget () () -> JSM ()
81+mainHydrationWidgetWithSwitchoverActionWithFailure' onFailure switchoverAction head' body = do
82+ runHydrationWidgetWithHeadAndBodyWithFailure onFailure switchoverAction $ \appendHead appendBody -> do
7883 appendHead head'
7984 appendBody body
8085
8186{-# INLINABLE attachHydrationWidget #-}
8287attachHydrationWidget
88+ :: JSM ()
89+ -> JSContextSingleton ()
90+ -> ( Event DomTimeline ()
91+ -> IORef HydrationMode
92+ -> Maybe (IORef [(Node, HydrationRunnerT DomTimeline (DomCoreWidget ()) ())])
93+ -> EventChannel
94+ -> PerformEventT DomTimeline DomHost (a, IORef (Maybe (EventTrigger DomTimeline ())))
95+ )
96+ -> IO (a, FireCommand DomTimeline DomHost)
97+attachHydrationWidget = attachHydrationWidgetWithFailure (pure ())
98+
99+{-# INLINABLE attachHydrationWidgetWithFailure #-}
100+attachHydrationWidgetWithFailure
83101 :: IO ()
84102 -> JSM ()
85103 -> JSContextSingleton ()
@@ -90,7 +108,7 @@ attachHydrationWidget
90108 -> PerformEventT DomTimeline DomHost (a, IORef (Maybe (EventTrigger DomTimeline ())))
91109 )
92110 -> IO (a, FireCommand DomTimeline DomHost)
93−attachHydrationWidget onFailure switchoverAction jsSing w = do
111+attachHydrationWidgetWithFailure onFailure switchoverAction jsSing w = do
94112 hydrationMode <- liftIO $ newIORef HydrationMode_Hydrating
95113 rootNodesRef <- liftIO $ newIORef []
96114 events <- newChan
@@ -106,7 +124,7 @@ attachHydrationWidget onFailure switchoverAction jsSing w = do
106124 rootNodes <- liftIO $ readIORef rootNodesRef
107125 let delayedAction = do
108126 for_ (reverse rootNodes) $ \(rootNode, runner) -> do
109− let hydrate = runHydrationRunnerT runner onFailure Nothing rootNode events
127+ let hydrate = runHydrationRunnerTWithFailure runner onFailure Nothing rootNode events
110128 void $ runWithJSContextSingleton (runPostBuildT hydrate never) jsSing
111129 liftIO $ writeIORef hydrationMode HydrationMode_Immediate
112130 runWithJSContextSingleton (DOM.liftJSM switchoverAction) jsSing
@@ -121,6 +139,16 @@ type DomCoreWidget x = PostBuildT DomTimeline (WithJSContextSingleton x (Perform
121139
122140{-# INLINABLE runHydrationWidgetWithHeadAndBody #-}
123141runHydrationWidgetWithHeadAndBody
142+ :: JSM ()
143+ -> ( (forall c. HydrationWidget () c -> FloatingWidget () c) -- "Append to head" --TODO: test invoking this more than once
144+ -> (forall c. HydrationWidget () c -> FloatingWidget () c) -- "Append to body" --TODO: test invoking this more than once
145+ -> FloatingWidget () ()
146+ )
147+ -> JSM ()
148+runHydrationWidgetWithHeadAndBody = runHydrationWidgetWithHeadAndBodyWithFailure (pure ())
149+
150+{-# INLINABLE runHydrationWidgetWithHeadAndBodyWithFailure #-}
151+runHydrationWidgetWithHeadAndBodyWithFailure
124152 :: IO ()
125153 -> JSM ()
126154 -> ( (forall c. HydrationWidget () c -> FloatingWidget () c) -- "Append to head" --TODO: test invoking this more than once
@@ -128,11 +156,11 @@ runHydrationWidgetWithHeadAndBody
128156 -> FloatingWidget () ()
129157 )
130158 -> JSM ()
131−runHydrationWidgetWithHeadAndBody onFailure switchoverAction app = withJSContextSingletonMono $ \jsSing -> do
159+runHydrationWidgetWithHeadAndBodyWithFailure onFailure switchoverAction app = withJSContextSingletonMono $ \jsSing -> do
132160 globalDoc <- currentDocumentUnchecked
133161 headElement <- getHeadUnchecked globalDoc
134162 bodyElement <- getBodyUnchecked globalDoc
135− (events, fc) <- liftIO . attachHydrationWidget onFailure switchoverAction jsSing $ \switchover hydrationMode hydrationResult events -> do
163+ (events, fc) <- liftIO . attachHydrationWidgetWithFailure onFailure switchoverAction jsSing $ \switchover hydrationMode hydrationResult events -> do
136164 (postBuild, postBuildTriggerRef) <- newEventWithTriggerRef
137165 let hydrateDom :: DOM.Node -> HydrationWidget () c -> FloatingWidget () c
138166 hydrateDom n w = do
reflex-dom-core/src/Reflex/Dom/Widget/Lazy.hs+1−1
@@ -117,7 +117,7 @@ virtualList heightPx rowPx maxIndex i0 setI keyToIndex items0 itemsUpdate itemBu
117117 "overflow" =: "hidden" <>
118118 "position" =: "relative"
119119 mkRow k = toStyleAttr $ "height" =: (T.pack (show rowPx) <> "px") <>
120− "top" =: ((<>"px") $ T.pack $ show $ keyToIndex k * rowPx) <>
120+ "top" =: (<> "px") (T.pack $ show $ keyToIndex k * rowPx) <>
121121 "position" =: "absolute" <>
122122 "width" =: "100%"
123123 findWindow sizeIncrement windowSize startingPosition =
reflex-dom-core/test/hlint.hs+1−1
@@ -1,4 +1,4 @@
1−import Language.Haskell.HLint3 (hlint)
1+import Language.Haskell.HLint (hlint)
22import System.Exit (exitFailure, exitSuccess)
33
44main :: IO ()
reflex-dom-core/test/hydration.hs+34−27
@@ -20,6 +20,14 @@
2020
2121{-# OPTIONS_GHC -fno-warn-orphans #-}
2222
23+-- Notice to those working on this test suite:
24+-- It doesn't appear to be possible to use --match to run a particular test, in
25+-- this situation the test may hang before reaching our code. This seems to
26+-- happen when the test is not the first test in the block. As a workaround, you
27+-- can just comment out the other tests. Also, using `xit` will cause the same
28+-- issue. `xit` tests must be the last tests in the session, or the session will
29+-- hang in the following test.
30+
2331import Prelude hiding (fail)
2432import Control.Concurrent
2533import qualified Control.Concurrent.Async as Async
@@ -146,13 +154,13 @@ main = do
146154 withDebugging <- isNothing <$> lookupEnv "NO_DEBUG"
147155 let wdConfig = WD.defaultConfig { WD.wdPort = fromIntegral $ _selenium_portNumber selenium }
148156 chromeCaps' = WD.getCaps $ chromeConfig browserPath chromeFlags
149− hspec (tests withDebugging wdConfig [chromeCaps'] selenium) `finally` _selenium_stopServer selenium
157+ hspec (tests withDebugging wdConfig [(chromeCaps', "chrome")] selenium) `finally` _selenium_stopServer selenium
150158
151−tests :: Bool -> WD.WDConfig -> [Capabilities] -> Selenium -> Spec
159+tests :: Bool -> WD.WDConfig -> [(Capabilities, String)] -> Selenium -> Spec
152160tests withDebugging wdConfig caps _selenium = do
153161 let putStrLnDebug :: MonadIO m => Text -> m ()
154162 putStrLnDebug m = when withDebugging $ liftIO $ putStrLn $ T.unpack m
155− session' = sessionWith wdConfig "" . using (map (,"") caps)
163+ session' t = sessionWith wdConfig t . using caps
156164 runWD m = runWDOptions (WdOptions False) $ do
157165 putStrLnDebug "before"
158166 r <- m
@@ -164,7 +172,7 @@ tests withDebugging wdConfig caps _selenium = do
164172 testWidget = testWidgetDebug True withDebugging
165173 testWidget' :: WD a -> (a -> WD b) -> (forall m js. TestWidget js (SpiderTimeline Global) m => m ()) -> WD b
166174 testWidget' = testWidgetDebug' True withDebugging
167− describe "text" $ session' $ do
175+ session' "text" $ do
168176 it "works" $ runWD $ do
169177 testWidgetStatic (checkBodyText "hello world") $ do
170178 text "hello world"
@@ -225,7 +233,7 @@ tests withDebugging wdConfig caps _selenium = do
225233 click <- button ""
226234 void $ textNode $ TextNodeConfig "initial" $ Just $ "after" <$ click
227235
228− describe "element" $ session' $ do
236+ session' "element" $ do
229237 it "works with domEvent Click" $ runWD $ do
230238 clickedRef <- liftIO $ newRef False
231239 testWidget' (findElemWithRetry $ WD.ByTag "div") WD.click $ do
@@ -289,8 +297,8 @@ tests withDebugging wdConfig caps _selenium = do
289297 let click = domEvent Click e
290298 return ()
291299
292− describe "inputElement" $ do
293− describe "static renderer" $ session' $ do
300+ session' "inputElement" $ do
301+ describe "static renderer" $ do
294302 it "sets value attribute" $ runWD $ do
295303 let checkStatic = do
296304 e <- findElemWithRetry $ WD.ByTag "input"
@@ -347,7 +355,7 @@ tests withDebugging wdConfig caps _selenium = do
347355 & inputElementConfig_initialChecked .~ False
348356 & inputElementConfig_setChecked .~ (True <$ pb)
349357 pure ()
350− describe "hydration" $ session' $ do
358+ describe "hydration" $ do
351359 it "doesn't wipe user input when switching over" $ runWD $ do
352360 inputRef <- newRef ("hello " :: Text)
353361 testWidget'
@@ -585,8 +593,7 @@ tests withDebugging wdConfig caps _selenium = do
585593 el "p" $ dynText $ _inputElement_value e
586594 performEvent_ $ consRef valRef <$> updated (_inputElement_value e)
587595 performEvent_ $ consRef inputRef <$> _inputElement_input e
588−
589− describe "hydration/immediate" $ session' $ do
596+ describe "hydration/immediate" $ do
590597 it "captures user input after switchover" $ runWD $ do
591598 inputRef :: IORef Text <- newRef ""
592599 let checkValue = do
@@ -666,8 +673,8 @@ tests withDebugging wdConfig caps _selenium = do
666673 names <- liftJSM $ traverse File.getName fs
667674 liftIO $ writeRef filesRef names
668675
669− describe "textAreaElement" $ do
670− describe "static renderer" $ session' $ do
676+ session' "textAreaElement" $ do
677+ describe "static renderer" $ do
671678 it "sets value attribute" $ runWD $ do
672679 let checkStatic = do
673680 e <- findElemWithRetry $ WD.ByTag "textarea"
@@ -690,7 +697,7 @@ tests withDebugging wdConfig caps _selenium = do
690697 & textAreaElementConfig_initialValue .~ "test"
691698 & textAreaElementConfig_setValue .~ ("test-updated" <$ pb)
692699 pure ()
693− describe "hydration" $ session' $ do
700+ describe "hydration" $ do
694701 it "doesn't wipe user input when switching over" $ runWD $ do
695702 inputRef <- newRef ("" :: Text)
696703 testWidget'
@@ -839,7 +846,7 @@ tests withDebugging wdConfig caps _selenium = do
839846 e <- textAreaElement $ def & textAreaElementConfig_setValue .~ ("pb" <$ pb)
840847 el "p" $ dynText $ _textAreaElement_value e
841848
842− describe "hydration/immediate" $ session' $ do
849+ describe "hydration/immediate" $ do
843850 it "captures user input after switchover" $ runWD $ do
844851 inputRef :: IORef Text <- newRef ""
845852 let checkValue = do
@@ -881,13 +888,13 @@ tests withDebugging wdConfig caps _selenium = do
881888 performEvent_ $ liftIO . writeRef valueByUIRef <$> _textAreaElement_input e
882889 performEvent_ $ liftIO . writeRef valueRef <$> updated (value e)
883890
884− describe "selectElement" $ do
891+ session' "selectElement" $ do
885892 let options :: DomBuilder t m => m ()
886893 options = do
887894 elAttr "option" ("value" =: "one" <> "id" =: "one") $ text "one"
888895 elAttr "option" ("value" =: "two" <> "id" =: "two") $ text "two"
889896 elAttr "option" ("value" =: "three" <> "id" =: "three") $ text "three"
890− describe "hydration" $ session' $ do
897+ describe "hydration" $ do
891898 it "sets initial value correctly" $ runWD $ do
892899 inputRef <- newRef ("" :: Text)
893900 let setup = do
@@ -961,7 +968,7 @@ tests withDebugging wdConfig caps _selenium = do
961968 performEvent_ $ liftIO . writeRef valueByUIRef <$> _selectElement_change e
962969 performEvent_ $ liftIO . writeRef valueRef <$> updated (_selectElement_value e)
963970
964− describe "hydration/immediate" $ session' $ do
971+ describe "hydration/immediate" $ do
965972 it "captures user input after switchover" $ runWD $ do
966973 inputRef :: IORef Text <- newRef ""
967974 let checkValue = do
@@ -1007,7 +1014,7 @@ tests withDebugging wdConfig caps _selenium = do
10071014 performEvent_ $ liftIO . writeRef valueByUIRef <$> _selectElement_change e
10081015 performEvent_ $ liftIO . writeRef valueRef <$> updated (_selectElement_value e)
10091016
1010− describe "prerender" $ session' $ do
1017+ session' "prerender" $ do
10111018 it "works in simple case" $ runWD $ do
10121019 testWidget (checkBodyText "One") (checkBodyText "Two") $ do
10131020 prerender_ (text "One") (text "Two")
@@ -1076,7 +1083,7 @@ tests withDebugging wdConfig caps _selenium = do
10761083 prerender_ (pure ()) (liftIO $ trigger "Client")
10771084 textNode $ TextNodeConfig "Initial" $ Just e
10781085
1079− describe "namespaces" $ session' $ do
1086+ session' "namespaces" $ do
10801087 it "dyn can be nested in namespaced widget" $ runWD $ do
10811088 testWidget (pure ()) (checkTextInTag "svg" "one") $ do
10821089 let svgRootCfg = def
@@ -1085,7 +1092,7 @@ tests withDebugging wdConfig caps _selenium = do
10851092 void $ element "svg" svgRootCfg $ do
10861093 dyn_ $ text "one" <$ pure ()
10871094
1088− describe "runWithReplace" $ session' $ do
1095+ session' "runWithReplace" $ do
10891096 it "works" $ runWD $ do
10901097 replaceChan :: Chan Text <- liftIO newChan
10911098 let setup = findElemWithRetry $ WD.ByTag "div"
@@ -1283,7 +1290,7 @@ tests withDebugging wdConfig caps _selenium = do
12831290 _ <- runWithReplace (text "inner1") $ el "p" (text "inner2") <$ replace
12841291 text "|after"
12851292
1286− describe "traverseDMapWithKeyWithAdjust" $ session' $ do
1293+ session' "traverseDMapWithKeyWithAdjust" $ do
12871294 let widget :: DomBuilder t m => DKey a -> Identity a -> m (Identity a)
12881295 widget k (Identity v) = elAttr "li" ("id" =: textKey k) $ do
12891296 elClass "span" "key" $ text $ textKey k
@@ -1386,7 +1393,7 @@ tests withDebugging wdConfig caps _selenium = do
13861393 (dmap, _evt) <- traverseDMapWithKeyWithAdjust widget keyMap $ leftmost [postBuildPatch <$ pb, replace]
13871394 liftIO $ dmap `H.shouldBe` keyMap
13881395
1389− describe "traverseIntMapWithKeyWithAdjust" $ session' $ do
1396+ session' "traverseIntMapWithKeyWithAdjust" $ do
13901397 let textKeyInt k = "key" <> T.pack (show k)
13911398 intMap = IntMap.fromList
13921399 [ (1, "one")
@@ -1493,7 +1500,7 @@ tests withDebugging wdConfig caps _selenium = do
14931500 (dmap, _evt) <- traverseIntMapWithKeyWithAdjust widget intMap $ leftmost [postBuildPatch <$ pb, replace]
14941501 liftIO $ dmap `H.shouldBe` intMap
14951502
1496− describe "traverseDMapWithKeyWithAdjustWithMove" $ session' $ do
1503+ session' "traverseDMapWithKeyWithAdjustWithMove" $ do
14971504 let widget :: DomBuilder t m => Key2 a -> Identity a -> m (Identity a)
14981505 widget k (Identity v) = elAttr "li" ("id" =: textKey2 k) $ do
14991506 elClass "span" "key" $ text $ textKey2 k
@@ -1573,8 +1580,8 @@ tests withDebugging wdConfig caps _selenium = do
15731580 (dmap, _evt) <- traverseDMapWithKeyWithAdjustWithMove widget initMap =<< triggerEventWithChan chan
15741581 liftIO $ assertEqual "DMap" initMap dmap
15751582
1576− describe "hydrating invalid HTML" $ session' $ do
1577− it "can hydrate list in paragraph" $ runWD $ do
1583+ session' "hydrating invalid HTML" $ do
1584+ xit "can hydrate list in paragraph" $ runWD $ do
15781585 let preSwitchover = do
15791586 checkBodyText "before\ninner\nafter"
15801587 -- Two <p> tags should be present
@@ -1603,7 +1610,7 @@ tests withDebugging wdConfig caps _selenium = do
16031610 -- TODO: This test presupposes the exact set of labels that "dropdown" places in the "value" fields to distinguish options.
16041611 -- This dependence on internal implementation details is undesirable in a test case, but seems fairly tricky to avoid.
16051612 -- It seems expedient for the time being to expect this test case to be updated, should those implementation details ever change.
1606− describe "dropdown" $ session' $ do
1613+ session' "dropdown" $ do
16071614 let doTest expectedOpts (initialValue :: Text) = do
16081615 let doCheck = do
16091616 es <- findElemsWithRetry $ WD.ByTag "option"
@@ -1772,7 +1779,7 @@ testWidgetDebug' hardFailure withDebugging beforeJS afterSwitchover bodyWidget =
17721779 liftIO $ putMVar waitUntilSwitchover ()
17731780 putStrLnDebug "put waitUntilSwitchover"
17741781 putStrLnDebug "running mainHydrationWidgetWithSwitchoverAction"
1775− mainHydrationWidgetWithSwitchoverAction onFailure switchOverAction blank bodyWidget
1782+ mainHydrationWidgetWithSwitchoverActionWithFailure' onFailure switchOverAction blank bodyWidget
17761783 putStrLnDebug "syncPoint after mainHydrationWidgetWithSwitchoverAction"
17771784 syncPoint
17781785 application <- liftIO $ jsaddleOr defaultConnectionOptions entryPoint $ \_ sendResponse -> do
reflex-dom-test-selenium/reflex-dom-test-selenium.cabal+1−1
@@ -15,7 +15,7 @@ library
1515 hs-source-dirs: src
1616 build-depends:
1717 async,
18− base >= 4.7 && < 4.14,
18+ base >= 4.7 && < 4.15,
1919 bytestring == 0.10.*,
2020 chrome-test-utils,
2121 exceptions,
reflex-dom/ChangeLog.md+4
@@ -1,5 +1,9 @@
11# Revision history for reflex-dom
22
3+## 0.6.1.0-r1
4+
5+* Loosen reflex-dom-core version bounds
6+
37## 0.6.1.0
48
59* Update for new dependent-map and dependent-sum (after the "some" package split)
reflex-dom/reflex-dom.cabal+3−3
@@ -61,7 +61,7 @@ library
6161 hs-source-dirs: src-android
6262 other-modules: Reflex.Dom.Android.MainWidget
6363 build-depends:
64− aeson >= 1.4 && < 1.5,
64+ aeson >= 1.4 && < 1.6,
6565 android-activity == 0.1.*,
6666 data-default == 0.7.*,
6767 jsaddle >= 0.9.6 && < 0.10
@@ -71,10 +71,10 @@ library
7171 cpp-options: -DANDROID
7272 build-tools: hsc2hs
7373 build-depends:
74− base >= 4.7 && < 4.14,
74+ base >= 4.7 && < 4.15,
7575 bytestring == 0.10.*,
7676 reflex >= 0.8 && < 0.9,
77− reflex-dom-core == 0.6.1.0,
77+ reflex-dom-core >= 0.6.1.0 && <0.7,
7878 text == 1.2.*
7979 if !impl(ghcjs)
8080 if flag(use-warp) && (os(linux) || os(osx))