summaryrefslogtreecommitdiff
path: root/addons/gdUnit4/src/reporters/GdUnitReportSummary.gd
diff options
context:
space:
mode:
Diffstat (limited to 'addons/gdUnit4/src/reporters/GdUnitReportSummary.gd')
-rw-r--r--addons/gdUnit4/src/reporters/GdUnitReportSummary.gd202
1 files changed, 202 insertions, 0 deletions
diff --git a/addons/gdUnit4/src/reporters/GdUnitReportSummary.gd b/addons/gdUnit4/src/reporters/GdUnitReportSummary.gd
new file mode 100644
index 0000000..b55b964
--- /dev/null
+++ b/addons/gdUnit4/src/reporters/GdUnitReportSummary.gd
@@ -0,0 +1,202 @@
+class_name GdUnitReportSummary
+extends RefCounted
+
+var _resource_path: String
+var _name: String
+var _test_count := 0
+var _failure_count := 0
+var _error_count := 0
+var _orphan_count := 0
+var _skipped_count := 0
+var _flaky_count := 0
+var _duration := 0
+var _reports: Array[GdUnitReportSummary] = []
+var _text_formatter: Callable
+
+
+func _init(text_formatter: Callable) -> void:
+ _text_formatter = text_formatter
+
+
+func name() -> String:
+ return _name
+
+
+func path() -> String:
+ return _resource_path.get_base_dir().replace("res://", "")
+
+
+func get_resource_path() -> String:
+ return _resource_path
+
+
+func suite_count() -> int:
+ return _reports.size()
+
+
+func suite_executed_count() -> int:
+ var executed := _reports.size()
+ for report in _reports:
+ if report.test_count() == report.skipped_count():
+ executed -= 1
+ return executed
+
+
+func test_count() -> int:
+ var count := _test_count
+ for report in _reports:
+ count += report.test_count()
+ return count
+
+
+func test_executed_count() -> int:
+ return test_count() - skipped_count()
+
+
+func success_count() -> int:
+ return test_count() - error_count() - failure_count() - flaky_count() - skipped_count()
+
+
+func error_count() -> int:
+ return _error_count
+
+
+func failure_count() -> int:
+ return _failure_count
+
+
+func skipped_count() -> int:
+ return _skipped_count
+
+
+func flaky_count() -> int:
+ return _flaky_count
+
+
+func orphan_count() -> int:
+ return _orphan_count
+
+
+func duration() -> int:
+ return _duration
+
+
+func get_reports() -> Array:
+ return _reports
+
+
+func add_report(report: GdUnitReportSummary) -> void:
+ _reports.append(report)
+
+
+func report_state() -> String:
+ return calculate_state(error_count(), failure_count(), orphan_count(), flaky_count(), skipped_count())
+
+
+func succes_rate() -> String:
+ return calculate_succes_rate(test_count(), error_count(), failure_count())
+
+
+@warning_ignore("shadowed_variable")
+func add_testcase(resource_path: String, suite_name: String, test_name: String) -> void:
+ for report: GdUnitTestSuiteReport in _reports:
+ if report.get_resource_path() == resource_path:
+ var test_report := GdUnitTestCaseReport.new(resource_path, suite_name, test_name, _text_formatter)
+ report.add_or_create_test_report(test_report)
+
+
+func add_reports(
+ p_resource_path: String,
+ p_test_name: String,
+ p_reports: Array[GdUnitReport]) -> void:
+
+ for report:GdUnitTestSuiteReport in _reports:
+ if report.get_resource_path() == p_resource_path:
+ report.add_testcase_reports(p_test_name, p_reports)
+
+
+func add_testsuite_report(p_resource_path: String, p_suite_name: String, p_test_count: int) -> void:
+ _reports.append(GdUnitTestSuiteReport.new(p_resource_path, p_suite_name, p_test_count, _text_formatter))
+
+
+func add_testsuite_reports(
+ p_resource_path: String,
+ p_reports: Array = []) -> void:
+
+ for report:GdUnitTestSuiteReport in _reports:
+ if report.get_resource_path() == p_resource_path:
+ report.set_reports(p_reports)
+
+
+func set_counters(
+ p_resource_path: String,
+ p_test_name: String,
+ p_error_count: int,
+ p_failure_count: int,
+ p_orphan_count: int,
+ p_is_skipped: bool,
+ p_is_flaky: bool,
+ p_duration: int) -> void:
+
+ for report: GdUnitTestSuiteReport in _reports:
+ if report.get_resource_path() == p_resource_path:
+ report.set_testcase_counters(p_test_name, p_error_count, p_failure_count, p_orphan_count,
+ p_is_skipped, p_is_flaky, p_duration)
+
+
+func update_testsuite_counters(
+ p_resource_path: String,
+ p_error_count: int,
+ p_failure_count: int,
+ p_orphan_count: int,
+ p_skipped_count: int,
+ p_flaky_count: int,
+ p_duration: int) -> void:
+
+ for report:GdUnitTestSuiteReport in _reports:
+ if report.get_resource_path() == p_resource_path:
+ report._update_testsuite_counters(p_error_count, p_failure_count, p_orphan_count, p_skipped_count, p_flaky_count, p_duration)
+ _update_summary_counters(p_error_count, p_failure_count, p_orphan_count, p_skipped_count, p_flaky_count, 0)
+
+
+func _update_summary_counters(
+ p_error_count: int,
+ p_failure_count: int,
+ p_orphan_count: int,
+ p_skipped_count: int,
+ p_flaky_count: int,
+ p_duration: int) -> void:
+
+ _error_count += p_error_count
+ _failure_count += p_failure_count
+ _orphan_count += p_orphan_count
+ _skipped_count += p_skipped_count
+ _flaky_count += p_flaky_count
+ _duration += p_duration
+
+
+func calculate_state(p_error_count :int, p_failure_count :int, p_orphan_count :int, p_flaky_count: int, p_skipped_count: int) -> String:
+ if p_error_count > 0:
+ return "ERROR"
+ if p_failure_count > 0:
+ return "FAILED"
+ if p_flaky_count > 0:
+ return "FLAKY"
+ if p_orphan_count > 0:
+ return "WARNING"
+ if p_skipped_count > 0:
+ return "SKIPPED"
+ return "PASSED"
+
+
+func calculate_succes_rate(p_test_count :int, p_error_count :int, p_failure_count :int) -> String:
+ if p_failure_count == 0:
+ return "100%"
+ var count := p_test_count-p_failure_count-p_error_count
+ if count < 0:
+ return "0%"
+ return "%d" % (( 0 if count < 0 else count) * 100.0 / p_test_count) + "%"
+
+
+func create_summary(_report_dir :String) -> String:
+ return ""