mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-11-13 06:38:48 +02:00
We were currently adding exclude paths to the "discard" set if the path contains the include, but we weren't adding them if the include contains the path. Depends on D5863 Differential Revision: https://phabricator.services.mozilla.com/D8845 --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()
|