on a3dd46e help sign in
15 files changed+57−195
since splitsnapshots
unifiedsplit
.github/workflows/haskell.yml−47 cabal.project+1−10 cabal.project-nogtk−14 reflex-dom-core/ChangeLog.md−8 reflex-dom-core/reflex-dom-core.cabal+7−19 reflex-dom-core/src/Reflex/Dom/Builder/Class.hs+1−2 reflex-dom-core/src/Reflex/Dom/Builder/Immediate.hs+4−12 reflex-dom-core/src/Reflex/Dom/Builder/Static.hs+1−1 reflex-dom-core/src/Reflex/Dom/Main.hs+10−38 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+27−34 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.ymldeleted−47
@@ -1,47 +0,0 @@
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+1−10
@@ -1,10 +1 @@
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
1+packages: chrome-test-utils, reflex-dom-core, reflex-dom, reflex-dom-test-selenium
cabal.project-nogtkdeleted−14
@@ -1,14 +0,0 @@
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,13 +1,5 @@
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−
113## 0.6.1.0
124
135* Bump version bounds
reflex-dom-core/reflex-dom-core.cabal+7−19
@@ -1,6 +1,6 @@
11cabal-version: 1.24
22Name: reflex-dom-core
3−Version: 0.6.2.1
3+Version: 0.6.1.0
44Synopsis: Functional Reactive Web Apps with Reflex
55Description:
66 Web applications without callbacks or side-effects.
@@ -54,21 +54,11 @@ 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−
6757library
6858 hs-source-dirs: src
6959 build-depends:
70− aeson >= 0.8 && < 1.6,
71− base >= 4.7 && < 4.15,
60+ aeson >= 0.8 && < 1.5,
61+ base >= 4.7 && < 4.14,
7262 bifunctors >= 4.2 && < 6,
7363 bimap >= 0.3 && < 0.5,
7464 blaze-builder >= 0.4.1 && < 0.5,
@@ -169,16 +159,14 @@ library
169159 if flag(use-template-haskell)
170160 build-depends:
171161 dependent-sum-template >= 0.1 && < 0.2,
172− template-haskell >= 2.12.0 && < 2.17
162+ template-haskell >= 2.12.0 && < 2.16
173163 other-extensions: TemplateHaskell
174164 cpp-options: -DUSE_TEMPLATE_HASKELL
175165 other-modules:
176166 Reflex.Dom.Builder.Class.TH
177167
178168test-suite hlint
179− build-depends:
180− base,
181− hlint >= 2.0 && < 4.0
169+ build-depends: base, hlint
182170 hs-source-dirs: test
183171 main-is: hlint.hs
184172 type: exitcode-stdio-1.0
@@ -230,7 +218,7 @@ test-suite hydration
230218 main-is: hydration.hs
231219 type: exitcode-stdio-1.0
232220 default-language: Haskell98
233− if !os(linux) || !arch(x86_64) || flag(profile-reflex) || !flag(hydration-tests)
221+ if !os(linux) || !arch(x86_64) || flag(profile-reflex)
234222 buildable: False
235223
236224-- broken test on base 4.11 & ghc 8.4.3
@@ -250,7 +238,7 @@ test-suite gc
250238 main-is: gc.hs
251239 type: exitcode-stdio-1.0
252240 default-language: Haskell98
253− if !os(linux) || !arch(x86_64) || !flag(gc-tests)
241+ if !os(linux) || !arch(x86_64)
254242 buildable: False
255243
256244source-repository head
reflex-dom-core/src/Reflex/Dom/Builder/Class.hs+1−2
@@ -9,12 +9,11 @@
99{-# LANGUAGE GeneralizedNewtypeDeriving #-}
1010#if !MIN_VERSION_base(4,9,0)
1111{-# LANGUAGE ImpredicativeTypes #-}
12−#else
13−{-# LANGUAGE Rank2Types #-} -- Implied by ImpredicativeTypes
1412#endif
1513{-# LANGUAGE LambdaCase #-}
1614{-# LANGUAGE OverloadedStrings #-}
1715{-# LANGUAGE PolyKinds #-}
16+{-# LANGUAGE Rank2Types #-}
1817{-# LANGUAGE RecursiveDo #-}
1918{-# LANGUAGE ScopedTypeVariables #-}
2019{-# LANGUAGE StandaloneDeriving #-}
reflex-dom-core/src/Reflex/Dom/Builder/Immediate.hs+4−12
@@ -2,6 +2,7 @@
22{-# LANGUAGE CPP #-}
33{-# LANGUAGE ConstraintKinds #-}
44{-# LANGUAGE DataKinds #-}
5+{-# LANGUAGE DeriveFunctor #-}
56{-# LANGUAGE DeriveTraversable #-}
67{-# LANGUAGE EmptyDataDecls #-}
78{-# LANGUAGE FlexibleContexts #-}
@@ -48,7 +49,6 @@ module Reflex.Dom.Builder.Immediate
4849 , HydrationMode (..)
4950 , HydrationRunnerT (..)
5051 , runHydrationRunnerT
51− , runHydrationRunnerTWithFailure
5252 , ImmediateDomBuilderT
5353 , runHydrationDomBuilderT
5454 , getHydrationMode
@@ -292,23 +292,15 @@ 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
301295 :: (MonadRef m, Ref m ~ IORef, Monad m, PerformEvent t m, MonadFix m, MonadReflexCreateTrigger t m, MonadJSM m, MonadJSM (Performable m))
302296 => HydrationRunnerT t m a -> IO () -> Maybe Node -> Node -> Chan [DSum (EventTriggerRef t) TriggerInvocation] -> m a
303−runHydrationRunnerTWithFailure (HydrationRunnerT m) onFailure s parent events = flip runDomRenderHookT events $ flip runReaderT parent $ do
297+runHydrationRunnerT (HydrationRunnerT m) onFailure s parent events = flip runDomRenderHookT events $ flip runReaderT parent $ do
304298 (a, s') <- runStateT m (HydrationState s False)
305299 traverse_ removeSubsequentNodes $ _hydrationState_previousNode s'
306300 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."
307301 when (_hydrationState_failed s') $ liftIO onFailure
308302 pure a
309303
310−
311−
312304instance MonadReflexCreateTrigger t m => MonadReflexCreateTrigger t (HydrationRunnerT t m) where
313305 {-# INLINABLE newEventWithTrigger #-}
314306 newEventWithTrigger = lift . newEventWithTrigger
@@ -1876,14 +1868,14 @@ hoistTraverseWithKeyWithAdjust base mapPatch updateChildUnreadiness applyDomUpda
18761868 getHydrationMode >>= \case
18771869 HydrationMode_Hydrating -> addHydrationStepWithSetup (holdIncremental children0 children') $ \children -> do
18781870 dm :: DMap k (Compose (TraverseChild t m (Some k)) v') <- sample $ currentIncremental children
1879− phs <- sequenceA $ weakenDMapWith (either _traverseChildHydration_delayed (pure . _traverseChildImmediate_placeholder) . _traverseChild_mode . getCompose) dm
1871+ phs <- traverse id $ weakenDMapWith (either _traverseChildHydration_delayed (pure . _traverseChildImmediate_placeholder) . _traverseChild_mode . getCompose) dm
18801872 liftIO $ writeIORef placeholders $! phs
18811873 insertAfterPreviousNode lastPlaceholder
18821874 HydrationMode_Immediate -> do
18831875 let activate i = do
18841876 append $ toNode $ _traverseChildImmediate_fragment i
18851877 pure $ _traverseChildImmediate_placeholder i
1886− phs <- sequenceA $ weakenDMapWith (either (error "impossible") activate . _traverseChild_mode . getCompose) children0
1878+ phs <- traverse id $ weakenDMapWith (either (error "impossible") activate . _traverseChild_mode . getCompose) children0
18871879 liftIO $ writeIORef placeholders $! phs
18881880 append $ toNode lastPlaceholder
18891881 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+10−38
@@ -5,6 +5,7 @@
55{-# LANGUAGE GADTs #-}
66{-# LANGUAGE MultiParamTypeClasses #-}
77{-# LANGUAGE NoMonomorphismRestriction #-}
8+{-# LANGUAGE PatternSynonyms #-}
89{-# LANGUAGE RankNTypes #-}
910{-# LANGUAGE RecursiveDo #-}
1011{-# LANGUAGE ScopedTypeVariables #-}
@@ -63,41 +64,22 @@ mainHydrationWidgetWithHead = mainHydrationWidgetWithHead'
6364{-# INLINABLE mainHydrationWidgetWithHead' #-}
6465-- | Warning: `mainHydrationWidgetWithHead'` is provided only as performance tweak. It is expected to disappear in future releases.
6566mainHydrationWidgetWithHead' :: HydrationWidget () () -> HydrationWidget () () -> JSM ()
66−mainHydrationWidgetWithHead' = mainHydrationWidgetWithSwitchoverAction' (pure ())
67+mainHydrationWidgetWithHead' = mainHydrationWidgetWithSwitchoverAction' (pure ()) (pure ())
6768
6869{-# INLINE mainHydrationWidgetWithSwitchoverAction #-}
69−mainHydrationWidgetWithSwitchoverAction :: JSM () -> (forall x. HydrationWidget x ()) -> (forall x. HydrationWidget x ()) -> JSM ()
70+mainHydrationWidgetWithSwitchoverAction :: IO () -> JSM () -> (forall x. HydrationWidget x ()) -> (forall x. HydrationWidget x ()) -> JSM ()
7071mainHydrationWidgetWithSwitchoverAction = mainHydrationWidgetWithSwitchoverAction'
7172
7273{-# INLINABLE mainHydrationWidgetWithSwitchoverAction' #-}
7374-- | Warning: `mainHydrationWidgetWithSwitchoverAction'` is provided only as performance tweak. It is expected to disappear in future releases.
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
75+mainHydrationWidgetWithSwitchoverAction' :: IO () -> JSM () -> HydrationWidget () () -> HydrationWidget () () -> JSM ()
76+mainHydrationWidgetWithSwitchoverAction' onFailure switchoverAction head' body = do
77+ runHydrationWidgetWithHeadAndBody onFailure switchoverAction $ \appendHead appendBody -> do
8378 appendHead head'
8479 appendBody body
8580
8681{-# INLINABLE attachHydrationWidget #-}
8782attachHydrationWidget
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
10183 :: IO ()
10284 -> JSM ()
10385 -> JSContextSingleton ()
@@ -108,7 +90,7 @@ attachHydrationWidgetWithFailure
10890 -> PerformEventT DomTimeline DomHost (a, IORef (Maybe (EventTrigger DomTimeline ())))
10991 )
11092 -> IO (a, FireCommand DomTimeline DomHost)
111−attachHydrationWidgetWithFailure onFailure switchoverAction jsSing w = do
93+attachHydrationWidget onFailure switchoverAction jsSing w = do
11294 hydrationMode <- liftIO $ newIORef HydrationMode_Hydrating
11395 rootNodesRef <- liftIO $ newIORef []
11496 events <- newChan
@@ -124,7 +106,7 @@ attachHydrationWidgetWithFailure onFailure switchoverAction jsSing w = do
124106 rootNodes <- liftIO $ readIORef rootNodesRef
125107 let delayedAction = do
126108 for_ (reverse rootNodes) $ \(rootNode, runner) -> do
127− let hydrate = runHydrationRunnerTWithFailure runner onFailure Nothing rootNode events
109+ let hydrate = runHydrationRunnerT runner onFailure Nothing rootNode events
128110 void $ runWithJSContextSingleton (runPostBuildT hydrate never) jsSing
129111 liftIO $ writeIORef hydrationMode HydrationMode_Immediate
130112 runWithJSContextSingleton (DOM.liftJSM switchoverAction) jsSing
@@ -139,16 +121,6 @@ type DomCoreWidget x = PostBuildT DomTimeline (WithJSContextSingleton x (Perform
139121
140122{-# INLINABLE runHydrationWidgetWithHeadAndBody #-}
141123runHydrationWidgetWithHeadAndBody
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
152124 :: IO ()
153125 -> JSM ()
154126 -> ( (forall c. HydrationWidget () c -> FloatingWidget () c) -- "Append to head" --TODO: test invoking this more than once
@@ -156,11 +128,11 @@ runHydrationWidgetWithHeadAndBodyWithFailure
156128 -> FloatingWidget () ()
157129 )
158130 -> JSM ()
159−runHydrationWidgetWithHeadAndBodyWithFailure onFailure switchoverAction app = withJSContextSingletonMono $ \jsSing -> do
131+runHydrationWidgetWithHeadAndBody onFailure switchoverAction app = withJSContextSingletonMono $ \jsSing -> do
160132 globalDoc <- currentDocumentUnchecked
161133 headElement <- getHeadUnchecked globalDoc
162134 bodyElement <- getBodyUnchecked globalDoc
163− (events, fc) <- liftIO . attachHydrationWidgetWithFailure onFailure switchoverAction jsSing $ \switchover hydrationMode hydrationResult events -> do
135+ (events, fc) <- liftIO . attachHydrationWidget onFailure switchoverAction jsSing $ \switchover hydrationMode hydrationResult events -> do
164136 (postBuild, postBuildTriggerRef) <- newEventWithTriggerRef
165137 let hydrateDom :: DOM.Node -> HydrationWidget () c -> FloatingWidget () c
166138 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.HLint (hlint)
1+import Language.Haskell.HLint3 (hlint)
22import System.Exit (exitFailure, exitSuccess)
33
44main :: IO ()
reflex-dom-core/test/hydration.hs+27−34
@@ -20,14 +20,6 @@
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−
3123import Prelude hiding (fail)
3224import Control.Concurrent
3325import qualified Control.Concurrent.Async as Async
@@ -154,13 +146,13 @@ main = do
154146 withDebugging <- isNothing <$> lookupEnv "NO_DEBUG"
155147 let wdConfig = WD.defaultConfig { WD.wdPort = fromIntegral $ _selenium_portNumber selenium }
156148 chromeCaps' = WD.getCaps $ chromeConfig browserPath chromeFlags
157− hspec (tests withDebugging wdConfig [(chromeCaps', "chrome")] selenium) `finally` _selenium_stopServer selenium
149+ hspec (tests withDebugging wdConfig [chromeCaps'] selenium) `finally` _selenium_stopServer selenium
158150
159−tests :: Bool -> WD.WDConfig -> [(Capabilities, String)] -> Selenium -> Spec
151+tests :: Bool -> WD.WDConfig -> [Capabilities] -> Selenium -> Spec
160152tests withDebugging wdConfig caps _selenium = do
161153 let putStrLnDebug :: MonadIO m => Text -> m ()
162154 putStrLnDebug m = when withDebugging $ liftIO $ putStrLn $ T.unpack m
163− session' t = sessionWith wdConfig t . using caps
155+ session' = sessionWith wdConfig "" . using (map (,"") caps)
164156 runWD m = runWDOptions (WdOptions False) $ do
165157 putStrLnDebug "before"
166158 r <- m
@@ -172,7 +164,7 @@ tests withDebugging wdConfig caps _selenium = do
172164 testWidget = testWidgetDebug True withDebugging
173165 testWidget' :: WD a -> (a -> WD b) -> (forall m js. TestWidget js (SpiderTimeline Global) m => m ()) -> WD b
174166 testWidget' = testWidgetDebug' True withDebugging
175− session' "text" $ do
167+ describe "text" $ session' $ do
176168 it "works" $ runWD $ do
177169 testWidgetStatic (checkBodyText "hello world") $ do
178170 text "hello world"
@@ -233,7 +225,7 @@ tests withDebugging wdConfig caps _selenium = do
233225 click <- button ""
234226 void $ textNode $ TextNodeConfig "initial" $ Just $ "after" <$ click
235227
236− session' "element" $ do
228+ describe "element" $ session' $ do
237229 it "works with domEvent Click" $ runWD $ do
238230 clickedRef <- liftIO $ newRef False
239231 testWidget' (findElemWithRetry $ WD.ByTag "div") WD.click $ do
@@ -297,8 +289,8 @@ tests withDebugging wdConfig caps _selenium = do
297289 let click = domEvent Click e
298290 return ()
299291
300− session' "inputElement" $ do
301− describe "static renderer" $ do
292+ describe "inputElement" $ do
293+ describe "static renderer" $ session' $ do
302294 it "sets value attribute" $ runWD $ do
303295 let checkStatic = do
304296 e <- findElemWithRetry $ WD.ByTag "input"
@@ -355,7 +347,7 @@ tests withDebugging wdConfig caps _selenium = do
355347 & inputElementConfig_initialChecked .~ False
356348 & inputElementConfig_setChecked .~ (True <$ pb)
357349 pure ()
358− describe "hydration" $ do
350+ describe "hydration" $ session' $ do
359351 it "doesn't wipe user input when switching over" $ runWD $ do
360352 inputRef <- newRef ("hello " :: Text)
361353 testWidget'
@@ -593,7 +585,8 @@ tests withDebugging wdConfig caps _selenium = do
593585 el "p" $ dynText $ _inputElement_value e
594586 performEvent_ $ consRef valRef <$> updated (_inputElement_value e)
595587 performEvent_ $ consRef inputRef <$> _inputElement_input e
596− describe "hydration/immediate" $ do
588+
589+ describe "hydration/immediate" $ session' $ do
597590 it "captures user input after switchover" $ runWD $ do
598591 inputRef :: IORef Text <- newRef ""
599592 let checkValue = do
@@ -673,8 +666,8 @@ tests withDebugging wdConfig caps _selenium = do
673666 names <- liftJSM $ traverse File.getName fs
674667 liftIO $ writeRef filesRef names
675668
676− session' "textAreaElement" $ do
677− describe "static renderer" $ do
669+ describe "textAreaElement" $ do
670+ describe "static renderer" $ session' $ do
678671 it "sets value attribute" $ runWD $ do
679672 let checkStatic = do
680673 e <- findElemWithRetry $ WD.ByTag "textarea"
@@ -697,7 +690,7 @@ tests withDebugging wdConfig caps _selenium = do
697690 & textAreaElementConfig_initialValue .~ "test"
698691 & textAreaElementConfig_setValue .~ ("test-updated" <$ pb)
699692 pure ()
700− describe "hydration" $ do
693+ describe "hydration" $ session' $ do
701694 it "doesn't wipe user input when switching over" $ runWD $ do
702695 inputRef <- newRef ("" :: Text)
703696 testWidget'
@@ -846,7 +839,7 @@ tests withDebugging wdConfig caps _selenium = do
846839 e <- textAreaElement $ def & textAreaElementConfig_setValue .~ ("pb" <$ pb)
847840 el "p" $ dynText $ _textAreaElement_value e
848841
849− describe "hydration/immediate" $ do
842+ describe "hydration/immediate" $ session' $ do
850843 it "captures user input after switchover" $ runWD $ do
851844 inputRef :: IORef Text <- newRef ""
852845 let checkValue = do
@@ -888,13 +881,13 @@ tests withDebugging wdConfig caps _selenium = do
888881 performEvent_ $ liftIO . writeRef valueByUIRef <$> _textAreaElement_input e
889882 performEvent_ $ liftIO . writeRef valueRef <$> updated (value e)
890883
891− session' "selectElement" $ do
884+ describe "selectElement" $ do
892885 let options :: DomBuilder t m => m ()
893886 options = do
894887 elAttr "option" ("value" =: "one" <> "id" =: "one") $ text "one"
895888 elAttr "option" ("value" =: "two" <> "id" =: "two") $ text "two"
896889 elAttr "option" ("value" =: "three" <> "id" =: "three") $ text "three"
897− describe "hydration" $ do
890+ describe "hydration" $ session' $ do
898891 it "sets initial value correctly" $ runWD $ do
899892 inputRef <- newRef ("" :: Text)
900893 let setup = do
@@ -968,7 +961,7 @@ tests withDebugging wdConfig caps _selenium = do
968961 performEvent_ $ liftIO . writeRef valueByUIRef <$> _selectElement_change e
969962 performEvent_ $ liftIO . writeRef valueRef <$> updated (_selectElement_value e)
970963
971− describe "hydration/immediate" $ do
964+ describe "hydration/immediate" $ session' $ do
972965 it "captures user input after switchover" $ runWD $ do
973966 inputRef :: IORef Text <- newRef ""
974967 let checkValue = do
@@ -1014,7 +1007,7 @@ tests withDebugging wdConfig caps _selenium = do
10141007 performEvent_ $ liftIO . writeRef valueByUIRef <$> _selectElement_change e
10151008 performEvent_ $ liftIO . writeRef valueRef <$> updated (_selectElement_value e)
10161009
1017− session' "prerender" $ do
1010+ describe "prerender" $ session' $ do
10181011 it "works in simple case" $ runWD $ do
10191012 testWidget (checkBodyText "One") (checkBodyText "Two") $ do
10201013 prerender_ (text "One") (text "Two")
@@ -1083,7 +1076,7 @@ tests withDebugging wdConfig caps _selenium = do
10831076 prerender_ (pure ()) (liftIO $ trigger "Client")
10841077 textNode $ TextNodeConfig "Initial" $ Just e
10851078
1086− session' "namespaces" $ do
1079+ describe "namespaces" $ session' $ do
10871080 it "dyn can be nested in namespaced widget" $ runWD $ do
10881081 testWidget (pure ()) (checkTextInTag "svg" "one") $ do
10891082 let svgRootCfg = def
@@ -1092,7 +1085,7 @@ tests withDebugging wdConfig caps _selenium = do
10921085 void $ element "svg" svgRootCfg $ do
10931086 dyn_ $ text "one" <$ pure ()
10941087
1095− session' "runWithReplace" $ do
1088+ describe "runWithReplace" $ session' $ do
10961089 it "works" $ runWD $ do
10971090 replaceChan :: Chan Text <- liftIO newChan
10981091 let setup = findElemWithRetry $ WD.ByTag "div"
@@ -1290,7 +1283,7 @@ tests withDebugging wdConfig caps _selenium = do
12901283 _ <- runWithReplace (text "inner1") $ el "p" (text "inner2") <$ replace
12911284 text "|after"
12921285
1293− session' "traverseDMapWithKeyWithAdjust" $ do
1286+ describe "traverseDMapWithKeyWithAdjust" $ session' $ do
12941287 let widget :: DomBuilder t m => DKey a -> Identity a -> m (Identity a)
12951288 widget k (Identity v) = elAttr "li" ("id" =: textKey k) $ do
12961289 elClass "span" "key" $ text $ textKey k
@@ -1393,7 +1386,7 @@ tests withDebugging wdConfig caps _selenium = do
13931386 (dmap, _evt) <- traverseDMapWithKeyWithAdjust widget keyMap $ leftmost [postBuildPatch <$ pb, replace]
13941387 liftIO $ dmap `H.shouldBe` keyMap
13951388
1396− session' "traverseIntMapWithKeyWithAdjust" $ do
1389+ describe "traverseIntMapWithKeyWithAdjust" $ session' $ do
13971390 let textKeyInt k = "key" <> T.pack (show k)
13981391 intMap = IntMap.fromList
13991392 [ (1, "one")
@@ -1500,7 +1493,7 @@ tests withDebugging wdConfig caps _selenium = do
15001493 (dmap, _evt) <- traverseIntMapWithKeyWithAdjust widget intMap $ leftmost [postBuildPatch <$ pb, replace]
15011494 liftIO $ dmap `H.shouldBe` intMap
15021495
1503− session' "traverseDMapWithKeyWithAdjustWithMove" $ do
1496+ describe "traverseDMapWithKeyWithAdjustWithMove" $ session' $ do
15041497 let widget :: DomBuilder t m => Key2 a -> Identity a -> m (Identity a)
15051498 widget k (Identity v) = elAttr "li" ("id" =: textKey2 k) $ do
15061499 elClass "span" "key" $ text $ textKey2 k
@@ -1580,8 +1573,8 @@ tests withDebugging wdConfig caps _selenium = do
15801573 (dmap, _evt) <- traverseDMapWithKeyWithAdjustWithMove widget initMap =<< triggerEventWithChan chan
15811574 liftIO $ assertEqual "DMap" initMap dmap
15821575
1583− session' "hydrating invalid HTML" $ do
1584− xit "can hydrate list in paragraph" $ runWD $ do
1576+ describe "hydrating invalid HTML" $ session' $ do
1577+ it "can hydrate list in paragraph" $ runWD $ do
15851578 let preSwitchover = do
15861579 checkBodyText "before\ninner\nafter"
15871580 -- Two <p> tags should be present
@@ -1610,7 +1603,7 @@ tests withDebugging wdConfig caps _selenium = do
16101603 -- TODO: This test presupposes the exact set of labels that "dropdown" places in the "value" fields to distinguish options.
16111604 -- This dependence on internal implementation details is undesirable in a test case, but seems fairly tricky to avoid.
16121605 -- It seems expedient for the time being to expect this test case to be updated, should those implementation details ever change.
1613− session' "dropdown" $ do
1606+ describe "dropdown" $ session' $ do
16141607 let doTest expectedOpts (initialValue :: Text) = do
16151608 let doCheck = do
16161609 es <- findElemsWithRetry $ WD.ByTag "option"
@@ -1779,7 +1772,7 @@ testWidgetDebug' hardFailure withDebugging beforeJS afterSwitchover bodyWidget =
17791772 liftIO $ putMVar waitUntilSwitchover ()
17801773 putStrLnDebug "put waitUntilSwitchover"
17811774 putStrLnDebug "running mainHydrationWidgetWithSwitchoverAction"
1782− mainHydrationWidgetWithSwitchoverActionWithFailure' onFailure switchOverAction blank bodyWidget
1775+ mainHydrationWidgetWithSwitchoverAction onFailure switchOverAction blank bodyWidget
17831776 putStrLnDebug "syncPoint after mainHydrationWidgetWithSwitchoverAction"
17841777 syncPoint
17851778 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.15,
18+ base >= 4.7 && < 4.14,
1919 bytestring == 0.10.*,
2020 chrome-test-utils,
2121 exceptions,
reflex-dom/ChangeLog.md−4
@@ -1,9 +1,5 @@
11# Revision history for reflex-dom
22
3−## 0.6.1.0-r1
4−
5−* Loosen reflex-dom-core version bounds
6−
73## 0.6.1.0
84
95* 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.6,
64+ aeson >= 1.4 && < 1.5,
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.15,
74+ base >= 4.7 && < 4.14,
7575 bytestring == 0.10.*,
7676 reflex >= 0.8 && < 0.9,
77− reflex-dom-core >= 0.6.1.0 && <0.7,
77+ reflex-dom-core == 0.6.1.0,
7878 text == 1.2.*
7979 if !impl(ghcjs)
8080 if flag(use-warp) && (os(linux) || os(osx))