import collections.abc
import unittest
from test import support
-from test.support import import_helper
+from test.support import import_helper, script_helper
from test.support import os_helper
from test.support import _2G
from test.support import subTests
self.assertRaises(ValueError, array.array, 'x')
self.assertRaises(ValueError, array.array, 'Z')
+ @support.cpython_only
+ def test_does_not_crash_on_broken_imports(self):
+ # gh-153210
+ code = """if 1:
+ import collections.abc
+
+ del collections.abc.MutableSequence
+
+ try:
+ import array # it used to crash before
+ except AttributeError:
+ pass
+ else:
+ raise AssertionError('AttributeError was not raised')
+ """
+ script_helper.assert_python_ok('-c', code)
+
@support.cpython_only
def test_disallow_instantiation(self):
my_array = array.array("I")
CREATE_TYPE(m, state->ArrayIterType, &arrayiter_spec);
Py_SET_TYPE(state->ArrayIterType, &PyType_Type);
- if (PyModule_AddObjectRef(m, "ArrayType",
- (PyObject *)state->ArrayType) < 0) {
- return -1;
- }
-
PyObject *mutablesequence = PyImport_ImportModuleAttrString(
"collections.abc", "MutableSequence");
if (!mutablesequence) {
- Py_DECREF((PyObject *)state->ArrayType);
return -1;
}
PyObject *res = PyObject_CallMethod(mutablesequence, "register", "O",
(PyObject *)state->ArrayType);
Py_DECREF(mutablesequence);
if (!res) {
- Py_DECREF((PyObject *)state->ArrayType);
return -1;
}
Py_DECREF(res);