def run(names, verbose=False): """Run tests with the supplied names. Names should be a list. If it's empty, run ALL of Spack's tests.""" verbosity = 1 if not verbose else 2 if not names: names = test_names else: for test in names: if test not in test_names: tty.error("%s is not a valid spack test name." % test, "Valid names are:") colify(test_names, indent=4) sys.exit(1) runner = unittest.TextTestRunner(verbosity=verbosity) testsRun = errors = failures = skipped = 0 for test in names: module = 'spack.test.' + test print module suite = unittest.defaultTestLoader.loadTestsFromName(module) tty.msg("Running test: %s" % test) result = runner.run(suite) testsRun += result.testsRun errors += len(result.errors) failures += len(result.failures) skipped += len(result.skipped) succeeded = not errors and not failures tty.msg("Tests Complete.", "%5d tests run" % testsRun, "%5d skipped" % skipped, "%5d failures" % failures, "%5d errors" % errors) if not errors and not failures: tty.info("OK", format='g') else: tty.info("FAIL", format='r') sys.exit(1)
def parse_specs(args, **kwargs): """Convenience function for parsing arguments from specs. Handles common exceptions and dies if there are errors. """ concretize = kwargs.get('concretize', False) normalize = kwargs.get('normalize', False) if isinstance(args, (python_list, tuple)): args = " ".join(args) try: specs = spack.spec.parse(args) for spec in specs: if concretize: spec.concretize() # implies normalize elif normalize: spec.normalize() return specs except spack.parse.ParseError, e: tty.error(e.message, e.string, e.pos * " " + "^") sys.exit(1)
try: specs = spack.spec.parse(args) for spec in specs: if concretize: spec.concretize() # implies normalize elif normalize: spec.normalize() return specs except spack.parse.ParseError, e: tty.error(e.message, e.string, e.pos * " " + "^") sys.exit(1) except spack.spec.SpecError, e: tty.error(e.message) sys.exit(1) def elide_list(line_list, max_num=10): """Takes a long list and limits it to a smaller number of elements, replacing intervening elements with '...'. For example:: elide_list([1,2,3,4,5,6], 4) gives:: [1, 2, 3, '...', 6] """ if len(line_list) > max_num: return line_list[:max_num-1] + ['...'] + line_list[-1:]