Current section
Files
Jump to
Current section
Files
src/PurerlTest.purs
module PurerlTest where
import Prelude
import Control.Monad.Reader as Reader
import Data.Array as Array
import Data.Foldable (traverse_)
import Data.Newtype (wrap)
import Effect (Effect)
import Effect.Class (liftEffect)
import Effect.Ref as Ref
import Foreign as Foreign
import PurerlTest.Reporter.Bus as ReporterBus
import PurerlTest.Suite.Supervisor as SuiteSupervisor
import PurerlTest.Types (Assertion(..), Assertions, Suite, SuiteStatus(..), Suites, Tests)
runSuites :: Suites -> Effect Unit
runSuites suitesSpecification = do
suitesRef <- Ref.new []
Reader.runReaderT suitesSpecification suitesRef
suites <- Ref.read suitesRef
traverse_ runSuite suites
runSuite :: Suite -> Effect Unit
runSuite suite' = do
ReporterBus.send (ReporterBus.SuiteMessage (SuiteStarted { name: suite'.name }))
{ suite: suite' } # SuiteSupervisor.startChild # void
suite :: String -> Tests -> Suites
suite name tests' = do
suites <- Reader.ask
suites # Ref.modify_ (_ `Array.snoc` { name: wrap name, tests: tests' }) # liftEffect
test :: String -> Assertions -> Tests
test name assertions = do
tests <- Reader.ask
tests # Ref.modify_ (_ `Array.snoc` { name: wrap name, assertions }) # liftEffect
assert :: Boolean -> Assertions
assert b = do
assertions <- Reader.ask
assertions # Ref.modify_ (_ `Array.snoc` Assert b) # liftEffect
refute :: Boolean -> Assertions
refute b = do
assertions <- Reader.ask
assertions # Ref.modify_ (_ `Array.snoc` Refute b) # liftEffect
assertEqual :: forall a. Eq a => a -> a -> Assertions
assertEqual left right = do
assertions <- Reader.ask
assertions
# Ref.modify_
( _ `Array.snoc`
AssertEqual { left: Foreign.unsafeToForeign left, right: Foreign.unsafeToForeign right }
)
# liftEffect
assertNotEqual :: forall a. Eq a => a -> a -> Assertions
assertNotEqual left right = do
assertions <- Reader.ask
assertions
# Ref.modify_
( _ `Array.snoc`
AssertNotEqual
{ left: Foreign.unsafeToForeign left, right: Foreign.unsafeToForeign right }
)
# liftEffect
assertGreaterThan :: forall a. Ord a => a -> a -> Assertions
assertGreaterThan left right = do
assertions <- Reader.ask
assertions
# Ref.modify_
( _ `Array.snoc`
AssertGreaterThan
{ left: Foreign.unsafeToForeign left, right: Foreign.unsafeToForeign right }
)
# liftEffect
assertLessThan :: forall a. Ord a => a -> a -> Assertions
assertLessThan left right = do
assertions <- Reader.ask
assertions
# Ref.modify_
( _ `Array.snoc`
AssertLessThan
{ left: Foreign.unsafeToForeign left, right: Foreign.unsafeToForeign right }
)
# liftEffect
assertGreaterThanOrEqual :: forall a. Ord a => a -> a -> Assertions
assertGreaterThanOrEqual left right = do
assertions <- Reader.ask
assertions
# Ref.modify_
( _ `Array.snoc`
AssertGreaterThanOrEqual
{ left: Foreign.unsafeToForeign left
, right: Foreign.unsafeToForeign right
}
)
# liftEffect
assertLessThanOrEqual :: forall a. Ord a => a -> a -> Assertions
assertLessThanOrEqual left right = do
assertions <- Reader.ask
assertions
# Ref.modify_
( _ `Array.snoc`
AssertLessThanOrEqual
{ left: Foreign.unsafeToForeign left
, right: Foreign.unsafeToForeign right
}
)
# liftEffect