1 # mitigate heap fragmentation issues by pre-loading major libraries
 
   9 def yes_no(q, default=True):
 
  10     a = input(q + " (Y/n)?" if default else " (y/N)?")
 
  20 def multi_choice(q, choices, defaultPos=None):
 
  21     if defaultPos is not None:
 
  22         print("{} [{}]?".format(q, defaultPos))
 
  25     for pos, choice in enumerate(choices):
 
  26         print("{}) {}".format(pos, choice))
 
  35     except Exception as e:
 
  40 def test_module(module, runner=None):
 
  43         runner = unittest.TestRunner()
 
  44     suite = unittest.TestSuite()
 
  45     for key in dir(module):
 
  46         val = getattr(module, key)
 
  48             if issubclass(val, unittest.TestCase):
 
  52     return runner.run(suite)
 
  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)
 
  63 def test_interactive(*module_names):
 
  64     for module_name in module_names:
 
  65         if yes_no("Test {}".format(module_name)):
 
  67             test_module_name(module_name)
 
  70 def test_prepare(casetype):
 
  77         "testing.platform.embedded",