| from __future__ import annotations |
| |
| import pytest |
| |
| from watchdog.utils.patterns import _match_path, filter_paths, match_any_paths |
| |
| |
| @pytest.mark.parametrize( |
| ("raw_path", "included_patterns", "excluded_patterns", "case_sensitive", "expected"), |
| [ |
| ("/users/gorakhargosh/foobar.py", {"*.py"}, {"*.PY"}, True, True), |
| ("/users/gorakhargosh/", {"*.py"}, {"*.txt"}, False, False), |
| ("/users/gorakhargosh/foobar.py", {"*.py"}, {"*.PY"}, False, ValueError), |
| ], |
| ) |
| def test_match_path(raw_path, included_patterns, excluded_patterns, case_sensitive, expected): |
| if expected is ValueError: |
| with pytest.raises(expected): |
| _match_path(raw_path, included_patterns, excluded_patterns, case_sensitive=case_sensitive) |
| else: |
| assert _match_path(raw_path, included_patterns, excluded_patterns, case_sensitive=case_sensitive) is expected |
| |
| |
| @pytest.mark.parametrize( |
| ("included_patterns", "excluded_patterns", "case_sensitive", "expected"), |
| [ |
| (None, None, True, None), |
| (None, None, False, None), |
| ( |
| ["*.py", "*.conf"], |
| ["*.status"], |
| True, |
| {"/users/gorakhargosh/foobar.py", "/etc/pdnsd.conf"}, |
| ), |
| ], |
| ) |
| def test_filter_paths(included_patterns, excluded_patterns, case_sensitive, expected): |
| pathnames = { |
| "/users/gorakhargosh/foobar.py", |
| "/var/cache/pdnsd.status", |
| "/etc/pdnsd.conf", |
| "/usr/local/bin/python", |
| } |
| actual = set( |
| filter_paths( |
| pathnames, |
| included_patterns=included_patterns, |
| excluded_patterns=excluded_patterns, |
| case_sensitive=case_sensitive, |
| ) |
| ) |
| assert actual == expected if expected else pathnames |
| |
| |
| @pytest.mark.parametrize( |
| ("included_patterns", "excluded_patterns", "case_sensitive", "expected"), |
| [ |
| (None, None, True, True), |
| (None, None, False, True), |
| (["*py", "*.conf"], ["*.status"], True, True), |
| (["*.txt"], None, False, False), |
| (["*.txt"], None, True, False), |
| ], |
| ) |
| def test_match_any_paths(included_patterns, excluded_patterns, case_sensitive, expected): |
| pathnames = { |
| "/users/gorakhargosh/foobar.py", |
| "/var/cache/pdnsd.status", |
| "/etc/pdnsd.conf", |
| "/usr/local/bin/python", |
| } |
| assert ( |
| match_any_paths( |
| pathnames, |
| included_patterns=included_patterns, |
| excluded_patterns=excluded_patterns, |
| case_sensitive=case_sensitive, |
| ) |
| == expected |
| ) |