summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/tools/lint/fnmatch.py
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/tools/lint/fnmatch.py')
-rw-r--r--testing/web-platform/tests/tools/lint/fnmatch.py40
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