diff options
Diffstat (limited to 'tests/functional/b/bad_reversed_sequence.py')
| -rw-r--r-- | tests/functional/b/bad_reversed_sequence.py | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/tests/functional/b/bad_reversed_sequence.py b/tests/functional/b/bad_reversed_sequence.py new file mode 100644 index 000000000..6cfac5bed --- /dev/null +++ b/tests/functional/b/bad_reversed_sequence.py @@ -0,0 +1,84 @@ +""" Checks that reversed() receive proper argument """ +# pylint: disable=missing-docstring, useless-object-inheritance +# pylint: disable=too-few-public-methods,no-self-use,no-absolute-import +from collections import deque + +__revision__ = 0 + +class GoodReversed(object): + """ Implements __reversed__ """ + def __reversed__(self): + return [1, 2, 3] + +class SecondGoodReversed(object): + """ Implements __len__ and __getitem__ """ + def __len__(self): + return 3 + + def __getitem__(self, index): + return index + +class BadReversed(object): + """ implements only len() """ + def __len__(self): + return 3 + +class SecondBadReversed(object): + """ implements only __getitem__ """ + def __getitem__(self, index): + return index + +class ThirdBadReversed(dict): + """ dict subclass """ + +def uninferable(seq): + """ This can't be infered at this moment, + make sure we don't have a false positive. + """ + return reversed(seq) + +def test(path): + """ test function """ + seq = reversed() # No argument given + seq = reversed(None) # [bad-reversed-sequence] + seq = reversed([1, 2, 3]) + seq = reversed((1, 2, 3)) + seq = reversed(set()) # [bad-reversed-sequence] + seq = reversed({'a': 1, 'b': 2}) # [bad-reversed-sequence] + seq = reversed(iter([1, 2, 3])) # [bad-reversed-sequence] + seq = reversed(GoodReversed()) + seq = reversed(SecondGoodReversed()) + seq = reversed(BadReversed()) # [bad-reversed-sequence] + seq = reversed(SecondBadReversed()) # [bad-reversed-sequence] + seq = reversed(range(100)) + seq = reversed(ThirdBadReversed()) # [bad-reversed-sequence] + seq = reversed(lambda: None) # [bad-reversed-sequence] + seq = reversed(deque([])) + seq = reversed("123") + seq = uninferable([1, 2, 3]) + seq = reversed(path.split("/")) + return seq + +def test_dict_ancestor_and_reversed(): + """Don't emit for subclasses of dict, with __reversed__ implemented.""" + from collections import OrderedDict + + class Child(dict): + def __reversed__(self): + return reversed(range(10)) + + seq = reversed(OrderedDict()) + return reversed(Child()), seq + + +def test_dont_emit_for_reversing_enums(): + """Don't emit when reversing enum classes""" + from enum import IntEnum + + class Color(IntEnum): + RED = 1 + GREEN = 2 + BLUE = 3 + + for color in reversed(Color): + yield color |
