3b36b495e5
Fedora self-contained change: https://fedoraproject.org/wiki/Changes/python3_c.utf-8_locale Since the backport is based on some changes done for the bpo-24932, these changes were backported as well with the 261 patch, which will be removed when python3 is rebased to 3.6.1
105 lines
3.5 KiB
Diff
105 lines
3.5 KiB
Diff
diff --git a/Lib/test/test_capi.py b/Lib/test/test_capi.py
|
|
index 6c3625d..2a53f3d 100644
|
|
--- a/Lib/test/test_capi.py
|
|
+++ b/Lib/test/test_capi.py
|
|
@@ -385,7 +385,7 @@ class EmbeddingTests(unittest.TestCase):
|
|
|
|
def test_subinterps(self):
|
|
# This is just a "don't crash" test
|
|
- out, err = self.run_embedded_interpreter()
|
|
+ out, err = self.run_embedded_interpreter("repeated_init_and_subinterpreters")
|
|
if support.verbose:
|
|
print()
|
|
print(out)
|
|
diff --git a/Programs/_testembed.c b/Programs/_testembed.c
|
|
index 3968399..a68d4fa 100644
|
|
--- a/Programs/_testembed.c
|
|
+++ b/Programs/_testembed.c
|
|
@@ -33,7 +33,7 @@ static void print_subinterp(void)
|
|
);
|
|
}
|
|
|
|
-static void test_repeated_init_and_subinterpreters(void)
|
|
+static int test_repeated_init_and_subinterpreters(void)
|
|
{
|
|
PyThreadState *mainstate, *substate;
|
|
#ifdef WITH_THREAD
|
|
@@ -70,6 +70,7 @@ static void test_repeated_init_and_subinterpreters(void)
|
|
PyEval_RestoreThread(mainstate);
|
|
Py_Finalize();
|
|
}
|
|
+ return 0;
|
|
}
|
|
|
|
/*****************************************************
|
|
@@ -103,7 +104,7 @@ static void check_stdio_details(const char *encoding, const char * errors)
|
|
Py_Finalize();
|
|
}
|
|
|
|
-static void test_forced_io_encoding(void)
|
|
+static int test_forced_io_encoding(void)
|
|
{
|
|
/* Check various combinations */
|
|
printf("--- Use defaults ---\n");
|
|
@@ -122,19 +123,51 @@ static void test_forced_io_encoding(void)
|
|
printf("Unexpected success calling Py_SetStandardStreamEncoding");
|
|
}
|
|
Py_Finalize();
|
|
+ return 0;
|
|
}
|
|
|
|
-/* Different embedding tests */
|
|
-int main(int argc, char *argv[])
|
|
+/* *********************************************************
|
|
+ * List of test cases and the function that implements it.
|
|
+ *
|
|
+ * Names are compared case-sensitively with the first
|
|
+ * argument. If no match is found, or no first argument was
|
|
+ * provided, the names of all test cases are printed and
|
|
+ * the exit code will be -1.
|
|
+ *
|
|
+ * The int returned from test functions is used as the exit
|
|
+ * code, and test_capi treats all non-zero exit codes as a
|
|
+ * failed test.
|
|
+ *********************************************************/
|
|
+struct TestCase
|
|
{
|
|
+ const char *name;
|
|
+ int (*func)(void);
|
|
+};
|
|
+
|
|
+static struct TestCase TestCases[] = {
|
|
+ { "forced_io_encoding", test_forced_io_encoding },
|
|
+ { "repeated_init_and_subinterpreters", test_repeated_init_and_subinterpreters },
|
|
+ { NULL, NULL }
|
|
+};
|
|
|
|
- /* TODO: Check the argument string to allow for more test cases */
|
|
+int main(int argc, char *argv[])
|
|
+{
|
|
if (argc > 1) {
|
|
- /* For now: assume "forced_io_encoding */
|
|
- test_forced_io_encoding();
|
|
- } else {
|
|
- /* Run the original embedding test case by default */
|
|
- test_repeated_init_and_subinterpreters();
|
|
+ for (struct TestCase *tc = TestCases; tc && tc->name; tc++) {
|
|
+ if (strcmp(argv[1], tc->name) == 0)
|
|
+ return (*tc->func)();
|
|
+ }
|
|
}
|
|
- return 0;
|
|
+
|
|
+ /* No match found, or no test name provided, so display usage */
|
|
+ printf("Python " PY_VERSION " _testembed executable for embedded interpreter tests\n"
|
|
+ "Normally executed via 'EmbeddingTests' in Lib/test/test_capi.py\n\n"
|
|
+ "Usage: %s TESTNAME\n\nAll available tests:\n", argv[0]);
|
|
+ for (struct TestCase *tc = TestCases; tc && tc->name; tc++) {
|
|
+ printf(" %s\n", tc->name);
|
|
+ }
|
|
+
|
|
+ /* Non-zero exit code will cause test_capi.py tests to fail.
|
|
+ This is intentional. */
|
|
+ return -1;
|
|
}
|