annotate Lib/test/test_getargs2.py @ 87690:66c1c9f32567 default tip

Add use_weakref option to functools.lru_cache The use_weakref option makes lru_cache create weak references to the function arguments when creating the cache key, which prevents them from staying in the memory forever even after all other references to them are gone. This is a proof of concept for http://bugs.python.org/issue19859
author Radomir Dopieralski <devel@sheep.art.pl>
date Tue, 03 Dec 2013 16:02:48 +0100
parents 05f7883ee92d
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents:
diff changeset
1 import unittest
47201
9c930a32cebb #2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents: 46533
diff changeset
2 from test import support
75842
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 71543
diff changeset
3 from _testcapi import getargs_keywords, getargs_keyword_only
84108
05f7883ee92d Update various test modules to use unittest.main() for test discovery
Brett Cannon <brett@python.org>
parents: 82957
diff changeset
4 try:
05f7883ee92d Update various test modules to use unittest.main() for test discovery
Brett Cannon <brett@python.org>
parents: 82957
diff changeset
5 from _testcapi import getargs_L, getargs_K
05f7883ee92d Update various test modules to use unittest.main() for test discovery
Brett Cannon <brett@python.org>
parents: 82957
diff changeset
6 except ImportError:
05f7883ee92d Update various test modules to use unittest.main() for test discovery
Brett Cannon <brett@python.org>
parents: 82957
diff changeset
7 getargs_L = None # PY_LONG_LONG not available
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents:
diff changeset
8
82957
313bcff51900 Issue #17516: use comment syntax for comments, instead of multiline string
Victor Stinner <victor.stinner@gmail.com>
parents: 76776
diff changeset
9 # > How about the following counterproposal. This also changes some of
313bcff51900 Issue #17516: use comment syntax for comments, instead of multiline string
Victor Stinner <victor.stinner@gmail.com>
parents: 76776
diff changeset
10 # > the other format codes to be a little more regular.
313bcff51900 Issue #17516: use comment syntax for comments, instead of multiline string
Victor Stinner <victor.stinner@gmail.com>
parents: 76776
diff changeset
11 # >
313bcff51900 Issue #17516: use comment syntax for comments, instead of multiline string
Victor Stinner <victor.stinner@gmail.com>
parents: 76776
diff changeset
12 # > Code C type Range check
313bcff51900 Issue #17516: use comment syntax for comments, instead of multiline string
Victor Stinner <victor.stinner@gmail.com>
parents: 76776
diff changeset
13 # >
313bcff51900 Issue #17516: use comment syntax for comments, instead of multiline string
Victor Stinner <victor.stinner@gmail.com>
parents: 76776
diff changeset
14 # > b unsigned char 0..UCHAR_MAX
313bcff51900 Issue #17516: use comment syntax for comments, instead of multiline string
Victor Stinner <victor.stinner@gmail.com>
parents: 76776
diff changeset
15 # > h signed short SHRT_MIN..SHRT_MAX
313bcff51900 Issue #17516: use comment syntax for comments, instead of multiline string
Victor Stinner <victor.stinner@gmail.com>
parents: 76776
diff changeset
16 # > B unsigned char none **
313bcff51900 Issue #17516: use comment syntax for comments, instead of multiline string
Victor Stinner <victor.stinner@gmail.com>
parents: 76776
diff changeset
17 # > H unsigned short none **
313bcff51900 Issue #17516: use comment syntax for comments, instead of multiline string
Victor Stinner <victor.stinner@gmail.com>
parents: 76776
diff changeset
18 # > k * unsigned long none
313bcff51900 Issue #17516: use comment syntax for comments, instead of multiline string
Victor Stinner <victor.stinner@gmail.com>
parents: 76776
diff changeset
19 # > I * unsigned int 0..UINT_MAX
313bcff51900 Issue #17516: use comment syntax for comments, instead of multiline string
Victor Stinner <victor.stinner@gmail.com>
parents: 76776
diff changeset
20 #
313bcff51900 Issue #17516: use comment syntax for comments, instead of multiline string
Victor Stinner <victor.stinner@gmail.com>
parents: 76776
diff changeset
21 #
313bcff51900 Issue #17516: use comment syntax for comments, instead of multiline string
Victor Stinner <victor.stinner@gmail.com>
parents: 76776
diff changeset
22 # > i int INT_MIN..INT_MAX
313bcff51900 Issue #17516: use comment syntax for comments, instead of multiline string
Victor Stinner <victor.stinner@gmail.com>
parents: 76776
diff changeset
23 # > l long LONG_MIN..LONG_MAX
313bcff51900 Issue #17516: use comment syntax for comments, instead of multiline string
Victor Stinner <victor.stinner@gmail.com>
parents: 76776
diff changeset
24 #
313bcff51900 Issue #17516: use comment syntax for comments, instead of multiline string
Victor Stinner <victor.stinner@gmail.com>
parents: 76776
diff changeset
25 # > K * unsigned long long none
313bcff51900 Issue #17516: use comment syntax for comments, instead of multiline string
Victor Stinner <victor.stinner@gmail.com>
parents: 76776
diff changeset
26 # > L long long LLONG_MIN..LLONG_MAX
313bcff51900 Issue #17516: use comment syntax for comments, instead of multiline string
Victor Stinner <victor.stinner@gmail.com>
parents: 76776
diff changeset
27 #
313bcff51900 Issue #17516: use comment syntax for comments, instead of multiline string
Victor Stinner <victor.stinner@gmail.com>
parents: 76776
diff changeset
28 # > Notes:
313bcff51900 Issue #17516: use comment syntax for comments, instead of multiline string
Victor Stinner <victor.stinner@gmail.com>
parents: 76776
diff changeset
29 # >
313bcff51900 Issue #17516: use comment syntax for comments, instead of multiline string
Victor Stinner <victor.stinner@gmail.com>
parents: 76776
diff changeset
30 # > * New format codes.
313bcff51900 Issue #17516: use comment syntax for comments, instead of multiline string
Victor Stinner <victor.stinner@gmail.com>
parents: 76776
diff changeset
31 # >
313bcff51900 Issue #17516: use comment syntax for comments, instead of multiline string
Victor Stinner <victor.stinner@gmail.com>
parents: 76776
diff changeset
32 # > ** Changed from previous "range-and-a-half" to "none"; the
313bcff51900 Issue #17516: use comment syntax for comments, instead of multiline string
Victor Stinner <victor.stinner@gmail.com>
parents: 76776
diff changeset
33 # > range-and-a-half checking wasn't particularly useful.
313bcff51900 Issue #17516: use comment syntax for comments, instead of multiline string
Victor Stinner <victor.stinner@gmail.com>
parents: 76776
diff changeset
34 #
313bcff51900 Issue #17516: use comment syntax for comments, instead of multiline string
Victor Stinner <victor.stinner@gmail.com>
parents: 76776
diff changeset
35 # Plus a C API or two, e.g. PyInt_AsLongMask() ->
313bcff51900 Issue #17516: use comment syntax for comments, instead of multiline string
Victor Stinner <victor.stinner@gmail.com>
parents: 76776
diff changeset
36 # unsigned long and PyInt_AsLongLongMask() -> unsigned
313bcff51900 Issue #17516: use comment syntax for comments, instead of multiline string
Victor Stinner <victor.stinner@gmail.com>
parents: 76776
diff changeset
37 # long long (if that exists).
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents:
diff changeset
38
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents:
diff changeset
39 LARGE = 0x7FFFFFFF
40644
1c26505c1de6 Rip out 'long' and 'L'-suffixed integer literals.
Guido van Rossum <guido@python.org>
parents: 39442
diff changeset
40 VERY_LARGE = 0xFF0000121212121212121242
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents:
diff changeset
41
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents:
diff changeset
42 from _testcapi import UCHAR_MAX, USHRT_MAX, UINT_MAX, ULONG_MAX, INT_MAX, \
57822
6d7464dbb714 Merged revisions 76930 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 57582
diff changeset
43 INT_MIN, LONG_MIN, LONG_MAX, PY_SSIZE_T_MIN, PY_SSIZE_T_MAX, \
6d7464dbb714 Merged revisions 76930 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 57582
diff changeset
44 SHRT_MIN, SHRT_MAX
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents:
diff changeset
45
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents:
diff changeset
46 # fake, they are not defined in Python's header files
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents:
diff changeset
47 LLONG_MAX = 2**63-1
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents:
diff changeset
48 LLONG_MIN = -2**63
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents:
diff changeset
49 ULLONG_MAX = 2**64-1
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents:
diff changeset
50
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents:
diff changeset
51 class Int:
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents:
diff changeset
52 def __int__(self):
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents:
diff changeset
53 return 99
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents:
diff changeset
54
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents:
diff changeset
55 class Unsigned_TestCase(unittest.TestCase):
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents:
diff changeset
56 def test_b(self):
28776
211c02fb6570 This test now uses the separate getargs_X functions from _testcapimodule.
Thomas Heller <theller@ctypes.org>
parents: 28774
diff changeset
57 from _testcapi import getargs_b
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents:
diff changeset
58 # b returns 'unsigned char', and does range checking (0 ... UCHAR_MAX)
37741
a67f2158d61b Fix tests for PyArg_Parse*; The PyArg_Parse functions no longer (noisily)
Thomas Wouters <thomas@python.org>
parents: 34666
diff changeset
59 self.assertRaises(TypeError, getargs_b, 3.14)
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
60 self.assertEqual(99, getargs_b(Int()))
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents:
diff changeset
61
28776
211c02fb6570 This test now uses the separate getargs_X functions from _testcapimodule.
Thomas Heller <theller@ctypes.org>
parents: 28774
diff changeset
62 self.assertRaises(OverflowError, getargs_b, -1)
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
63 self.assertEqual(0, getargs_b(0))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
64 self.assertEqual(UCHAR_MAX, getargs_b(UCHAR_MAX))
28776
211c02fb6570 This test now uses the separate getargs_X functions from _testcapimodule.
Thomas Heller <theller@ctypes.org>
parents: 28774
diff changeset
65 self.assertRaises(OverflowError, getargs_b, UCHAR_MAX + 1)
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents:
diff changeset
66
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
67 self.assertEqual(42, getargs_b(42))
28776
211c02fb6570 This test now uses the separate getargs_X functions from _testcapimodule.
Thomas Heller <theller@ctypes.org>
parents: 28774
diff changeset
68 self.assertRaises(OverflowError, getargs_b, VERY_LARGE)
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents:
diff changeset
69
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents:
diff changeset
70 def test_B(self):
28776
211c02fb6570 This test now uses the separate getargs_X functions from _testcapimodule.
Thomas Heller <theller@ctypes.org>
parents: 28774
diff changeset
71 from _testcapi import getargs_B
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents:
diff changeset
72 # B returns 'unsigned char', no range checking
37741
a67f2158d61b Fix tests for PyArg_Parse*; The PyArg_Parse functions no longer (noisily)
Thomas Wouters <thomas@python.org>
parents: 34666
diff changeset
73 self.assertRaises(TypeError, getargs_B, 3.14)
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
74 self.assertEqual(99, getargs_B(Int()))
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents:
diff changeset
75
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
76 self.assertEqual(UCHAR_MAX, getargs_B(-1))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
77 self.assertEqual(0, getargs_B(0))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
78 self.assertEqual(UCHAR_MAX, getargs_B(UCHAR_MAX))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
79 self.assertEqual(0, getargs_B(UCHAR_MAX+1))
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents:
diff changeset
80
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
81 self.assertEqual(42, getargs_B(42))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
82 self.assertEqual(UCHAR_MAX & VERY_LARGE, getargs_B(VERY_LARGE))
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents:
diff changeset
83
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents:
diff changeset
84 def test_H(self):
28776
211c02fb6570 This test now uses the separate getargs_X functions from _testcapimodule.
Thomas Heller <theller@ctypes.org>
parents: 28774
diff changeset
85 from _testcapi import getargs_H
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents:
diff changeset
86 # H returns 'unsigned short', no range checking
37741
a67f2158d61b Fix tests for PyArg_Parse*; The PyArg_Parse functions no longer (noisily)
Thomas Wouters <thomas@python.org>
parents: 34666
diff changeset
87 self.assertRaises(TypeError, getargs_H, 3.14)
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
88 self.assertEqual(99, getargs_H(Int()))
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents:
diff changeset
89
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
90 self.assertEqual(USHRT_MAX, getargs_H(-1))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
91 self.assertEqual(0, getargs_H(0))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
92 self.assertEqual(USHRT_MAX, getargs_H(USHRT_MAX))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
93 self.assertEqual(0, getargs_H(USHRT_MAX+1))
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents:
diff changeset
94
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
95 self.assertEqual(42, getargs_H(42))
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents:
diff changeset
96
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
97 self.assertEqual(VERY_LARGE & USHRT_MAX, getargs_H(VERY_LARGE))
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents:
diff changeset
98
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents:
diff changeset
99 def test_I(self):
28776
211c02fb6570 This test now uses the separate getargs_X functions from _testcapimodule.
Thomas Heller <theller@ctypes.org>
parents: 28774
diff changeset
100 from _testcapi import getargs_I
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents:
diff changeset
101 # I returns 'unsigned int', no range checking
37741
a67f2158d61b Fix tests for PyArg_Parse*; The PyArg_Parse functions no longer (noisily)
Thomas Wouters <thomas@python.org>
parents: 34666
diff changeset
102 self.assertRaises(TypeError, getargs_I, 3.14)
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
103 self.assertEqual(99, getargs_I(Int()))
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents:
diff changeset
104
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
105 self.assertEqual(UINT_MAX, getargs_I(-1))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
106 self.assertEqual(0, getargs_I(0))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
107 self.assertEqual(UINT_MAX, getargs_I(UINT_MAX))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
108 self.assertEqual(0, getargs_I(UINT_MAX+1))
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents:
diff changeset
109
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
110 self.assertEqual(42, getargs_I(42))
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents:
diff changeset
111
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
112 self.assertEqual(VERY_LARGE & UINT_MAX, getargs_I(VERY_LARGE))
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents:
diff changeset
113
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents:
diff changeset
114 def test_k(self):
28776
211c02fb6570 This test now uses the separate getargs_X functions from _testcapimodule.
Thomas Heller <theller@ctypes.org>
parents: 28774
diff changeset
115 from _testcapi import getargs_k
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents:
diff changeset
116 # k returns 'unsigned long', no range checking
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents:
diff changeset
117 # it does not accept float, or instances with __int__
28776
211c02fb6570 This test now uses the separate getargs_X functions from _testcapimodule.
Thomas Heller <theller@ctypes.org>
parents: 28774
diff changeset
118 self.assertRaises(TypeError, getargs_k, 3.14)
211c02fb6570 This test now uses the separate getargs_X functions from _testcapimodule.
Thomas Heller <theller@ctypes.org>
parents: 28774
diff changeset
119 self.assertRaises(TypeError, getargs_k, Int())
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents:
diff changeset
120
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
121 self.assertEqual(ULONG_MAX, getargs_k(-1))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
122 self.assertEqual(0, getargs_k(0))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
123 self.assertEqual(ULONG_MAX, getargs_k(ULONG_MAX))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
124 self.assertEqual(0, getargs_k(ULONG_MAX+1))
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents:
diff changeset
125
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
126 self.assertEqual(42, getargs_k(42))
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents:
diff changeset
127
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
128 self.assertEqual(VERY_LARGE & ULONG_MAX, getargs_k(VERY_LARGE))
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents:
diff changeset
129
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents:
diff changeset
130 class Signed_TestCase(unittest.TestCase):
57822
6d7464dbb714 Merged revisions 76930 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 57582
diff changeset
131 def test_h(self):
6d7464dbb714 Merged revisions 76930 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 57582
diff changeset
132 from _testcapi import getargs_h
6d7464dbb714 Merged revisions 76930 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 57582
diff changeset
133 # h returns 'short', and does range checking (SHRT_MIN ... SHRT_MAX)
6d7464dbb714 Merged revisions 76930 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 57582
diff changeset
134 self.assertRaises(TypeError, getargs_h, 3.14)
6d7464dbb714 Merged revisions 76930 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 57582
diff changeset
135 self.assertEqual(99, getargs_h(Int()))
6d7464dbb714 Merged revisions 76930 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 57582
diff changeset
136
6d7464dbb714 Merged revisions 76930 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 57582
diff changeset
137 self.assertRaises(OverflowError, getargs_h, SHRT_MIN-1)
6d7464dbb714 Merged revisions 76930 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 57582
diff changeset
138 self.assertEqual(SHRT_MIN, getargs_h(SHRT_MIN))
6d7464dbb714 Merged revisions 76930 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 57582
diff changeset
139 self.assertEqual(SHRT_MAX, getargs_h(SHRT_MAX))
6d7464dbb714 Merged revisions 76930 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 57582
diff changeset
140 self.assertRaises(OverflowError, getargs_h, SHRT_MAX+1)
6d7464dbb714 Merged revisions 76930 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 57582
diff changeset
141
6d7464dbb714 Merged revisions 76930 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 57582
diff changeset
142 self.assertEqual(42, getargs_h(42))
6d7464dbb714 Merged revisions 76930 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 57582
diff changeset
143 self.assertRaises(OverflowError, getargs_h, VERY_LARGE)
6d7464dbb714 Merged revisions 76930 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 57582
diff changeset
144
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents:
diff changeset
145 def test_i(self):
28776
211c02fb6570 This test now uses the separate getargs_X functions from _testcapimodule.
Thomas Heller <theller@ctypes.org>
parents: 28774
diff changeset
146 from _testcapi import getargs_i
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents:
diff changeset
147 # i returns 'int', and does range checking (INT_MIN ... INT_MAX)
37741
a67f2158d61b Fix tests for PyArg_Parse*; The PyArg_Parse functions no longer (noisily)
Thomas Wouters <thomas@python.org>
parents: 34666
diff changeset
148 self.assertRaises(TypeError, getargs_i, 3.14)
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
149 self.assertEqual(99, getargs_i(Int()))
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents:
diff changeset
150
28776
211c02fb6570 This test now uses the separate getargs_X functions from _testcapimodule.
Thomas Heller <theller@ctypes.org>
parents: 28774
diff changeset
151 self.assertRaises(OverflowError, getargs_i, INT_MIN-1)
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
152 self.assertEqual(INT_MIN, getargs_i(INT_MIN))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
153 self.assertEqual(INT_MAX, getargs_i(INT_MAX))
28776
211c02fb6570 This test now uses the separate getargs_X functions from _testcapimodule.
Thomas Heller <theller@ctypes.org>
parents: 28774
diff changeset
154 self.assertRaises(OverflowError, getargs_i, INT_MAX+1)
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents:
diff changeset
155
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
156 self.assertEqual(42, getargs_i(42))
28776
211c02fb6570 This test now uses the separate getargs_X functions from _testcapimodule.
Thomas Heller <theller@ctypes.org>
parents: 28774
diff changeset
157 self.assertRaises(OverflowError, getargs_i, VERY_LARGE)
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents:
diff changeset
158
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents:
diff changeset
159 def test_l(self):
28776
211c02fb6570 This test now uses the separate getargs_X functions from _testcapimodule.
Thomas Heller <theller@ctypes.org>
parents: 28774
diff changeset
160 from _testcapi import getargs_l
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents:
diff changeset
161 # l returns 'long', and does range checking (LONG_MIN ... LONG_MAX)
37741
a67f2158d61b Fix tests for PyArg_Parse*; The PyArg_Parse functions no longer (noisily)
Thomas Wouters <thomas@python.org>
parents: 34666
diff changeset
162 self.assertRaises(TypeError, getargs_l, 3.14)
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
163 self.assertEqual(99, getargs_l(Int()))
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents:
diff changeset
164
28776
211c02fb6570 This test now uses the separate getargs_X functions from _testcapimodule.
Thomas Heller <theller@ctypes.org>
parents: 28774
diff changeset
165 self.assertRaises(OverflowError, getargs_l, LONG_MIN-1)
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
166 self.assertEqual(LONG_MIN, getargs_l(LONG_MIN))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
167 self.assertEqual(LONG_MAX, getargs_l(LONG_MAX))
28776
211c02fb6570 This test now uses the separate getargs_X functions from _testcapimodule.
Thomas Heller <theller@ctypes.org>
parents: 28774
diff changeset
168 self.assertRaises(OverflowError, getargs_l, LONG_MAX+1)
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents:
diff changeset
169
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
170 self.assertEqual(42, getargs_l(42))
28776
211c02fb6570 This test now uses the separate getargs_X functions from _testcapimodule.
Thomas Heller <theller@ctypes.org>
parents: 28774
diff changeset
171 self.assertRaises(OverflowError, getargs_l, VERY_LARGE)
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents:
diff changeset
172
37879
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37741
diff changeset
173 def test_n(self):
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37741
diff changeset
174 from _testcapi import getargs_n
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37741
diff changeset
175 # n returns 'Py_ssize_t', and does range checking
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37741
diff changeset
176 # (PY_SSIZE_T_MIN ... PY_SSIZE_T_MAX)
37883
72245159299e Fix newly merged test for p3ykness.
Thomas Wouters <thomas@python.org>
parents: 37879
diff changeset
177 self.assertRaises(TypeError, getargs_n, 3.14)
46533
c0cdacf07f54 Issue 2440: remove the guard around the handling of case 'n' in getargs.c's convertsimple() such that we always treat it as an index type, regardless of whether or not sizeof(size_t) == sizeof(long). Fix the test_args2.Signed_TestCase.test_n() such that it tests for adherence to PEP 357 (don't try and coerce objects that don't have nb_index slots but do have nb_int slots (i.e. floats) into indexes 'just because we can'). Three other commits are related to this one: r62269 and r62279, which were changes to PyNumber_Index (among other things) to check for nb_int slots when we lack nb_index slots -- and r62292, which is when I reverted these changes after various people pointed out that the test was in fact wrong, not the code.
Trent Nelson <trent.nelson@snakebite.org>
parents: 46405
diff changeset
178 self.assertRaises(TypeError, getargs_n, Int())
37879
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37741
diff changeset
179
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37741
diff changeset
180 self.assertRaises(OverflowError, getargs_n, PY_SSIZE_T_MIN-1)
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
181 self.assertEqual(PY_SSIZE_T_MIN, getargs_n(PY_SSIZE_T_MIN))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
182 self.assertEqual(PY_SSIZE_T_MAX, getargs_n(PY_SSIZE_T_MAX))
37879
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37741
diff changeset
183 self.assertRaises(OverflowError, getargs_n, PY_SSIZE_T_MAX+1)
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37741
diff changeset
184
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
185 self.assertEqual(42, getargs_n(42))
37879
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37741
diff changeset
186 self.assertRaises(OverflowError, getargs_n, VERY_LARGE)
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37741
diff changeset
187
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents:
diff changeset
188
84108
05f7883ee92d Update various test modules to use unittest.main() for test discovery
Brett Cannon <brett@python.org>
parents: 82957
diff changeset
189 @unittest.skipIf(getargs_L is None, 'PY_LONG_LONG is not available')
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents:
diff changeset
190 class LongLong_TestCase(unittest.TestCase):
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents:
diff changeset
191 def test_L(self):
28776
211c02fb6570 This test now uses the separate getargs_X functions from _testcapimodule.
Thomas Heller <theller@ctypes.org>
parents: 28774
diff changeset
192 from _testcapi import getargs_L
58072
78ca69cfc897 Merged revisions 77218 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 57822
diff changeset
193 # L returns 'long long', and does range checking (LLONG_MIN
78ca69cfc897 Merged revisions 77218 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 57822
diff changeset
194 # ... LLONG_MAX)
62221
fe5ed70283ef Issue #8950: Make PyArg_Parse* with 'L' code raise for float inputs,
Mark Dickinson <dickinsm@gmail.com>
parents: 61717
diff changeset
195 self.assertRaises(TypeError, getargs_L, 3.14)
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
196 self.assertRaises(TypeError, getargs_L, "Hello")
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
197 self.assertEqual(99, getargs_L(Int()))
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents:
diff changeset
198
28776
211c02fb6570 This test now uses the separate getargs_X functions from _testcapimodule.
Thomas Heller <theller@ctypes.org>
parents: 28774
diff changeset
199 self.assertRaises(OverflowError, getargs_L, LLONG_MIN-1)
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
200 self.assertEqual(LLONG_MIN, getargs_L(LLONG_MIN))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
201 self.assertEqual(LLONG_MAX, getargs_L(LLONG_MAX))
28776
211c02fb6570 This test now uses the separate getargs_X functions from _testcapimodule.
Thomas Heller <theller@ctypes.org>
parents: 28774
diff changeset
202 self.assertRaises(OverflowError, getargs_L, LLONG_MAX+1)
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents:
diff changeset
203
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
204 self.assertEqual(42, getargs_L(42))
28776
211c02fb6570 This test now uses the separate getargs_X functions from _testcapimodule.
Thomas Heller <theller@ctypes.org>
parents: 28774
diff changeset
205 self.assertRaises(OverflowError, getargs_L, VERY_LARGE)
28774
c9bee11eaa8b Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 28668
diff changeset
206
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents:
diff changeset
207 def test_K(self):
28776
211c02fb6570 This test now uses the separate getargs_X functions from _testcapimodule.
Thomas Heller <theller@ctypes.org>
parents: 28774
diff changeset
208 from _testcapi import getargs_K
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents:
diff changeset
209 # K return 'unsigned long long', no range checking
28776
211c02fb6570 This test now uses the separate getargs_X functions from _testcapimodule.
Thomas Heller <theller@ctypes.org>
parents: 28774
diff changeset
210 self.assertRaises(TypeError, getargs_K, 3.14)
211c02fb6570 This test now uses the separate getargs_X functions from _testcapimodule.
Thomas Heller <theller@ctypes.org>
parents: 28774
diff changeset
211 self.assertRaises(TypeError, getargs_K, Int())
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
212 self.assertEqual(ULLONG_MAX, getargs_K(ULLONG_MAX))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
213 self.assertEqual(0, getargs_K(0))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
214 self.assertEqual(0, getargs_K(ULLONG_MAX+1))
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents:
diff changeset
215
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
216 self.assertEqual(42, getargs_K(42))
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents:
diff changeset
217
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
218 self.assertEqual(VERY_LARGE & ULLONG_MAX, getargs_K(VERY_LARGE))
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents:
diff changeset
219
76776
bc6d28e726d8 Issue #14705: Add 'p' format character to PyArg_ParseTuple* for bool support.
Larry Hastings <larry@hastings.org>
parents: 75842
diff changeset
220 class Paradox:
bc6d28e726d8 Issue #14705: Add 'p' format character to PyArg_ParseTuple* for bool support.
Larry Hastings <larry@hastings.org>
parents: 75842
diff changeset
221 "This statement is false."
bc6d28e726d8 Issue #14705: Add 'p' format character to PyArg_ParseTuple* for bool support.
Larry Hastings <larry@hastings.org>
parents: 75842
diff changeset
222 def __bool__(self):
bc6d28e726d8 Issue #14705: Add 'p' format character to PyArg_ParseTuple* for bool support.
Larry Hastings <larry@hastings.org>
parents: 75842
diff changeset
223 raise NotImplementedError
bc6d28e726d8 Issue #14705: Add 'p' format character to PyArg_ParseTuple* for bool support.
Larry Hastings <larry@hastings.org>
parents: 75842
diff changeset
224
bc6d28e726d8 Issue #14705: Add 'p' format character to PyArg_ParseTuple* for bool support.
Larry Hastings <larry@hastings.org>
parents: 75842
diff changeset
225 class Boolean_TestCase(unittest.TestCase):
bc6d28e726d8 Issue #14705: Add 'p' format character to PyArg_ParseTuple* for bool support.
Larry Hastings <larry@hastings.org>
parents: 75842
diff changeset
226 def test_p(self):
bc6d28e726d8 Issue #14705: Add 'p' format character to PyArg_ParseTuple* for bool support.
Larry Hastings <larry@hastings.org>
parents: 75842
diff changeset
227 from _testcapi import getargs_p
bc6d28e726d8 Issue #14705: Add 'p' format character to PyArg_ParseTuple* for bool support.
Larry Hastings <larry@hastings.org>
parents: 75842
diff changeset
228 self.assertEqual(0, getargs_p(False))
bc6d28e726d8 Issue #14705: Add 'p' format character to PyArg_ParseTuple* for bool support.
Larry Hastings <larry@hastings.org>
parents: 75842
diff changeset
229 self.assertEqual(0, getargs_p(None))
bc6d28e726d8 Issue #14705: Add 'p' format character to PyArg_ParseTuple* for bool support.
Larry Hastings <larry@hastings.org>
parents: 75842
diff changeset
230 self.assertEqual(0, getargs_p(0))
bc6d28e726d8 Issue #14705: Add 'p' format character to PyArg_ParseTuple* for bool support.
Larry Hastings <larry@hastings.org>
parents: 75842
diff changeset
231 self.assertEqual(0, getargs_p(0.0))
bc6d28e726d8 Issue #14705: Add 'p' format character to PyArg_ParseTuple* for bool support.
Larry Hastings <larry@hastings.org>
parents: 75842
diff changeset
232 self.assertEqual(0, getargs_p(0j))
bc6d28e726d8 Issue #14705: Add 'p' format character to PyArg_ParseTuple* for bool support.
Larry Hastings <larry@hastings.org>
parents: 75842
diff changeset
233 self.assertEqual(0, getargs_p(''))
bc6d28e726d8 Issue #14705: Add 'p' format character to PyArg_ParseTuple* for bool support.
Larry Hastings <larry@hastings.org>
parents: 75842
diff changeset
234 self.assertEqual(0, getargs_p(()))
bc6d28e726d8 Issue #14705: Add 'p' format character to PyArg_ParseTuple* for bool support.
Larry Hastings <larry@hastings.org>
parents: 75842
diff changeset
235 self.assertEqual(0, getargs_p([]))
bc6d28e726d8 Issue #14705: Add 'p' format character to PyArg_ParseTuple* for bool support.
Larry Hastings <larry@hastings.org>
parents: 75842
diff changeset
236 self.assertEqual(0, getargs_p({}))
bc6d28e726d8 Issue #14705: Add 'p' format character to PyArg_ParseTuple* for bool support.
Larry Hastings <larry@hastings.org>
parents: 75842
diff changeset
237
bc6d28e726d8 Issue #14705: Add 'p' format character to PyArg_ParseTuple* for bool support.
Larry Hastings <larry@hastings.org>
parents: 75842
diff changeset
238 self.assertEqual(1, getargs_p(True))
bc6d28e726d8 Issue #14705: Add 'p' format character to PyArg_ParseTuple* for bool support.
Larry Hastings <larry@hastings.org>
parents: 75842
diff changeset
239 self.assertEqual(1, getargs_p(1))
bc6d28e726d8 Issue #14705: Add 'p' format character to PyArg_ParseTuple* for bool support.
Larry Hastings <larry@hastings.org>
parents: 75842
diff changeset
240 self.assertEqual(1, getargs_p(1.0))
bc6d28e726d8 Issue #14705: Add 'p' format character to PyArg_ParseTuple* for bool support.
Larry Hastings <larry@hastings.org>
parents: 75842
diff changeset
241 self.assertEqual(1, getargs_p(1j))
bc6d28e726d8 Issue #14705: Add 'p' format character to PyArg_ParseTuple* for bool support.
Larry Hastings <larry@hastings.org>
parents: 75842
diff changeset
242 self.assertEqual(1, getargs_p('x'))
bc6d28e726d8 Issue #14705: Add 'p' format character to PyArg_ParseTuple* for bool support.
Larry Hastings <larry@hastings.org>
parents: 75842
diff changeset
243 self.assertEqual(1, getargs_p((1,)))
bc6d28e726d8 Issue #14705: Add 'p' format character to PyArg_ParseTuple* for bool support.
Larry Hastings <larry@hastings.org>
parents: 75842
diff changeset
244 self.assertEqual(1, getargs_p([1]))
bc6d28e726d8 Issue #14705: Add 'p' format character to PyArg_ParseTuple* for bool support.
Larry Hastings <larry@hastings.org>
parents: 75842
diff changeset
245 self.assertEqual(1, getargs_p({1:2}))
bc6d28e726d8 Issue #14705: Add 'p' format character to PyArg_ParseTuple* for bool support.
Larry Hastings <larry@hastings.org>
parents: 75842
diff changeset
246 self.assertEqual(1, getargs_p(unittest.TestCase))
bc6d28e726d8 Issue #14705: Add 'p' format character to PyArg_ParseTuple* for bool support.
Larry Hastings <larry@hastings.org>
parents: 75842
diff changeset
247
bc6d28e726d8 Issue #14705: Add 'p' format character to PyArg_ParseTuple* for bool support.
Larry Hastings <larry@hastings.org>
parents: 75842
diff changeset
248 self.assertRaises(NotImplementedError, getargs_p, Paradox())
bc6d28e726d8 Issue #14705: Add 'p' format character to PyArg_ParseTuple* for bool support.
Larry Hastings <larry@hastings.org>
parents: 75842
diff changeset
249
39442
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 37883
diff changeset
250
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 37883
diff changeset
251 class Tuple_TestCase(unittest.TestCase):
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 37883
diff changeset
252 def test_tuple(self):
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 37883
diff changeset
253 from _testcapi import getargs_tuple
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 37883
diff changeset
254
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 37883
diff changeset
255 ret = getargs_tuple(1, (2, 3))
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 55593
diff changeset
256 self.assertEqual(ret, (1,2,3))
39442
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 37883
diff changeset
257
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 37883
diff changeset
258 # make sure invalid tuple arguments are handled correctly
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 37883
diff changeset
259 class seq:
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 37883
diff changeset
260 def __len__(self):
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 37883
diff changeset
261 return 2
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 37883
diff changeset
262 def __getitem__(self, n):
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 37883
diff changeset
263 raise ValueError
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 37883
diff changeset
264 self.assertRaises(TypeError, getargs_tuple, 1, seq())
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 37883
diff changeset
265
45548
8c3c5b4eef55 Merged revisions 61038,61042-61045,61047,61050,61053,61055-61056,61061-61062,61066,61068,61070,61081-61095 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45471
diff changeset
266 class Keywords_TestCase(unittest.TestCase):
8c3c5b4eef55 Merged revisions 61038,61042-61045,61047,61050,61053,61055-61056,61061-61062,61066,61068,61070,61081-61095 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45471
diff changeset
267 def test_positional_args(self):
8c3c5b4eef55 Merged revisions 61038,61042-61045,61047,61050,61053,61055-61056,61061-61062,61066,61068,61070,61081-61095 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45471
diff changeset
268 # using all positional args
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 55593
diff changeset
269 self.assertEqual(
45548
8c3c5b4eef55 Merged revisions 61038,61042-61045,61047,61050,61053,61055-61056,61061-61062,61066,61068,61070,61081-61095 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45471
diff changeset
270 getargs_keywords((1,2), 3, (4,(5,6)), (7,8,9), 10),
8c3c5b4eef55 Merged revisions 61038,61042-61045,61047,61050,61053,61055-61056,61061-61062,61066,61068,61070,61081-61095 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45471
diff changeset
271 (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
8c3c5b4eef55 Merged revisions 61038,61042-61045,61047,61050,61053,61055-61056,61061-61062,61066,61068,61070,61081-61095 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45471
diff changeset
272 )
61717
1504cc5a15a1 Issue #6697: Fix a crash if a keyword contains a surrogate
Victor Stinner <victor.stinner@haypocalc.com>
parents: 58072
diff changeset
273
45548
8c3c5b4eef55 Merged revisions 61038,61042-61045,61047,61050,61053,61055-61056,61061-61062,61066,61068,61070,61081-61095 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45471
diff changeset
274 def test_mixed_args(self):
8c3c5b4eef55 Merged revisions 61038,61042-61045,61047,61050,61053,61055-61056,61061-61062,61066,61068,61070,61081-61095 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45471
diff changeset
275 # positional and keyword args
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 55593
diff changeset
276 self.assertEqual(
45548
8c3c5b4eef55 Merged revisions 61038,61042-61045,61047,61050,61053,61055-61056,61061-61062,61066,61068,61070,61081-61095 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45471
diff changeset
277 getargs_keywords((1,2), 3, (4,(5,6)), arg4=(7,8,9), arg5=10),
8c3c5b4eef55 Merged revisions 61038,61042-61045,61047,61050,61053,61055-61056,61061-61062,61066,61068,61070,61081-61095 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45471
diff changeset
278 (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
8c3c5b4eef55 Merged revisions 61038,61042-61045,61047,61050,61053,61055-61056,61061-61062,61066,61068,61070,61081-61095 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45471
diff changeset
279 )
61717
1504cc5a15a1 Issue #6697: Fix a crash if a keyword contains a surrogate
Victor Stinner <victor.stinner@haypocalc.com>
parents: 58072
diff changeset
280
45548
8c3c5b4eef55 Merged revisions 61038,61042-61045,61047,61050,61053,61055-61056,61061-61062,61066,61068,61070,61081-61095 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45471
diff changeset
281 def test_keyword_args(self):
8c3c5b4eef55 Merged revisions 61038,61042-61045,61047,61050,61053,61055-61056,61061-61062,61066,61068,61070,61081-61095 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45471
diff changeset
282 # all keywords
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 55593
diff changeset
283 self.assertEqual(
45548
8c3c5b4eef55 Merged revisions 61038,61042-61045,61047,61050,61053,61055-61056,61061-61062,61066,61068,61070,61081-61095 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45471
diff changeset
284 getargs_keywords(arg1=(1,2), arg2=3, arg3=(4,(5,6)), arg4=(7,8,9), arg5=10),
8c3c5b4eef55 Merged revisions 61038,61042-61045,61047,61050,61053,61055-61056,61061-61062,61066,61068,61070,61081-61095 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45471
diff changeset
285 (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
8c3c5b4eef55 Merged revisions 61038,61042-61045,61047,61050,61053,61055-61056,61061-61062,61066,61068,61070,61081-61095 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45471
diff changeset
286 )
61717
1504cc5a15a1 Issue #6697: Fix a crash if a keyword contains a surrogate
Victor Stinner <victor.stinner@haypocalc.com>
parents: 58072
diff changeset
287
45548
8c3c5b4eef55 Merged revisions 61038,61042-61045,61047,61050,61053,61055-61056,61061-61062,61066,61068,61070,61081-61095 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45471
diff changeset
288 def test_optional_args(self):
8c3c5b4eef55 Merged revisions 61038,61042-61045,61047,61050,61053,61055-61056,61061-61062,61066,61068,61070,61081-61095 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45471
diff changeset
289 # missing optional keyword args, skipping tuples
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 55593
diff changeset
290 self.assertEqual(
45548
8c3c5b4eef55 Merged revisions 61038,61042-61045,61047,61050,61053,61055-61056,61061-61062,61066,61068,61070,61081-61095 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45471
diff changeset
291 getargs_keywords(arg1=(1,2), arg2=3, arg5=10),
8c3c5b4eef55 Merged revisions 61038,61042-61045,61047,61050,61053,61055-61056,61061-61062,61066,61068,61070,61081-61095 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45471
diff changeset
292 (1, 2, 3, -1, -1, -1, -1, -1, -1, 10)
8c3c5b4eef55 Merged revisions 61038,61042-61045,61047,61050,61053,61055-61056,61061-61062,61066,61068,61070,61081-61095 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45471
diff changeset
293 )
61717
1504cc5a15a1 Issue #6697: Fix a crash if a keyword contains a surrogate
Victor Stinner <victor.stinner@haypocalc.com>
parents: 58072
diff changeset
294
45548
8c3c5b4eef55 Merged revisions 61038,61042-61045,61047,61050,61053,61055-61056,61061-61062,61066,61068,61070,61081-61095 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45471
diff changeset
295 def test_required_args(self):
8c3c5b4eef55 Merged revisions 61038,61042-61045,61047,61050,61053,61055-61056,61061-61062,61066,61068,61070,61081-61095 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45471
diff changeset
296 # required arg missing
8c3c5b4eef55 Merged revisions 61038,61042-61045,61047,61050,61053,61055-61056,61061-61062,61066,61068,61070,61081-61095 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45471
diff changeset
297 try:
8c3c5b4eef55 Merged revisions 61038,61042-61045,61047,61050,61053,61055-61056,61061-61062,61066,61068,61070,61081-61095 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45471
diff changeset
298 getargs_keywords(arg1=(1,2))
8c3c5b4eef55 Merged revisions 61038,61042-61045,61047,61050,61053,61055-61056,61061-61062,61066,61068,61070,61081-61095 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45471
diff changeset
299 except TypeError as err:
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 55593
diff changeset
300 self.assertEqual(str(err), "Required argument 'arg2' (pos 2) not found")
45548
8c3c5b4eef55 Merged revisions 61038,61042-61045,61047,61050,61053,61055-61056,61061-61062,61066,61068,61070,61081-61095 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45471
diff changeset
301 else:
8c3c5b4eef55 Merged revisions 61038,61042-61045,61047,61050,61053,61055-61056,61061-61062,61066,61068,61070,61081-61095 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45471
diff changeset
302 self.fail('TypeError should have been raised')
61717
1504cc5a15a1 Issue #6697: Fix a crash if a keyword contains a surrogate
Victor Stinner <victor.stinner@haypocalc.com>
parents: 58072
diff changeset
303
45548
8c3c5b4eef55 Merged revisions 61038,61042-61045,61047,61050,61053,61055-61056,61061-61062,61066,61068,61070,61081-61095 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45471
diff changeset
304 def test_too_many_args(self):
8c3c5b4eef55 Merged revisions 61038,61042-61045,61047,61050,61053,61055-61056,61061-61062,61066,61068,61070,61081-61095 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45471
diff changeset
305 try:
8c3c5b4eef55 Merged revisions 61038,61042-61045,61047,61050,61053,61055-61056,61061-61062,61066,61068,61070,61081-61095 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45471
diff changeset
306 getargs_keywords((1,2),3,(4,(5,6)),(7,8,9),10,111)
8c3c5b4eef55 Merged revisions 61038,61042-61045,61047,61050,61053,61055-61056,61061-61062,61066,61068,61070,61081-61095 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45471
diff changeset
307 except TypeError as err:
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 55593
diff changeset
308 self.assertEqual(str(err), "function takes at most 5 arguments (6 given)")
45548
8c3c5b4eef55 Merged revisions 61038,61042-61045,61047,61050,61053,61055-61056,61061-61062,61066,61068,61070,61081-61095 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45471
diff changeset
309 else:
8c3c5b4eef55 Merged revisions 61038,61042-61045,61047,61050,61053,61055-61056,61061-61062,61066,61068,61070,61081-61095 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45471
diff changeset
310 self.fail('TypeError should have been raised')
61717
1504cc5a15a1 Issue #6697: Fix a crash if a keyword contains a surrogate
Victor Stinner <victor.stinner@haypocalc.com>
parents: 58072
diff changeset
311
45548
8c3c5b4eef55 Merged revisions 61038,61042-61045,61047,61050,61053,61055-61056,61061-61062,61066,61068,61070,61081-61095 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45471
diff changeset
312 def test_invalid_keyword(self):
8c3c5b4eef55 Merged revisions 61038,61042-61045,61047,61050,61053,61055-61056,61061-61062,61066,61068,61070,61081-61095 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45471
diff changeset
313 # extraneous keyword arg
8c3c5b4eef55 Merged revisions 61038,61042-61045,61047,61050,61053,61055-61056,61061-61062,61066,61068,61070,61081-61095 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45471
diff changeset
314 try:
8c3c5b4eef55 Merged revisions 61038,61042-61045,61047,61050,61053,61055-61056,61061-61062,61066,61068,61070,61081-61095 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45471
diff changeset
315 getargs_keywords((1,2),3,arg5=10,arg666=666)
8c3c5b4eef55 Merged revisions 61038,61042-61045,61047,61050,61053,61055-61056,61061-61062,61066,61068,61070,61081-61095 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45471
diff changeset
316 except TypeError as err:
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 55593
diff changeset
317 self.assertEqual(str(err), "'arg666' is an invalid keyword argument for this function")
45548
8c3c5b4eef55 Merged revisions 61038,61042-61045,61047,61050,61053,61055-61056,61061-61062,61066,61068,61070,61081-61095 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45471
diff changeset
318 else:
8c3c5b4eef55 Merged revisions 61038,61042-61045,61047,61050,61053,61055-61056,61061-61062,61066,61068,61070,61081-61095 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45471
diff changeset
319 self.fail('TypeError should have been raised')
39442
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 37883
diff changeset
320
61717
1504cc5a15a1 Issue #6697: Fix a crash if a keyword contains a surrogate
Victor Stinner <victor.stinner@haypocalc.com>
parents: 58072
diff changeset
321 def test_surrogate_keyword(self):
1504cc5a15a1 Issue #6697: Fix a crash if a keyword contains a surrogate
Victor Stinner <victor.stinner@haypocalc.com>
parents: 58072
diff changeset
322 try:
1504cc5a15a1 Issue #6697: Fix a crash if a keyword contains a surrogate
Victor Stinner <victor.stinner@haypocalc.com>
parents: 58072
diff changeset
323 getargs_keywords((1,2), 3, (4,(5,6)), (7,8,9), **{'\uDC80': 10})
1504cc5a15a1 Issue #6697: Fix a crash if a keyword contains a surrogate
Victor Stinner <victor.stinner@haypocalc.com>
parents: 58072
diff changeset
324 except TypeError as err:
66310
9fe76c26ea9f #9424: Replace deprecated assert* methods in the Python test suite.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 62484
diff changeset
325 self.assertEqual(str(err), "'\udc80' is an invalid keyword argument for this function")
61717
1504cc5a15a1 Issue #6697: Fix a crash if a keyword contains a surrogate
Victor Stinner <victor.stinner@haypocalc.com>
parents: 58072
diff changeset
326 else:
1504cc5a15a1 Issue #6697: Fix a crash if a keyword contains a surrogate
Victor Stinner <victor.stinner@haypocalc.com>
parents: 58072
diff changeset
327 self.fail('TypeError should have been raised')
1504cc5a15a1 Issue #6697: Fix a crash if a keyword contains a surrogate
Victor Stinner <victor.stinner@haypocalc.com>
parents: 58072
diff changeset
328
75842
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 71543
diff changeset
329 class KeywordOnly_TestCase(unittest.TestCase):
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 71543
diff changeset
330 def test_positional_args(self):
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 71543
diff changeset
331 # using all possible positional args
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 71543
diff changeset
332 self.assertEqual(
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 71543
diff changeset
333 getargs_keyword_only(1, 2),
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 71543
diff changeset
334 (1, 2, -1)
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 71543
diff changeset
335 )
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 71543
diff changeset
336
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 71543
diff changeset
337 def test_mixed_args(self):
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 71543
diff changeset
338 # positional and keyword args
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 71543
diff changeset
339 self.assertEqual(
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 71543
diff changeset
340 getargs_keyword_only(1, 2, keyword_only=3),
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 71543
diff changeset
341 (1, 2, 3)
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 71543
diff changeset
342 )
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 71543
diff changeset
343
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 71543
diff changeset
344 def test_keyword_args(self):
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 71543
diff changeset
345 # all keywords
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 71543
diff changeset
346 self.assertEqual(
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 71543
diff changeset
347 getargs_keyword_only(required=1, optional=2, keyword_only=3),
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 71543
diff changeset
348 (1, 2, 3)
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 71543
diff changeset
349 )
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 71543
diff changeset
350
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 71543
diff changeset
351 def test_optional_args(self):
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 71543
diff changeset
352 # missing optional keyword args, skipping tuples
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 71543
diff changeset
353 self.assertEqual(
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 71543
diff changeset
354 getargs_keyword_only(required=1, optional=2),
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 71543
diff changeset
355 (1, 2, -1)
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 71543
diff changeset
356 )
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 71543
diff changeset
357 self.assertEqual(
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 71543
diff changeset
358 getargs_keyword_only(required=1, keyword_only=3),
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 71543
diff changeset
359 (1, -1, 3)
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 71543
diff changeset
360 )
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 71543
diff changeset
361
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 71543
diff changeset
362 def test_required_args(self):
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 71543
diff changeset
363 self.assertEqual(
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 71543
diff changeset
364 getargs_keyword_only(1),
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 71543
diff changeset
365 (1, -1, -1)
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 71543
diff changeset
366 )
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 71543
diff changeset
367 self.assertEqual(
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 71543
diff changeset
368 getargs_keyword_only(required=1),
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 71543
diff changeset
369 (1, -1, -1)
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 71543
diff changeset
370 )
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 71543
diff changeset
371 # required arg missing
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 71543
diff changeset
372 with self.assertRaisesRegex(TypeError,
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 71543
diff changeset
373 "Required argument 'required' \(pos 1\) not found"):
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 71543
diff changeset
374 getargs_keyword_only(optional=2)
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 71543
diff changeset
375
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 71543
diff changeset
376 with self.assertRaisesRegex(TypeError,
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 71543
diff changeset
377 "Required argument 'required' \(pos 1\) not found"):
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 71543
diff changeset
378 getargs_keyword_only(keyword_only=3)
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 71543
diff changeset
379
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 71543
diff changeset
380 def test_too_many_args(self):
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 71543
diff changeset
381 with self.assertRaisesRegex(TypeError,
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 71543
diff changeset
382 "Function takes at most 2 positional arguments \(3 given\)"):
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 71543
diff changeset
383 getargs_keyword_only(1, 2, 3)
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 71543
diff changeset
384
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 71543
diff changeset
385 with self.assertRaisesRegex(TypeError,
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 71543
diff changeset
386 "function takes at most 3 arguments \(4 given\)"):
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 71543
diff changeset
387 getargs_keyword_only(1, 2, 3, keyword_only=5)
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 71543
diff changeset
388
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 71543
diff changeset
389 def test_invalid_keyword(self):
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 71543
diff changeset
390 # extraneous keyword arg
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 71543
diff changeset
391 with self.assertRaisesRegex(TypeError,
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 71543
diff changeset
392 "'monster' is an invalid keyword argument for this function"):
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 71543
diff changeset
393 getargs_keyword_only(1, 2, monster=666)
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 71543
diff changeset
394
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 71543
diff changeset
395 def test_surrogate_keyword(self):
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 71543
diff changeset
396 with self.assertRaisesRegex(TypeError,
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 71543
diff changeset
397 "'\udc80' is an invalid keyword argument for this function"):
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 71543
diff changeset
398 getargs_keyword_only(1, 2, **{'\uDC80': 10})
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 71543
diff changeset
399
62322
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
400 class Bytes_TestCase(unittest.TestCase):
71543
536fccc75f5a Issue #12380: PyArg_ParseTuple now accepts a bytearray for the 'c' format.
Eli Bendersky <eliben@gmail.com>
parents: 68257
diff changeset
401 def test_c(self):
536fccc75f5a Issue #12380: PyArg_ParseTuple now accepts a bytearray for the 'c' format.
Eli Bendersky <eliben@gmail.com>
parents: 68257
diff changeset
402 from _testcapi import getargs_c
536fccc75f5a Issue #12380: PyArg_ParseTuple now accepts a bytearray for the 'c' format.
Eli Bendersky <eliben@gmail.com>
parents: 68257
diff changeset
403 self.assertRaises(TypeError, getargs_c, b'abc') # len > 1
536fccc75f5a Issue #12380: PyArg_ParseTuple now accepts a bytearray for the 'c' format.
Eli Bendersky <eliben@gmail.com>
parents: 68257
diff changeset
404 self.assertEqual(getargs_c(b'a'), b'a')
536fccc75f5a Issue #12380: PyArg_ParseTuple now accepts a bytearray for the 'c' format.
Eli Bendersky <eliben@gmail.com>
parents: 68257
diff changeset
405 self.assertEqual(getargs_c(bytearray(b'a')), b'a')
536fccc75f5a Issue #12380: PyArg_ParseTuple now accepts a bytearray for the 'c' format.
Eli Bendersky <eliben@gmail.com>
parents: 68257
diff changeset
406 self.assertRaises(TypeError, getargs_c, memoryview(b'a'))
536fccc75f5a Issue #12380: PyArg_ParseTuple now accepts a bytearray for the 'c' format.
Eli Bendersky <eliben@gmail.com>
parents: 68257
diff changeset
407 self.assertRaises(TypeError, getargs_c, 's')
536fccc75f5a Issue #12380: PyArg_ParseTuple now accepts a bytearray for the 'c' format.
Eli Bendersky <eliben@gmail.com>
parents: 68257
diff changeset
408 self.assertRaises(TypeError, getargs_c, None)
536fccc75f5a Issue #12380: PyArg_ParseTuple now accepts a bytearray for the 'c' format.
Eli Bendersky <eliben@gmail.com>
parents: 68257
diff changeset
409
62322
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
410 def test_s(self):
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
411 from _testcapi import getargs_s
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
412 self.assertEqual(getargs_s('abc\xe9'), b'abc\xc3\xa9')
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
413 self.assertRaises(TypeError, getargs_s, 'nul:\0')
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
414 self.assertRaises(TypeError, getargs_s, b'bytes')
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
415 self.assertRaises(TypeError, getargs_s, bytearray(b'bytearray'))
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
416 self.assertRaises(TypeError, getargs_s, memoryview(b'memoryview'))
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
417 self.assertRaises(TypeError, getargs_s, None)
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
418
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
419 def test_s_star(self):
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
420 from _testcapi import getargs_s_star
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
421 self.assertEqual(getargs_s_star('abc\xe9'), b'abc\xc3\xa9')
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
422 self.assertEqual(getargs_s_star('nul:\0'), b'nul:\0')
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
423 self.assertEqual(getargs_s_star(b'bytes'), b'bytes')
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
424 self.assertEqual(getargs_s_star(bytearray(b'bytearray')), b'bytearray')
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
425 self.assertEqual(getargs_s_star(memoryview(b'memoryview')), b'memoryview')
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
426 self.assertRaises(TypeError, getargs_s_star, None)
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
427
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
428 def test_s_hash(self):
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
429 from _testcapi import getargs_s_hash
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
430 self.assertEqual(getargs_s_hash('abc\xe9'), b'abc\xc3\xa9')
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
431 self.assertEqual(getargs_s_hash('nul:\0'), b'nul:\0')
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
432 self.assertEqual(getargs_s_hash(b'bytes'), b'bytes')
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
433 self.assertRaises(TypeError, getargs_s_hash, bytearray(b'bytearray'))
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
434 self.assertRaises(TypeError, getargs_s_hash, memoryview(b'memoryview'))
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
435 self.assertRaises(TypeError, getargs_s_hash, None)
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
436
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
437 def test_z(self):
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
438 from _testcapi import getargs_z
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
439 self.assertEqual(getargs_z('abc\xe9'), b'abc\xc3\xa9')
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
440 self.assertRaises(TypeError, getargs_z, 'nul:\0')
62476
5d538d1e7098 Issue #8949: "z" format of PyArg_Parse*() functions doesn't accept bytes
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62322
diff changeset
441 self.assertRaises(TypeError, getargs_z, b'bytes')
62322
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
442 self.assertRaises(TypeError, getargs_z, bytearray(b'bytearray'))
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
443 self.assertRaises(TypeError, getargs_z, memoryview(b'memoryview'))
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
444 self.assertIsNone(getargs_z(None))
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
445
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
446 def test_z_star(self):
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
447 from _testcapi import getargs_z_star
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
448 self.assertEqual(getargs_z_star('abc\xe9'), b'abc\xc3\xa9')
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
449 self.assertEqual(getargs_z_star('nul:\0'), b'nul:\0')
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
450 self.assertEqual(getargs_z_star(b'bytes'), b'bytes')
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
451 self.assertEqual(getargs_z_star(bytearray(b'bytearray')), b'bytearray')
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
452 self.assertEqual(getargs_z_star(memoryview(b'memoryview')), b'memoryview')
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
453 self.assertIsNone(getargs_z_star(None))
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
454
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
455 def test_z_hash(self):
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
456 from _testcapi import getargs_z_hash
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
457 self.assertEqual(getargs_z_hash('abc\xe9'), b'abc\xc3\xa9')
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
458 self.assertEqual(getargs_z_hash('nul:\0'), b'nul:\0')
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
459 self.assertEqual(getargs_z_hash(b'bytes'), b'bytes')
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
460 self.assertRaises(TypeError, getargs_z_hash, bytearray(b'bytearray'))
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
461 self.assertRaises(TypeError, getargs_z_hash, memoryview(b'memoryview'))
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
462 self.assertIsNone(getargs_z_hash(None))
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
463
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
464 def test_y(self):
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
465 from _testcapi import getargs_y
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
466 self.assertRaises(TypeError, getargs_y, 'abc\xe9')
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
467 self.assertEqual(getargs_y(b'bytes'), b'bytes')
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
468 self.assertRaises(TypeError, getargs_y, b'nul:\0')
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
469 self.assertRaises(TypeError, getargs_y, bytearray(b'bytearray'))
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
470 self.assertRaises(TypeError, getargs_y, memoryview(b'memoryview'))
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
471 self.assertRaises(TypeError, getargs_y, None)
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
472
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
473 def test_y_star(self):
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
474 from _testcapi import getargs_y_star
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
475 self.assertRaises(TypeError, getargs_y_star, 'abc\xe9')
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
476 self.assertEqual(getargs_y_star(b'bytes'), b'bytes')
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
477 self.assertEqual(getargs_y_star(b'nul:\0'), b'nul:\0')
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
478 self.assertEqual(getargs_y_star(bytearray(b'bytearray')), b'bytearray')
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
479 self.assertEqual(getargs_y_star(memoryview(b'memoryview')), b'memoryview')
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
480 self.assertRaises(TypeError, getargs_y_star, None)
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
481
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
482 def test_y_hash(self):
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
483 from _testcapi import getargs_y_hash
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
484 self.assertRaises(TypeError, getargs_y_hash, 'abc\xe9')
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
485 self.assertEqual(getargs_y_hash(b'bytes'), b'bytes')
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
486 self.assertEqual(getargs_y_hash(b'nul:\0'), b'nul:\0')
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
487 self.assertRaises(TypeError, getargs_y_hash, bytearray(b'bytearray'))
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
488 self.assertRaises(TypeError, getargs_y_hash, memoryview(b'memoryview'))
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
489 self.assertRaises(TypeError, getargs_y_hash, None)
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
490
62484
bcc0e825faa0 Issue #8850: Remove "w" and "w#" formats from PyArg_Parse*() functions, use
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62476
diff changeset
491 def test_w_star(self):
bcc0e825faa0 Issue #8850: Remove "w" and "w#" formats from PyArg_Parse*() functions, use
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62476
diff changeset
492 # getargs_w_star() modifies first and last byte
bcc0e825faa0 Issue #8850: Remove "w" and "w#" formats from PyArg_Parse*() functions, use
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62476
diff changeset
493 from _testcapi import getargs_w_star
bcc0e825faa0 Issue #8850: Remove "w" and "w#" formats from PyArg_Parse*() functions, use
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62476
diff changeset
494 self.assertRaises(TypeError, getargs_w_star, 'abc\xe9')
bcc0e825faa0 Issue #8850: Remove "w" and "w#" formats from PyArg_Parse*() functions, use
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62476
diff changeset
495 self.assertRaises(TypeError, getargs_w_star, b'bytes')
bcc0e825faa0 Issue #8850: Remove "w" and "w#" formats from PyArg_Parse*() functions, use
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62476
diff changeset
496 self.assertRaises(TypeError, getargs_w_star, b'nul:\0')
67675
fc5d02ae52dd Issue #10451: memoryview objects could allow to mutate a readable buffer.
Antoine Pitrou <solipsis@pitrou.net>
parents: 66310
diff changeset
497 self.assertRaises(TypeError, getargs_w_star, memoryview(b'bytes'))
62484
bcc0e825faa0 Issue #8850: Remove "w" and "w#" formats from PyArg_Parse*() functions, use
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62476
diff changeset
498 self.assertEqual(getargs_w_star(bytearray(b'bytearray')), b'[ytearra]')
67675
fc5d02ae52dd Issue #10451: memoryview objects could allow to mutate a readable buffer.
Antoine Pitrou <solipsis@pitrou.net>
parents: 66310
diff changeset
499 self.assertEqual(getargs_w_star(memoryview(bytearray(b'memoryview'))),
fc5d02ae52dd Issue #10451: memoryview objects could allow to mutate a readable buffer.
Antoine Pitrou <solipsis@pitrou.net>
parents: 66310
diff changeset
500 b'[emoryvie]')
62484
bcc0e825faa0 Issue #8850: Remove "w" and "w#" formats from PyArg_Parse*() functions, use
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62476
diff changeset
501 self.assertRaises(TypeError, getargs_w_star, None)
bcc0e825faa0 Issue #8850: Remove "w" and "w#" formats from PyArg_Parse*() functions, use
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62476
diff changeset
502
62322
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
503
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
504 class Unicode_TestCase(unittest.TestCase):
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
505 def test_u(self):
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
506 from _testcapi import getargs_u
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
507 self.assertEqual(getargs_u('abc\xe9'), 'abc\xe9')
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
508 self.assertRaises(TypeError, getargs_u, 'nul:\0')
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
509 self.assertRaises(TypeError, getargs_u, b'bytes')
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
510 self.assertRaises(TypeError, getargs_u, bytearray(b'bytearray'))
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
511 self.assertRaises(TypeError, getargs_u, memoryview(b'memoryview'))
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
512 self.assertRaises(TypeError, getargs_u, None)
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
513
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
514 def test_u_hash(self):
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
515 from _testcapi import getargs_u_hash
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
516 self.assertEqual(getargs_u_hash('abc\xe9'), 'abc\xe9')
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
517 self.assertEqual(getargs_u_hash('nul:\0'), 'nul:\0')
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
518 self.assertRaises(TypeError, getargs_u_hash, b'bytes')
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
519 self.assertRaises(TypeError, getargs_u_hash, bytearray(b'bytearray'))
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
520 self.assertRaises(TypeError, getargs_u_hash, memoryview(b'memoryview'))
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
521 self.assertRaises(TypeError, getargs_u_hash, None)
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
522
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
523 def test_Z(self):
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
524 from _testcapi import getargs_Z
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
525 self.assertEqual(getargs_Z('abc\xe9'), 'abc\xe9')
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
526 self.assertRaises(TypeError, getargs_Z, 'nul:\0')
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
527 self.assertRaises(TypeError, getargs_Z, b'bytes')
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
528 self.assertRaises(TypeError, getargs_Z, bytearray(b'bytearray'))
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
529 self.assertRaises(TypeError, getargs_Z, memoryview(b'memoryview'))
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
530 self.assertIsNone(getargs_Z(None))
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
531
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
532 def test_Z_hash(self):
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
533 from _testcapi import getargs_Z_hash
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
534 self.assertEqual(getargs_Z_hash('abc\xe9'), 'abc\xe9')
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
535 self.assertEqual(getargs_Z_hash('nul:\0'), 'nul:\0')
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
536 self.assertRaises(TypeError, getargs_Z_hash, b'bytes')
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
537 self.assertRaises(TypeError, getargs_Z_hash, bytearray(b'bytearray'))
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
538 self.assertRaises(TypeError, getargs_Z_hash, memoryview(b'memoryview'))
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
539 self.assertIsNone(getargs_Z_hash(None))
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
540
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62221
diff changeset
541
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents:
diff changeset
542 if __name__ == "__main__":
84108
05f7883ee92d Update various test modules to use unittest.main() for test discovery
Brett Cannon <brett@python.org>
parents: 82957
diff changeset
543 unittest.main()