From 0e1608d66768c7e52d771ab9cfab04f8fce9d79b Mon Sep 17 00:00:00 2001 From: nikeytsevevgeniy <11227166+nikeytsevevgeniy@user.noreply.gitee.com> Date: Fri, 22 Jul 2022 14:56:45 +0000 Subject: [PATCH] adding junit report for test run --- es2panda/test/runner.py | 23 ++++++++++++++++++++++ es2panda/test/test262util.py | 38 ++++++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+) diff --git a/es2panda/test/runner.py b/es2panda/test/runner.py index c6e542bd77..945fe9affc 100644 --- a/es2panda/test/runner.py +++ b/es2panda/test/runner.py @@ -25,6 +25,7 @@ import re import subprocess import sys import test262util +import datetime def is_directory(parser, arg): @@ -168,6 +169,9 @@ class Test262Test(Test): self.test_id = test_id self.fail_kind = None self.with_optimizer = with_optimizer + self.start_time = datetime.datetime.now(tz=datetime.timezone.utc) + self.finish_time = datetime.datetime.now(tz=datetime.timezone.utc) + self.skip_reason = '' class FailKind(Enum): ES2PANDA_FAIL = 1 @@ -198,6 +202,7 @@ class Test262Test(Test): if 'noStrict' in desc['flags']: self.skipped = True + self.skip_reason = "This test is for No Strict mode that is not supported" return self cmd.append(self.path) @@ -471,6 +476,8 @@ class Test262Runner(Runner): # we don't want to interpret asan failures as SyntaxErrors self.cmd_env[san] = ":exitcode=255" + self.test_result = test262util.Test262Result() + self.test_report_xml = 'report.xml' self.update = args.update self.enable_skiplists = False if self.update else args.skip self.normal_skiplist_file = "test262skiplist.txt" @@ -568,9 +575,16 @@ class Test262Runner(Runner): return path.relpath(src, self.test262_dir) def run(self): + self.test_result.start_test_run() Runner.run(self) self.update_skiplist() + def run_test(self, test) + test.start_time = datetime.datetime.now(tz=datetime.timezone.utc) + result = test.run(self) + result.finish_time = datetime.datetime.now(tz=datetime.timezone.utc) + return result + def summarize(self): print("") @@ -583,12 +597,16 @@ class Test262Runner(Runner): for test in self.tests: if test.skipped: num_skipped += 1 + self.test_result.add_skip(test) continue assert(test.passed is not None) if not test.passed: fail_lists[test.fail_kind].append(test) num_failed += 1 + self.test_result.add_failure(test) + else: + self.test_result.add_success(test) def summarize_list(name, tests_list): if len(tests_list): @@ -613,6 +631,11 @@ class Test262Runner(Runner): print("\033[91mFailed: %5d" % (num_failed)) print("\033[0m") + fd = os.open(os.path.join(self.test_root, self.test_report_xml), os.O_WRONLY | os.O_CREAT | os.O_TRUNC) + file = os.fdopen(fd, "w+") + self.test_result.stop_test_run(file) + file.close() + return num_failed def update_skiplist(self): diff --git a/es2panda/test/test262util.py b/es2panda/test/test262util.py index 5351b9ed8e..98d7e12482 100644 --- a/es2panda/test/test262util.py +++ b/es2panda/test/test262util.py @@ -20,6 +20,7 @@ import os import re import shutil import subprocess +import datetime class Test262Util: @@ -184,3 +185,40 @@ class Test262Util: return is_negative and (desc['negative_type'] in std_err) return False # abnormal + + +class Test262Result(): + + def __init__(self): + self.startTime = datetime.datetime.now(tz=datetime.timezone.utc) + self.results = [] + self.passed = 0 + self.failed = 0 + self.skipped = 0 + + def start_test_run(self) -> None: + self.startTime = datetime.datetime.now(tz=datetime.timezone.utc) + + def stop_test_run(self, fp) -> None: + duration = datetime.datetime.now(tz=datetime.timezone.utc) - self.startTime + fp.write('\n' % (self.failed, self.skipped, self.failed + self.passed, duration.total_seconds())) + fp.write(''.join(self.results)) + fp.write('\n') + + def add_success(self, test) -> None: + duration = test.finish_time - test.start_time + self.passed +=1 + self.results.append('\n' % (test.test_id, duration.total_seconds())) + + def add_failure(self, test) -> None: + duration = test.finish_time - test.start_time + self.failed +=1 + self.results.append('\n' % (test.test_id, duration.total_seconds()) + self.results.append('%s\n\n' % (test.fail_kind, test.error)) + + def add skip(self, test) -> None: + self.skipped +=1 + self.results.append('\n' % test.test_id) + self.results.append('%s\n\n' % test.skip_reason) + + -- Gitee