summaryrefslogtreecommitdiff
path: root/pylint/test/functional/membership_protocol_py3.py
diff options
context:
space:
mode:
authorDmitry Pribysh <dmand@yandex.ru>2015-10-19 17:44:10 +0300
committerDmitry Pribysh <dmand@yandex.ru>2015-10-19 17:44:10 +0300
commit816d3212d15ba297aa3a234d7874974d9f39b4bd (patch)
tree2a55cd5bb12fc49ec47919c926dca12ebf2aa3ba /pylint/test/functional/membership_protocol_py3.py
parent5e649a112f60f3c330b5f7544b6e6286f983beca (diff)
downloadpylint-membership-test-checker.tar.gz
Add checker for membership rules and testsmembership-test-checker
Idea of checking is very simple: value used to the right of the 'in' operator should support membership test protocol (i.e. define either __contains__ or __iter__ or __getitem__). Fixes issue #589.
Diffstat (limited to 'pylint/test/functional/membership_protocol_py3.py')
-rw-r--r--pylint/test/functional/membership_protocol_py3.py36
1 files changed, 36 insertions, 0 deletions
diff --git a/pylint/test/functional/membership_protocol_py3.py b/pylint/test/functional/membership_protocol_py3.py
new file mode 100644
index 0000000..6a77f20
--- /dev/null
+++ b/pylint/test/functional/membership_protocol_py3.py
@@ -0,0 +1,36 @@
+# pylint: disable=missing-docstring,too-few-public-methods,no-init,no-self-use,unused-argument,pointless-statement,expression-not-assigned
+
+# metaclasses that support membership test protocol
+class MetaIterable(type):
+ def __iter__(cls):
+ return iter((1, 2, 3))
+
+class MetaOldIterable(type):
+ def __getitem__(cls, key):
+ if key < 10:
+ return key ** 2
+ else:
+ raise IndexError("bad index")
+
+class MetaContainer(type):
+ def __contains__(cls, key):
+ return False
+
+
+class IterableClass(metaclass=MetaOldIterable):
+ pass
+
+class OldIterableClass(metaclass=MetaOldIterable):
+ pass
+
+class ContainerClass(metaclass=MetaContainer):
+ pass
+
+
+def test():
+ 1 in IterableClass
+ 1 in OldIterableClass
+ 1 in ContainerClass
+ 1 in IterableClass() # [unsupported-membership-test]
+ 1 in OldIterableClass() # [unsupported-membership-test]
+ 1 in ContainerClass() # [unsupported-membership-test]