Development of an internal social media platform with personalised dashboards for students
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

bad_reversed_sequence.py 2.1KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. """ Checks that reversed() receive proper argument """
  2. # pylint: disable=missing-docstring
  3. # pylint: disable=too-few-public-methods,no-self-use,no-absolute-import
  4. from collections import deque
  5. __revision__ = 0
  6. class GoodReversed(object):
  7. """ Implements __reversed__ """
  8. def __reversed__(self):
  9. return [1, 2, 3]
  10. class SecondGoodReversed(object):
  11. """ Implements __len__ and __getitem__ """
  12. def __len__(self):
  13. return 3
  14. def __getitem__(self, index):
  15. return index
  16. class BadReversed(object):
  17. """ implements only len() """
  18. def __len__(self):
  19. return 3
  20. class SecondBadReversed(object):
  21. """ implements only __getitem__ """
  22. def __getitem__(self, index):
  23. return index
  24. class ThirdBadReversed(dict):
  25. """ dict subclass """
  26. def uninferable(seq):
  27. """ This can't be infered at this moment,
  28. make sure we don't have a false positive.
  29. """
  30. return reversed(seq)
  31. def test(path):
  32. """ test function """
  33. seq = reversed() # No argument given
  34. seq = reversed(None) # [bad-reversed-sequence]
  35. seq = reversed([1, 2, 3])
  36. seq = reversed((1, 2, 3))
  37. seq = reversed(set()) # [bad-reversed-sequence]
  38. seq = reversed({'a': 1, 'b': 2}) # [bad-reversed-sequence]
  39. seq = reversed(iter([1, 2, 3])) # [bad-reversed-sequence]
  40. seq = reversed(GoodReversed())
  41. seq = reversed(SecondGoodReversed())
  42. seq = reversed(BadReversed()) # [bad-reversed-sequence]
  43. seq = reversed(SecondBadReversed()) # [bad-reversed-sequence]
  44. seq = reversed(range(100))
  45. seq = reversed(ThirdBadReversed()) # [bad-reversed-sequence]
  46. seq = reversed(lambda: None) # [bad-reversed-sequence]
  47. seq = reversed(deque([]))
  48. seq = reversed("123")
  49. seq = uninferable([1, 2, 3])
  50. seq = reversed(path.split("/"))
  51. return seq
  52. def test_dict_ancestor_and_reversed():
  53. """Don't emit for subclasses of dict, with __reversed__ implemented."""
  54. from collections import OrderedDict
  55. class Child(dict):
  56. def __reversed__(self):
  57. return reversed(range(10))
  58. seq = reversed(OrderedDict())
  59. return reversed(Child()), seq