Skip to content

Commit 9100b02

Browse files
committed
Add (failing) tests for the resurrection of % formatting for bytes (PEP 461)
See feature requests #54 and #55
1 parent edf03a8 commit 9100b02

File tree

1 file changed

+66
-0
lines changed

1 file changed

+66
-0
lines changed

future/tests/test_bytes.py

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -534,6 +534,72 @@ def test_maketrans(self):
534534
self.assertRaises(ValueError, bytes.maketrans, b'abc', b'xyzq')
535535
self.assertRaises(TypeError, bytes.maketrans, 'abc', 'def')
536536

537+
@unittest.expectedFailure
538+
def test_mod(self):
539+
"""
540+
Test for the PEP 461 functionality (resurrection of %s formatting for
541+
bytes).
542+
"""
543+
b1 = bytes(b'abc%b')
544+
b2 = b1 % b'def'
545+
self.assertEqual(b2, b'abcdef')
546+
self.assertTrue(isinstance(b2, bytes))
547+
self.assertEqual(type(b2), bytes)
548+
b3 = b1 % bytes(b'def')
549+
self.assertEqual(b3, b'abcdef')
550+
self.assertTrue(isinstance(b3, bytes))
551+
self.assertEqual(type(b3), bytes)
552+
553+
# %s is supported for backwards compatibility with Py2's str
554+
b4 = bytes(b'abc%s')
555+
b5 = b4 % b'def'
556+
self.assertEqual(b5, b'abcdef')
557+
self.assertTrue(isinstance(b5, bytes))
558+
self.assertEqual(type(b5), bytes)
559+
b6 = b4 % bytes(b'def')
560+
self.assertEqual(b6, b'abcdef')
561+
self.assertTrue(isinstance(b6, bytes))
562+
self.assertEqual(type(b6), bytes)
563+
564+
self.assertEqual(bytes(b'%c') % 48, b'0')
565+
self.assertEqual(bytes(b'%c') % b'a', b'a')
566+
567+
# For any numeric code %x, formatting of
568+
# b"%x" % val
569+
# is supposed to be equivalent to
570+
# ("%x" % val).encode("ascii")
571+
for code in b'xdiouxXeEfFgG':
572+
pct_str = u"%" + code.decode('ascii')
573+
for val in range(300):
574+
self.assertEqual(bytes(b"%" + code) % val,
575+
(pct_str % val).encode("ascii"))
576+
577+
with self.assertRaises(TypeError):
578+
bytes(b'%b') % 3.14
579+
# Traceback (most recent call last):
580+
# ...
581+
# TypeError: b'%b' does not accept 'float'
582+
583+
with self.assertRaises(TypeError):
584+
bytes(b'%b') % 'hello world!'
585+
# Traceback (most recent call last):
586+
# ...
587+
# TypeError: b'%b' does not accept 'str'
588+
589+
self.assertEqual(bytes(b'%a') % 3.14, b'3.14')
590+
591+
self.assertEqual(bytes(b'%a') % b'abc', b"b'abc'")
592+
self.assertEqual(bytes(b'%a') % bytes(b'abc'), b"b'abc'")
593+
594+
self.assertEqual(bytes(b'%a') % 'def', b"'def'")
595+
596+
# PEP 461 specifes that %r is not supported.
597+
with self.assertRaises(TypeError):
598+
bytes(b'%r' % b'abc')
599+
600+
with self.assertRaises(TypeError):
601+
bytes(b'%r' % 'abc')
602+
537603

538604
if __name__ == '__main__':
539605
unittest.main()

0 commit comments

Comments
 (0)