X-Git-Url: https://git.ayoreis.com/Adafruit_Blinka-hackapet.git/blobdiff_plain/a8ed516cc3b6c4cdd7a346f897aa1a520071a239..refs/heads/use-pi5-pio-neopixel:/test/src/testing/__init__.py diff --git a/test/src/testing/__init__.py b/test/src/testing/__init__.py index 766f242..fc941bb 100644 --- a/test/src/testing/__init__.py +++ b/test/src/testing/__init__.py @@ -1,14 +1,20 @@ +# SPDX-FileCopyrightText: 2021 Melissa LeBlanc-Williams for Adafruit Industries +# +# SPDX-License-Identifier: MIT + # mitigate heap fragmentation issues by pre-loading major libraries import gc -gc.collect() + 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 == '': + a = a.lower() + if a == "": return default elif a == "n": a = False @@ -16,6 +22,7 @@ def yes_no(q, default=True): a = True return a + def multi_choice(q, choices, defaultPos=None): if defaultPos is not None: print("{} [{}]?".format(q, defaultPos)) @@ -24,9 +31,9 @@ def multi_choice(q, choices, defaultPos=None): for pos, choice in enumerate(choices): print("{}) {}".format(pos, choice)) a = input() - a=a.lower() + a = a.lower() try: - if a == '': + if a == "": a = defaultPos else: a = int(a) @@ -35,11 +42,13 @@ def multi_choice(q, choices, defaultPos=None): 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 + deadline = monotonic() + patience try: while deadline - monotonic() > 0: if fun(): @@ -53,6 +62,7 @@ def await_true(name, fun, interval=0, patience=60): def test_module(module, runner=None): import unittest + if runner is None: runner = unittest.TestRunner() suite = unittest.TestSuite() @@ -65,10 +75,11 @@ def test_module(module, runner=None): pass return runner.run(suite) + def test_module_name(absolute, runner=None): try: print("Suite begin: {}".format(absolute)) - module=__import__(absolute) + module = __import__(absolute) relatives = absolute.split(".") if len(relatives) > 1: for relative in relatives[1:]: @@ -77,6 +88,7 @@ def test_module_name(absolute, runner=None): 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)): @@ -98,8 +110,13 @@ def main(): """ 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 + 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() \ No newline at end of file + +gc.collect()