summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfsbs <fsbs@users.noreply.github.com>2021-10-21 14:40:22 +0000
committerfsbs <fsbs@users.noreply.github.com>2021-10-21 16:40:22 +0200
commit006a921f19f6c4f64d694c86346ad85ada2c8bb8 (patch)
tree676ec06452efab0e3b221f07b9ce9a24253c7edb
parentd8f80cce196a1b36bff8b53caf925805e820aafb (diff)
downloadpycurl-006a921f19f6c4f64d694c86346ad85ada2c8bb8.tar.gz
Add tests for subclass support
-rw-r--r--tests/subclass_test.py88
1 files changed, 88 insertions, 0 deletions
diff --git a/tests/subclass_test.py b/tests/subclass_test.py
new file mode 100644
index 0000000..fafc272
--- /dev/null
+++ b/tests/subclass_test.py
@@ -0,0 +1,88 @@
+#! /usr/bin/env python
+# -*- coding: utf-8 -*-
+# vi:ts=4:et
+
+try:
+ import unittest2 as unittest
+except ImportError:
+ import unittest
+import pycurl
+
+CLASSES = (pycurl.Curl, pycurl.CurlMulti, pycurl.CurlShare)
+
+class SubclassTest(unittest.TestCase):
+ def test_baseclass_init(self):
+ # base classes do not accept any arguments on initialization
+ for baseclass in CLASSES:
+ try:
+ baseclass(0)
+ except TypeError:
+ pass
+ else:
+ raise AssertionError('Base class accepted invalid args')
+ try:
+ baseclass(a=1)
+ except TypeError:
+ pass
+ else:
+ raise AssertionError('Base class accepted invalid kwargs')
+
+ def test_subclass_create(self):
+ for baseclass in CLASSES:
+ # test creation of a subclass
+ class MyCurlClass(baseclass):
+ pass
+ # test creation of its object
+ obj = MyCurlClass()
+ # must be of type subclass, but also an instance of base class
+ assert type(obj) == MyCurlClass
+ assert isinstance(obj, baseclass)
+
+ def test_subclass_init(self):
+ for baseclass in CLASSES:
+ class MyCurlClass(baseclass):
+ def __init__(self, x, y=4):
+ self.x = x
+ self.y = y
+ # subclass __init__ must be able to accept args and kwargs
+ obj = MyCurlClass(3)
+ assert obj.x == 3
+ assert obj.y == 4
+ obj = MyCurlClass(5, y=6)
+ assert obj.x == 5
+ assert obj.y == 6
+ # and it must throw TypeError if arguments don't match
+ try:
+ MyCurlClass(1, 2, 3, kwarg=4)
+ except TypeError:
+ pass
+ else:
+ raise AssertionError('Subclass accepted invalid arguments')
+
+ def test_subclass_method(self):
+ for baseclass in CLASSES:
+ class MyCurlClass(baseclass):
+ def my_method(self, x):
+ return x + 1
+ obj = MyCurlClass()
+ # methods must be able to accept arguments and return a value
+ assert obj.my_method(1) == 2
+
+ def test_subclass_method_override(self):
+ # setopt args for each base class
+ args = {
+ pycurl.Curl: (pycurl.VERBOSE, 1),
+ pycurl.CurlMulti: (pycurl.M_MAXCONNECTS, 3),
+ pycurl.CurlShare: (pycurl.SH_SHARE, pycurl.LOCK_DATA_COOKIE),
+ }
+ for baseclass in CLASSES:
+ class MyCurlClass(baseclass):
+ def setopt(self, option, value):
+ # base method must not be overwritten
+ assert super().setopt != self.setopt
+ # base method mut be callable, setopt must return None
+ assert super().setopt(option, value) is None
+ # return something else
+ return 'my setopt'
+ obj = MyCurlClass()
+ assert obj.setopt(*args[baseclass]) == 'my setopt'