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,
|
timeout=support.SHORT_TIMEOUT,
|
||||||
returncode=1)
|
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__":
|
if __name__ == "__main__":
|
||||||
unittest.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.
|
* 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_interactivehook", test_audit_run_interactivehook},
|
||||||
{"test_audit_run_startup", test_audit_run_startup},
|
{"test_audit_run_startup", test_audit_run_startup},
|
||||||
{"test_audit_run_stdin", test_audit_run_stdin},
|
{"test_audit_run_stdin", test_audit_run_stdin},
|
||||||
|
|
||||||
|
{"test_unicode_id_init", test_unicode_id_init},
|
||||||
{NULL, NULL}
|
{NULL, NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue