From a7aa84837d8e63eae0f20bb5fb7f4f8b605e2fcf Mon Sep 17 00:00:00 2001 From: Thomas Date: Tue, 18 May 2021 10:32:34 +0000 Subject: [PATCH] Add test for issue #797 This works for me locally, let's see what the CI machine says. --- tests/test_fsevents.py | 50 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 48 insertions(+), 2 deletions(-) diff --git a/tests/test_fsevents.py b/tests/test_fsevents.py index 4dac7c17b..16e212504 100644 --- a/tests/test_fsevents.py +++ b/tests/test_fsevents.py @@ -46,10 +46,10 @@ def teardown_function(function): rm(p(""), recursive=True) -def start_watching(path=None, use_full_emitter=False): +def start_watching(path=None, recursive=True, use_full_emitter=False): global emitter path = p("") if path is None else path - emitter = FSEventsEmitter(event_queue, ObservedWatch(path, recursive=True), suppress_history=True) + emitter = FSEventsEmitter(event_queue, ObservedWatch(path, recursive=recursive), suppress_history=True) emitter.start() @@ -247,6 +247,52 @@ def test_converting_cfstring_to_pyunicode(): emitter.stop() +def test_issue_797(): + from watchdog.events import ( + PatternMatchingEventHandler, + DirCreatedEvent, + DirModifiedEvent, + FileCreatedEvent, + FileModifiedEvent + ) + + class TestEventHandler(PatternMatchingEventHandler): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.expected_events = [ + FileCreatedEvent(p('foo.json')), + FileModifiedEvent(p('foo.json')) + ] + self.observed_events = set() + + def on_any_event(self, event): + logger.info(event) + self.expected_events.remove(event) + self.observed_events.add(event) + # expected_event = self.expected_events.pop(0) + # assert expected_event == event + + def done(self): + return not self.expected_events + + event_handler = TestEventHandler(patterns=["*.json"], ignore_patterns=[], ignore_directories=True) + observer = Observer() + observer.schedule(event_handler, p()) + observer.start() + time.sleep(0.1) + + try: + touch(p('foo.json')) + timeout_at = time.time() + 5 + while not event_handler.done() and time.time() < timeout_at: + time.sleep(0.1) + + assert event_handler.done() + finally: + observer.stop() + observer.join() + + def test_watchdog_recursive(): """ See https://github.com/gorakhargosh/watchdog/issues/706 """