diff options
Diffstat (limited to 'testing/web-platform/tests/tools/lint/fnmatch.py')
-rw-r--r-- | testing/web-platform/tests/tools/lint/fnmatch.py | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/testing/web-platform/tests/tools/lint/fnmatch.py b/testing/web-platform/tests/tools/lint/fnmatch.py new file mode 100644 index 0000000000..143cb436f2 --- /dev/null +++ b/testing/web-platform/tests/tools/lint/fnmatch.py @@ -0,0 +1,40 @@ +import fnmatch as _stdlib_fnmatch +import os + +MYPY = False +if MYPY: + # MYPY is set to True when run under Mypy. + from typing import Iterable + from typing import List + from typing import Text + + +__all__ = ["fnmatch", "fnmatchcase", "filter", "translate"] + + +def fnmatch(name, pat): + # type: (Text, Text) -> bool + name = os.path.normcase(name) + pat = os.path.normcase(pat) + return fnmatchcase(name, pat) + + +def fnmatchcase(name, pat): + # type: (Text, Text) -> bool + if '?' not in pat and '[' not in pat: + wildcards = pat.count("*") + if wildcards == 0: + return name == pat + elif wildcards == 1 and pat[0] == "*": + return name.endswith(pat[1:]) + elif wildcards == 1 and pat[-1] == "*": + return name.startswith(pat[:-1]) + return _stdlib_fnmatch.fnmatchcase(name, pat) + + +def filter(names, pat): + # type: (Iterable[Text], Text) -> List[Text] + return [n for n in names if fnmatch(n, pat)] + + +translate = _stdlib_fnmatch.translate |