1{-# LANGUAGE ConstraintKinds, GADTs, RankNTypes, FlexibleInstances, FlexibleContexts, MultiParamTypeClasses, GeneralizedNewtypeDeriving #-}
3module Reflex.Test.Micro (testCases) where
10import Control.Applicative
13import Data.Functor.Misc
18import qualified Data.Map as Map
22testCases :: [(String, TestCase)]
24 [ testB "hold" $ hold "0" =<< events1
26 b <- current <$> (count =<< events2)
27 return $ (+ (0::Int)) <$> b
30 b <- hold "0" =<< events1
31 return (id <$> id <$> b)
36 return (id <$> pull $ liftA2 (<>) (sample b1) (sample b1))
41 return (id <$> pull $ liftA2 (<>) (sample b1) (sample b2))
44 es <- planList ["a", "b", "c"]
47 b <- hold (constant "") $
48 pushAlways (const $ hold "z" es) e
60 return (tag (map toUpper <$> b1) e)
62 , testE "attach-1" $ do
65 return (attachWith (++) (map toUpper <$> b1) e)
67 , testE "leftmost" $ liftA2 leftmost2 events1 events2
69 , testE "appendEvents-1" $ liftA2 appendEvents events1 events2
70 , testE "appendEvents-2" $ liftA2 appendEvents events3 events2
73 , testE "merge-1" $ do
75 return $ leftmost ["x" <$ e, "y" <$ e]
77 , testE "merge-2" $ do
79 let m = mergeMap $ Map.fromList [(1::Int, "y" <$ e), (2, "z" <$ e)]
81 let ee = flip pushAlways e $ const $ return m
82 return $ coincidence ee
84 , testE "onceE-1" $ do
86 onceE $ leftmost [e, e]
89 , testE "onceE-2" $ do
91 b <- hold never (e <$ e)
95 , testE "switch-1" $ do
97 b <- hold never (e <$ e)
100 , testE "switch-2" $ do
102 return $ coincidence $ flip pushAlways e $ const $ do
103 switch <$> hold (leftmost ["x" <$ e, "y" <$ e, "z" <$ e]) (e <$ e)
105 , testE "switch-3" $ do
107 return $ coincidence $ flip pushAlways e $ const $ do
108 switch <$> hold (leftmost ["x" <$ e, "y" <$ e, "z" <$ e]) never
110 , testE "switch-4" $ do
112 switch <$> hold (deep e) (e <$ e)
115 , testE "switch-5" $ do
117 return $ coincidence $ flip pushAlways e $ const $
118 return $ leftmost ["x" <$ e, "y" <$ e, "z" <$ e]
120 , testE "switch-6" $ do
122 return $ coincidence $ flip pushAlways e $ const $ do
123 switch <$> hold ("x" <$ e) (e <$ e)
126 , testE "switchPromptly-1" $ do
129 switchPromptly never $ e <$ e'
131 , testE "switchPromptly-2" $ do
133 switchPromptly never $ deep (e <$ e)
135 , testE "switchPromptly-3" $ do
137 switchPromptly never $ (e <$ deep e)
139 , testE "switchPromptly-4" $ do
141 switchPromptly never $ (deep e <$ e)
143 , testE "switch-5" $ do
145 switch <$> hold never (deep e <$ e)
147 , testE "switchPromptly-5" $ do
149 switchPromptly never $ flip push e $
150 const (Just <$> onceE e)
152 , testE "switchPromptly-6" $ do
154 switchPromptly never $ flip pushAlways e $
155 const (switchPromptly e never)
157 , testE "coincidence-1" $ do
159 return $ coincidence $ flip pushAlways e $
160 const $ return (id <$> e)
162 , testE "coincidence-2" $ do
164 return $ coincidence $ flip pushAlways e $
165 const $ return (deep e)
167 , testE "coincidence-3" $ do
169 return $ coincidence $ flip pushAlways e $
170 const $ return (coincidence (e <$ e))
172 , testE "coincidence-4" $ do
174 return $ coincidence $ flip pushAlways e $
177 , testE "coincidence-5" $ do
179 return $ coincidence $ flip pushAlways e $ const $ do
181 return (coincidence (e' <$ e'))
183 , testE "coincidence-6" $ do
185 return $ coincidence $ flip pushAlways e $ const $ do
186 let e' = coincidence (e <$ e)
189 , testE "coincidence-7" $ do
191 return $ coincidence (deep e <$ e)
193 , testB "holdWhileFiring" $ do
196 bb <- hold (constant "x") $ pushAlways (const $ hold "a" eo) eo
197 return $ pull $ sample =<< sample bb
199 , testE "joinDyn" $ do
202 bd <- hold never . fmap (const e) =<< onceE e
204 eOuter <- pushAlways sample . fmap (const bb) <$> onceE e
205 let eInner = switch bd
206 return $ leftmost [eOuter, eInner]
208 , testB "foldDyn" $ do
209 d <- foldDyn (++) "0" =<< events1
212 , testB "mapDyn" $ do
213 d <- foldDyn (++) "0" =<< events1
214 current <$> mapDyn (map toUpper) d
216 , testB "combineDyn" $ do
217 d1 <- foldDyn (++) "0" =<< events1
218 d2 <- mapDyn (map toUpper) =<< foldDyn (++) "0" =<< events2
220 current <$> combineDyn (<>) d1 d2
222 e <- fmap toMap <$> events1
223 let es = select (fanMap e) . Const2 <$> values
225 return (mergeList es)
228 e <- fmap toMap <$> events3
229 let es = select (fanMap e) . Const2 <$> values
231 return (mergeList es)
234 f <- fanMap <$> fmap toMap <$> events3
235 return $ select f (Const2 'c')
238 e <- fmap toMap <$> events1
239 return $ toUpper <$> select (fanMap e) (Const2 'a')
242 e <- fmap toMap <$> events2
243 return $ toUpper <$> select (fanMap e) (Const2 'c')
246 f <- fanMap <$> fmap toMap <$> events1
247 return $ toList <$> mergeList [ select f (Const2 'b'), select f (Const2 'b'), select f (Const2 'e'), select f (Const2 'e') ]
249 -- , testE "switchMerge-1" $ switchMergeMap mempty =<< increasing
251 -- , testE "switchMerge-2" $ do
253 -- switchMergeMap (Map.singleton 0 e) =<< increasing
255 -- , testE "switchMerge-3" $ do
257 -- switchMergeMap es =<< increasing
259 -- , testE "switchMerge-4" $ do
261 -- switchMergeMap es =<< decreasing
265 events1, events2, events3 :: TestPlan t m => m (Event t String)
266 events1 = plan [(1, "a"), (2, "b"), (5, "c"), (7, "d"), (8, "e")]
267 events2 = plan [(1, "e"), (3, "d"), (4, "c"), (6, "b"), (7, "a")]
269 events3 = liftA2 appendEvents events1 events2
271 eventsFrom :: TestPlan t m => Word -> m (Event t Int)
272 eventsFrom n = plan $ zip [n..8] [1..8]
274 increasing :: TestPlan t m => m (Event t (Map Int (Event t Int)))
276 es <- mapM eventsFrom [1..8]
277 planList $ zipWith Map.singleton [1..8] es
279 decreasing :: TestPlan t m => m (Event t (Map Int (Event t Int)))
280 decreasing = planList $ zipWith Map.singleton [1..8] (repeat never)
282 eventsMany :: TestPlan t m => m (Map Int (Event t Int))
284 es <- mapM eventsFrom [8,7..1]
285 return $ Map.fromList $ zip [1..8] es
289 toMap str = Map.fromList $ map (\c -> (c, c)) str
292 behavior1, behavior2 :: forall t m. TestPlan t m => m (Behavior t String)
293 behavior1 = hold "1" =<< events1
294 behavior2 = hold "2" =<< events2
296 deep e = leftmost [e, e]
297 leftmost2 e1 e2 = leftmost [e1, e2]
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list