mirror of
https://github.com/python/cpython.git
synced 2025-10-03 05:35:59 +00:00
"Fix" the array module test -- by ripping out the 'c' typecode.
(We already have 'b' for bytes and 'u' for unicode.)
This commit is contained in:
parent
c43e79f3c8
commit
31f72d72b1
2 changed files with 6 additions and 67 deletions
|
@ -17,7 +17,7 @@ class ArraySubclassWithKwargs(array.array):
|
||||||
array.array.__init__(typecode)
|
array.array.__init__(typecode)
|
||||||
|
|
||||||
tests = [] # list to accumulate all tests
|
tests = [] # list to accumulate all tests
|
||||||
typecodes = "cubBhHiIlLfd"
|
typecodes = "ubBhHiIlLfd"
|
||||||
|
|
||||||
class BadConstructorTest(unittest.TestCase):
|
class BadConstructorTest(unittest.TestCase):
|
||||||
|
|
||||||
|
@ -676,7 +676,7 @@ class BaseTest(unittest.TestCase):
|
||||||
|
|
||||||
def test_buffer(self):
|
def test_buffer(self):
|
||||||
a = array.array(self.typecode, self.example)
|
a = array.array(self.typecode, self.example)
|
||||||
b = buffer(a)
|
b = bytes(buffer(a))
|
||||||
self.assertEqual(b[0], a.tostring()[0])
|
self.assertEqual(b[0], a.tostring()[0])
|
||||||
|
|
||||||
def test_weakref(self):
|
def test_weakref(self):
|
||||||
|
@ -708,44 +708,6 @@ class StringTest(BaseTest):
|
||||||
a = array.array(self.typecode, self.example)
|
a = array.array(self.typecode, self.example)
|
||||||
self.assertRaises(TypeError, a.__setitem__, 0, self.example[:2])
|
self.assertRaises(TypeError, a.__setitem__, 0, self.example[:2])
|
||||||
|
|
||||||
class CharacterTest(StringTest):
|
|
||||||
typecode = 'c'
|
|
||||||
example = '\x01azAZ\x00\xfe'
|
|
||||||
smallerexample = '\x01azAY\x00\xfe'
|
|
||||||
biggerexample = '\x01azAZ\x00\xff'
|
|
||||||
outside = '\x33'
|
|
||||||
minitemsize = 1
|
|
||||||
|
|
||||||
def test_subbclassing(self):
|
|
||||||
class EditableString(array.array):
|
|
||||||
def __new__(cls, s, *args, **kwargs):
|
|
||||||
return array.array.__new__(cls, 'c', s)
|
|
||||||
|
|
||||||
def __init__(self, s, color='blue'):
|
|
||||||
self.color = color
|
|
||||||
|
|
||||||
def strip(self):
|
|
||||||
self[:] = array.array('c', self.tostring().strip())
|
|
||||||
|
|
||||||
def __repr__(self):
|
|
||||||
return 'EditableString(%r)' % self.tostring()
|
|
||||||
|
|
||||||
s = EditableString("\ttest\r\n")
|
|
||||||
s.strip()
|
|
||||||
self.assertEqual(s.tostring(), "test")
|
|
||||||
|
|
||||||
self.assertEqual(s.color, "blue")
|
|
||||||
s.color = "red"
|
|
||||||
self.assertEqual(s.color, "red")
|
|
||||||
self.assertEqual(list(s.__dict__.keys()), ["color"])
|
|
||||||
|
|
||||||
def test_nounicode(self):
|
|
||||||
a = array.array(self.typecode, self.example)
|
|
||||||
self.assertRaises(ValueError, a.fromunicode, str(''))
|
|
||||||
self.assertRaises(ValueError, a.tounicode)
|
|
||||||
|
|
||||||
tests.append(CharacterTest)
|
|
||||||
|
|
||||||
class UnicodeTest(StringTest):
|
class UnicodeTest(StringTest):
|
||||||
typecode = 'u'
|
typecode = 'u'
|
||||||
example = '\x01\u263a\x00\ufeff'
|
example = '\x01\u263a\x00\ufeff'
|
||||||
|
|
|
@ -101,25 +101,6 @@ Note that the basic Get and Set functions do NOT check that the index is
|
||||||
in bounds; that's the responsibility of the caller.
|
in bounds; that's the responsibility of the caller.
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
static PyObject *
|
|
||||||
c_getitem(arrayobject *ap, Py_ssize_t i)
|
|
||||||
{
|
|
||||||
Py_UNICODE buf[1];
|
|
||||||
buf[0] = ((unsigned char *)ap->ob_item)[i];
|
|
||||||
return PyUnicode_FromUnicode(buf, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
c_setitem(arrayobject *ap, Py_ssize_t i, PyObject *v)
|
|
||||||
{
|
|
||||||
char x;
|
|
||||||
if (!PyArg_Parse(v, "c;array item must be char", &x))
|
|
||||||
return -1;
|
|
||||||
if (i >= 0)
|
|
||||||
((char *)ap->ob_item)[i] = x;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
b_getitem(arrayobject *ap, Py_ssize_t i)
|
b_getitem(arrayobject *ap, Py_ssize_t i)
|
||||||
{
|
{
|
||||||
|
@ -391,7 +372,6 @@ d_setitem(arrayobject *ap, Py_ssize_t i, PyObject *v)
|
||||||
|
|
||||||
/* Description of types */
|
/* Description of types */
|
||||||
static struct arraydescr descriptors[] = {
|
static struct arraydescr descriptors[] = {
|
||||||
{'c', sizeof(char), c_getitem, c_setitem},
|
|
||||||
{'b', sizeof(char), b_getitem, b_setitem},
|
{'b', sizeof(char), b_getitem, b_setitem},
|
||||||
{'B', sizeof(char), BB_getitem, BB_setitem},
|
{'B', sizeof(char), BB_getitem, BB_setitem},
|
||||||
{'u', sizeof(Py_UNICODE), u_getitem, u_setitem},
|
{'u', sizeof(Py_UNICODE), u_getitem, u_setitem},
|
||||||
|
@ -1403,8 +1383,8 @@ values,as if it had been read from a file using the fromfile() method).");
|
||||||
static PyObject *
|
static PyObject *
|
||||||
array_tostring(arrayobject *self, PyObject *unused)
|
array_tostring(arrayobject *self, PyObject *unused)
|
||||||
{
|
{
|
||||||
return PyString_FromStringAndSize(self->ob_item,
|
return PyBytes_FromStringAndSize(self->ob_item,
|
||||||
self->ob_size * self->ob_descr->itemsize);
|
self->ob_size * self->ob_descr->itemsize);
|
||||||
}
|
}
|
||||||
|
|
||||||
PyDoc_STRVAR(tostring_doc,
|
PyDoc_STRVAR(tostring_doc,
|
||||||
|
@ -1562,9 +1542,7 @@ array_repr(arrayobject *a)
|
||||||
if (len == 0) {
|
if (len == 0) {
|
||||||
return PyUnicode_FromFormat("array('%c')", typecode);
|
return PyUnicode_FromFormat("array('%c')", typecode);
|
||||||
}
|
}
|
||||||
if (typecode == 'c')
|
if (typecode == 'u')
|
||||||
v = array_tostring(a, NULL);
|
|
||||||
else if (typecode == 'u')
|
|
||||||
v = array_tounicode(a, NULL);
|
v = array_tounicode(a, NULL);
|
||||||
else
|
else
|
||||||
v = array_tolist(a, NULL);
|
v = array_tolist(a, NULL);
|
||||||
|
@ -1899,7 +1877,7 @@ array_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
PyErr_SetString(PyExc_ValueError,
|
PyErr_SetString(PyExc_ValueError,
|
||||||
"bad typecode (must be c, b, B, u, h, H, i, I, l, L, f or d)");
|
"bad typecode (must be b, B, u, h, H, i, I, l, L, f or d)");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1913,7 +1891,6 @@ type is specified at object creation time by using a type code, which\n\
|
||||||
is a single character. The following type codes are defined:\n\
|
is a single character. The following type codes are defined:\n\
|
||||||
\n\
|
\n\
|
||||||
Type code C Type Minimum size in bytes \n\
|
Type code C Type Minimum size in bytes \n\
|
||||||
'c' character 1 \n\
|
|
||||||
'b' signed integer 1 \n\
|
'b' signed integer 1 \n\
|
||||||
'B' unsigned integer 1 \n\
|
'B' unsigned integer 1 \n\
|
||||||
'u' Unicode character 2 \n\
|
'u' Unicode character 2 \n\
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue