]> Repositories - Adafruit_Blinka-hackapet.git/blob - python/testing/__init__.py
Standardised platform (chip) names
[Adafruit_Blinka-hackapet.git] / python / testing / __init__.py
1 # mitigate heap fragmentation issues by pre-loading major libraries
2 import gc
3 gc.collect()
4 import agnostic
5 gc.collect()
6 import unittest
7 gc.collect()
8
9 def yes_no(q, default=True):
10     a = input(q + " (Y/n)?" if default else " (y/N)?")
11     a=a.lower()
12     if a == '':
13         return default
14     elif a == "n":
15         a = False
16     elif a == "y":
17         a = True
18     return a
19
20 def multi_choice(q, choices, defaultPos=None):
21     if defaultPos is not None:
22         print("{} [{}]?".format(q, defaultPos))
23     else:
24         print(q + "?")
25     for pos, choice in enumerate(choices):
26         print("{}) {}".format(pos, choice))
27     a = input()
28     a=a.lower()
29     try:
30         if a == '':
31             a = defaultPos
32         else:
33             a = int(a)
34         return choices[a]
35     except Exception as e:
36         print(e)
37         return None
38
39
40 def test_module(module, runner=None):
41     import unittest
42     if runner is None:
43         runner = unittest.TestRunner()
44     suite = unittest.TestSuite()
45     for key in dir(module):
46         val = getattr(module, key)
47         try:
48             if issubclass(val, unittest.TestCase):
49                 suite.addTest(val)
50         except:
51             pass
52     return runner.run(suite)
53
54 def test_module_name(absolute, runner=None):
55     print("Testing {}".format(absolute))
56     module=__import__(absolute)
57     relatives = absolute.split(".")
58     if len(relatives) > 1:
59         for relative in relatives[1:]:
60             module = getattr(module, relative)
61     return test_module(module, runner)
62
63 def test_interactive(*module_names):
64     for module_name in module_names:
65         if yes_no("Test {}".format(module_name)):
66             gc.collect()
67             test_module_name(module_name)
68
69
70 def test_prepare(casetype):
71     case = casetype()
72     case.setUp()
73
74
75 def main():
76     test_interactive(
77         "testing.platform.embedded",
78     )