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