(self)
| 1001 | self.assertNotIsInstance(ItBlocked(), Iterable) |
| 1002 | |
| 1003 | def test_Reversible(self): |
| 1004 | # Check some non-reversibles |
| 1005 | non_samples = [None, 42, 3.14, 1j, set(), frozenset()] |
| 1006 | for x in non_samples: |
| 1007 | self.assertNotIsInstance(x, Reversible) |
| 1008 | self.assertNotIsSubclass(type(x), Reversible) |
| 1009 | # Check some non-reversible iterables |
| 1010 | non_reversibles = [_test_gen(), (x for x in []), iter([]), reversed([])] |
| 1011 | for x in non_reversibles: |
| 1012 | self.assertNotIsInstance(x, Reversible) |
| 1013 | self.assertNotIsSubclass(type(x), Reversible) |
| 1014 | # Check some reversible iterables |
| 1015 | samples = [bytes(), str(), tuple(), list(), OrderedDict(), |
| 1016 | OrderedDict().keys(), OrderedDict().items(), |
| 1017 | OrderedDict().values(), Counter(), Counter().keys(), |
| 1018 | Counter().items(), Counter().values(), dict(), |
| 1019 | dict().keys(), dict().items(), dict().values()] |
| 1020 | for x in samples: |
| 1021 | self.assertIsInstance(x, Reversible) |
| 1022 | self.assertIsSubclass(type(x), Reversible) |
| 1023 | # Check also Mapping, MutableMapping, and Sequence |
| 1024 | self.assertIsSubclass(Sequence, Reversible) |
| 1025 | self.assertNotIsSubclass(Mapping, Reversible) |
| 1026 | self.assertNotIsSubclass(MutableMapping, Reversible) |
| 1027 | # Check direct subclassing |
| 1028 | class R(Reversible): |
| 1029 | def __iter__(self): |
| 1030 | return iter(list()) |
| 1031 | def __reversed__(self): |
| 1032 | return iter(list()) |
| 1033 | self.assertEqual(list(reversed(R())), []) |
| 1034 | self.assertNotIsSubclass(float, R) |
| 1035 | self.validate_abstract_methods(Reversible, '__reversed__', '__iter__') |
| 1036 | # Check reversible non-iterable (which is not Reversible) |
| 1037 | class RevNoIter: |
| 1038 | def __reversed__(self): return reversed([]) |
| 1039 | class RevPlusIter(RevNoIter): |
| 1040 | def __iter__(self): return iter([]) |
| 1041 | self.assertNotIsSubclass(RevNoIter, Reversible) |
| 1042 | self.assertNotIsInstance(RevNoIter(), Reversible) |
| 1043 | self.assertIsSubclass(RevPlusIter, Reversible) |
| 1044 | self.assertIsInstance(RevPlusIter(), Reversible) |
| 1045 | # Check None blocking |
| 1046 | class Rev: |
| 1047 | def __iter__(self): return iter([]) |
| 1048 | def __reversed__(self): return reversed([]) |
| 1049 | class RevItBlocked(Rev): |
| 1050 | __iter__ = None |
| 1051 | class RevRevBlocked(Rev): |
| 1052 | __reversed__ = None |
| 1053 | self.assertIsSubclass(Rev, Reversible) |
| 1054 | self.assertIsInstance(Rev(), Reversible) |
| 1055 | self.assertNotIsSubclass(RevItBlocked, Reversible) |
| 1056 | self.assertNotIsInstance(RevItBlocked(), Reversible) |
| 1057 | self.assertNotIsSubclass(RevRevBlocked, Reversible) |
| 1058 | self.assertNotIsInstance(RevRevBlocked(), Reversible) |
| 1059 | |
| 1060 | def test_Collection(self): |
nothing calls this directly
no test coverage detected