packages feed

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