mirror of https://github.com/python/cpython
bpo-42882: Add test_embed.test_unicode_id_init() (GH-24198)
Test that _PyUnicode_FromId() works when Python is initialized multiples times.
This commit is contained in:
parent
44bf57aca6
commit
11d13e83ab
|
@ -1472,5 +1472,11 @@ class AuditingTests(EmbeddingTestsMixin, unittest.TestCase):
|
|||
timeout=support.SHORT_TIMEOUT,
|
||||
returncode=1)
|
||||
|
||||
class MiscTests(EmbeddingTestsMixin, unittest.TestCase):
|
||||
def test_unicode_id_init(self):
|
||||
# bpo-42882: Test that _PyUnicode_FromId() works
|
||||
# when Python is initialized multiples times.
|
||||
self.run_embedded_interpreter("test_unicode_id_init")
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
|
|
@ -1686,6 +1686,42 @@ static int test_get_argc_argv(void)
|
|||
}
|
||||
|
||||
|
||||
static int test_unicode_id_init(void)
|
||||
{
|
||||
// bpo-42882: Test that _PyUnicode_FromId() works
|
||||
// when Python is initialized multiples times.
|
||||
_Py_IDENTIFIER(test_unicode_id_init);
|
||||
|
||||
// Initialize Python once without using the identifier
|
||||
_testembed_Py_Initialize();
|
||||
Py_Finalize();
|
||||
|
||||
// Now initialize Python multiple times and use the identifier.
|
||||
// The first _PyUnicode_FromId() call initializes the identifier index.
|
||||
for (int i=0; i<3; i++) {
|
||||
_testembed_Py_Initialize();
|
||||
|
||||
PyObject *str1, *str2;
|
||||
|
||||
str1 = _PyUnicode_FromId(&PyId_test_unicode_id_init);
|
||||
assert(str1 != NULL);
|
||||
assert(Py_REFCNT(str1) == 1);
|
||||
|
||||
str2 = PyUnicode_FromString("test_unicode_id_init");
|
||||
assert(str2 != NULL);
|
||||
|
||||
assert(PyUnicode_Compare(str1, str2) == 0);
|
||||
|
||||
// str1 is a borrowed reference
|
||||
Py_DECREF(str2);
|
||||
|
||||
Py_Finalize();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* *********************************************************
|
||||
* List of test cases and the function that implements it.
|
||||
*
|
||||
|
@ -1754,6 +1790,8 @@ static struct TestCase TestCases[] = {
|
|||
{"test_audit_run_interactivehook", test_audit_run_interactivehook},
|
||||
{"test_audit_run_startup", test_audit_run_startup},
|
||||
{"test_audit_run_stdin", test_audit_run_stdin},
|
||||
|
||||
{"test_unicode_id_init", test_unicode_id_init},
|
||||
{NULL, NULL}
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue