]> Repositories - hackapet/Adafruit_Blinka.git/blobdiff - python/testing/__init__.py
More readable, link to log of example test suite
[hackapet/Adafruit_Blinka.git] / python / testing / __init__.py
index c0dd3307525704de9d1e1dcd4f93e6c32f1add6d..87e3900c60804d0da629021f4757936fcd243065 100644 (file)
@@ -36,6 +36,21 @@ def multi_choice(q, choices, defaultPos=None):
         print(e)
         return None
 
+def await_true(name, fun, interval=0, patience=60):
+    from agnostic import sleep
+    from utime import ticks_ms, ticks_add, ticks_diff
+    print("Waiting {} sec until {} (CTRL+C give up)".format(patience, name))
+    deadline = ticks_add(ticks_ms(), int(patience * 1000))
+    try:
+        while ticks_diff(deadline, ticks_ms()) > 0:
+            if fun():
+                return True
+            else:
+                sleep(interval)
+        return False
+    except KeyboardInterrupt:
+        return False
+
 
 def test_module(module, runner=None):
     import unittest
@@ -52,17 +67,20 @@ def test_module(module, runner=None):
     return runner.run(suite)
 
 def test_module_name(absolute, runner=None):
-    print("Testing {}".format(absolute))
-    module=__import__(absolute)
-    relatives = absolute.split(".")
-    if len(relatives) > 1:
-        for relative in relatives[1:]:
-            module = getattr(module, relative)
-    return test_module(module, runner)
+    try:
+        print("Suite begin: {}".format(absolute))
+        module=__import__(absolute)
+        relatives = absolute.split(".")
+        if len(relatives) > 1:
+            for relative in relatives[1:]:
+                module = getattr(module, relative)
+        return test_module(module, runner)
+    finally:
+        print("Suite end: {}".format(absolute))
 
 def test_interactive(*module_names):
     for module_name in module_names:
-        if yes_no("Test {}".format(module_name)):
+        if yes_no("Run suite {}".format(module_name)):
             gc.collect()
             test_module_name(module_name)
 
@@ -73,6 +91,11 @@ def test_prepare(casetype):
 
 
 def main():
-    test_interactive(
-        "testing.implementation.all.digitalio",
-    )
\ No newline at end of file
+    import microcontroller.esp8266 # temporary workaround for stack recursion error
+    moduleNames = ["testing.implementation.all.digitalio",]
+    if agnostic.implementation == "micropython":
+        moduleNames.extend([ "testing.implementation.micropython.digitalio",])
+
+    unittest.raiseException = True # terminates with stack information on userspace Exception
+    unittest.raiseBaseException = True # terminates with stack information on system Exception
+    test_interactive(*moduleNames)
\ No newline at end of file