(self)
| 1208 | |
| 1209 | # Test PyBytes_FromFormat() |
| 1210 | def test_from_format(self): |
| 1211 | ctypes = import_helper.import_module('ctypes') |
| 1212 | _testcapi = import_helper.import_module('_testcapi') |
| 1213 | from ctypes import pythonapi, py_object |
| 1214 | from ctypes import ( |
| 1215 | c_int, c_uint, |
| 1216 | c_long, c_ulong, |
| 1217 | c_size_t, c_ssize_t, |
| 1218 | c_char_p) |
| 1219 | |
| 1220 | PyBytes_FromFormat = pythonapi.PyBytes_FromFormat |
| 1221 | PyBytes_FromFormat.argtypes = (c_char_p,) |
| 1222 | PyBytes_FromFormat.restype = py_object |
| 1223 | |
| 1224 | # basic tests |
| 1225 | self.assertEqual(PyBytes_FromFormat(b'format'), |
| 1226 | b'format') |
| 1227 | self.assertEqual(PyBytes_FromFormat(b'Hello %s !', b'world'), |
| 1228 | b'Hello world !') |
| 1229 | |
| 1230 | # test formatters |
| 1231 | self.assertEqual(PyBytes_FromFormat(b'c=%c', c_int(0)), |
| 1232 | b'c=\0') |
| 1233 | self.assertEqual(PyBytes_FromFormat(b'c=%c', c_int(ord('@'))), |
| 1234 | b'c=@') |
| 1235 | self.assertEqual(PyBytes_FromFormat(b'c=%c', c_int(255)), |
| 1236 | b'c=\xff') |
| 1237 | self.assertEqual(PyBytes_FromFormat(b'd=%d ld=%ld zd=%zd', |
| 1238 | c_int(1), c_long(2), |
| 1239 | c_size_t(3)), |
| 1240 | b'd=1 ld=2 zd=3') |
| 1241 | self.assertEqual(PyBytes_FromFormat(b'd=%d ld=%ld zd=%zd', |
| 1242 | c_int(-1), c_long(-2), |
| 1243 | c_size_t(-3)), |
| 1244 | b'd=-1 ld=-2 zd=-3') |
| 1245 | self.assertEqual(PyBytes_FromFormat(b'u=%u lu=%lu zu=%zu', |
| 1246 | c_uint(123), c_ulong(456), |
| 1247 | c_size_t(789)), |
| 1248 | b'u=123 lu=456 zu=789') |
| 1249 | self.assertEqual(PyBytes_FromFormat(b'i=%i', c_int(123)), |
| 1250 | b'i=123') |
| 1251 | self.assertEqual(PyBytes_FromFormat(b'i=%i', c_int(-123)), |
| 1252 | b'i=-123') |
| 1253 | self.assertEqual(PyBytes_FromFormat(b'x=%x', c_int(0xabc)), |
| 1254 | b'x=abc') |
| 1255 | |
| 1256 | sizeof_ptr = ctypes.sizeof(c_char_p) |
| 1257 | |
| 1258 | if os.name == 'nt': |
| 1259 | # Windows (MSCRT) |
| 1260 | ptr_format = '0x%0{}X'.format(2 * sizeof_ptr) |
| 1261 | def ptr_formatter(ptr): |
| 1262 | return (ptr_format % ptr) |
| 1263 | else: |
| 1264 | # UNIX (glibc) |
| 1265 | def ptr_formatter(ptr): |
| 1266 | return '%#x' % ptr |
| 1267 |
nothing calls this directly
no test coverage detected