1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153
|
#! /usr/bin/env python
# -*- coding: utf-8 -*-
# vi:ts=4:et
import pycurl
import pytest
import unittest
class ExplicitConstructionCurlObjectTest(unittest.TestCase):
def test_close(self):
c = pycurl.Curl()
c.close()
def test_close_twice(self):
c = pycurl.Curl()
c.close()
c.close()
# positional arguments are rejected
def test_positional_arguments(self):
with pytest.raises(TypeError):
pycurl.Curl(1)
# keyword arguments are rejected
def test_keyword_arguments(self):
with pytest.raises(TypeError):
pycurl.Curl(a=1)
class CurlObjectTest(unittest.TestCase):
def setUp(self):
self.curl = pycurl.Curl()
def tearDown(self):
self.curl.close()
def test_set_attribute_curl(self):
self.instantiate_and_check(self.check_set_attribute, 'Curl')
def test_get_attribute_curl(self):
self.instantiate_and_check(self.check_get_attribute, 'Curl')
def test_get_missing_attribute_curl(self):
self.instantiate_and_check(self.check_get_missing_attribute, 'Curl')
def test_delete_attribute_curl(self):
self.instantiate_and_check(self.check_delete_attribute, 'Curl')
def test_delete_missing_attribute_curl(self):
self.instantiate_and_check(self.check_delete_missing_attribute, 'Curl')
def test_set_attribute_multi(self):
self.instantiate_and_check(self.check_set_attribute, 'CurlMulti')
def test_get_attribute_multi(self):
self.instantiate_and_check(self.check_get_attribute, 'CurlMulti')
def test_get_missing_attribute_curl_multi(self):
self.instantiate_and_check(self.check_get_missing_attribute, 'CurlMulti')
def test_delete_attribute_multi(self):
self.instantiate_and_check(self.check_delete_attribute, 'CurlMulti')
def test_delete_missing_attribute_curl_multi(self):
self.instantiate_and_check(self.check_delete_missing_attribute, 'CurlMulti')
def test_set_attribute_share(self):
self.instantiate_and_check(self.check_set_attribute, 'CurlShare')
def test_get_attribute_share(self):
self.instantiate_and_check(self.check_get_attribute, 'CurlShare')
def test_get_missing_attribute_curl_share(self):
self.instantiate_and_check(self.check_get_missing_attribute, 'CurlShare')
def test_delete_attribute_share(self):
self.instantiate_and_check(self.check_delete_attribute, 'CurlShare')
def test_delete_missing_attribute_curl_share(self):
self.instantiate_and_check(self.check_delete_missing_attribute, 'CurlShare')
def instantiate_and_check(self, fn, cls_name):
cls = getattr(pycurl, cls_name)
instance = cls()
try:
fn(instance)
finally:
instance.close()
def check_set_attribute(self, pycurl_obj):
assert not hasattr(pycurl_obj, 'attr')
pycurl_obj.attr = 1
assert hasattr(pycurl_obj, 'attr')
def check_get_attribute(self, pycurl_obj):
assert not hasattr(pycurl_obj, 'attr')
pycurl_obj.attr = 1
self.assertEqual(1, pycurl_obj.attr)
def check_get_missing_attribute(self, pycurl_obj):
try:
getattr(pycurl_obj, 'doesnotexist')
self.fail('Expected an AttributeError exception to be raised')
except AttributeError:
pass
def check_delete_attribute(self, pycurl_obj):
assert not hasattr(pycurl_obj, 'attr')
pycurl_obj.attr = 1
self.assertEqual(1, pycurl_obj.attr)
assert hasattr(pycurl_obj, 'attr')
del pycurl_obj.attr
assert not hasattr(pycurl_obj, 'attr')
def check_delete_missing_attribute(self, pycurl_obj):
try:
del pycurl_obj.doesnotexist
self.fail('Expected an AttributeError exception to be raised')
except AttributeError:
pass
def test_modify_attribute_curl(self):
self.check_modify_attribute(pycurl.Curl, 'READFUNC_PAUSE')
def test_modify_attribute_multi(self):
self.check_modify_attribute(pycurl.CurlMulti, 'E_MULTI_OK')
def test_modify_attribute_share(self):
self.check_modify_attribute(pycurl.CurlShare, 'SH_SHARE')
def check_modify_attribute(self, cls, name):
obj1 = cls()
obj2 = cls()
old_value = getattr(obj1, name)
self.assertNotEqual('helloworld', old_value)
# value should be identical to pycurl global
self.assertEqual(old_value, getattr(pycurl, name))
setattr(obj1, name, 'helloworld')
self.assertEqual('helloworld', getattr(obj1, name))
# change does not affect other existing objects
self.assertEqual(old_value, getattr(obj2, name))
# change does not affect objects created later
obj3 = cls()
self.assertEqual(old_value, getattr(obj3, name))
def test_bogus_attribute_access(self):
with pytest.raises(AttributeError, match='trying to obtain.*'):
self.curl.foo
def test_bogus_attribute_delete(self):
with pytest.raises(AttributeError, match='trying to delete.*'):
del self.curl.foo
|