on master help sign in
Factor out common code from event handlers
commitbb4b378babc3f021481b046b7e4875c58d1597fd authorHarendra Kumar <harendra@composewell.com> dateWed 18 Nov 2020, 06:02 (6 years ago) parent5ead27a
1 file changed+90−121
test/Streamly/Test/FileSystem/Event.hs+90−121
test/Streamly/Test/FileSystem/Event.hs+90−121
@@ -298,6 +298,7 @@ checkEvents rootPath m matchList = do
298298-------------------------------------------------------------------------------
299299-- FS Event Generators
300300-------------------------------------------------------------------------------
301+
301302fsOpsPreTask :: MVar () -> IO ()
302303fsOpsPreTask m = do
303304 takeMVar m
@@ -410,130 +411,98 @@ eventProcessor fp sync evts func = do
410411 >> return "fOps Done")
411412 return $ fromJust res
412413
413−driverCreateSingleDir :: IO String
414−driverCreateSingleDir = do
415− sync <- driverInit
416− withSystemTempDirectory fseventDir $ \fp ->
417− eventProcessor
418− fp sync singleDirCreateEvents fsOpsCreateSingleDir
419−
420−driverRemoveSingleDir :: IO String
421−driverRemoveSingleDir = do
422− sync <- driverInit
423− withSystemTempDirectory fseventDir $ \fp -> do
424− createDirectoryIfMissing True (fp </> "dir1Single")
425− eventProcessor
426− fp sync singleDirRemoveEvents fsOpsRemoveSingleDir
427−
428−driverRenameSingleDir :: IO String
429−driverRenameSingleDir = do
430− sync <- driverInit
431− withSystemTempDirectory fseventDir $ \fp -> do
432− createDirectoryIfMissing True (fp </> "dir1Single")
433− eventProcessor
434− fp sync singleDirRenameEvents fsOpsRenameSingleDir
435−
436−driverCreateNestedDir :: IO String
437−driverCreateNestedDir = do
438− sync <- driverInit
439− withSystemTempDirectory fseventDir $ \fp ->
440− eventProcessor
441− fp sync nestedDirCreateEvents fsOpsCreateNestedDir
442−
443−driverRemoveNestedDir :: IO String
444−driverRemoveNestedDir = do
445− sync <- driverInit
446− withSystemTempDirectory fseventDir $ \fp -> do
447− createDirectoryIfMissing True (fp </> "dir1" </> "dir2" </> "dir3")
448− eventProcessor
449− fp sync nestedDirRemoveEvents fsOpsRemoveNestedDir
450−
451−driverRenameNestedDir :: IO String
452−driverRenameNestedDir = do
453− sync <- driverInit
454− withSystemTempDirectory fseventDir $ \fp -> do
455− createDirectoryIfMissing True (fp </> "dir1" </> "dir2" </> "dir3")
456− eventProcessor
457− fp sync nestedDirRenameEvents fsOpsRenameNestedDir
458−
459−driverCreateFileInRootDir :: IO String
460−driverCreateFileInRootDir = do
461− sync <- driverInit
462− withSystemTempDirectory fseventDir $ \fp -> do
463− eventProcessor
464− fp sync createFileRootDirEvents fsOpsCreateFileInRootDir
465−
466−driverRemoveFileInRootDir :: IO String
467−driverRemoveFileInRootDir = do
468− sync <- driverInit
469− withSystemTempDirectory fseventDir $ \fp -> do
470− writeFile (fp </> "FileCreated.txt") "Test Data"
471− eventProcessor
472− fp sync removeFileRootDirEvents fsOpsRemoveFileInRootDir
473−
474−driverRenameFileInRootDir :: IO String
475−driverRenameFileInRootDir = do
476− sync <- driverInit
477− withSystemTempDirectory fseventDir $ \fp -> do
478− writeFile (fp </> "FileCreated.txt") "Test Data"
479− eventProcessor
480− fp sync renameFileRootDirEvents fsOpsRenameFileInRootDir
481−
482−driverCreateFileInNestedDir :: IO String
483−driverCreateFileInNestedDir = do
484− sync <- driverInit
485− withSystemTempDirectory fseventDir $ \fp -> do
486− createDirectoryIfMissing True (fp </> "dir1" </> "dir2" </> "dir3")
487− eventProcessor
488− fp sync createFileNestedDirEvents fsOpsCreateFileInNestedDir
489−
490−driverRemoveFileInNestedDir :: IO String
491−driverRemoveFileInNestedDir = do
492− sync <- driverInit
493− withSystemTempDirectory fseventDir $ \fp -> do
494− let nestedDir = fp </> "dir1" </> "dir2" </> "dir3"
495− fpath = nestedDir </> "FileCreated.txt"
496− createDirectoryIfMissing True nestedDir >> writeFile fpath "Test Data"
497− eventProcessor
498− fp sync removeFileNestedDirEvents fsOpsRemoveFileInNestedDir
499−
500−driverRenameFileInNestedDir :: IO String
501−driverRenameFileInNestedDir = do
502− sync <- driverInit
503− withSystemTempDirectory fseventDir $ \fp -> do
504− let nestedDir = fp </> "dir1" </> "dir2" </> "dir3"
505− fpath = nestedDir </> "FileCreated.txt"
506− createDirectoryIfMissing True nestedDir >> writeFile fpath "Test Data"
507− eventProcessor
508− fp sync renameFileNestedDirEvents fsOpsRenameFileInNestedDir
414+driver ::
415+ (String, FilePath -> IO (), FilePath -> MVar () -> IO (), [String])
416+ -> SpecWith ()
417+driver (desc, pre, ops, events) =
418+ it desc $ do
419+ sync <- driverInit
420+ withSystemTempDirectory fseventDir $ \fp -> do
421+ pre fp
422+ eventProcessor fp sync events ops
423+ `shouldReturn` "PASS"
509424
510425-------------------------------------------------------------------------------
511426-- Main
512427-------------------------------------------------------------------------------
513428
429+testDesc :: [([Char], FilePath -> IO (), FilePath -> MVar () -> IO (), [String])]
430+testDesc =
431+ [
432+ ( "Create a single directory"
433+ , const (return ())
434+ , fsOpsCreateSingleDir
435+ , singleDirCreateEvents
436+ )
437+ , ( "Remove a single directory"
438+ , \fp -> createDirectoryIfMissing True (fp </> "dir1Single")
439+ , fsOpsRemoveSingleDir
440+ , singleDirRemoveEvents
441+ )
442+ , ( "Rename a single directory"
443+ , \fp -> createDirectoryIfMissing True (fp </> "dir1Single")
444+ , fsOpsRenameSingleDir
445+ , singleDirRenameEvents
446+ )
447+ , ( "Create a nested directory"
448+ , const (return ())
449+ , fsOpsCreateNestedDir
450+ , nestedDirCreateEvents
451+ )
452+ , ( "Remove a nested directory"
453+ , \fp -> createDirectoryIfMissing True
454+ (fp </> "dir1" </> "dir2" </> "dir3")
455+ , fsOpsRemoveNestedDir
456+ , nestedDirRemoveEvents
457+ )
458+ , ( "Rename a nested directory"
459+ , \fp -> createDirectoryIfMissing True
460+ (fp </> "dir1" </> "dir2" </> "dir3")
461+ , fsOpsRenameNestedDir
462+ , nestedDirRenameEvents
463+ )
464+ , ( "Create a file in root Dir"
465+ , const (return ())
466+ , fsOpsCreateFileInRootDir
467+ , createFileRootDirEvents
468+ )
469+ , ( "Remove a file in root Dir"
470+ , \fp -> writeFile (fp </> "FileCreated.txt") "Test Data"
471+ , fsOpsRemoveFileInRootDir
472+ , removeFileRootDirEvents
473+ )
474+ , ( "Rename a file in root Dir"
475+ , \fp -> writeFile (fp </> "FileCreated.txt") "Test Data"
476+ , fsOpsRenameFileInRootDir
477+ , renameFileRootDirEvents
478+ )
479+ , ( "Create a file in a nested Dir"
480+ , \fp -> createDirectoryIfMissing True
481+ (fp </> "dir1" </> "dir2" </> "dir3")
482+ , fsOpsCreateFileInNestedDir
483+ , createFileNestedDirEvents
484+ )
485+ , ( "Remove a file in a nested Dir"
486+ , \fp ->
487+ let nestedDir = fp </> "dir1" </> "dir2" </> "dir3"
488+ fpath = nestedDir </> "FileCreated.txt"
489+ in do
490+ createDirectoryIfMissing True nestedDir
491+ writeFile fpath "Test Data"
492+ , fsOpsRemoveFileInNestedDir
493+ , removeFileNestedDirEvents
494+ )
495+ , ( "Rename a file in a nested Dir"
496+ , \fp ->
497+ let nestedDir = fp </> "dir1" </> "dir2" </> "dir3"
498+ fpath = nestedDir </> "FileCreated.txt"
499+ in do
500+ createDirectoryIfMissing True nestedDir
501+ writeFile fpath "Test Data"
502+ , fsOpsRenameFileInNestedDir
503+ , renameFileNestedDirEvents
504+ )
505+ ]
506+
514507main :: IO ()
515−main = hspec $ do
516− prop "Create a single directory"
517− $ driverCreateSingleDir `shouldReturn` "PASS"
518− prop "Remove a single directory"
519− $ driverRemoveSingleDir `shouldReturn` "PASS"
520− prop "Rename a single directory"
521− $ driverRenameSingleDir `shouldReturn` "PASS"
522− prop "Create a nested directory"
523− $ driverCreateNestedDir `shouldReturn` "PASS"
524− prop "Remove a nested directory"
525− $ driverRemoveNestedDir `shouldReturn` "PASS"
526− prop "Rename a nested directory"
527− $ driverRenameNestedDir `shouldReturn` "PASS"
528− prop "Create a file in root Dir"
529− $ driverCreateFileInRootDir `shouldReturn` "PASS"
530− prop "Remove a file in root Dir"
531− $ driverRemoveFileInRootDir `shouldReturn` "PASS"
532− prop "Rename a file in root Dir"
533− $ driverRenameFileInRootDir `shouldReturn` "PASS"
534− prop "Create a file in a nested Dir"
535− $ driverCreateFileInNestedDir `shouldReturn` "PASS"
536− prop "Remove a file in a nested Dir"
537− $ driverRemoveFileInNestedDir `shouldReturn` "PASS"
538− prop "Rename a file in a nested Dir"
539− $ driverRenameFileInNestedDir `shouldReturn` "PASS"
508+main = hspec $ sequence_ $ map driver testDesc