1
from _testcapi import test_structmembersType, \
1
from _testcapi import _test_structmembersType, \
2
2
CHAR_MAX, CHAR_MIN, UCHAR_MAX, \
3
3
SHRT_MAX, SHRT_MIN, USHRT_MAX, \
4
4
INT_MAX, INT_MIN, UINT_MAX, \
5
5
LONG_MAX, LONG_MIN, ULONG_MAX, \
6
LLONG_MAX, LLONG_MIN, ULLONG_MAX
6
LLONG_MAX, LLONG_MIN, ULLONG_MAX, \
7
PY_SSIZE_T_MAX, PY_SSIZE_T_MIN
8
9
import warnings, unittest, sys
9
10
from test import support
11
ts=test_structmembersType(False, 1, 2, 3, 4, 5, 6, 7, 8,
12
9.99999, 10.1010101010)
12
ts=_test_structmembersType(False, # T_BOOL
23
10.1010101010, # T_DOUBLE
24
"hi" # T_STRING_INPLACE
14
27
class ReadWriteTests(unittest.TestCase):
17
31
self.assertEquals(ts.T_BOOL, True)
19
33
self.assertEquals(ts.T_BOOL, False)
20
34
self.assertRaises(TypeError, setattr, ts, 'T_BOOL', 1)
22
37
ts.T_BYTE = CHAR_MAX
23
38
self.assertEquals(ts.T_BYTE, CHAR_MAX)
24
39
ts.T_BYTE = CHAR_MIN
47
65
ts.T_ULONG = ULONG_MAX
48
66
self.assertEquals(ts.T_ULONG, ULONG_MAX)
50
## T_LONGLONG and T_ULONGLONG may not be present on some platforms
68
def test_py_ssize_t(self):
69
ts.T_PYSSIZET = PY_SSIZE_T_MAX
70
self.assertEquals(ts.T_PYSSIZET, PY_SSIZE_T_MAX)
71
ts.T_PYSSIZET = PY_SSIZE_T_MIN
72
self.assertEquals(ts.T_PYSSIZET, PY_SSIZE_T_MIN)
74
@unittest.skipUnless(hasattr(ts, "T_LONGLONG"), "long long not present")
75
def test_longlong(self):
76
ts.T_LONGLONG = LLONG_MAX
77
self.assertEquals(ts.T_LONGLONG, LLONG_MAX)
78
ts.T_LONGLONG = LLONG_MIN
79
self.assertEquals(ts.T_LONGLONG, LLONG_MIN)
81
ts.T_ULONGLONG = ULLONG_MAX
82
self.assertEquals(ts.T_ULONGLONG, ULLONG_MAX)
84
## make sure these will accept a plain int as well as a long
86
self.assertEquals(ts.T_LONGLONG, 3)
88
self.assertEquals(ts.T_ULONGLONG, 4)
90
def test_bad_assignments(self):
91
integer_attributes = [
94
'T_SHORT', 'T_USHORT',
51
99
if hasattr(ts, 'T_LONGLONG'):
52
ts.T_LONGLONG = LLONG_MAX
53
self.assertEquals(ts.T_LONGLONG, LLONG_MAX)
54
ts.T_LONGLONG = LLONG_MIN
55
self.assertEquals(ts.T_LONGLONG, LLONG_MIN)
57
ts.T_ULONGLONG = ULLONG_MAX
58
self.assertEquals(ts.T_ULONGLONG, ULLONG_MAX)
60
## make sure these will accept a plain int as well as a long
62
self.assertEquals(ts.T_LONGLONG, 3)
64
self.assertEquals(ts.T_ULONGLONG, 4)
100
integer_attributes.extend(['T_LONGLONG', 'T_ULONGLONG'])
102
# issue8014: this produced 'bad argument to internal function'
104
for nonint in None, 3.2j, "full of eels", {}, []:
105
for attr in integer_attributes:
106
self.assertRaises(TypeError, setattr, ts, attr, nonint)
108
def test_inplace_string(self):
109
self.assertEquals(ts.T_STRING_INPLACE, "hi")
110
self.assertRaises(TypeError, setattr, ts, "T_STRING_INPLACE", "s")
111
self.assertRaises(TypeError, delattr, ts, "T_STRING_INPLACE")
67
114
class TestWarnings(unittest.TestCase):