mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-11-09 21:00:42 +02:00
Depends on D8844 Differential Revision: https://phabricator.services.mozilla.com/D5863 --HG-- extra : moz-landing-system : lando
111 lines
3.1 KiB
Python
111 lines
3.1 KiB
Python
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
|
|
from __future__ import absolute_import, print_function
|
|
|
|
import os
|
|
from fnmatch import fnmatch
|
|
|
|
import mozunit
|
|
import pytest
|
|
|
|
from mozlint import pathutils
|
|
|
|
here = os.path.abspath(os.path.dirname(__file__))
|
|
root = os.path.join(here, 'filter')
|
|
|
|
|
|
def assert_paths(a, b):
|
|
def normalize(p):
|
|
if not os.path.isabs(p):
|
|
p = os.path.join(root, p)
|
|
return os.path.normpath(p)
|
|
assert set(map(normalize, a)) == set(map(normalize, b))
|
|
|
|
|
|
TEST_CASES = (
|
|
{
|
|
'paths': ['a.js', 'subdir1/subdir3/d.js'],
|
|
'include': ['.'],
|
|
'exclude': ['subdir1'],
|
|
'expected': ['a.js'],
|
|
},
|
|
{
|
|
'paths': ['a.js', 'subdir1/subdir3/d.js'],
|
|
'include': ['subdir1/subdir3'],
|
|
'exclude': ['subdir1'],
|
|
'expected': ['subdir1/subdir3/d.js'],
|
|
},
|
|
{
|
|
'paths': ['.'],
|
|
'include': ['.'],
|
|
'exclude': ['**/c.py', 'subdir1/subdir3'],
|
|
'extensions': ['py'],
|
|
'expected': ['.'],
|
|
'expected_exclude': ['subdir2/c.py', 'subdir1/subdir3'],
|
|
},
|
|
{
|
|
'paths': ['a.py', 'a.js', 'subdir1/b.py', 'subdir2/c.py', 'subdir1/subdir3/d.py'],
|
|
'include': ['.'],
|
|
'exclude': ['**/c.py', 'subdir1/subdir3'],
|
|
'extensions': ['py'],
|
|
'expected': ['a.py', 'subdir1/b.py'],
|
|
},
|
|
{
|
|
'paths': ['a.py', 'a.js', 'subdir2'],
|
|
'include': ['.'],
|
|
'exclude': [],
|
|
'extensions': ['py'],
|
|
'expected': ['a.py', 'subdir2'],
|
|
},
|
|
{
|
|
'paths': ['subdir1'],
|
|
'include': ['.'],
|
|
'exclude': ['subdir1/subdir3'],
|
|
'extensions': ['py'],
|
|
'expected': ['subdir1'],
|
|
'expected_exclude': ['subdir1/subdir3'],
|
|
},
|
|
)
|
|
|
|
|
|
@pytest.mark.parametrize('test', TEST_CASES)
|
|
def test_filterpaths(test):
|
|
expected = test.pop('expected')
|
|
expected_exclude = test.pop('expected_exclude', [])
|
|
|
|
paths, exclude = pathutils.filterpaths(root, **test)
|
|
assert_paths(paths, expected)
|
|
assert_paths(exclude, expected_exclude)
|
|
|
|
|
|
@pytest.mark.parametrize('paths,expected', [
|
|
(['subdir1/*'], ['subdir1']),
|
|
(['subdir2/*'], ['subdir2']),
|
|
(['subdir1/*.*', 'subdir1/subdir3/*', 'subdir2/*'], ['subdir1', 'subdir2']),
|
|
([root + '/*', 'subdir1/*.*', 'subdir1/subdir3/*', 'subdir2/*'], [root]),
|
|
(['subdir1/b.py', 'subdir1/subdir3'], ['subdir1/b.py', 'subdir1/subdir3']),
|
|
(['subdir1/b.py', 'subdir1/b.js'], ['subdir1/b.py', 'subdir1/b.js']),
|
|
(['subdir1/subdir3'], ['subdir1/subdir3']),
|
|
])
|
|
def test_collapse(paths, expected):
|
|
os.chdir(root)
|
|
|
|
inputs = []
|
|
for path in paths:
|
|
base, name = os.path.split(path)
|
|
if '*' in name:
|
|
for n in os.listdir(base):
|
|
if not fnmatch(n, name):
|
|
continue
|
|
inputs.append(os.path.join(base, n))
|
|
else:
|
|
inputs.append(path)
|
|
|
|
print("inputs: {}".format(inputs))
|
|
assert_paths(pathutils.collapse(inputs), expected)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
mozunit.main()
|