From 7fdb8d78a47e7d78c93aba3f58cc83b92d0e1729 Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Tue, 23 Dec 2014 11:52:02 +0200 Subject: [PATCH] tests: Add run-tests-exp.py, simple MicroPython-based test runner. This script is rewrite of run-tests-exp.sh, and tries to achieve self-hosted testsuite running in environments where neither CPython nor unix shell is available. As run-tests-exp.sh, it requires complete set of .exp files pre-generated with ./run-test --write-exp. --- tests/run-tests-exp.py | 96 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 tests/run-tests-exp.py diff --git a/tests/run-tests-exp.py b/tests/run-tests-exp.py new file mode 100644 index 0000000000..a4ac26dba2 --- /dev/null +++ b/tests/run-tests-exp.py @@ -0,0 +1,96 @@ +# +# This is minimal MicroPython variant of run-tests script, which uses +# .exp files as generated by run-tests --write-exp. It is useful to run +# testsuite on systems which have neither CPython3 nor unix shell. +# This script is intended to be run by the same interpreter executable +# which is to be tested, so should use minimal language functionality. +# +import sys +import _os as os + + +tests = [ + "basics", "micropython", "float", "import", "io", + " misc", "unicode", "extmod", "unix" +] + +if sys.platform == 'win32': + MICROPYTHON = "micropython.exe" +else: + MICROPYTHON = "micropython" + + +def should_skip(test): + if test.startswith("native"): + return True + if test.startswith("viper"): + return True + +test_count = 0 +passed_count = 0 +skip_count = 0 + +for suite in tests: + #print("Running in: %s" % suite) + if sys.platform == 'win32': + # dir /b prints only contained filenames, one on a line + # http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/dir.mspx + r = os.system("dir /b %s/*.py >tests.lst" % suite) + else: + r = os.system("ls %s/*.py | xargs -n1 basename >tests.lst" % suite) + assert r == 0 + + with open("tests.lst") as f: + testcases = f.readlines() + testcases = [l[:-1] for l in testcases] + assert testcases, "No tests found in dir '%s', which is implausible" % suite + #print(testcases) + for t in testcases: + if t == "native_check.py": + continue + + qtest = "%s/%s" % (suite, t) + + if should_skip(t): + print("skip " + qtest) + skip_count += 1 + continue + + exp = None + try: + f = open(qtest + ".exp") + exp = f.read() + f.close() + except OSError: + pass + + if exp is not None: + #print("run " + qtest) + r = os.system(MICROPYTHON + " %s >.tst.out" % qtest) + if r == 0: + f = open(".tst.out") + out = f.read() + f.close() + else: + out = "CRASH" + + if out == "SKIP\n": + print("skip " + qtest) + skip_count += 1 + else: + if out == exp: + print("pass " + qtest) + passed_count += 1 + else: + print("FAIL " + qtest) + + test_count += 1 + else: + skip_count += 1 + +print("%s tests performed" % test_count) +print("%s tests passed" % passed_count) +if test_count != passed_count: + print("%s tests failed" % (test_count - passed_count)) +if skip_count: + print("%s tests skipped" % skip_count)