1 # SPDX-FileCopyrightText: 2021 Melissa LeBlanc-Williams for Adafruit Industries
3 # SPDX-License-Identifier: MIT
5 # mitigate heap fragmentation issues by pre-loading major libraries
14 def yes_no(q, default=True):
15 a = input(q + " (Y/n)?" if default else " (y/N)?")
26 def multi_choice(q, choices, defaultPos=None):
27 if defaultPos is not None:
28 print("{} [{}]?".format(q, defaultPos))
31 for pos, choice in enumerate(choices):
32 print("{}) {}".format(pos, choice))
41 except Exception as e:
46 def await_true(name, fun, interval=0, patience=60):
47 from adafruit_blinka.agnostic.time import sleep, monotonic
49 print("Waiting {} sec until {} (CTRL+C give up)".format(patience, name))
51 deadline = monotonic() + patience
53 while deadline - monotonic() > 0:
59 except KeyboardInterrupt:
63 def test_module(module, runner=None):
67 runner = unittest.TestRunner()
68 suite = unittest.TestSuite()
69 for key in dir(module):
70 val = getattr(module, key)
72 if issubclass(val, unittest.TestCase):
76 return runner.run(suite)
79 def test_module_name(absolute, runner=None):
81 print("Suite begin: {}".format(absolute))
82 module = __import__(absolute)
83 relatives = absolute.split(".")
84 if len(relatives) > 1:
85 for relative in relatives[1:]:
86 module = getattr(module, relative)
87 return test_module(module, runner)
89 print("Suite end: {}".format(absolute))
92 def test_interactive(*module_names):
93 for module_name in module_names:
94 if yes_no("Run suite {}".format(module_name)):
96 test_module_name(module_name)
99 def test_prepare(casetype):
106 moduleNames = ["testing.implementation.universal.digitalio",]
107 if agnostic.implementation == "micropython":
108 moduleNames.extend([ "testing.implementation.micropython.digitalio",])
111 moduleNames = ["testing.implementation.universal.bitbangio"]
113 unittest.raiseException = (
114 True # terminates with stack information on userspace Exception
116 unittest.raiseBaseException = (
117 True # terminates with stack information on system Exception
119 test_interactive(*moduleNames)