diff --git a/Lib/test/test_bytes.py b/Lib/test/test_bytes.py index bd3410f7e48..966e287afee 100644 --- a/Lib/test/test_bytes.py +++ b/Lib/test/test_bytes.py @@ -483,26 +483,33 @@ class BaseBytesTest: self.assertRaises(ValueError, b.rindex, w, 1, 3) def test_mod(self): - b = b'hello, %b!' + b = self.type2test(b'hello, %b!') orig = b b = b % b'world' self.assertEqual(b, b'hello, world!') self.assertEqual(orig, b'hello, %b!') self.assertFalse(b is orig) - b = b'%s / 100 = %d%%' + b = self.type2test(b'%s / 100 = %d%%') a = b % (b'seventy-nine', 79) self.assertEqual(a, b'seventy-nine / 100 = 79%') + self.assertIs(type(a), bytes) def test_imod(self): - b = b'hello, %b!' + b = self.type2test(b'hello, %b!') orig = b b %= b'world' self.assertEqual(b, b'hello, world!') self.assertEqual(orig, b'hello, %b!') self.assertFalse(b is orig) - b = b'%s / 100 = %d%%' + b = self.type2test(b'%s / 100 = %d%%') b %= (b'seventy-nine', 79) self.assertEqual(b, b'seventy-nine / 100 = 79%') + self.assertIs(type(b), bytes) + + def test_rmod(self): + with self.assertRaises(TypeError): + object() % self.type2test(b'abc') + self.assertIs(self.type2test(b'abc').__rmod__('%r'), NotImplemented) def test_replace(self): b = self.type2test(b'mississippi') @@ -1064,28 +1071,6 @@ class ByteArrayTest(BaseBytesTest, unittest.TestCase): b[8:] = b self.assertEqual(b, bytearray(list(range(8)) + list(range(256)))) - def test_mod(self): - b = bytearray(b'hello, %b!') - orig = b - b = b % b'world' - self.assertEqual(b, b'hello, world!') - self.assertEqual(orig, bytearray(b'hello, %b!')) - self.assertFalse(b is orig) - b = bytearray(b'%s / 100 = %d%%') - a = b % (b'seventy-nine', 79) - self.assertEqual(a, bytearray(b'seventy-nine / 100 = 79%')) - - def test_imod(self): - b = bytearray(b'hello, %b!') - orig = b - b %= b'world' - self.assertEqual(b, b'hello, world!') - self.assertEqual(orig, bytearray(b'hello, %b!')) - self.assertFalse(b is orig) - b = bytearray(b'%s / 100 = %d%%') - b %= (b'seventy-nine', 79) - self.assertEqual(b, bytearray(b'seventy-nine / 100 = 79%')) - def test_iconcat(self): b = bytearray(b"abc") b1 = b diff --git a/Objects/bytesobject.c b/Objects/bytesobject.c index b935375e230..ec03233ba38 100644 --- a/Objects/bytesobject.c +++ b/Objects/bytesobject.c @@ -3282,15 +3282,13 @@ bytes_methods[] = { }; static PyObject * -bytes_mod(PyObject *self, PyObject *args) +bytes_mod(PyObject *self, PyObject *arg) { - if (self == NULL || !PyBytes_Check(self)) { - PyErr_BadInternalCall(); - return NULL; + if (!PyBytes_Check(self)) { + Py_RETURN_NOTIMPLEMENTED; } - return _PyBytes_FormatEx(PyBytes_AS_STRING(self), PyBytes_GET_SIZE(self), - args, 0); + arg, 0); } static PyNumberMethods bytes_as_number = {