{-# LANGUAGE OverloadedStrings #-} module Main where import Control.Exception import Control.Monad import Data.ByteString (ByteString) import qualified Data.ByteString as BS import System.INotify import System.Posix.Files.ByteString import System.Posix.IO.ByteString import Utils file, file2 :: ByteString file = "hello" file2 = file `BS.append` "2" write :: ByteString -> IO () write path = bracket (createFile (path `BS.append` "/" `BS.append` file) stdFileMode) closeFd (\fd -> void $ fdWrite fd " ") move :: ByteString -> IO () move path = rename (path `BS.append` "/" `BS.append` file) (path `BS.append` "/" `BS.append` file2) remove :: ByteString -> IO () remove path = removeLink (path `BS.append` "/" `BS.append` file2) action :: ByteString -> IO () action path = do write path move path remove path main :: IO () main = inTestEnviron [AllEvents] action $ \ events -> do let cookie = head [ c | MovedOut _ _ c <- events ] when (expected cookie ~= events) testSuccess putStrLn $ explainFailure (expected cookie) events testFailure expected :: Cookie -> [Event] expected cookie = [ Created False file , Opened False (Just file) , Modified False (Just file) , Closed False (Just file) True , MovedOut False file cookie , MovedIn False file2 cookie , Deleted False file2 ]