gecko-dev/python/mozlint/test/test_pathutils.py
Andrew Halberstadt 80db4d8fe5 Bug 1494069 - [mozlint] Verify the expected_exclude paths in test_filterpaths, r=rwood
Depends on D8844

Differential Revision: https://phabricator.services.mozilla.com/D5863

--HG--
extra : moz-landing-system : lando
2018-10-16 21:04:15 +00:00

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()