summaryrefslogtreecommitdiff
path: root/addons/gdUnit4/src/reporters/html/GdUnitByPathReport.gd
diff options
context:
space:
mode:
Diffstat (limited to 'addons/gdUnit4/src/reporters/html/GdUnitByPathReport.gd')
-rw-r--r--addons/gdUnit4/src/reporters/html/GdUnitByPathReport.gd60
1 files changed, 60 insertions, 0 deletions
diff --git a/addons/gdUnit4/src/reporters/html/GdUnitByPathReport.gd b/addons/gdUnit4/src/reporters/html/GdUnitByPathReport.gd
new file mode 100644
index 0000000..74b961b
--- /dev/null
+++ b/addons/gdUnit4/src/reporters/html/GdUnitByPathReport.gd
@@ -0,0 +1,60 @@
+class_name GdUnitByPathReport
+extends GdUnitReportSummary
+
+
+func _init(p_path :String, report_summaries :Array[GdUnitReportSummary]) -> void:
+ _resource_path = p_path
+ _reports = report_summaries
+
+
+# -> Dictionary[String, Array[GdUnitReportSummary]]
+static func sort_reports_by_path(report_summaries :Array[GdUnitReportSummary]) -> Dictionary:
+ var by_path := Dictionary()
+ for report in report_summaries:
+ var suite_path :String = ProjectSettings.localize_path(report.path())
+ var suite_report :Array[GdUnitReportSummary] = by_path.get(suite_path, [] as Array[GdUnitReportSummary])
+ suite_report.append(report)
+ by_path[suite_path] = suite_report
+ return by_path
+
+
+func path() -> String:
+ return _resource_path.replace("res://", "").trim_suffix("/")
+
+
+func create_record(report_link :String) -> String:
+ return GdUnitHtmlPatterns.build(GdUnitHtmlPatterns.TABLE_RECORD_PATH, self, report_link)
+
+
+func write(report_dir :String) -> String:
+ calculate_summary()
+ var template := GdUnitHtmlPatterns.load_template("res://addons/gdUnit4/src/reporters/html/template/folder_report.html")
+ var path_report := GdUnitHtmlPatterns.build(template, self, "")
+ path_report = apply_testsuite_reports(report_dir, path_report, _reports)
+
+ var output_path := "%s/path/%s.html" % [report_dir, path().replace("/", ".")]
+ var dir := 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(output_path, FileAccess.WRITE).store_string(path_report)
+ return output_path
+
+
+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 := GdUnitHtmlReportWriter.create_output_path(report_dir, report.path(), report.name()).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 calculate_summary() -> void:
+ for report:GdUnitTestSuiteReport in get_reports():
+ _error_count += report.error_count()
+ _failure_count += report.failure_count()
+ _orphan_count += report.orphan_count()
+ _skipped_count += report.skipped_count()
+ _flaky_count += report.flaky_count()
+ _duration += report.duration()