def run_tests(critical_tests, other_tests): """Runs first critical tests and then other_tests. Stops on first error, and write the name of failed test to test_results.txt. Critical tests are run in the specified order, other tests are run starting with the one that failed the last time. """ last_failed = last_failed_test() other_tests = reorder_tests(other_tests, last_failed) all_tests = critical_tests + other_tests invocation_dir = os.getcwd() pass_count = 0 failures_count = 0 for i in all_tests: print ("%-25s : " %(i)), try: __import__(i) except SystemExit: print "FAILED" if failures_count == 0: f = open(os.path.join(invocation_dir, 'test_results.txt'), 'w') f.write(i) f.close() failures_count = failures_count + 1 # Restore the current directory, which might be changed by the # test os.chdir(invocation_dir) BoostBuild.flush_annotations(); continue print "PASSED" BoostBuild.flush_annotations(); pass_count = pass_count + 1 sys.stdout.flush() # makes testing under emacs more entertaining. # Erase the file on success if failures_count == 0: open('test_results.txt', 'w') print """ === Test summary === PASS: %d FAIL: %d """ % (pass_count, failures_count)
def run_tests(critical_tests, other_tests): """Runs first critical tests and then other_tests. Stops on first error, and write the name of failed test to test_results.txt. Critical tests are run in the specified order, other tests are run starting with the one that failed the last time. """ last_failed = last_failed_test() other_tests = reorder_tests(other_tests, last_failed) all_tests = critical_tests + other_tests invocation_dir = os.getcwd() pass_count = 0 failures_count = 0 for i in all_tests: passed = 1 if not xml: print ("%-25s : " % (i)), try: __import__(i) except SystemExit: passed = 0 if failures_count == 0: f = open(os.path.join(invocation_dir, "test_results.txt"), "w") f.write(i) f.close() failures_count = failures_count + 1 # Restore the current directory, which might be changed by the test. os.chdir(invocation_dir) if not xml: if passed: print "PASSED" else: print "FAILED" if i == "regression": BoostBuild.flush_annotations() BoostBuild.clear_annotations() else: rs = "succeed" if not passed: rs = "fail" print """ <test-log library="build" test-name="%s" test-type="run" toolset="%s" test-program="%s" target-directory="%s"> <run result="%s">""" % ( i, toolset, "tools/build/v2/test/" + i + ".py", "boost/bin.v2/boost.build.tests/" + toolset + "/" + i, rs, ) if not passed: BoostBuild.flush_annotations(1) print """ </run> </test-log> """ if passed: pass_count = pass_count + 1 sys.stdout.flush() # Makes testing under emacs more entertaining. # Erase the file on success. if failures_count == 0: open("test_results.txt", "w") if not xml: print """ === Test summary === PASS: %d FAIL: %d """ % ( pass_count, failures_count, )
def run_tests(critical_tests, other_tests): """ Runs first the critical_tests and then the other_tests. Writes the name of the first failed test to test_results.txt. Critical tests are run in the specified order, other tests are run starting with the one that failed first on the last test run. """ last_failed = last_failed_test() other_tests = reorder_tests(other_tests, last_failed) all_tests = critical_tests + other_tests invocation_dir = os.getcwd() max_test_name_len = 10 for x in all_tests: if len(x) > max_test_name_len: max_test_name_len = len(x) pass_count = 0 failures_count = 0 for test in all_tests: if not xml: print ("%%-%ds :" % max_test_name_len % test), passed = 0 try: __import__(test) passed = 1 except KeyboardInterrupt: """This allows us to abort the testing manually using Ctrl-C.""" raise except SystemExit: """This is the regular way our test scripts are supposed to report test failures.""" except: exc_type, exc_value, exc_tb = sys.exc_info() try: BoostBuild.annotation("failure - unhandled exception", "%s - " "%s" % (exc_type.__name__, exc_value)) BoostBuild.annotate_stack_trace(exc_tb) finally: # Explicitly clear a hard-to-garbage-collect traceback # related reference cycle as per documented sys.exc_info() # usage suggestion. del exc_tb if passed: pass_count += 1 else: failures_count += 1 if failures_count == 1: f = open(os.path.join(invocation_dir, "test_results.txt"), "w") try: f.write(test) finally: f.close() # Restore the current directory, which might have been changed by the # test. os.chdir(invocation_dir) if not xml: if passed: print ("PASSED") else: print ("FAILED") else: rs = "succeed" if not passed: rs = "fail" print """ <test-log library="build" test-name="%s" test-type="run" toolset="%s" test-program="%s" target-directory="%s"> <run result="%s">""" % ( test, toolset, "tools/build/v2/test/" + test + ".py", "boost/bin.v2/boost.build.tests/" + toolset + "/" + test, rs, ) if not passed: BoostBuild.flush_annotations(1) print """ </run> </test-log> """ sys.stdout.flush() # Makes testing under emacs more entertaining. BoostBuild.clear_annotations() # Erase the file on success. if failures_count == 0: open("test_results.txt", "w").close() if not xml: print """ === Test summary === PASS: %d FAIL: %d """ % ( pass_count, failures_count, )
def run_tests(critical_tests, other_tests): """ Runs first the critical_tests and then the other_tests. Writes the name of the first failed test to test_results.txt. Critical tests are run in the specified order, other tests are run starting with the one that failed first on the last test run. """ last_failed = last_failed_test() other_tests = reorder_tests(other_tests, last_failed) all_tests = critical_tests + other_tests invocation_dir = os.getcwd() max_test_name_len = 10 for x in all_tests: if len(x) > max_test_name_len: max_test_name_len = len(x) pass_count = 0 failures_count = 0 for test in all_tests: if not xml: print("%%-%ds :" % max_test_name_len % test), passed = 0 try: __import__(test) passed = 1 except KeyboardInterrupt: """This allows us to abort the testing manually using Ctrl-C.""" raise except SystemExit: """This is the regular way our test scripts are supposed to report test failures.""" except: exc_type, exc_value, exc_tb = sys.exc_info() try: BoostBuild.annotation( "failure - unhandled exception", "%s - " "%s" % (exc_type.__name__, exc_value)) BoostBuild.annotate_stack_trace(exc_tb) finally: # Explicitly clear a hard-to-garbage-collect traceback # related reference cycle as per documented sys.exc_info() # usage suggestion. del exc_tb if passed: pass_count += 1 else: failures_count += 1 if failures_count == 1: f = open(os.path.join(invocation_dir, "test_results.txt"), "w") try: f.write(test) finally: f.close() # Restore the current directory, which might have been changed by the # test. os.chdir(invocation_dir) if not xml: if passed: print("PASSED") else: print("FAILED") BoostBuild.flush_annotations() else: rs = "succeed" if not passed: rs = "fail" print """ <test-log library="build" test-name="%s" test-type="run" toolset="%s" test-program="%s" target-directory="%s"> <run result="%s">""" % (test, toolset, "tools/build/v2/test/" + test + ".py", "boost/bin.v2/boost.build.tests/" + toolset + "/" + test, rs) if not passed: BoostBuild.flush_annotations(1) print """ </run> </test-log> """ sys.stdout.flush() # Makes testing under emacs more entertaining. BoostBuild.clear_annotations() # Erase the file on success. if failures_count == 0: open("test_results.txt", "w").close() if not xml: print """ === Test summary === PASS: %d FAIL: %d """ % (pass_count, failures_count) # exit with failure with failures if failures_count > 0: sys.exit(1)
def run_tests(critical_tests, other_tests): """Runs first critical tests and then other_tests. Stops on first error, and write the name of failed test to test_results.txt. Critical tests are run in the specified order, other tests are run starting with the one that failed the last time. """ last_failed = last_failed_test() other_tests = reorder_tests(other_tests, last_failed) all_tests = critical_tests + other_tests invocation_dir = os.getcwd() pass_count = 0 failures_count = 0 for i in all_tests: passed = 1 if not xml: print ("%-25s : " %(i)), try: __import__(i) except SystemExit: passed = 0; if failures_count == 0: f = open(os.path.join(invocation_dir, 'test_results.txt'), 'w') f.write(i) f.close() failures_count = failures_count + 1 # Restore the current directory, which might be changed by the test. os.chdir(invocation_dir) if not xml: if passed: print "PASSED" else: print "FAILED" else: rs = "succeed" if not passed: rs = "fail" print """ <test-log library="build" test-name="%s" test-type="run" toolset="%s" test-program="%s" target-directory="%s"> <run result="%s">""" % (i, toolset, "tools/build/v2/test/" + i + ".py", "boost/bin.v2/boost.build.tests/" + toolset + "/" + i, rs) if not passed: BoostBuild.flush_annotations(1) print """ </run> </test-log> """ if passed: pass_count = pass_count + 1 sys.stdout.flush() # Makes testing under emacs more entertaining. # Erase the file on success. if failures_count == 0: open('test_results.txt', 'w') if not xml: print """ === Test summary === PASS: %d FAIL: %d """ % (pass_count, failures_count)