saturn-1.1.0.0: source/library/Saturn/Unstable/ParseSpec.hs
module Saturn.Unstable.ParseSpec where
import qualified Data.Either as Either
import qualified Heck
import qualified Saturn.Unstable.Parse as Parse
import qualified Saturn.Unstable.Type.ScheduleSpec as ScheduleSpec
spec :: (MonadFail m, Monad n) => Heck.Test m n -> n ()
spec t = Heck.describe t "Saturn.Unstable.Parse" $ do
Heck.describe t "fromString" $ do
Heck.it t "accepts wildcards" $ do
schedule <- ScheduleSpec.new [] [] [] [] []
Heck.assertEq t (Right schedule) (Parse.fromString "* * * * *")
Heck.it t "accepts extra spaces" $ do
schedule <- ScheduleSpec.new [] [] [] [] []
Heck.assertEq t (Right schedule) (Parse.fromString " * * * * * ")
Heck.it t "accepts numbers" $ do
schedule <- ScheduleSpec.new [[4]] [[3]] [[2]] [[1]] [[0]]
Heck.assertEq t (Right schedule) (Parse.fromString "4 3 2 1 0")
Heck.it t "accepts ranges" $ do
schedule <- ScheduleSpec.new [[8, 9]] [[6, 7]] [[4, 5]] [[2, 3]] [[0, 1]]
Heck.assertEq t (Right schedule) (Parse.fromString "8-9 6-7 4-5 2-3 0-1")
Heck.it t "accepts choices" $ do
schedule <- ScheduleSpec.new [[8], [9]] [[6], [7]] [[4], [5]] [[2], [3]] [[0], [1]]
Heck.assertEq t (Right schedule) (Parse.fromString "8,9 6,7 4,5 2,3 0,1")
Heck.describe t "minute" $ do
Heck.it t "accepts a number" $ do
schedule <- ScheduleSpec.new [[0]] [] [] [] []
Heck.assertEq t (Right schedule) (Parse.fromString "0 * * * *")
Heck.it t "accepts a range" $ do
schedule <- ScheduleSpec.new [[0, 1]] [] [] [] []
Heck.assertEq t (Right schedule) (Parse.fromString "0-1 * * * *")
Heck.it t "accepts a choice" $ do
schedule <- ScheduleSpec.new [[0], [1]] [] [] [] []
Heck.assertEq t (Right schedule) (Parse.fromString "0,1 * * * *")
Heck.it t "rejects two wildcards" $ do
Heck.assertEq t True (Either.isLeft (Parse.fromString "*,* * * * *"))
Heck.it t "rejects a wildcard and a number" $ do
Heck.assertEq t True (Either.isLeft (Parse.fromString "*,0 * * * *"))
Heck.it t "rejects a wildcard and a range" $ do
Heck.assertEq t True (Either.isLeft (Parse.fromString "*,0-0 * * * *"))
Heck.it t "rejects an out of bounds number" $ do
Heck.assertEq t True (Either.isLeft (Parse.fromString "60 * * * *"))
Heck.it t "rejects an out of bounds number as part of a choice" $ do
Heck.assertEq t True (Either.isLeft (Parse.fromString "0,60 * * * *"))
Heck.it t "rejects an out of bounds range" $ do
Heck.assertEq t True (Either.isLeft (Parse.fromString "60-61 * * * *"))
Heck.it t "rejects a half out of bounds range" $ do
Heck.assertEq t True (Either.isLeft (Parse.fromString "0-60 * * * *"))
Heck.it t "rejects a backwards range" $ do
Heck.assertEq t True (Either.isLeft (Parse.fromString "1-0 * * * *"))
Heck.describe t "hour" $ do
Heck.it t "accepts a number" $ do
schedule <- ScheduleSpec.new [] [[0]] [] [] []
Heck.assertEq t (Right schedule) (Parse.fromString "* 0 * * *")
Heck.it t "accepts a range" $ do
schedule <- ScheduleSpec.new [] [[0, 1]] [] [] []
Heck.assertEq t (Right schedule) (Parse.fromString "* 0-1 * * *")
Heck.it t "accepts a choice" $ do
schedule <- ScheduleSpec.new [] [[0], [1]] [] [] []
Heck.assertEq t (Right schedule) (Parse.fromString "* 0,1 * * *")
Heck.it t "rejects two wildcards" $ do
Heck.assertEq t True (Either.isLeft (Parse.fromString "* *,* * * *"))
Heck.it t "rejects a wildcard and a number" $ do
Heck.assertEq t True (Either.isLeft (Parse.fromString "* *,0 * * *"))
Heck.it t "rejects a wildcard and a range" $ do
Heck.assertEq t True (Either.isLeft (Parse.fromString "* *,0-0 * * *"))
Heck.it t "rejects an out of bounds number" $ do
Heck.assertEq t True (Either.isLeft (Parse.fromString "* 24 * * *"))
Heck.it t "rejects an out of bounds number as part of a choice" $ do
Heck.assertEq t True (Either.isLeft (Parse.fromString "* 0,24 * * *"))
Heck.it t "rejects an out of bounds range" $ do
Heck.assertEq t True (Either.isLeft (Parse.fromString "* 24-25 * * *"))
Heck.it t "rejects a half out of bounds range" $ do
Heck.assertEq t True (Either.isLeft (Parse.fromString "* 0-24 * * *"))
Heck.it t "rejects a backwards range" $ do
Heck.assertEq t True (Either.isLeft (Parse.fromString "* 1-0 * * *"))
Heck.describe t "day" $ do
Heck.it t "accepts a number" $ do
schedule <- ScheduleSpec.new [] [] [[1]] [] []
Heck.assertEq t (Right schedule) (Parse.fromString "* * 1 * *")
Heck.it t "accepts a range" $ do
schedule <- ScheduleSpec.new [] [] [[1, 2]] [] []
Heck.assertEq t (Right schedule) (Parse.fromString "* * 1-2 * *")
Heck.it t "accepts a choice" $ do
schedule <- ScheduleSpec.new [] [] [[1], [2]] [] []
Heck.assertEq t (Right schedule) (Parse.fromString "* * 1,2 * *")
Heck.it t "rejects two wildcards" $ do
Heck.assertEq t True (Either.isLeft (Parse.fromString "* * *,* * *"))
Heck.it t "rejects a wildcard and a number" $ do
Heck.assertEq t True (Either.isLeft (Parse.fromString "* * *,1 * *"))
Heck.it t "rejects a wildcard and a range" $ do
Heck.assertEq t True (Either.isLeft (Parse.fromString "* * *,1-1 * *"))
Heck.it t "rejects an out of bounds number" $ do
Heck.assertEq t True (Either.isLeft (Parse.fromString "* * 32 * *"))
Heck.it t "rejects an out of bounds number as part of a choice" $ do
Heck.assertEq t True (Either.isLeft (Parse.fromString "* * 1,32 * *"))
Heck.it t "rejects an out of bounds range" $ do
Heck.assertEq t True (Either.isLeft (Parse.fromString "* * 32-33 * *"))
Heck.it t "rejects a half out of bounds range" $ do
Heck.assertEq t True (Either.isLeft (Parse.fromString "* * 1-32 * *"))
Heck.it t "rejects a backwards range" $ do
Heck.assertEq t True (Either.isLeft (Parse.fromString "* * 2-1 * *"))
Heck.describe t "month" $ do
Heck.it t "accepts a number" $ do
schedule <- ScheduleSpec.new [] [] [] [[1]] []
Heck.assertEq t (Right schedule) (Parse.fromString "* * * 1 *")
Heck.it t "accepts a range" $ do
schedule <- ScheduleSpec.new [] [] [] [[1, 2]] []
Heck.assertEq t (Right schedule) (Parse.fromString "* * * 1-2 *")
Heck.it t "accepts a choice" $ do
schedule <- ScheduleSpec.new [] [] [] [[1], [2]] []
Heck.assertEq t (Right schedule) (Parse.fromString "* * * 1,2 *")
Heck.it t "rejects two wildcards" $ do
Heck.assertEq t True (Either.isLeft (Parse.fromString "* * * *,* *"))
Heck.it t "rejects a wildcard and a number" $ do
Heck.assertEq t True (Either.isLeft (Parse.fromString "* * * *,1 *"))
Heck.it t "rejects a wildcard and a range" $ do
Heck.assertEq t True (Either.isLeft (Parse.fromString "* * * *,1-1 *"))
Heck.it t "rejects an out of bounds number" $ do
Heck.assertEq t True (Either.isLeft (Parse.fromString "* * * 13 *"))
Heck.it t "rejects an out of bounds number as part of a choice" $ do
Heck.assertEq t True (Either.isLeft (Parse.fromString "* * * 1,13 *"))
Heck.it t "rejects an out of bounds range" $ do
Heck.assertEq t True (Either.isLeft (Parse.fromString "* * * 13-14 *"))
Heck.it t "rejects a half out of bounds range" $ do
Heck.assertEq t True (Either.isLeft (Parse.fromString "* * * 1-13 *"))
Heck.it t "rejects a backwards range" $ do
Heck.assertEq t True (Either.isLeft (Parse.fromString "* * * 2-1 *"))
Heck.describe t "weekday" $ do
Heck.it t "accepts a number" $ do
schedule <- ScheduleSpec.new [] [] [] [] [[0]]
Heck.assertEq t (Right schedule) (Parse.fromString "* * * * 0")
Heck.it t "accepts a range" $ do
schedule <- ScheduleSpec.new [] [] [] [] [[0, 1]]
Heck.assertEq t (Right schedule) (Parse.fromString "* * * * 0-1")
Heck.it t "accepts a choice" $ do
schedule <- ScheduleSpec.new [] [] [] [] [[0], [1]]
Heck.assertEq t (Right schedule) (Parse.fromString "* * * * 0,1")
Heck.it t "rejects two wildcards" $ do
Heck.assertEq t True (Either.isLeft (Parse.fromString "* * * * *,*"))
Heck.it t "rejects a wildcard and a number" $ do
Heck.assertEq t True (Either.isLeft (Parse.fromString "* * * * *,0"))
Heck.it t "rejects a wildcard and a range" $ do
Heck.assertEq t True (Either.isLeft (Parse.fromString "* * * * *,0-0"))
Heck.it t "rejects an out of bounds number" $ do
Heck.assertEq t True (Either.isLeft (Parse.fromString "* * * * 7"))
Heck.it t "rejects an out of bounds number as part of a choice" $ do
Heck.assertEq t True (Either.isLeft (Parse.fromString "* * * * 0,7"))
Heck.it t "rejects an out of bounds range" $ do
Heck.assertEq t True (Either.isLeft (Parse.fromString "* * * * 7-8"))
Heck.it t "rejects a half out of bounds range" $ do
Heck.assertEq t True (Either.isLeft (Parse.fromString "* * * * 0-7"))
Heck.it t "rejects a backwards range" $ do
Heck.assertEq t True (Either.isLeft (Parse.fromString "* * * * 1-0"))