def test_file_lifecyle(): start_watching() mkfile(p('a')) touch(p('a')) mv(p('a'), p('b')) rm(p('b')) expect_event(FileCreatedEvent(p('a'))) if not platform.is_windows(): expect_event(DirModifiedEvent(p())) if platform.is_linux(): expect_event(FileClosedEvent(p('a'))) expect_event(DirModifiedEvent(p())) expect_event(FileModifiedEvent(p('a'))) if platform.is_linux(): expect_event(FileClosedEvent(p('a'))) expect_event(DirModifiedEvent(p())) expect_event(FileMovedEvent(p('a'), p('b'))) if not platform.is_windows(): expect_event(DirModifiedEvent(p())) expect_event(DirModifiedEvent(p())) expect_event(FileDeletedEvent(p('b'))) if not platform.is_windows(): expect_event(DirModifiedEvent(p()))
def test_recursive_off(): mkdir(p('dir1')) start_watching(recursive=False) touch(p('dir1', 'a')) with pytest.raises(Empty): event_queue.get(timeout=5) mkfile(p('b')) expect_event(FileCreatedEvent(p('b'))) if not platform.is_windows(): expect_event(DirModifiedEvent(p())) if platform.is_linux(): expect_event(FileClosedEvent(p('b'))) # currently limiting these additional events to macOS only, see https://github.com/gorakhargosh/watchdog/pull/779 if platform.is_darwin(): mkdir(p('dir1', 'dir2')) with pytest.raises(Empty): event_queue.get(timeout=5) mkfile(p('dir1', 'dir2', 'somefile')) with pytest.raises(Empty): event_queue.get(timeout=5) mkdir(p('dir3')) expect_event(DirModifiedEvent(p())) # the contents of the parent directory changed mv(p('dir1', 'dir2', 'somefile'), p('somefile')) expect_event(FileMovedEvent(p('dir1', 'dir2', 'somefile'), p('somefile'))) expect_event(DirModifiedEvent(p())) mv(p('dir1', 'dir2'), p('dir2')) expect_event(DirMovedEvent(p('dir1', 'dir2'), p('dir2'))) expect_event(DirModifiedEvent(p()))
def test_file_system_event_handler_dispatch(): dir_del_event = DirDeletedEvent('/path/blah.py') file_del_event = FileDeletedEvent('/path/blah.txt') dir_cre_event = DirCreatedEvent('/path/blah.py') file_cre_event = FileCreatedEvent('/path/blah.txt') file_cls_event = FileClosedEvent('/path/blah.txt') dir_mod_event = DirModifiedEvent('/path/blah.py') file_mod_event = FileModifiedEvent('/path/blah.txt') dir_mov_event = DirMovedEvent('/path/blah.py', '/path/blah') file_mov_event = FileMovedEvent('/path/blah.txt', '/path/blah') all_events = [ dir_mod_event, dir_del_event, dir_cre_event, dir_mov_event, file_mod_event, file_del_event, file_cre_event, file_mov_event, file_cls_event, ] class TestableEventHandler(FileSystemEventHandler): def on_any_event(self, event): assert True def on_modified(self, event): assert event.event_type == EVENT_TYPE_MODIFIED def on_deleted(self, event): assert event.event_type == EVENT_TYPE_DELETED def on_moved(self, event): assert event.event_type == EVENT_TYPE_MOVED def on_created(self, event): assert event.event_type == EVENT_TYPE_CREATED def on_closed(self, event): assert event.event_type == EVENT_TYPE_CLOSED handler = TestableEventHandler() for event in all_events: assert not event.is_synthetic handler.dispatch(event)
def test_file_closed_event(): event = FileClosedEvent(path_1) assert path_1 == event.src_path assert EVENT_TYPE_CLOSED == event.event_type assert not event.is_directory assert not event.is_synthetic