From 562fa575a67a6f2e84fdeb5303c1ac42934015ce Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Sat, 28 Feb 2015 00:31:18 +0200 Subject: [PATCH] qemu-arm: Handle sys.exit() to allow skip tests in testsuite. --- qemu-arm/mpconfigport.h | 1 + qemu-arm/test_main.c | 10 +++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/qemu-arm/mpconfigport.h b/qemu-arm/mpconfigport.h index f9e125861..a9f98e5ce 100644 --- a/qemu-arm/mpconfigport.h +++ b/qemu-arm/mpconfigport.h @@ -18,6 +18,7 @@ #define MICROPY_PY_BUILTINS_FROZENSET (1) #define MICROPY_PY_BUILTINS_MEMORYVIEW (1) #define MICROPY_PY_IO (0) +#define MICROPY_PY_SYS_EXIT (1) // type definitions for the specific machine diff --git a/qemu-arm/test_main.c b/qemu-arm/test_main.c index d6fbfded6..a48bcd322 100644 --- a/qemu-arm/test_main.c +++ b/qemu-arm/test_main.c @@ -31,7 +31,15 @@ inline void do_str(const char *src) { mp_call_function_0(module_fun); nlr_pop(); } else { - mp_obj_print_exception(printf_wrapper, NULL, (mp_obj_t)nlr.ret_val); + mp_obj_t exc = (mp_obj_t)nlr.ret_val; + if (mp_obj_is_subclass_fast(mp_obj_get_type(exc), &mp_type_SystemExit)) { + // Assume that sys.exit() is called to skip the test. + // TODO: That can be always true, we should set up convention to + // use specific exit code as skip indicator. + tinytest_set_test_skipped_(); + return; + } + mp_obj_print_exception(printf_wrapper, NULL, exc); tt_abort_msg("Uncaught exception"); } end: