Add tests for _filter_by_types

Adds a test for python and bash `types` using identify per interpreter
interpretation.

The python test succeeds with a false positive. The bash test identifies
the bug, where a comparison happens between `tags >= types`.

Tags is the tag list from identify, types is the value passed in from
configuration file as `acceptable types`.

The `tags(List) >= types(FrozenSet)` does a sort comparison of the two sequences
as evidenced by this code sample (which should return True):

```
>>> types = frozenset(['a'])
>>> tags = ['bash']
>>> tags >= types
True
```

Note: In 2.7, I cannot get this to return anything other than True.
Including the empty case:
```
>>> [] > frozenset()
True
```

Which means to me that a list is always >= a frozenset in Python 2.7.

In Python 3.5, I see errors when comparing a List to a FrozenSet. So
thankfully the interpreter is stricter in this case.

```
>>> [] >= frozenset()
TypeError: unorderable types: list() >= frozenset()
```
This commit is contained in:
Zander Hill 2018-05-03 11:46:07 +01:00
parent a9b3ff4d77
commit 29d66f470d
2 changed files with 20 additions and 2 deletions

View file

@ -48,11 +48,14 @@ def _filter_by_include_exclude(filenames, include, exclude):
}
def _filter_by_types(filenames, types, exclude_types):
def _filter_by_types(filenames,
types,
exclude_types,
get_tags=tags_from_path):
types, exclude_types = frozenset(types), frozenset(exclude_types)
ret = []
for filename in filenames:
tags = tags_from_path(filename)
tags = get_tags(filename)
if tags >= types and not tags & exclude_types:
ret.append(filename)
return tuple(ret)