on develop help sign in
.github/workflows/haskell.ymlnew file+47
since splitsnapshots
unifiedsplit
@@ -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:
2+ reflex-dom-core/
3+ reflex-dom/
4+ chrome-test-utils/
1−packages: chrome-test-utils, reflex-dom-core, reflex-dom, reflex-dom-test-selenium
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+4
@@ -1,5 +1,9 @@
1# Revision history for reflex-dom-core
1# Revision history for reflex-dom-core
2
2
3+## 0.6.2.1
4+
5+* Fix hlint complaints with newer GHC.
6+
3## 0.6.2.0
7## 0.6.2.0
4
8
5* ([#400](https://github.com/reflex-frp/reflex-dom/pull/400/files)) Set value of input elements in static renderer
9* ([#400](https://github.com/reflex-frp/reflex-dom/pull/400/files)) Set value of input elements in static renderer
reflex-dom-core/reflex-dom-core.cabal+16−4
@@ -1,6 +1,6 @@
1cabal-version: 1.24
1cabal-version: 1.24
2Name: reflex-dom-core
2Name: reflex-dom-core
3−Version: 0.6.2.0
3+Version: 0.6.2.1
4Synopsis: Functional Reactive Web Apps with Reflex
4Synopsis: Functional Reactive Web Apps with Reflex
5Description:
5Description:
6 Web applications without callbacks or side-effects.
6 Web applications without callbacks or side-effects.
@@ -54,6 +54,16 @@ flag split-these
54 manual: False
54 manual: False
55 default: True
55 default: True
56
56
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+
57library
67library
58 hs-source-dirs: src
68 hs-source-dirs: src
59 build-depends:
69 build-depends:
@@ -166,7 +176,9 @@ library
166 Reflex.Dom.Builder.Class.TH
176 Reflex.Dom.Builder.Class.TH
167
177
168test-suite hlint
178test-suite hlint
169− build-depends: base, hlint
179+ build-depends:
180+ base,
181+ hlint >= 2.0 && < 4.0
170 hs-source-dirs: test
182 hs-source-dirs: test
171 main-is: hlint.hs
183 main-is: hlint.hs
172 type: exitcode-stdio-1.0
184 type: exitcode-stdio-1.0
@@ -218,7 +230,7 @@ test-suite hydration
218 main-is: hydration.hs
230 main-is: hydration.hs
219 type: exitcode-stdio-1.0
231 type: exitcode-stdio-1.0
220 default-language: Haskell98
232 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)
222 buildable: False
234 buildable: False
223
235
224-- broken test on base 4.11 & ghc 8.4.3
236-- broken test on base 4.11 & ghc 8.4.3
@@ -238,7 +250,7 @@ test-suite gc
238 main-is: gc.hs
250 main-is: gc.hs
239 type: exitcode-stdio-1.0
251 type: exitcode-stdio-1.0
240 default-language: Haskell98
252 default-language: Haskell98
241− if !os(linux) || !arch(x86_64)
253+ if !os(linux) || !arch(x86_64) || !flag(gc-tests)
242 buildable: False
254 buildable: False
243
255
244source-repository head
256source-repository head
reflex-dom-core/src/Reflex/Dom/Builder/Class.hs+2−1
@@ -9,11 +9,12 @@
9{-# LANGUAGE GeneralizedNewtypeDeriving #-}
9{-# LANGUAGE GeneralizedNewtypeDeriving #-}
10#if !MIN_VERSION_base(4,9,0)
10#if !MIN_VERSION_base(4,9,0)
11{-# LANGUAGE ImpredicativeTypes #-}
11{-# LANGUAGE ImpredicativeTypes #-}
12+#else
13+{-# LANGUAGE Rank2Types #-} -- Implied by ImpredicativeTypes
12#endif
14#endif
13{-# LANGUAGE LambdaCase #-}
15{-# LANGUAGE LambdaCase #-}
14{-# LANGUAGE OverloadedStrings #-}
16{-# LANGUAGE OverloadedStrings #-}
15{-# LANGUAGE PolyKinds #-}
17{-# LANGUAGE PolyKinds #-}
16−{-# LANGUAGE Rank2Types #-}
17{-# LANGUAGE RecursiveDo #-}
18{-# LANGUAGE RecursiveDo #-}
18{-# LANGUAGE ScopedTypeVariables #-}
19{-# LANGUAGE ScopedTypeVariables #-}
19{-# LANGUAGE StandaloneDeriving #-}
20{-# LANGUAGE StandaloneDeriving #-}
reflex-dom-core/src/Reflex/Dom/Builder/Immediate.hs+3−9
@@ -2,7 +2,6 @@
2{-# LANGUAGE CPP #-}
2{-# LANGUAGE CPP #-}
3{-# LANGUAGE ConstraintKinds #-}
3{-# LANGUAGE ConstraintKinds #-}
4{-# LANGUAGE DataKinds #-}
4{-# LANGUAGE DataKinds #-}
5−{-# LANGUAGE DeriveFunctor #-}
6{-# LANGUAGE DeriveTraversable #-}
5{-# LANGUAGE DeriveTraversable #-}
7{-# LANGUAGE EmptyDataDecls #-}
6{-# LANGUAGE EmptyDataDecls #-}
8{-# LANGUAGE FlexibleContexts #-}
7{-# LANGUAGE FlexibleContexts #-}
@@ -295,12 +294,7 @@ localRunner (HydrationRunnerT m) s parent = do
295runHydrationRunnerT
294runHydrationRunnerT
296 :: (MonadRef m, Ref m ~ IORef, Monad m, PerformEvent t m, MonadFix m, MonadReflexCreateTrigger t m, MonadJSM m, MonadJSM (Performable m))
295 :: (MonadRef m, Ref m ~ IORef, Monad m, PerformEvent t m, MonadFix m, MonadReflexCreateTrigger t m, MonadJSM m, MonadJSM (Performable m))
297 => HydrationRunnerT t m a -> Maybe Node -> Node -> Chan [DSum (EventTriggerRef t) TriggerInvocation] -> m a
296 => HydrationRunnerT t m a -> Maybe Node -> Node -> Chan [DSum (EventTriggerRef t) TriggerInvocation] -> m a
298−runHydrationRunnerT m = runHydrationRunnerTWithFailure m (pure ()) -- (HydrationRunnerT m) onFailure s parent events = flip runDomRenderHookT events $ flip runReaderT parent $ do
297+runHydrationRunnerT m = runHydrationRunnerTWithFailure m (pure ())
299− -- (a, s') <- runStateT m (HydrationState s False)
300− -- traverse_ removeSubsequentNodes $ _hydrationState_previousNode s'
301− -- 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."
302− -- when (_hydrationState_failed s') $ liftIO onFailure
303− -- pure a
304
298
305{-# INLINABLE runHydrationRunnerTWithFailure #-}
299{-# INLINABLE runHydrationRunnerTWithFailure #-}
306runHydrationRunnerTWithFailure
300runHydrationRunnerTWithFailure
@@ -1882,14 +1876,14 @@ hoistTraverseWithKeyWithAdjust base mapPatch updateChildUnreadiness applyDomUpda
1882 getHydrationMode >>= \case
1876 getHydrationMode >>= \case
1883 HydrationMode_Hydrating -> addHydrationStepWithSetup (holdIncremental children0 children') $ \children -> do
1877 HydrationMode_Hydrating -> addHydrationStepWithSetup (holdIncremental children0 children') $ \children -> do
1884 dm :: DMap k (Compose (TraverseChild t m (Some k)) v') <- sample $ currentIncremental children
1878 dm :: DMap k (Compose (TraverseChild t m (Some k)) v') <- sample $ currentIncremental children
1885− 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
1886 liftIO $ writeIORef placeholders $! phs
1880 liftIO $ writeIORef placeholders $! phs
1887 insertAfterPreviousNode lastPlaceholder
1881 insertAfterPreviousNode lastPlaceholder
1888 HydrationMode_Immediate -> do
1882 HydrationMode_Immediate -> do
1889 let activate i = do
1883 let activate i = do
1890 append $ toNode $ _traverseChildImmediate_fragment i
1884 append $ toNode $ _traverseChildImmediate_fragment i
1891 pure $ _traverseChildImmediate_placeholder i
1885 pure $ _traverseChildImmediate_placeholder i
1892− phs <- traverse id $ weakenDMapWith (either (error "impossible") activate . _traverseChild_mode . getCompose) children0
1886+ phs <- sequenceA $ weakenDMapWith (either (error "impossible") activate . _traverseChild_mode . getCompose) children0
1893 liftIO $ writeIORef placeholders $! phs
1887 liftIO $ writeIORef placeholders $! phs
1894 append $ toNode lastPlaceholder
1888 append $ toNode lastPlaceholder
1895 requestDomAction_ $ ffor children' $ \p -> do
1889 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
274 --TODO: Do not escape quotation marks; see https://stackoverflow.com/questions/25612166/what-characters-must-be-escaped-in-html-5
274 --TODO: Do not escape quotation marks; see https://stackoverflow.com/questions/25612166/what-characters-must-be-escaped-in-html-5
275 shouldEscape <- asks _staticDomBuilderEnv_shouldEscape
275 shouldEscape <- asks _staticDomBuilderEnv_shouldEscape
276 let escape = if shouldEscape then fromHtmlEscapedText else byteString . encodeUtf8
276 let escape = if shouldEscape then fromHtmlEscapedText else byteString . encodeUtf8
277− modify . (:) =<< (\c -> "<!--" <> c <> "-->") <$> case mSetContents of
277+ (modify . (:)) . (\c -> "<!--" <> c <> "-->") =<< case mSetContents of
278 Nothing -> return (pure (escape initialContents))
278 Nothing -> return (pure (escape initialContents))
279 Just setContents -> hold (escape initialContents) $ fmapCheap escape setContents --Only because it doesn't get optimized when profiling is on
279 Just setContents -> hold (escape initialContents) $ fmapCheap escape setContents --Only because it doesn't get optimized when profiling is on
280 return $ CommentNode ()
280 return $ CommentNode ()
reflex-dom-core/src/Reflex/Dom/Main.hs−1
@@ -5,7 +5,6 @@
5{-# LANGUAGE GADTs #-}
5{-# LANGUAGE GADTs #-}
6{-# LANGUAGE MultiParamTypeClasses #-}
6{-# LANGUAGE MultiParamTypeClasses #-}
7{-# LANGUAGE NoMonomorphismRestriction #-}
7{-# LANGUAGE NoMonomorphismRestriction #-}
8−{-# LANGUAGE PatternSynonyms #-}
9{-# LANGUAGE RankNTypes #-}
8{-# LANGUAGE RankNTypes #-}
10{-# LANGUAGE RecursiveDo #-}
9{-# LANGUAGE RecursiveDo #-}
11{-# LANGUAGE ScopedTypeVariables #-}
10{-# LANGUAGE ScopedTypeVariables #-}
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
117 "overflow" =: "hidden" <>
117 "overflow" =: "hidden" <>
118 "position" =: "relative"
118 "position" =: "relative"
119 mkRow k = toStyleAttr $ "height" =: (T.pack (show rowPx) <> "px") <>
119 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) <>
121 "position" =: "absolute" <>
121 "position" =: "absolute" <>
122 "width" =: "100%"
122 "width" =: "100%"
123 findWindow sizeIncrement windowSize startingPosition =
123 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)
2import System.Exit (exitFailure, exitSuccess)
2import System.Exit (exitFailure, exitSuccess)
3
3
4main :: IO ()
4main :: IO ()
reflex-dom-core/test/hydration.hs+33−26
@@ -20,6 +20,14 @@
20
20
21{-# OPTIONS_GHC -fno-warn-orphans #-}
21{-# OPTIONS_GHC -fno-warn-orphans #-}
22
22
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+
23import Prelude hiding (fail)
31import Prelude hiding (fail)
24import Control.Concurrent
32import Control.Concurrent
25import qualified Control.Concurrent.Async as Async
33import qualified Control.Concurrent.Async as Async
@@ -146,13 +154,13 @@ main = do
146 withDebugging <- isNothing <$> lookupEnv "NO_DEBUG"
154 withDebugging <- isNothing <$> lookupEnv "NO_DEBUG"
147 let wdConfig = WD.defaultConfig { WD.wdPort = fromIntegral $ _selenium_portNumber selenium }
155 let wdConfig = WD.defaultConfig { WD.wdPort = fromIntegral $ _selenium_portNumber selenium }
148 chromeCaps' = WD.getCaps $ chromeConfig browserPath chromeFlags
156 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
150
158
151−tests :: Bool -> WD.WDConfig -> [Capabilities] -> Selenium -> Spec
159+tests :: Bool -> WD.WDConfig -> [(Capabilities, String)] -> Selenium -> Spec
152tests withDebugging wdConfig caps _selenium = do
160tests withDebugging wdConfig caps _selenium = do
153 let putStrLnDebug :: MonadIO m => Text -> m ()
161 let putStrLnDebug :: MonadIO m => Text -> m ()
154 putStrLnDebug m = when withDebugging $ liftIO $ putStrLn $ T.unpack m
162 putStrLnDebug m = when withDebugging $ liftIO $ putStrLn $ T.unpack m
155− session' = sessionWith wdConfig "" . using (map (,"") caps)
163+ session' t = sessionWith wdConfig t . using caps
156 runWD m = runWDOptions (WdOptions False) $ do
164 runWD m = runWDOptions (WdOptions False) $ do
157 putStrLnDebug "before"
165 putStrLnDebug "before"
158 r <- m
166 r <- m
@@ -164,7 +172,7 @@ tests withDebugging wdConfig caps _selenium = do
164 testWidget = testWidgetDebug True withDebugging
172 testWidget = testWidgetDebug True withDebugging
165 testWidget' :: WD a -> (a -> WD b) -> (forall m js. TestWidget js (SpiderTimeline Global) m => m ()) -> WD b
173 testWidget' :: WD a -> (a -> WD b) -> (forall m js. TestWidget js (SpiderTimeline Global) m => m ()) -> WD b
166 testWidget' = testWidgetDebug' True withDebugging
174 testWidget' = testWidgetDebug' True withDebugging
167− describe "text" $ session' $ do
175+ session' "text" $ do
168 it "works" $ runWD $ do
176 it "works" $ runWD $ do
169 testWidgetStatic (checkBodyText "hello world") $ do
177 testWidgetStatic (checkBodyText "hello world") $ do
170 text "hello world"
178 text "hello world"
@@ -225,7 +233,7 @@ tests withDebugging wdConfig caps _selenium = do
225 click <- button ""
233 click <- button ""
226 void $ textNode $ TextNodeConfig "initial" $ Just $ "after" <$ click
234 void $ textNode $ TextNodeConfig "initial" $ Just $ "after" <$ click
227
235
228− describe "element" $ session' $ do
236+ session' "element" $ do
229 it "works with domEvent Click" $ runWD $ do
237 it "works with domEvent Click" $ runWD $ do
230 clickedRef <- liftIO $ newRef False
238 clickedRef <- liftIO $ newRef False
231 testWidget' (findElemWithRetry $ WD.ByTag "div") WD.click $ do
239 testWidget' (findElemWithRetry $ WD.ByTag "div") WD.click $ do
@@ -289,8 +297,8 @@ tests withDebugging wdConfig caps _selenium = do
289 let click = domEvent Click e
297 let click = domEvent Click e
290 return ()
298 return ()
291
299
292− describe "inputElement" $ do
300+ session' "inputElement" $ do
293− describe "static renderer" $ session' $ do
301+ describe "static renderer" $ do
294 it "sets value attribute" $ runWD $ do
302 it "sets value attribute" $ runWD $ do
295 let checkStatic = do
303 let checkStatic = do
296 e <- findElemWithRetry $ WD.ByTag "input"
304 e <- findElemWithRetry $ WD.ByTag "input"
@@ -347,7 +355,7 @@ tests withDebugging wdConfig caps _selenium = do
347 & inputElementConfig_initialChecked .~ False
355 & inputElementConfig_initialChecked .~ False
348 & inputElementConfig_setChecked .~ (True <$ pb)
356 & inputElementConfig_setChecked .~ (True <$ pb)
349 pure ()
357 pure ()
350− describe "hydration" $ session' $ do
358+ describe "hydration" $ do
351 it "doesn't wipe user input when switching over" $ runWD $ do
359 it "doesn't wipe user input when switching over" $ runWD $ do
352 inputRef <- newRef ("hello " :: Text)
360 inputRef <- newRef ("hello " :: Text)
353 testWidget'
361 testWidget'
@@ -585,8 +593,7 @@ tests withDebugging wdConfig caps _selenium = do
585 el "p" $ dynText $ _inputElement_value e
593 el "p" $ dynText $ _inputElement_value e
586 performEvent_ $ consRef valRef <$> updated (_inputElement_value e)
594 performEvent_ $ consRef valRef <$> updated (_inputElement_value e)
587 performEvent_ $ consRef inputRef <$> _inputElement_input e
595 performEvent_ $ consRef inputRef <$> _inputElement_input e
588−
589− describe "hydration/immediate" $ session' $ do
596+ describe "hydration/immediate" $ do
590 it "captures user input after switchover" $ runWD $ do
597 it "captures user input after switchover" $ runWD $ do
591 inputRef :: IORef Text <- newRef ""
598 inputRef :: IORef Text <- newRef ""
592 let checkValue = do
599 let checkValue = do
@@ -666,8 +673,8 @@ tests withDebugging wdConfig caps _selenium = do
666 names <- liftJSM $ traverse File.getName fs
673 names <- liftJSM $ traverse File.getName fs
667 liftIO $ writeRef filesRef names
674 liftIO $ writeRef filesRef names
668
675
669− describe "textAreaElement" $ do
676+ session' "textAreaElement" $ do
670− describe "static renderer" $ session' $ do
677+ describe "static renderer" $ do
671 it "sets value attribute" $ runWD $ do
678 it "sets value attribute" $ runWD $ do
672 let checkStatic = do
679 let checkStatic = do
673 e <- findElemWithRetry $ WD.ByTag "textarea"
680 e <- findElemWithRetry $ WD.ByTag "textarea"
@@ -690,7 +697,7 @@ tests withDebugging wdConfig caps _selenium = do
690 & textAreaElementConfig_initialValue .~ "test"
697 & textAreaElementConfig_initialValue .~ "test"
691 & textAreaElementConfig_setValue .~ ("test-updated" <$ pb)
698 & textAreaElementConfig_setValue .~ ("test-updated" <$ pb)
692 pure ()
699 pure ()
693− describe "hydration" $ session' $ do
700+ describe "hydration" $ do
694 it "doesn't wipe user input when switching over" $ runWD $ do
701 it "doesn't wipe user input when switching over" $ runWD $ do
695 inputRef <- newRef ("" :: Text)
702 inputRef <- newRef ("" :: Text)
696 testWidget'
703 testWidget'
@@ -839,7 +846,7 @@ tests withDebugging wdConfig caps _selenium = do
839 e <- textAreaElement $ def & textAreaElementConfig_setValue .~ ("pb" <$ pb)
846 e <- textAreaElement $ def & textAreaElementConfig_setValue .~ ("pb" <$ pb)
840 el "p" $ dynText $ _textAreaElement_value e
847 el "p" $ dynText $ _textAreaElement_value e
841
848
842− describe "hydration/immediate" $ session' $ do
849+ describe "hydration/immediate" $ do
843 it "captures user input after switchover" $ runWD $ do
850 it "captures user input after switchover" $ runWD $ do
844 inputRef :: IORef Text <- newRef ""
851 inputRef :: IORef Text <- newRef ""
845 let checkValue = do
852 let checkValue = do
@@ -881,13 +888,13 @@ tests withDebugging wdConfig caps _selenium = do
881 performEvent_ $ liftIO . writeRef valueByUIRef <$> _textAreaElement_input e
888 performEvent_ $ liftIO . writeRef valueByUIRef <$> _textAreaElement_input e
882 performEvent_ $ liftIO . writeRef valueRef <$> updated (value e)
889 performEvent_ $ liftIO . writeRef valueRef <$> updated (value e)
883
890
884− describe "selectElement" $ do
891+ session' "selectElement" $ do
885 let options :: DomBuilder t m => m ()
892 let options :: DomBuilder t m => m ()
886 options = do
893 options = do
887 elAttr "option" ("value" =: "one" <> "id" =: "one") $ text "one"
894 elAttr "option" ("value" =: "one" <> "id" =: "one") $ text "one"
888 elAttr "option" ("value" =: "two" <> "id" =: "two") $ text "two"
895 elAttr "option" ("value" =: "two" <> "id" =: "two") $ text "two"
889 elAttr "option" ("value" =: "three" <> "id" =: "three") $ text "three"
896 elAttr "option" ("value" =: "three" <> "id" =: "three") $ text "three"
890− describe "hydration" $ session' $ do
897+ describe "hydration" $ do
891 it "sets initial value correctly" $ runWD $ do
898 it "sets initial value correctly" $ runWD $ do
892 inputRef <- newRef ("" :: Text)
899 inputRef <- newRef ("" :: Text)
893 let setup = do
900 let setup = do
@@ -961,7 +968,7 @@ tests withDebugging wdConfig caps _selenium = do
961 performEvent_ $ liftIO . writeRef valueByUIRef <$> _selectElement_change e
968 performEvent_ $ liftIO . writeRef valueByUIRef <$> _selectElement_change e
962 performEvent_ $ liftIO . writeRef valueRef <$> updated (_selectElement_value e)
969 performEvent_ $ liftIO . writeRef valueRef <$> updated (_selectElement_value e)
963
970
964− describe "hydration/immediate" $ session' $ do
971+ describe "hydration/immediate" $ do
965 it "captures user input after switchover" $ runWD $ do
972 it "captures user input after switchover" $ runWD $ do
966 inputRef :: IORef Text <- newRef ""
973 inputRef :: IORef Text <- newRef ""
967 let checkValue = do
974 let checkValue = do
@@ -1007,7 +1014,7 @@ tests withDebugging wdConfig caps _selenium = do
1007 performEvent_ $ liftIO . writeRef valueByUIRef <$> _selectElement_change e
1014 performEvent_ $ liftIO . writeRef valueByUIRef <$> _selectElement_change e
1008 performEvent_ $ liftIO . writeRef valueRef <$> updated (_selectElement_value e)
1015 performEvent_ $ liftIO . writeRef valueRef <$> updated (_selectElement_value e)
1009
1016
1010− describe "prerender" $ session' $ do
1017+ session' "prerender" $ do
1011 it "works in simple case" $ runWD $ do
1018 it "works in simple case" $ runWD $ do
1012 testWidget (checkBodyText "One") (checkBodyText "Two") $ do
1019 testWidget (checkBodyText "One") (checkBodyText "Two") $ do
1013 prerender_ (text "One") (text "Two")
1020 prerender_ (text "One") (text "Two")
@@ -1076,7 +1083,7 @@ tests withDebugging wdConfig caps _selenium = do
1076 prerender_ (pure ()) (liftIO $ trigger "Client")
1083 prerender_ (pure ()) (liftIO $ trigger "Client")
1077 textNode $ TextNodeConfig "Initial" $ Just e
1084 textNode $ TextNodeConfig "Initial" $ Just e
1078
1085
1079− describe "namespaces" $ session' $ do
1086+ session' "namespaces" $ do
1080 it "dyn can be nested in namespaced widget" $ runWD $ do
1087 it "dyn can be nested in namespaced widget" $ runWD $ do
1081 testWidget (pure ()) (checkTextInTag "svg" "one") $ do
1088 testWidget (pure ()) (checkTextInTag "svg" "one") $ do
1082 let svgRootCfg = def
1089 let svgRootCfg = def
@@ -1085,7 +1092,7 @@ tests withDebugging wdConfig caps _selenium = do
1085 void $ element "svg" svgRootCfg $ do
1092 void $ element "svg" svgRootCfg $ do
1086 dyn_ $ text "one" <$ pure ()
1093 dyn_ $ text "one" <$ pure ()
1087
1094
1088− describe "runWithReplace" $ session' $ do
1095+ session' "runWithReplace" $ do
1089 it "works" $ runWD $ do
1096 it "works" $ runWD $ do
1090 replaceChan :: Chan Text <- liftIO newChan
1097 replaceChan :: Chan Text <- liftIO newChan
1091 let setup = findElemWithRetry $ WD.ByTag "div"
1098 let setup = findElemWithRetry $ WD.ByTag "div"
@@ -1283,7 +1290,7 @@ tests withDebugging wdConfig caps _selenium = do
1283 _ <- runWithReplace (text "inner1") $ el "p" (text "inner2") <$ replace
1290 _ <- runWithReplace (text "inner1") $ el "p" (text "inner2") <$ replace
1284 text "|after"
1291 text "|after"
1285
1292
1286− describe "traverseDMapWithKeyWithAdjust" $ session' $ do
1293+ session' "traverseDMapWithKeyWithAdjust" $ do
1287 let widget :: DomBuilder t m => DKey a -> Identity a -> m (Identity a)
1294 let widget :: DomBuilder t m => DKey a -> Identity a -> m (Identity a)
1288 widget k (Identity v) = elAttr "li" ("id" =: textKey k) $ do
1295 widget k (Identity v) = elAttr "li" ("id" =: textKey k) $ do
1289 elClass "span" "key" $ text $ textKey k
1296 elClass "span" "key" $ text $ textKey k
@@ -1386,7 +1393,7 @@ tests withDebugging wdConfig caps _selenium = do
1386 (dmap, _evt) <- traverseDMapWithKeyWithAdjust widget keyMap $ leftmost [postBuildPatch <$ pb, replace]
1393 (dmap, _evt) <- traverseDMapWithKeyWithAdjust widget keyMap $ leftmost [postBuildPatch <$ pb, replace]
1387 liftIO $ dmap `H.shouldBe` keyMap
1394 liftIO $ dmap `H.shouldBe` keyMap
1388
1395
1389− describe "traverseIntMapWithKeyWithAdjust" $ session' $ do
1396+ session' "traverseIntMapWithKeyWithAdjust" $ do
1390 let textKeyInt k = "key" <> T.pack (show k)
1397 let textKeyInt k = "key" <> T.pack (show k)
1391 intMap = IntMap.fromList
1398 intMap = IntMap.fromList
1392 [ (1, "one")
1399 [ (1, "one")
@@ -1493,7 +1500,7 @@ tests withDebugging wdConfig caps _selenium = do
1493 (dmap, _evt) <- traverseIntMapWithKeyWithAdjust widget intMap $ leftmost [postBuildPatch <$ pb, replace]
1500 (dmap, _evt) <- traverseIntMapWithKeyWithAdjust widget intMap $ leftmost [postBuildPatch <$ pb, replace]
1494 liftIO $ dmap `H.shouldBe` intMap
1501 liftIO $ dmap `H.shouldBe` intMap
1495
1502
1496− describe "traverseDMapWithKeyWithAdjustWithMove" $ session' $ do
1503+ session' "traverseDMapWithKeyWithAdjustWithMove" $ do
1497 let widget :: DomBuilder t m => Key2 a -> Identity a -> m (Identity a)
1504 let widget :: DomBuilder t m => Key2 a -> Identity a -> m (Identity a)
1498 widget k (Identity v) = elAttr "li" ("id" =: textKey2 k) $ do
1505 widget k (Identity v) = elAttr "li" ("id" =: textKey2 k) $ do
1499 elClass "span" "key" $ text $ textKey2 k
1506 elClass "span" "key" $ text $ textKey2 k
@@ -1573,8 +1580,8 @@ tests withDebugging wdConfig caps _selenium = do
1573 (dmap, _evt) <- traverseDMapWithKeyWithAdjustWithMove widget initMap =<< triggerEventWithChan chan
1580 (dmap, _evt) <- traverseDMapWithKeyWithAdjustWithMove widget initMap =<< triggerEventWithChan chan
1574 liftIO $ assertEqual "DMap" initMap dmap
1581 liftIO $ assertEqual "DMap" initMap dmap
1575
1582
1576− describe "hydrating invalid HTML" $ session' $ do
1583+ session' "hydrating invalid HTML" $ do
1577− it "can hydrate list in paragraph" $ runWD $ do
1584+ xit "can hydrate list in paragraph" $ runWD $ do
1578 let preSwitchover = do
1585 let preSwitchover = do
1579 checkBodyText "before\ninner\nafter"
1586 checkBodyText "before\ninner\nafter"
1580 -- Two <p> tags should be present
1587 -- Two <p> tags should be present
@@ -1603,7 +1610,7 @@ tests withDebugging wdConfig caps _selenium = do
1603 -- TODO: This test presupposes the exact set of labels that "dropdown" places in the "value" fields to distinguish options.
1610 -- TODO: This test presupposes the exact set of labels that "dropdown" places in the "value" fields to distinguish options.
1604 -- This dependence on internal implementation details is undesirable in a test case, but seems fairly tricky to avoid.
1611 -- This dependence on internal implementation details is undesirable in a test case, but seems fairly tricky to avoid.
1605 -- It seems expedient for the time being to expect this test case to be updated, should those implementation details ever change.
1612 -- 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
1607 let doTest expectedOpts (initialValue :: Text) = do
1614 let doTest expectedOpts (initialValue :: Text) = do
1608 let doCheck = do
1615 let doCheck = do
1609 es <- findElemsWithRetry $ WD.ByTag "option"
1616 es <- findElemsWithRetry $ WD.ByTag "option"
reflex-dom-test-selenium/reflex-dom-test-selenium.cabal+1−1
@@ -15,7 +15,7 @@ library
15 hs-source-dirs: src
15 hs-source-dirs: src
16 build-depends:
16 build-depends:
17 async,
17 async,
18− base >= 4.7 && < 4.14,
18+ base >= 4.7 && < 4.15,
19 bytestring == 0.10.*,
19 bytestring == 0.10.*,
20 chrome-test-utils,
20 chrome-test-utils,
21 exceptions,
21 exceptions,
reflex-dom/ChangeLog.md+4
@@ -1,5 +1,9 @@
1# Revision history for reflex-dom
1# Revision history for reflex-dom
2
2
3+## 0.6.1.0-r1
4+
5+* Loosen reflex-dom-core version bounds
6+
3## 0.6.1.0
7## 0.6.1.0
4
8
5* Update for new dependent-map and dependent-sum (after the "some" package split)
9* Update for new dependent-map and dependent-sum (after the "some" package split)
reflex-dom/reflex-dom.cabal+1−1
@@ -74,7 +74,7 @@ library
74 base >= 4.7 && < 4.15,
74 base >= 4.7 && < 4.15,
75 bytestring == 0.10.*,
75 bytestring == 0.10.*,
76 reflex >= 0.8 && < 0.9,
76 reflex >= 0.8 && < 0.9,
77− reflex-dom-core == 0.6.1.0,
77+ reflex-dom-core >= 0.6.1.0 && <0.7,
78 text == 1.2.*
78 text == 1.2.*
79 if !impl(ghcjs)
79 if !impl(ghcjs)
80 if flag(use-warp) && (os(linux) || os(osx))
80 if flag(use-warp) && (os(linux) || os(osx))