You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

104 lines
2.8 KiB

# mitigate heap fragmentation issues by pre-loading major libraries
import gc
gc.collect()
import unittest
gc.collect()
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 await_true(name, fun, interval=0, patience=60):
from adafruit_blinka.agnostic.time import sleep, monotonic
print("Waiting {} sec until {} (CTRL+C give up)".format(patience, name))
deadline = monotonic() + patience
try:
while deadline - monotonic() > 0:
if fun():
return True
else:
sleep(interval)
return False
except KeyboardInterrupt:
return False
def test_module(module, runner=None):
import unittest
if runner is None:
runner = unittest.TestRunner()
suite = unittest.TestSuite()
for key in dir(module):
val = getattr(module, key)
try:
if issubclass(val, unittest.TestCase):
suite.addTest(val)
except:
pass
return runner.run(suite)
def test_module_name(absolute, runner=None):
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("Run suite {}".format(module_name)):
gc.collect()
test_module_name(module_name)
def test_prepare(casetype):
case = casetype()
case.setUp()
def main():
"""
moduleNames = ["testing.implementation.universal.digitalio",]
if agnostic.implementation == "micropython":
moduleNames.extend([ "testing.implementation.micropython.digitalio",])
"""
moduleNames = ["testing.implementation.universal.bitbangio"]
unittest.raiseException = True # terminates with stack information on userspace Exception
unittest.raiseBaseException = True # terminates with stack information on system Exception
test_interactive(*moduleNames)
gc.collect()