codemonitor-0.2: tests/AllTests.hs
import Fixtures
import Job.Types
import Monitor
import Render.Layout
import Render.Rect
import System.Directory
import System.FilePath
import Test.Hspec.HUnit()
import Test.Hspec.Monadic
import Test.Hspec.QuickCheck
import Test.HUnit
import Test.QuickCheck
main = hspecX $ do
describe "notification service:" $ do
it "notifies when file modified in directory" $ withTmpDir $ \dir -> do
assertNotified <- setupNotificationsTest dir
modifyFile $ dir </> "foo"
assertNotified "foo"
it "notifies when file modified in subdirectory" $ withTmpDir $ \dir -> do
createDirectory $ dir </> "subdir"
assertNotified <- setupNotificationsTest dir
modifyFile $ dir </> "subdir" </> "foo"
assertNotified ("subdir" </> "foo")
describe "rectangle operations:" $
let area (Rect x y w h) = w * h
areas rects = sum $ map area rects
aboutSame d1 d2 = abs (d1 - d2) < 0.00000001
in do
prop "divideVertical preserves total area" $ forAll (choose (0, 1)) $ \percent ->
forAll arbitrary $ \rect ->
let (r1, r2) = divideVertical rect percent in
area rect `aboutSame` areas [r1, r2]
prop "splitVertical preserves total area" $ forAll arbitrary $ \rect ->
forAll (choose (1, 10)) $ \numTimes ->
area rect `aboutSame` areas (splitVertical rect numTimes)
prop "splitHorizontal preserves total area" $ forAll arbitrary $ \rect ->
forAll (choose (1, 10)) $ \numTimes ->
area rect `aboutSame` areas (splitHorizontal rect numTimes)
describe "ordering monitors:" $ do
describe "does not change when:" $
it "no monitors require large space failing" $ do
let monitors = [ StatusCodeMonitor "" 0 "" Idle ""
, StatusCodeMonitor "" 0 "" Working ""
]
orderMonitors monitors @?= monitors
describe "does change when:" $
it "a monitor require large space" $ do
let monitors = [ StatusCodeMonitor "" 0 "" Idle ""
, StatusCodeMonitor "" 0 "" Working ""
, StdoutMonitor "" 0 "" ""
]
let expected = [ StdoutMonitor "" 0 "" ""
, StatusCodeMonitor "" 0 "" Idle ""
, StatusCodeMonitor "" 0 "" Working ""
]
orderMonitors monitors @?= expected