tests: Use hspec as test driver

My main motivation here is that I'd like to add some unit tests (as
opposed to testing everything using QuickCheck properties), but there
are other benefits: it's now easier to run a subset of tests -- the
command-line interface is more powerful.

Also, rename the test-suite to "tests" as it's no longer limited to
properties.
This commit is contained in:
Tomas Janousek 2021-01-25 21:05:57 +00:00
parent 320fe8c537
commit cd5b1a1015
2 changed files with 37 additions and 72 deletions

View File

@ -1,79 +1,43 @@
module Main where module Main where
import Test.QuickCheck
import System.Environment import Test.Hspec
import Text.Printf import Test.Hspec.QuickCheck
import Control.Monad
import qualified ManageDocks import qualified ManageDocks
import qualified RotateSome import qualified RotateSome
import qualified Selective import qualified Selective
import qualified SwapWorkspaces import qualified SwapWorkspaces
import qualified XPrompt import qualified XPrompt
main :: IO () main :: IO ()
main = do main = hspec $ do
arg <- fmap (drop 1) getArgs context "ManageDocks" $ do
let n = if null arg then 100 else read $ head arg prop "prop_r2c_c2r" $ ManageDocks.prop_r2c_c2r
args = stdArgs { maxSuccess = n, maxSize = 100, maxDiscardRatio = 100 } prop "prop_c2r_r2c" $ ManageDocks.prop_c2r_r2c
qc t = do context "Selective" $ do
c <- quickCheckWithResult args t prop "prop_select_length" $ Selective.prop_select_length
case c of prop "prop_update_idem" $ Selective.prop_update_idem
Success{} -> return True prop "prop_select_master" $ Selective.prop_select_master
_ -> return False prop "prop_select_focus" $ Selective.prop_select_focus
perform (s, t) = printf "%-35s: " s >> qc t prop "prop_select_increasing" $ Selective.prop_select_increasing
nFailed <- length . filter not <$> mapM perform tests prop "prop_select_two_consec" $ Selective.prop_select_two_consec
unless (nFailed == 0) (error (show nFailed ++ " test(s) failed")) prop "prop_update_nm" $ Selective.prop_update_nm
prop "prop_update_start" $ Selective.prop_update_start
prop "prop_update_nr" $ Selective.prop_update_nr
tests :: [(String, Property)] prop "prop_update_focus_up" $ Selective.prop_update_focus_up
tests = prop "prop_update_focus_down" $ Selective.prop_update_focus_down
[ ("ManageDocks.prop_r2c_c2r" , property ManageDocks.prop_r2c_c2r) context "RotateSome" $ do
, ("ManageDocks.prop_c2r_r2c" , property ManageDocks.prop_c2r_r2c) prop "prop_rotate_some_length" $ RotateSome.prop_rotate_some_length
, ("Selective.prop_select_length", property Selective.prop_select_length) prop "prop_rotate_some_cycle" $ RotateSome.prop_rotate_some_cycle
, ("Selective.prop_update_idem" , property Selective.prop_update_idem) prop "prop_rotate_some_anchors" $ RotateSome.prop_rotate_some_anchors
, ("Selective.prop_select_master", property Selective.prop_select_master) prop "prop_rotate_some_rotate" $ RotateSome.prop_rotate_some_rotate
, ("Selective.prop_select_focus" , property Selective.prop_select_focus) prop "prop_rotate_some_focus" $ RotateSome.prop_rotate_some_focus
, ( "Selective.prop_select_increasing" context "SwapWorkspaces" $ modifyMaxDiscardRatio (const 100) $ do
, property Selective.prop_select_increasing prop "prop_double_swap" $ SwapWorkspaces.prop_double_swap
) prop "prop_invalid_swap" $ SwapWorkspaces.prop_invalid_swap
, ( "Selective.prop_select_two_consec" prop "prop_swap_only_two" $ SwapWorkspaces.prop_swap_only_two
, property Selective.prop_select_two_consec prop "prop_swap_with_current" $ SwapWorkspaces.prop_swap_with_current
) context "XPrompt" $ do
, ("Selective.prop_update_nm" , property Selective.prop_update_nm) prop "prop_split" $ XPrompt.prop_split
, ("Selective.prop_update_start" , property Selective.prop_update_start) prop "prop_spliInSubListsAt" $ XPrompt.prop_spliInSubListsAt
, ("Selective.prop_update_nr" , property Selective.prop_update_nr) prop "prop_skipGetLastWord" $ XPrompt.prop_skipGetLastWord
, ("Selective.prop_update_focus_up", property Selective.prop_update_focus_up)
, ( "Selective.prop_update_focus_down"
, property Selective.prop_update_focus_down
)
, ( "RotateSome.prop_rotate_some_length"
, property RotateSome.prop_rotate_some_length
)
, ( "RotateSome.prop_rotate_some_cycle"
, property RotateSome.prop_rotate_some_cycle
)
, ( "RotateSome.prop_rotate_some_anchors"
, property RotateSome.prop_rotate_some_anchors
)
, ( "RotateSome.prop_rotate_some_rotate"
, property RotateSome.prop_rotate_some_rotate
)
, ( "RotateSome.prop_rotate_some_focus"
, property RotateSome.prop_rotate_some_focus
)
, ( "SwapWorkspaces.prop_double_swap"
, property SwapWorkspaces.prop_double_swap
)
, ( "SwapWorkspaces.prop_invalid_swap"
, property SwapWorkspaces.prop_invalid_swap
)
, ( "SwapWorkspaces.prop_swap_only_two"
, property SwapWorkspaces.prop_swap_only_two
)
, ( "SwapWorkspaces.prop_swap_with_current"
, property SwapWorkspaces.prop_swap_with_current
)
, ("XPrompt.prop_split" , property XPrompt.prop_split)
, ("XPrompt.prop_spliInSubListsAt", property XPrompt.prop_spliInSubListsAt)
, ("XPrompt.prop_skipGetLastWord" , property XPrompt.prop_skipGetLastWord)
]

View File

@ -362,7 +362,7 @@ library
XMonad.Util.XSelection XMonad.Util.XSelection
XMonad.Util.XUtils XMonad.Util.XUtils
test-suite properties test-suite tests
type: exitcode-stdio-1.0 type: exitcode-stdio-1.0
main-is: Main.hs main-is: Main.hs
other-modules: ManageDocks other-modules: ManageDocks
@ -400,6 +400,7 @@ test-suite properties
, X11>=1.6.1 && < 1.10 , X11>=1.6.1 && < 1.10
, containers , containers
, directory , directory
, hspec >= 2.4.0 && < 3
, mtl , mtl
, process , process
, unix , unix