Fix for x86_64 build fail
[platform/upstream/connectedhomeip.git] / third_party / pigweed / repo / pw_watch / py / pw_watch / watch_test.py
1 # Copyright 2020 The Pigweed Authors
2 #
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
5 # the License at
6 #
7 #     https://www.apache.org/licenses/LICENSE-2.0
8 #
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
13 # the License.
14 """Tests for pw_watch.minimal_watch_directories."""
15
16 import unittest
17 import os
18 import tempfile
19 from pathlib import Path
20
21 import pw_watch.watch as watch
22
23
24 def make_tree(root, directories):
25     for directory in directories:
26         os.mkdir(Path(root, directory))
27
28
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')
37
38         self.assertEqual(set(subdirectories_to_watch),
39                          set(ans_subdirectories_to_watch))
40
41     def test_non_exist_directories_to_exclude(self):
42         subdirectories_to_watch = []
43         exclude_list = ['f3']
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),
50             ]
51             subdirectories_to_watch = \
52                 watch.minimal_watch_directories(tmpdir, exclude_list)
53
54         self.assertEqual(set(subdirectories_to_watch),
55                          set(ans_subdirectories_to_watch))
56
57     def test_one_layer_directories(self):
58         subdirectories_to_watch = []
59         exclude_list = ['f1']
60         with tempfile.TemporaryDirectory() as tmpdir:
61             make_tree(tmpdir, [
62                 'f1',
63                 'f1/f1',
64                 'f1/f2',
65                 'f2',
66                 'f2/f1',
67             ])
68             ans_subdirectories_to_watch = [
69                 (Path(tmpdir, 'f2'), True),
70                 (Path(tmpdir), False),
71             ]
72             subdirectories_to_watch = \
73                 watch.minimal_watch_directories(tmpdir, exclude_list)
74
75         self.assertEqual(set(subdirectories_to_watch),
76                          set(ans_subdirectories_to_watch))
77
78     def test_two_layers_direcories(self):
79         subdirectories_to_watch = []
80         exclude_list = ['f1/f2']
81         with tempfile.TemporaryDirectory() as tmpdir:
82             make_tree(tmpdir, [
83                 'f1',
84                 'f1/f1',
85                 'f1/f2',
86                 'f2',
87                 'f2/f1',
88             ])
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),
94             ]
95             subdirectories_to_watch = \
96                 watch.minimal_watch_directories(tmpdir, exclude_list)
97
98         self.assertEqual(set(subdirectories_to_watch),
99                          set(ans_subdirectories_to_watch))
100
101     def test_empty_exclude_list(self):
102         subdirectories_to_watch = []
103         exclude_list = []
104         with tempfile.TemporaryDirectory() as tmpdir:
105             make_tree(tmpdir, [
106                 'f1',
107                 'f1/f1',
108                 'f1/f2',
109                 'f2',
110                 'f2/f1',
111             ])
112             ans_subdirectories_to_watch = [
113                 (Path(tmpdir, 'f2'), True),
114                 (Path(tmpdir, 'f1'), True),
115                 (Path(tmpdir), False),
116             ]
117             subdirectories_to_watch = \
118                 watch.minimal_watch_directories(tmpdir, exclude_list)
119
120         self.assertEqual(set(subdirectories_to_watch),
121                          set(ans_subdirectories_to_watch))
122
123     def test_multiple_directories_in_exclude_list(self):
124         """test case for multiple directories to exclude"""
125         subdirectories_to_watch = []
126         exclude_list = [
127             'f1/f2',
128             'f3/f1',
129             'f3/f3',
130         ]
131         with tempfile.TemporaryDirectory() as tmpdir:
132             make_tree(tmpdir, [
133                 'f1', 'f1/f1', 'f1/f2', 'f2', 'f2/f1', 'f3', 'f3/f1', 'f3/f2',
134                 'f3/f3'
135             ])
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),
143             ]
144             subdirectories_to_watch = \
145                 watch.minimal_watch_directories(tmpdir, exclude_list)
146
147         self.assertEqual(set(subdirectories_to_watch),
148                          set(ans_subdirectories_to_watch))
149
150     def test_nested_sibling_exclusion(self):
151         subdirectories_to_watch = []
152         exclude_list = [
153             'f1/f1/f1/f1/f1',
154             'f1/f1/f1/f2',
155         ]
156         with tempfile.TemporaryDirectory() as tmpdir:
157             make_tree(tmpdir, [
158                 'f1',
159                 'f1/f1',
160                 'f1/f1/f1',
161                 'f1/f1/f1/f1',
162                 'f1/f1/f1/f1/f1',
163                 'f1/f1/f1/f1/f2',
164                 'f1/f1/f1/f1/f3',
165                 'f1/f1/f1/f2',
166             ])
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),
175             ]
176             subdirectories_to_watch = \
177                 watch.minimal_watch_directories(tmpdir, exclude_list)
178
179         self.assertEqual(set(subdirectories_to_watch),
180                          set(ans_subdirectories_to_watch))
181
182
183 if __name__ == '__main__':
184     unittest.main()