packages feed

reflex-test-host-0.1.0.0: test/Reflex/Test/HostSpec.hs

{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE RankNTypes #-}

module Reflex.Test.HostSpec
  ( spec
  )
where

import           Prelude

import           Test.Hspec
import           Test.Hspec.Contrib.HUnit       ( fromHUnitTest )
import           Test.HUnit

import           Reflex
import           Reflex.Test.Host

import           Control.Monad                  ( forM_ )
import           Control.Monad.IO.Class         ( liftIO )
import qualified Data.List                     as L
import           Data.These



basic_network
  :: forall t m
   . (t ~ SpiderTimeline Global, m ~ SpiderHost Global)
  => (AppIn t Int Int -> PerformEventT t m (AppOut t Int Int))
basic_network AppIn {..} = return AppOut
  { _appOut_behavior = fmap (* (-1)) _appIn_behavior
  , _appOut_event    = fmap (\(b, e) -> e + b)
                         $ attach _appIn_behavior _appIn_event
  }

test_basic :: Test
test_basic = TestLabel "basic" $ TestCase $ runSpiderHost $ do
  let b  = 10 :: Int
      es = [1 .. 10] :: [Int]
  appFrame <- getAppFrame basic_network b
  forM_ es $ \e -> do
    out <- tickAppFrame appFrame (Just (That e))
    liftIO $ L.last out @?= (-b, Just (b + e))

spec :: Spec
spec = describe "Reflex.Test.App" $ do
  fromHUnitTest test_basic