summaryrefslogtreecommitdiff
path: root/addons/gdUnit4/src/reporters/html/GdUnitHtmlReportWriter.gd
diff options
context:
space:
mode:
authorradiohotline <radoihotline@disroot.rg>2026-08-25 16:33:56 +0300
committerradiohotline <radoihotline@disroot.rg>2026-08-25 16:33:56 +0300
commita89e744ed0e8c759caf041a580112365bbfe4303 (patch)
treedd61e320904176995727e86a857d00c90d4933ba /addons/gdUnit4/src/reporters/html/GdUnitHtmlReportWriter.gd
parent6d53d8cac78250dc888aa49d5f9d4175c6652feb (diff)
escoria updateHEADmain
Diffstat (limited to 'addons/gdUnit4/src/reporters/html/GdUnitHtmlReportWriter.gd')
-rw-r--r--addons/gdUnit4/src/reporters/html/GdUnitHtmlReportWriter.gd72
1 files changed, 72 insertions, 0 deletions
diff --git a/addons/gdUnit4/src/reporters/html/GdUnitHtmlReportWriter.gd b/addons/gdUnit4/src/reporters/html/GdUnitHtmlReportWriter.gd
new file mode 100644
index 0000000..a3d2bff
--- /dev/null
+++ b/addons/gdUnit4/src/reporters/html/GdUnitHtmlReportWriter.gd
@@ -0,0 +1,72 @@
+class_name GdUnitHtmlReportWriter
+extends GdUnitReportWriter
+
+
+func output_format() -> String:
+ return "HTML"
+
+
+func write(report_path: String, report: GdUnitReportSummary) -> String:
+ var template := GdUnitHtmlPatterns.load_template("res://addons/gdUnit4/src/reporters/html/template/index.html")
+ var to_write := GdUnitHtmlPatterns.build(template, report, "")
+ to_write = _apply_path_reports(report_path, to_write, report.get_reports())
+ to_write = _apply_testsuite_reports(report_path, to_write, report.get_reports())
+ # write report
+ DirAccess.make_dir_recursive_absolute(report_path)
+ var html_report_file := "%s/index.html" % report_path
+ FileAccess.open(html_report_file, FileAccess.WRITE).store_string(to_write)
+ @warning_ignore("return_value_discarded")
+ GdUnitFileAccess.copy_directory("res://addons/gdUnit4/src/reporters/html/template/css/", report_path + "/css")
+ return html_report_file
+
+
+func _apply_path_reports(report_dir: String, template: String, report_summaries: Array) -> String:
+ #Dictionary[String, Array[GdUnitReportSummary]]
+ var path_report_mapping := GdUnitByPathReport.sort_reports_by_path(report_summaries)
+ var table_records := PackedStringArray()
+ var paths: Array[String] = []
+ paths.append_array(path_report_mapping.keys())
+ paths.sort()
+ for report_at_path in paths:
+ var reports: Array[GdUnitReportSummary] = path_report_mapping.get(report_at_path)
+ var report := GdUnitByPathReport.new(report_at_path, reports)
+ var report_link: String = report.write(report_dir).replace(report_dir, ".")
+ @warning_ignore("return_value_discarded")
+ table_records.append(report.create_record(report_link))
+ return template.replace(GdUnitHtmlPatterns.TABLE_BY_PATHS, "\n".join(table_records))
+
+
+func _apply_testsuite_reports(report_dir: String, template: String, test_suite_reports: Array[GdUnitReportSummary]) -> String:
+ var table_records := PackedStringArray()
+ for report: GdUnitTestSuiteReport in test_suite_reports:
+ var report_link: String = _write(report_dir, report).replace(report_dir, ".")
+ @warning_ignore("return_value_discarded")
+ table_records.append(GdUnitHtmlPatterns.create_suite_record(report_link, report))
+ return template.replace(GdUnitHtmlPatterns.TABLE_BY_TESTSUITES, "\n".join(table_records))
+
+
+func _write(report_dir :String, report: GdUnitTestSuiteReport) -> String:
+ var template := GdUnitHtmlPatterns.load_template("res://addons/gdUnit4/src/reporters/html/template/suite_report.html")
+ template = GdUnitHtmlPatterns.build(template, report, "")
+
+ var report_output_path := create_output_path(report_dir, report.path(), report.name())
+ var test_report_table := PackedStringArray()
+ if not report._failure_reports.is_empty():
+ @warning_ignore("return_value_discarded")
+ test_report_table.append(GdUnitHtmlPatterns.create_suite_failure_report(report))
+ for test_report: GdUnitTestCaseReport in report._reports:
+ @warning_ignore("return_value_discarded")
+ test_report_table.append(GdUnitHtmlPatterns.create_test_failure_report(report_output_path, test_report))
+
+ template = template.replace(GdUnitHtmlPatterns.TABLE_BY_TESTCASES, "\n".join(test_report_table))
+
+ var dir := report_output_path.get_base_dir()
+ if not DirAccess.dir_exists_absolute(dir):
+ @warning_ignore("return_value_discarded")
+ DirAccess.make_dir_recursive_absolute(dir)
+ FileAccess.open(report_output_path, FileAccess.WRITE).store_string(template)
+ return report_output_path
+
+
+static func create_output_path(report_dir :String, path: String, name: String) -> String:
+ return "%s/test_suites/%s.%s.html" % [report_dir, path.replace("/", "."), name]