1from __future__ import annotations
2
3from watchdog.events import (
4    EVENT_TYPE_CLOSED,
5    EVENT_TYPE_CLOSED_NO_WRITE,
6    EVENT_TYPE_CREATED,
7    EVENT_TYPE_DELETED,
8    EVENT_TYPE_MODIFIED,
9    EVENT_TYPE_MOVED,
10    EVENT_TYPE_OPENED,
11    DirCreatedEvent,
12    DirDeletedEvent,
13    DirModifiedEvent,
14    DirMovedEvent,
15    FileClosedEvent,
16    FileClosedNoWriteEvent,
17    FileCreatedEvent,
18    FileDeletedEvent,
19    FileModifiedEvent,
20    FileMovedEvent,
21    FileOpenedEvent,
22    FileSystemEvent,
23    LoggingEventHandler,
24)
25
26path_1 = "/path/xyz"
27path_2 = "/path/abc"
28
29
30class _TestableEventHandler(LoggingEventHandler):
31    def on_any_event(self, event):
32        assert isinstance(event, FileSystemEvent)
33
34    def on_modified(self, event):
35        super().on_modified(event)
36        assert event.event_type == EVENT_TYPE_MODIFIED
37
38    def on_deleted(self, event):
39        super().on_deleted(event)
40        assert event.event_type == EVENT_TYPE_DELETED
41
42    def on_moved(self, event):
43        super().on_moved(event)
44        assert event.event_type == EVENT_TYPE_MOVED
45
46    def on_created(self, event):
47        super().on_created(event)
48        assert event.event_type == EVENT_TYPE_CREATED
49
50    def on_closed(self, event):
51        super().on_closed(event)
52        assert event.event_type == EVENT_TYPE_CLOSED
53
54    def on_closed_no_write(self, event):
55        super().on_closed_no_write(event)
56        assert event.event_type == EVENT_TYPE_CLOSED_NO_WRITE
57
58    def on_opened(self, event):
59        super().on_opened(event)
60        assert event.event_type == EVENT_TYPE_OPENED
61
62
63def test_logging_event_handler_dispatch():
64    dir_del_event = DirDeletedEvent("/path/blah.py")
65    file_del_event = FileDeletedEvent("/path/blah.txt")
66    dir_cre_event = DirCreatedEvent("/path/blah.py")
67    file_cre_event = FileCreatedEvent("/path/blah.txt")
68    dir_mod_event = DirModifiedEvent("/path/blah.py")
69    file_mod_event = FileModifiedEvent("/path/blah.txt")
70    dir_mov_event = DirMovedEvent("/path/blah.py", "/path/blah")
71    file_mov_event = FileMovedEvent("/path/blah.txt", "/path/blah")
72    file_ope_event = FileOpenedEvent("/path/blah.txt")
73    file_clo_event = FileClosedEvent("/path/blah.txt")
74    file_clo_nw_event = FileClosedNoWriteEvent("/path/blah.txt")
75
76    all_events = [
77        dir_mod_event,
78        dir_del_event,
79        dir_cre_event,
80        dir_mov_event,
81        file_mod_event,
82        file_del_event,
83        file_cre_event,
84        file_mov_event,
85        file_ope_event,
86        file_clo_event,
87        file_clo_nw_event,
88    ]
89
90    handler = _TestableEventHandler()
91    for event in all_events:
92        handler.dispatch(event)
93