1 # Copyright 2020 The Pigweed Authors
3 # Licensed under the Apache License, Version 2.0 (the "License"); you may not
4 # use this file except in compliance with the License. You may obtain a copy of
7 # https://www.apache.org/licenses/LICENSE-2.0
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11 # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12 # License for the specific language governing permissions and limitations under
14 """Tests for pw_watch.minimal_watch_directories."""
19 from pathlib import Path
21 import pw_watch.watch as watch
24 def make_tree(root, directories):
25 for directory in directories:
26 os.mkdir(Path(root, directory))
29 class TestMinimalWatchDirectories(unittest.TestCase):
30 """Tests for pw_watch.watch.minimal_watch_directories."""
31 def test_empty_directory(self):
32 subdirectories_to_watch = []
33 with tempfile.TemporaryDirectory() as tmpdir:
34 ans_subdirectories_to_watch = [(Path(tmpdir), False)]
35 subdirectories_to_watch = \
36 watch.minimal_watch_directories(tmpdir, 'f1')
38 self.assertEqual(set(subdirectories_to_watch),
39 set(ans_subdirectories_to_watch))
41 def test_non_exist_directories_to_exclude(self):
42 subdirectories_to_watch = []
44 with tempfile.TemporaryDirectory() as tmpdir:
45 make_tree(tmpdir, ['f1', 'f2'])
46 ans_subdirectories_to_watch = [
47 (Path(tmpdir, 'f1'), True),
48 (Path(tmpdir, 'f2'), True),
49 (Path(tmpdir), False),
51 subdirectories_to_watch = \
52 watch.minimal_watch_directories(tmpdir, exclude_list)
54 self.assertEqual(set(subdirectories_to_watch),
55 set(ans_subdirectories_to_watch))
57 def test_one_layer_directories(self):
58 subdirectories_to_watch = []
60 with tempfile.TemporaryDirectory() as tmpdir:
68 ans_subdirectories_to_watch = [
69 (Path(tmpdir, 'f2'), True),
70 (Path(tmpdir), False),
72 subdirectories_to_watch = \
73 watch.minimal_watch_directories(tmpdir, exclude_list)
75 self.assertEqual(set(subdirectories_to_watch),
76 set(ans_subdirectories_to_watch))
78 def test_two_layers_direcories(self):
79 subdirectories_to_watch = []
80 exclude_list = ['f1/f2']
81 with tempfile.TemporaryDirectory() as tmpdir:
89 ans_subdirectories_to_watch = [
90 (Path(tmpdir, 'f2'), True),
91 (Path(tmpdir, 'f1/f1'), True),
92 (Path(tmpdir), False),
93 (Path(tmpdir, 'f1'), False),
95 subdirectories_to_watch = \
96 watch.minimal_watch_directories(tmpdir, exclude_list)
98 self.assertEqual(set(subdirectories_to_watch),
99 set(ans_subdirectories_to_watch))
101 def test_empty_exclude_list(self):
102 subdirectories_to_watch = []
104 with tempfile.TemporaryDirectory() as tmpdir:
112 ans_subdirectories_to_watch = [
113 (Path(tmpdir, 'f2'), True),
114 (Path(tmpdir, 'f1'), True),
115 (Path(tmpdir), False),
117 subdirectories_to_watch = \
118 watch.minimal_watch_directories(tmpdir, exclude_list)
120 self.assertEqual(set(subdirectories_to_watch),
121 set(ans_subdirectories_to_watch))
123 def test_multiple_directories_in_exclude_list(self):
124 """test case for multiple directories to exclude"""
125 subdirectories_to_watch = []
131 with tempfile.TemporaryDirectory() as tmpdir:
133 'f1', 'f1/f1', 'f1/f2', 'f2', 'f2/f1', 'f3', 'f3/f1', 'f3/f2',
136 ans_subdirectories_to_watch = [
137 (Path(tmpdir, 'f2'), True),
138 (Path(tmpdir, 'f1/f1'), True),
139 (Path(tmpdir, 'f3/f2'), True),
140 (Path(tmpdir), False),
141 (Path(tmpdir, 'f1'), False),
142 (Path(tmpdir, 'f3'), False),
144 subdirectories_to_watch = \
145 watch.minimal_watch_directories(tmpdir, exclude_list)
147 self.assertEqual(set(subdirectories_to_watch),
148 set(ans_subdirectories_to_watch))
150 def test_nested_sibling_exclusion(self):
151 subdirectories_to_watch = []
156 with tempfile.TemporaryDirectory() as tmpdir:
167 ans_subdirectories_to_watch = [
168 (Path(tmpdir, 'f1/f1/f1/f1/f2'), True),
169 (Path(tmpdir, 'f1/f1/f1/f1/f3'), True),
170 (Path(tmpdir), False),
171 (Path(tmpdir, 'f1'), False),
172 (Path(tmpdir, 'f1/f1'), False),
173 (Path(tmpdir, 'f1/f1/f1'), False),
174 (Path(tmpdir, 'f1/f1/f1/f1'), False),
176 subdirectories_to_watch = \
177 watch.minimal_watch_directories(tmpdir, exclude_list)
179 self.assertEqual(set(subdirectories_to_watch),
180 set(ans_subdirectories_to_watch))
183 if __name__ == '__main__':