{-# language PackageImports #-}
module Main where
--------------------------------------------------------------------------------
-- Imports
--------------------------------------------------------------------------------
import "base" System.Environment ( getArgs )
import "HUnit" Test.HUnit.Base ( assertEqual )
import "test-framework" Test.Framework
( defaultMainWithOpts, interpretArgsOrExit, Test, testGroup )
import "test-framework-hunit" Test.Framework.Providers.HUnit ( testCase )
import "terminal-progress-bar" System.ProgressBar
--------------------------------------------------------------------------------
-- Test suite
--------------------------------------------------------------------------------
main :: IO ()
main = do opts <- interpretArgsOrExit =<< getArgs
defaultMainWithOpts tests opts
tests :: [Test]
tests =
[ testGroup "Label padding"
[ eqTest "no labels" "[]" noLabel noLabel 0 $ Progress 0 0
, eqTest "pre" "pre []" (msg "pre") noLabel 0 $ Progress 0 0
, eqTest "post" "[] post" noLabel (msg "post") 0 $ Progress 0 0
, eqTest "pre & post" "pre [] post" (msg "pre") (msg "post") 0 $ Progress 0 0
]
, testGroup "Bar fill"
[ eqTest "empty" "[....]" noLabel noLabel 6 $ Progress 0 1
, eqTest "almost half" "[=>..]" noLabel noLabel 6 $ Progress 49 100
, eqTest "half" "[==>.]" noLabel noLabel 6 $ Progress 1 2
, eqTest "almost full" "[===>]" noLabel noLabel 6 $ Progress 99 100
, eqTest "full" "[====]" noLabel noLabel 6 $ Progress 1 1
, eqTest "overfull" "[====]" noLabel noLabel 6 $ Progress 2 1
]
, testGroup "Labels"
[ testGroup "Percentage"
[ eqTest " 0%" " 0% [....]" percentage noLabel 11 $ Progress 0 1
, eqTest "100%" "100% [====]" percentage noLabel 11 $ Progress 1 1
, eqTest " 50%" " 50% [==>.]" percentage noLabel 11 $ Progress 1 2
, eqTest "200%" "200% [====]" percentage noLabel 11 $ Progress 2 1
, labelTest "0 work todo" percentage (Progress 10 0) "100%"
]
, testGroup "Exact"
[ eqTest "0/0" "0/0 [....]" exact noLabel 10 $ Progress 0 0
, eqTest "1/1" "1/1 [====]" exact noLabel 10 $ Progress 1 1
, eqTest "1/2" "1/2 [==>.]" exact noLabel 10 $ Progress 1 2
, eqTest "2/1" "2/1 [====]" exact noLabel 10 $ Progress 2 1
, labelTest "0 work todo" exact (Progress 10 0) "10/0"
]
]
]
labelTest :: String -> Label -> Progress -> String -> Test
labelTest testName label progress expected =
testCase testName $ assertEqual expectationError expected (label progress)
eqTest :: String -> String -> Label -> Label -> Integer -> Progress -> Test
eqTest name expected mkPreLabel mkPostLabel width progress =
testCase name $ assertEqual expectationError expected actual
where
actual = mkProgressBar mkPreLabel mkPostLabel width progress
expectationError :: String
expectationError = "Expected result doesn't match actual result"