You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
178 lines
5.6 KiB
178 lines
5.6 KiB
#!/usr/bin/env python
|
|
# Copyright 2020 The Pigweed Authors
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
|
# use this file except in compliance with the License. You may obtain a copy of
|
|
# the License at
|
|
#
|
|
# https://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
# License for the specific language governing permissions and limitations under
|
|
# the License.
|
|
"""Tests for pw_watch.minimal_watch_directories."""
|
|
|
|
import unittest
|
|
import tempfile
|
|
from pathlib import Path
|
|
|
|
from pw_watch import watch
|
|
|
|
|
|
class TestMinimalWatchDirectories(unittest.TestCase):
|
|
"""Tests for pw_watch.watch.minimal_watch_directories."""
|
|
def setUp(self):
|
|
self._tempdir = tempfile.TemporaryDirectory()
|
|
self._root = Path(self._tempdir.name)
|
|
|
|
def tearDown(self):
|
|
self._tempdir.cleanup()
|
|
|
|
def make_tree(self, *directories: str) -> None:
|
|
for directory in directories:
|
|
self._root.joinpath(directory).mkdir(parents=True)
|
|
|
|
def test_empty_directory(self):
|
|
subdirectories_to_watch = []
|
|
ans_subdirectories_to_watch = [(self._root, False)]
|
|
subdirectories_to_watch = watch.minimal_watch_directories(
|
|
self._root, 'f1')
|
|
|
|
self.assertEqual(set(subdirectories_to_watch),
|
|
set(ans_subdirectories_to_watch))
|
|
|
|
def test_non_exist_directories_to_exclude(self):
|
|
subdirectories_to_watch = []
|
|
exclude_list = ['f3']
|
|
self.make_tree('f1', 'f2')
|
|
ans_subdirectories_to_watch = [
|
|
(self._root / 'f1', True),
|
|
(self._root / 'f2', True),
|
|
(self._root, False),
|
|
]
|
|
subdirectories_to_watch = watch.minimal_watch_directories(
|
|
self._root, exclude_list)
|
|
|
|
self.assertEqual(set(subdirectories_to_watch),
|
|
set(ans_subdirectories_to_watch))
|
|
|
|
def test_one_layer_directories(self):
|
|
subdirectories_to_watch = []
|
|
exclude_list = ['f1']
|
|
self.make_tree(
|
|
'f1/f1',
|
|
'f1/f2',
|
|
'f2/f1',
|
|
)
|
|
ans_subdirectories_to_watch = [
|
|
(self._root / 'f2', True),
|
|
(self._root, False),
|
|
]
|
|
subdirectories_to_watch = watch.minimal_watch_directories(
|
|
self._root, exclude_list)
|
|
|
|
self.assertEqual(set(subdirectories_to_watch),
|
|
set(ans_subdirectories_to_watch))
|
|
|
|
def test_two_layers_direcories(self):
|
|
subdirectories_to_watch = []
|
|
exclude_list = ['f1/f2']
|
|
self.make_tree(
|
|
'f1/f1',
|
|
'f1/f2',
|
|
'f2/f1',
|
|
)
|
|
ans_subdirectories_to_watch = [
|
|
(self._root / 'f2', True),
|
|
(self._root / 'f1/f1', True),
|
|
(self._root, False),
|
|
(self._root / 'f1', False),
|
|
]
|
|
subdirectories_to_watch = watch.minimal_watch_directories(
|
|
self._root, exclude_list)
|
|
|
|
self.assertEqual(set(subdirectories_to_watch),
|
|
set(ans_subdirectories_to_watch))
|
|
|
|
def test_empty_exclude_list(self):
|
|
subdirectories_to_watch = []
|
|
exclude_list = []
|
|
self.make_tree(
|
|
'f1/f1',
|
|
'f1/f2',
|
|
'f2/f1',
|
|
)
|
|
ans_subdirectories_to_watch = [
|
|
(self._root / 'f2', True),
|
|
(self._root / 'f1', True),
|
|
(self._root, False),
|
|
]
|
|
subdirectories_to_watch = watch.minimal_watch_directories(
|
|
self._root, exclude_list)
|
|
|
|
self.assertEqual(set(subdirectories_to_watch),
|
|
set(ans_subdirectories_to_watch))
|
|
|
|
def test_multiple_directories_in_exclude_list(self):
|
|
"""test case for multiple directories to exclude"""
|
|
subdirectories_to_watch = []
|
|
exclude_list = [
|
|
'f1/f2',
|
|
'f3/f1',
|
|
'f3/f3',
|
|
]
|
|
self.make_tree(
|
|
'f1/f1',
|
|
'f1/f2',
|
|
'f2/f1',
|
|
'f3/f1',
|
|
'f3/f2',
|
|
'f3/f3',
|
|
)
|
|
ans_subdirectories_to_watch = [
|
|
(self._root / 'f2', True),
|
|
(self._root / 'f1/f1', True),
|
|
(self._root / 'f3/f2', True),
|
|
(self._root, False),
|
|
(self._root / 'f1', False),
|
|
(self._root / 'f3', False),
|
|
]
|
|
subdirectories_to_watch = watch.minimal_watch_directories(
|
|
self._root, exclude_list)
|
|
|
|
self.assertEqual(set(subdirectories_to_watch),
|
|
set(ans_subdirectories_to_watch))
|
|
|
|
def test_nested_sibling_exclusion(self):
|
|
subdirectories_to_watch = []
|
|
exclude_list = [
|
|
'f1/f1/f1/f1/f1',
|
|
'f1/f1/f1/f2',
|
|
]
|
|
self.make_tree(
|
|
'f1/f1/f1/f1/f1',
|
|
'f1/f1/f1/f1/f2',
|
|
'f1/f1/f1/f1/f3',
|
|
'f1/f1/f1/f2',
|
|
)
|
|
ans_subdirectories_to_watch = [
|
|
(self._root / 'f1/f1/f1/f1/f2', True),
|
|
(self._root / 'f1/f1/f1/f1/f3', True),
|
|
(self._root, False),
|
|
(self._root / 'f1', False),
|
|
(self._root / 'f1/f1', False),
|
|
(self._root / 'f1/f1/f1', False),
|
|
(self._root / 'f1/f1/f1/f1', False),
|
|
]
|
|
subdirectories_to_watch = watch.minimal_watch_directories(
|
|
self._root, exclude_list)
|
|
|
|
self.assertEqual(set(subdirectories_to_watch),
|
|
set(ans_subdirectories_to_watch))
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|