{-# LANGUAGE ScopedTypeVariables #-} module Properties.View where import Test.QuickCheck import Instances import Utils import XMonad.StackSet hiding (filter) import Data.List (sortBy) -- --------------------------------------------------------------------- -- viewing workspaces -- view sets the current workspace to 'n' prop_view_current (x :: T) = do n <- arbitraryTag x return $ (tag . workspace . current . view n) x == n -- view *only* sets the current workspace, and touches Xinerama. -- no workspace contents will be changed. prop_view_local (x :: T) = do n <- arbitraryTag x return $ workspaces x == workspaces (view n x) where workspaces a = sortBy (\s t -> tag s `compare` tag t) $ workspace (current a) : map workspace (visible a) ++ hidden a -- TODO: Fix this -- view should result in a visible xinerama screen -- prop_view_xinerama (x :: T) (n :: NonNegative Int) = i `tagMember` x ==> -- M.member i (screens (view i x)) -- where -- i = fromIntegral n -- view is idempotent prop_view_idem (x :: T) = do n <- arbitraryTag x return $ view n (view n x) == (view n x) -- view is reversible, though shuffles the order of hidden/visible prop_view_reversible (x :: T) = do n <- arbitraryTag x return $ normal (view n' (view n x)) == normal x where n' = currentTag x