]> Repositories - Adafruit_Blinka-hackapet.git/commitdiff
Added interactive logic. Pre-imported libraries
authorCefn Hoile <github.com@cefn.com>
Sun, 18 Feb 2018 01:36:27 +0000 (01:36 +0000)
committerCefn Hoile <github.com@cefn.com>
Sun, 18 Feb 2018 01:36:27 +0000 (01:36 +0000)
python/testing/__init__.py

index 4abfca1e01a1d403f4abe62176632b671e0b3db2..b1db862e48a7d594193d67d7540971cb99f30e65 100644 (file)
@@ -1,14 +1,78 @@
+# mitigate heap fragmentation issues by pre-loading major libraries
+import gc
+gc.collect()
+import agnostic
+gc.collect()
 import unittest
 import unittest
+gc.collect()
 
 
-def test_module(m, runner=None):
+def yes_no(q, default=True):
+    a = input(q + " (Y/n)?" if default else " (y/N)?")
+    a=a.lower()
+    if a == '':
+        return default
+    elif a == "n":
+        a = False
+    elif a == "y":
+        a = True
+    return a
+
+def multi_choice(q, choices, defaultPos=None):
+    if defaultPos is not None:
+        print("{} [{}]?".format(q, defaultPos))
+    else:
+        print(q + "?")
+    for pos, choice in enumerate(choices):
+        print("{}) {}".format(pos, choice))
+    a = input()
+    a=a.lower()
+    try:
+        if a == '':
+            a = defaultPos
+        else:
+            a = int(a)
+        return choices[a]
+    except Exception as e:
+        print(e)
+        return None
+
+
+def test_module(module, runner=None):
+    import unittest
     if runner is None:
         runner = unittest.TestRunner()
     suite = unittest.TestSuite()
     if runner is None:
         runner = unittest.TestRunner()
     suite = unittest.TestSuite()
-    for key in dir(m):
-        val = getattr(m, key)
+    for key in dir(module):
+        val = getattr(module, key)
         try:
             if issubclass(val, unittest.TestCase):
                 suite.addTest(val)
         except:
             pass
         try:
             if issubclass(val, unittest.TestCase):
                 suite.addTest(val)
         except:
             pass
-    return runner.run(suite)
\ No newline at end of file
+    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)
+
+def test_interactive(*module_names):
+    for module_name in module_names:
+        if yes_no("Test {}".format(module_name)):
+            gc.collect()
+            test_module_name(module_name)
+
+
+def test_prepare(casetype):
+    case = casetype()
+    case.setUp()
+
+
+def main():
+    test_interactive(
+        "testing.platform.embedded",
+    )
\ No newline at end of file