sensei-0.0.0: test/TriggerSpec.hs
module TriggerSpec (spec) where
import Helper
import Data.List
import Trigger
normalize :: String -> [String]
normalize = normalizeErrors . normalizeTiming . normalizeSeed . lines
where
normalizeErrors :: [String] -> [String]
normalizeErrors = mkNormalize "Spec.hs:"
normalizeTiming :: [String] -> [String]
normalizeTiming = mkNormalize "Finished in "
normalizeSeed :: [String] -> [String]
normalizeSeed = mkNormalize "Randomized with seed "
mkNormalize :: String -> [String] -> [String]
mkNormalize message = map f
where
f line
| message `isPrefixOf` line = message ++ "..."
| otherwise = line
spec :: Spec
spec = do
describe "triggerAll" $ around_ withSomeSpec $ do
it "runs all specs" $ do
withSession ["Spec.hs", "--no-color"] $ \session -> do
writeFile "Spec.hs" failingSpec
(False, xs) <- silence (trigger session >> triggerAll session)
normalize xs `shouldBe` [
"Ok, modules loaded: Spec."
, ""
, "foo"
, "bar FAILED [1]"
, ""
, "Failures:"
, ""
, " Spec.hs:9: "
, " 1) bar"
, ""
, "Randomized with seed ..."
, ""
, "Finished in ..."
, "2 examples, 1 failure"
, "Summary {summaryExamples = 2, summaryFailures = 1}"
]
describe "trigger" $ around_ withSomeSpec $ do
it "reloads and runs specs" $ do
withSession ["Spec.hs", "--no-color"] $ \session -> do
result <- silence (trigger session >> trigger session)
fmap normalize result `shouldBe` (True, [
"Ok, modules loaded: Spec."
, ""
, "foo"
, "bar"
, ""
, "Finished in ..."
, "2 examples, 0 failures"
, "Summary {summaryExamples = 2, summaryFailures = 0}"
])
context "with a module that does not compile" $ do
it "stops after reloading" $ do
withSession ["Spec.hs"] $ \session -> do
writeFile "Spec.hs" (passingSpec ++ "foo = bar")
(False, xs) <- silence (trigger session >> trigger session)
normalize xs `shouldBe` [
"[1 of 1] Compiling Spec ( Spec.hs, interpreted )"
, ""
, "Spec.hs:..."
, "Failed, modules loaded: none."
]
context "with a failing spec" $ do
it "indicates failure" $ do
withSession ["Spec.hs"] $ \session -> do
writeFile "Spec.hs" failingSpec
(False, xs) <- silence (trigger session)
xs `shouldContain` "Ok, modules loaded:"
xs `shouldContain` "2 examples, 1 failure"
it "only reruns failing specs" $ do
withSession ["Spec.hs", "--no-color"] $ \session -> do
writeFile "Spec.hs" failingSpec
(False, xs) <- silence (trigger session >> trigger session)
normalize xs `shouldBe` [
"Ok, modules loaded: Spec."
, ""
, "bar FAILED [1]"
, ""
, "Failures:"
, ""
, " Spec.hs:9: "
, " 1) bar"
, ""
, "Randomized with seed ..."
, ""
, "Finished in ..."
, "1 example, 1 failure"
, "Summary {summaryExamples = 1, summaryFailures = 1}"
]
context "after a failing spec passes" $ do
it "runs all specs" $ do
withSession ["Spec.hs", "--no-color"] $ \session -> do
writeFile "Spec.hs" failingSpec
_ <- silence (trigger session)
writeFile "Spec.hs" passingSpec
(True, xs) <- silence (trigger session)
normalize xs `shouldBe` [
"[1 of 1] Compiling Spec ( Spec.hs, interpreted )"
, "Ok, modules loaded: Spec."
, ""
, "bar"
, ""
, "Finished in ..."
, "1 example, 0 failures"
, "Summary {summaryExamples = 1, summaryFailures = 0}"
, ""
, "foo"
, "bar"
, ""
, "Finished in ..."
, "2 examples, 0 failures"
, "Summary {summaryExamples = 2, summaryFailures = 0}"
]
context "with a module that does not expose a spec" $ do
it "only reloads" $ do
withSession ["Spec.hs"] $ \session -> do
writeFile "Spec.hs" "module Main where"
silence (trigger session >> trigger session) `shouldReturn` (True, "Ok, modules loaded: Main.\n")