From 9e9dcd6d4225faa6a8b19120f009e0253d16ab92 Mon Sep 17 00:00:00 2001 From: Barry Warsaw Date: Fri, 17 Oct 2008 01:50:37 +0000 Subject: [PATCH] STINNER Victor (haypo)'s patch for bug 3988, Byte warning mode and b'' != '' Also, his patch to runtests.sh to pass the -bb option (issue 4125). --- Lib/test/test_bytes.py | 12 ++++++++++++ Objects/bytearrayobject.c | 2 +- Objects/bytesobject.c | 2 +- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/Lib/test/test_bytes.py b/Lib/test/test_bytes.py index 81d2dad3d21..c3681437d54 100644 --- a/Lib/test/test_bytes.py +++ b/Lib/test/test_bytes.py @@ -9,6 +9,7 @@ import os import re import sys import copy +import operator import pickle import tempfile import unittest @@ -863,6 +864,17 @@ class AssortedBytesTest(unittest.TestCase): b = bytearray() self.failIf(b.replace(b'', b'') is b) + def test_compare(self): + if sys.flags.bytes_warning: + warnings.simplefilter('error', BytesWarning) + self.assertRaises(BytesWarning, operator.eq, b'', '') + self.assertRaises(BytesWarning, operator.ne, b'', '') + self.assertRaises(BytesWarning, operator.eq, bytearray(b''), '') + self.assertRaises(BytesWarning, operator.ne, bytearray(b''), '') + else: + # raise test.support.TestSkipped("BytesWarning is needed for this test: use -bb option") + pass + # Optimizations: # __iter__? (optimization) # __reversed__? (optimization) diff --git a/Objects/bytearrayobject.c b/Objects/bytearrayobject.c index 03e51e8a43d..997a8355512 100644 --- a/Objects/bytearrayobject.c +++ b/Objects/bytearrayobject.c @@ -939,7 +939,7 @@ bytes_richcompare(PyObject *self, PyObject *other, int op) error, even if the comparison is for equality. */ if (PyObject_IsInstance(self, (PyObject*)&PyUnicode_Type) || PyObject_IsInstance(other, (PyObject*)&PyUnicode_Type)) { - if (Py_BytesWarningFlag && op == Py_EQ) { + if (Py_BytesWarningFlag && (op == Py_EQ || op == Py_NE)) { if (PyErr_WarnEx(PyExc_BytesWarning, "Comparison between bytearray and string", 1)) return NULL; diff --git a/Objects/bytesobject.c b/Objects/bytesobject.c index 0d0efc9689e..76b7f522005 100644 --- a/Objects/bytesobject.c +++ b/Objects/bytesobject.c @@ -818,7 +818,7 @@ string_richcompare(PyBytesObject *a, PyBytesObject *b, int op) /* Make sure both arguments are strings. */ if (!(PyBytes_Check(a) && PyBytes_Check(b))) { - if (Py_BytesWarningFlag && (op == Py_EQ) && + if (Py_BytesWarningFlag && (op == Py_EQ || op == Py_NE) && (PyObject_IsInstance((PyObject*)a, (PyObject*)&PyUnicode_Type) || PyObject_IsInstance((PyObject*)b,