packages feed

wild-bind-x11-0.2.0.0: test/WildBind/X11/TestUtil.hs

-- |
-- Module: WildBind.X11.TestUtil
-- Description:  
-- Maintainer: Toshio Ito <debug.ito@gmail.com>
--
-- 
module WildBind.X11.TestUtil
       ( checkIfX11Available,
         withGrabs
       ) where

import Control.Exception (bracket)
import Control.Monad (when)
import Control.Applicative ((<$>))
import System.Environment (lookupEnv)
import Test.Hspec

import WildBind (FrontEnd(..))

isDisplaySet :: IO Bool
isDisplaySet = exists <$> lookupEnv "DISPLAY" where
  exists (Just v) = v /= ""
  exists _ = False

checkIfX11Available :: Spec -> Spec
checkIfX11Available = before $ do
  available <- isDisplaySet
  when (not available) $ pendingWith "DISPLAY env is not set. Skipped."

withGrabs :: FrontEnd s i -> [i] -> IO a -> IO a
withGrabs front inputs action = bracket grabAll (const ungrabAll) (const action)
  where
    grabAll = mapM_ (frontSetGrab front) inputs
    ungrabAll = mapM_ (frontUnsetGrab front) inputs