diff options
author | fsbs <fsbs@users.noreply.github.com> | 2021-10-21 14:40:22 +0000 |
---|---|---|
committer | fsbs <fsbs@users.noreply.github.com> | 2021-10-21 16:40:22 +0200 |
commit | 006a921f19f6c4f64d694c86346ad85ada2c8bb8 (patch) | |
tree | 676ec06452efab0e3b221f07b9ce9a24253c7edb | |
parent | d8f80cce196a1b36bff8b53caf925805e820aafb (diff) | |
download | pycurl-006a921f19f6c4f64d694c86346ad85ada2c8bb8.tar.gz |
Add tests for subclass support
-rw-r--r-- | tests/subclass_test.py | 88 |
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' |