taffybar-5.2.0: test/unit/System/Taffybar/SimpleConfigSpec.hs
{-# LANGUAGE OverloadedRecordDot #-}
module System.Taffybar.SimpleConfigSpec (spec) where
import Data.Maybe (maybeToList)
import System.Taffybar.ContextSpec (runTaffyDefault)
import System.Taffybar.Information.X11DesktopInfo (DisplayName (..))
import System.Taffybar.SimpleConfig
import System.Taffybar.Test.XvfbSpec (RROutput (..), RROutputSettings (..), RRSetup (..), setDefaultDisplay_, withRandrSetup, withXdummy)
import Test.Hspec
import Test.Hspec.QuickCheck
import Test.QuickCheck
import Test.QuickCheck.Monadic
spec :: Spec
spec = aroundAll_ (withXdummy . flip setDefaultDisplay_) $ do
-- Pending: Can't run properties without cleaning up buildContext
xprop "useAllMonitors" prop_useAllMonitors
xprop "usePrimaryMonitor" prop_usePrimaryMonitor
prop_useAllMonitors :: RRSetup -> Property
prop_useAllMonitors rr = monadicIO $ do
allMonitors <-
run $
withRandrSetup DefaultDisplay rr $
runTaffyDefault useAllMonitors
let rrOutputNumbers =
[ i
| (i, o) <- zip [0 ..] rr.outputs,
not o.settings.disabled
]
pure $ allMonitors === rrOutputNumbers
prop_usePrimaryMonitor :: RRSetup -> Property
prop_usePrimaryMonitor rr = monadicIO $ do
primaryMonitor <-
run $
withRandrSetup DefaultDisplay rr $
runTaffyDefault usePrimaryMonitor
let rrPrimaryMonitor = fromIntegral <$> maybeToList rr.primary
pure $ primaryMonitor === rrPrimaryMonitor