@@ -298,6 +298,86 @@ def test_getitem_with_error(self):
298
298
# test _Py_CheckFunctionResult() instead.
299
299
self .assertIn ('returned a result with an exception set' , err )
300
300
301
+ def test_buildvalue (self ):
302
+ # Test Py_BuildValue() with object arguments
303
+ buildvalue = _testcapi .py_buildvalue
304
+ self .assertEqual (buildvalue ('' ), None )
305
+ self .assertEqual (buildvalue ('()' ), ())
306
+ self .assertEqual (buildvalue ('[]' ), [])
307
+ self .assertEqual (buildvalue ('{}' ), {})
308
+ self .assertEqual (buildvalue ('()[]{}' ), ((), [], {}))
309
+ self .assertEqual (buildvalue ('O' , 1 ), 1 )
310
+ self .assertEqual (buildvalue ('(O)' , 1 ), (1 ,))
311
+ self .assertEqual (buildvalue ('[O]' , 1 ), [1 ])
312
+ self .assertRaises (SystemError , buildvalue , '{O}' , 1 )
313
+ self .assertEqual (buildvalue ('OO' , 1 , 2 ), (1 , 2 ))
314
+ self .assertEqual (buildvalue ('(OO)' , 1 , 2 ), (1 , 2 ))
315
+ self .assertEqual (buildvalue ('[OO]' , 1 , 2 ), [1 , 2 ])
316
+ self .assertEqual (buildvalue ('{OO}' , 1 , 2 ), {1 : 2 })
317
+ self .assertEqual (buildvalue ('{OOOO}' , 1 , 2 , 3 , 4 ), {1 : 2 , 3 : 4 })
318
+ self .assertEqual (buildvalue ('((O))' , 1 ), ((1 ,),))
319
+ self .assertEqual (buildvalue ('((OO))' , 1 , 2 ), ((1 , 2 ),))
320
+
321
+ self .assertEqual (buildvalue (' \t ,:' ), None )
322
+ self .assertEqual (buildvalue (' O ' , 1 ), 1 )
323
+ self .assertEqual (buildvalue ('\t O\t ' , 1 ), 1 )
324
+ self .assertEqual (buildvalue ('O,O' , 1 , 2 ), (1 , 2 ))
325
+ self .assertEqual (buildvalue ('O, O' , 1 , 2 ), (1 , 2 ))
326
+ self .assertEqual (buildvalue ('O,\t O' , 1 , 2 ), (1 , 2 ))
327
+ self .assertEqual (buildvalue ('O O' , 1 , 2 ), (1 , 2 ))
328
+ self .assertEqual (buildvalue ('O\t O' , 1 , 2 ), (1 , 2 ))
329
+ self .assertEqual (buildvalue ('(O,O)' , 1 , 2 ), (1 , 2 ))
330
+ self .assertEqual (buildvalue ('(O, O)' , 1 , 2 ), (1 , 2 ))
331
+ self .assertEqual (buildvalue (' ( O O) ' , 1 , 2 ), (1 , 2 ))
332
+ self .assertEqual (buildvalue ('\t (\t O\t O)\t ' , 1 , 2 ), (1 , 2 ))
333
+ self .assertEqual (buildvalue ('[O,O]' , 1 , 2 ), [1 , 2 ])
334
+ self .assertEqual (buildvalue ('[O, O]' , 1 , 2 ), [1 , 2 ])
335
+ self .assertEqual (buildvalue (' [ O O] ' , 1 , 2 ), [1 , 2 ])
336
+ self .assertEqual (buildvalue ('{O:O}' , 1 , 2 ), {1 : 2 })
337
+ self .assertEqual (buildvalue ('{O:O,O:O}' , 1 , 2 , 3 , 4 ), {1 : 2 , 3 : 4 })
338
+ self .assertEqual (buildvalue ('{O: O, O: O}' , 1 , 2 , 3 , 4 ), {1 : 2 , 3 : 4 })
339
+ self .assertEqual (buildvalue (' { O O O O} ' , 1 , 2 , 3 , 4 ), {1 : 2 , 3 : 4 })
340
+ self .assertEqual (buildvalue ('\t {\t O\t O\t O\t O}\t ' , 1 , 2 , 3 , 4 ), {1 : 2 , 3 : 4 })
341
+
342
+ self .assertRaises (SystemError , buildvalue , 'O' , NULL )
343
+ self .assertRaises (SystemError , buildvalue , '(O)' , NULL )
344
+ self .assertRaises (SystemError , buildvalue , '[O]' , NULL )
345
+ self .assertRaises (SystemError , buildvalue , '{O}' , NULL )
346
+ self .assertRaises (SystemError , buildvalue , 'OO' , 1 , NULL )
347
+ self .assertRaises (SystemError , buildvalue , 'OO' , NULL , 2 )
348
+ self .assertRaises (SystemError , buildvalue , '(OO)' , 1 , NULL )
349
+ self .assertRaises (SystemError , buildvalue , '(OO)' , NULL , 2 )
350
+ self .assertRaises (SystemError , buildvalue , '[OO]' , 1 , NULL )
351
+ self .assertRaises (SystemError , buildvalue , '[OO]' , NULL , 2 )
352
+ self .assertRaises (SystemError , buildvalue , '{OO}' , 1 , NULL )
353
+ self .assertRaises (SystemError , buildvalue , '{OO}' , NULL , 2 )
354
+
355
+ def test_buildvalue_ints (self ):
356
+ # Test Py_BuildValue() with integer arguments
357
+ buildvalue = _testcapi .py_buildvalue_ints
358
+ from _testcapi import SHRT_MIN , SHRT_MAX , USHRT_MAX , INT_MIN , INT_MAX , UINT_MAX
359
+ self .assertEqual (buildvalue ('i' , INT_MAX ), INT_MAX )
360
+ self .assertEqual (buildvalue ('i' , INT_MIN ), INT_MIN )
361
+ self .assertEqual (buildvalue ('I' , UINT_MAX ), UINT_MAX )
362
+
363
+ self .assertEqual (buildvalue ('h' , SHRT_MAX ), SHRT_MAX )
364
+ self .assertEqual (buildvalue ('h' , SHRT_MIN ), SHRT_MIN )
365
+ self .assertEqual (buildvalue ('H' , USHRT_MAX ), USHRT_MAX )
366
+
367
+ self .assertEqual (buildvalue ('b' , 127 ), 127 )
368
+ self .assertEqual (buildvalue ('b' , - 128 ), - 128 )
369
+ self .assertEqual (buildvalue ('B' , 255 ), 255 )
370
+
371
+ self .assertEqual (buildvalue ('c' , ord ('A' )), b'A' )
372
+ self .assertEqual (buildvalue ('c' , 255 ), b'\xff ' )
373
+ self .assertEqual (buildvalue ('c' , 256 ), b'\x00 ' )
374
+ self .assertEqual (buildvalue ('c' , - 1 ), b'\xff ' )
375
+
376
+ self .assertEqual (buildvalue ('C' , 255 ), chr (255 ))
377
+ self .assertEqual (buildvalue ('C' , 256 ), chr (256 ))
378
+ self .assertEqual (buildvalue ('C' , sys .maxunicode ), chr (sys .maxunicode ))
379
+ self .assertRaises (ValueError , buildvalue , 'C' , - 1 )
380
+ self .assertRaises (ValueError , buildvalue , 'C' , sys .maxunicode + 1 )
301
381
def test_buildvalue_N (self ):
302
382
_testcapi .test_buildvalue_N ()
303
383
0 commit comments