def run(self, argv): """Run the test runner. Invoke the test runner by calling it. """ cf = self.runner.config cf.flags.INTERACTIVE = True cf.flags.DEBUG = 0 cf.flags.VERBOSE = 0 optlist, longopts, args = getopt.getopt(argv[1:], "h?dDvIc:f:m:e:r:") for opt, optarg in optlist: if opt in ("-h", "-?"): print(TestRunnerInterfaceDoc.format( name=os.path.basename(argv[0]))) return elif opt == "-d": cf.flags.DEBUG += 1 elif opt == "-D": from pycopia import autodebug # noqa elif opt == "-v": cf.flags.VERBOSE += 1 elif opt == "-I": cf.flags.INTERACTIVE = False elif opt == "-c" or opt == "-f": cf.mergefile(optarg) elif opt == "-m": cf.comment = optarg elif opt == "-r": cf.reportname = optarg elif opt == "-e": cf.environmentname = optarg cf.evalupdate(longopts) # original command line arguments saved for the report cf.arguments = [os.path.basename(argv[0])] + argv[1:] ui = UI.get_userinterface(themename="ANSITheme") if not args: from . import simplechooser args = simplechooser.choose_tests(ui) if not args: return 10 objects, errors = module.get_objects(args) if errors: logging.warn("Errors found while loading test object:") for error in errors: logging.warn(error) if objects: cf.argv = args rv = self.runner.run(objects, ui) if rv is None: return 11 else: try: return int(rv) except TypeError: return 12 else: return len(errors) + 20
def _build_userinterface(self): from pycopia import UI uitype = self.get("userinterfacetype", "default") params = self.userinterfaces.get(uitype) if params: params = self.expand_params(params) else: params = self.userinterfaces.get("default") return UI.get_userinterface(*params)
def choose_tests(): try: import testcases except ImportError: logging.warn("Cannot find 'testcases' base package.") return None from pycopia import UI from pycopia.QA import core ui = UI.get_userinterface(themename="ANSITheme") ui.printf( "Select any number of runnable objects. %n" "You can select %wmodules%N, %gUseCase%N objects, or single %yTest%N object." ) # callback for testdir walker def filternames(flist, dirname, names): for name in names: if name.endswith(".py") and not name.startswith("_"): flist.append(os.path.join(dirname, name[:-3])) modnames = [] runnables = [] for testbase in testcases.__path__: mnlist = [] os.path.walk(testbase, filternames, mnlist) testhome_index = len(os.path.dirname(testbase)) + 1 modnames.extend( map(lambda n: n[testhome_index:].replace("/", "."), mnlist)) modnames.sort() for modname in modnames: try: mod = module.get_module(modname) except module.ModuleImportError: ui.warning(" Warning: could not import '{}'".format(modname)) continue if getattr(mod, "run", None) is not None: runnables.append(FormatWrapper(ui, modname, None, "%w%U%N")) for attrname in dir(mod): obj = getattr(mod, attrname) if type(obj) is type: if issubclass(obj, core.UseCase): runnables.append( FormatWrapper(ui, modname, obj.__name__, "%U.%g%O%N")) if issubclass(obj, core.Test): runnables.append( FormatWrapper(ui, modname, obj.__name__, "%U.%y%O%N")) return [ o.fullname for o in ui.choose_multiple(runnables, prompt="Select tests") ]
def unittest(argv): args = argv[1:] _init_db() tr = testrunner.TestRunner("sqlite://:memory:") ui = UI.get_userinterface(themename="ANSITheme") if not args: args = all_tests(ui) for tn in args: print(tn) return if not args: return objects, errors = module.get_objects(args) if errors: print("Errors found while loading test object:") for error in errors: print(error) if objects: tr.run(objects, ui)
def choose_tests(): try: import testcases except ImportError: logging.warn("Cannot find 'testcases' base package.") return None from pycopia import UI from pycopia.QA import core ui = UI.get_userinterface(themename="ANSITheme") ui.printf("Select any number of runnable objects. %n" "You can select %wmodules%N, %gUseCase%N objects, or single %yTest%N object.") # callback for testdir walker def filternames(flist, dirname, names): for name in names: if name.endswith(".py") and not name.startswith("_"): flist.append(os.path.join(dirname, name[:-3])) modnames = [] runnables = [] for testbase in testcases.__path__: mnlist = [] os.path.walk(testbase, filternames, mnlist) testhome_index = len(os.path.dirname(testbase)) + 1 modnames.extend(map(lambda n: n[testhome_index:].replace("/", "."), mnlist)) modnames.sort() for modname in modnames: try: mod = module.get_module(modname) except module.ModuleImportError: ui.warning(" Warning: could not import '{}'".format(modname)) continue if getattr(mod, "run", None) is not None: runnables.append(FormatWrapper(ui, modname, None, "%w%U%N")) for attrname in dir(mod): obj = getattr(mod, attrname) if type(obj) is type: if issubclass(obj, core.UseCase): runnables.append(FormatWrapper(ui, modname, obj.__name__, "%U.%g%O%N")) if issubclass(obj, core.Test): runnables.append(FormatWrapper(ui, modname, obj.__name__, "%U.%y%O%N")) return [o.fullname for o in ui.choose_multiple(runnables, prompt="Select tests")]
else: return self.modname def __str__(self): self._ui.register_format_expansion("O", self._str_name) self._ui.register_format_expansion("U", self._str_module) try: return self._ui.format(self._format) finally: self._ui.unregister_format_expansion("O") self._ui.unregister_format_expansion("U") def _str_name(self, c): return str(self.name) def _str_module(self, c): return str(self.modname) def __len__(self): return len(self.fullname) def __eq__(self, other): return self.modname == other.modname if __name__ == '__main__': from pycopia import UI ui = UI.get_userinterface(themename="ANSITheme") tests = choose_tests(ui) print(tests)