From 562fa575a67a6f2e84fdeb5303c1ac42934015ce Mon Sep 17 00:00:00 2001
From: Paul Sokolovsky <pfalcon@users.sourceforge.net>
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:
-- 
GitLab