161 lines
5.7 KiB
GDScript
161 lines
5.7 KiB
GDScript
@tool
|
|
extends Control
|
|
|
|
const TITLE = "gdUnit4 ${version} Console"
|
|
|
|
@onready var header := $VBoxContainer/Header
|
|
@onready var title :RichTextLabel = $VBoxContainer/Header/header_title
|
|
@onready var output :RichTextLabel = $VBoxContainer/Console/TextEdit
|
|
|
|
var _text_color :Color
|
|
var _function_color :Color
|
|
var _engine_type_color :Color
|
|
var _statistics = {}
|
|
var _summary = {
|
|
"total_count": 0,
|
|
"error_count": 0,
|
|
"failed_count": 0,
|
|
"skipped_count": 0,
|
|
"orphan_nodes": 0
|
|
}
|
|
|
|
|
|
func _ready():
|
|
init_colors()
|
|
GdUnitFonts.init_fonts(output)
|
|
GdUnit4Version.init_version_label(title)
|
|
GdUnitSignals.instance().gdunit_event.connect(_on_gdunit_event)
|
|
GdUnitSignals.instance().gdunit_message.connect(_on_gdunit_message)
|
|
GdUnitSignals.instance().gdunit_client_connected.connect(_on_gdunit_client_connected)
|
|
GdUnitSignals.instance().gdunit_client_disconnected.connect(_on_gdunit_client_disconnected)
|
|
output.clear()
|
|
|
|
|
|
func _notification(what):
|
|
if what == EditorSettings.NOTIFICATION_EDITOR_SETTINGS_CHANGED:
|
|
init_colors()
|
|
if what == NOTIFICATION_PREDELETE:
|
|
GdUnitSignals.instance().gdunit_event.disconnect(_on_gdunit_event)
|
|
GdUnitSignals.instance().gdunit_message.disconnect(_on_gdunit_message)
|
|
GdUnitSignals.instance().gdunit_client_connected.disconnect(_on_gdunit_client_connected)
|
|
GdUnitSignals.instance().gdunit_client_disconnected.disconnect(_on_gdunit_client_disconnected)
|
|
|
|
|
|
func init_colors() -> void:
|
|
var plugin :EditorPlugin = Engine.get_meta("GdUnitEditorPlugin")
|
|
var settings := plugin.get_editor_interface().get_editor_settings()
|
|
_text_color = settings.get_setting("text_editor/theme/highlighting/text_color")
|
|
_function_color = settings.get_setting("text_editor/theme/highlighting/function_color")
|
|
_engine_type_color = settings.get_setting("text_editor/theme/highlighting/engine_type_color")
|
|
|
|
|
|
func init_statistics(event :GdUnitEvent) :
|
|
_statistics["total_count"] = event.total_count()
|
|
_statistics["error_count"] = 0
|
|
_statistics["failed_count"] = 0
|
|
_statistics["skipped_count"] = 0
|
|
_statistics["orphan_nodes"] = 0
|
|
_summary["total_count"] += event.total_count()
|
|
|
|
|
|
func reset_statistics() -> void:
|
|
for k in _statistics.keys():
|
|
_statistics[k] = 0
|
|
for k in _summary.keys():
|
|
_summary[k] = 0
|
|
|
|
|
|
func update_statistics(event :GdUnitEvent) :
|
|
_statistics["error_count"] += event.error_count()
|
|
_statistics["failed_count"] += event.failed_count()
|
|
_statistics["skipped_count"] += event.skipped_count()
|
|
_statistics["orphan_nodes"] += event.orphan_nodes()
|
|
_summary["error_count"] += event.error_count()
|
|
_summary["failed_count"] += event.failed_count()
|
|
_summary["skipped_count"] += event.skipped_count()
|
|
_summary["orphan_nodes"] += event.orphan_nodes()
|
|
|
|
|
|
func print_message(message :String, color :Color = _text_color, indent :int = 0) -> void:
|
|
for i in indent:
|
|
output.push_indent(1)
|
|
output.push_color(color)
|
|
output.append_text(message)
|
|
output.pop()
|
|
for i in indent:
|
|
output.pop()
|
|
|
|
|
|
func println_message(message :String, color :Color = _text_color, indent :int = -1) -> void:
|
|
print_message(message, color, indent)
|
|
output.newline()
|
|
|
|
|
|
func _on_gdunit_event(event :GdUnitEvent):
|
|
match event.type():
|
|
GdUnitEvent.INIT:
|
|
reset_statistics()
|
|
|
|
GdUnitEvent.STOP:
|
|
print_message("Summary:", Color.DODGER_BLUE)
|
|
println_message("| %d total | %d error | %d failed | %d skipped | %d orphans |" % [_summary["total_count"], _summary["error_count"], _summary["failed_count"], _summary["skipped_count"], _summary["orphan_nodes"]], _text_color, 1)
|
|
print_message("[wave][/wave]")
|
|
|
|
GdUnitEvent.TESTSUITE_BEFORE:
|
|
init_statistics(event)
|
|
print_message("Execute: ", Color.DODGER_BLUE)
|
|
println_message(event._suite_name, _engine_type_color)
|
|
|
|
GdUnitEvent.TESTSUITE_AFTER:
|
|
update_statistics(event)
|
|
if not event.reports().is_empty():
|
|
var report :GdUnitReport = event.reports().front()
|
|
println_message("\t" +event._suite_name, _engine_type_color)
|
|
println_message("line %d %s" % [report._line_number, report._message], _text_color, 2)
|
|
if event.is_success():
|
|
print_message("[wave]PASSED[/wave]", Color.LIGHT_GREEN)
|
|
else:
|
|
print_message("[shake rate=5 level=10][b]FAILED[/b][/shake]", Color.FIREBRICK)
|
|
print_message(" | %d total | %d error | %d failed | %d skipped | %d orphans |" % [_statistics["total_count"], _statistics["error_count"], _statistics["failed_count"], _statistics["skipped_count"], _statistics["orphan_nodes"]])
|
|
println_message("%+12s" % LocalTime.elapsed(event.elapsed_time()))
|
|
println_message(" ")
|
|
|
|
GdUnitEvent.TESTCASE_BEFORE:
|
|
var spaces = "-%d" % (80 - event._suite_name.length())
|
|
print_message(event._suite_name, _engine_type_color, 1)
|
|
print_message(":")
|
|
print_message(("%"+spaces+"s") % event._test_name, _function_color)
|
|
|
|
GdUnitEvent.TESTCASE_AFTER:
|
|
var reports := event.reports()
|
|
update_statistics(event)
|
|
if event.is_success():
|
|
print_message("PASSED", Color.LIGHT_GREEN)
|
|
elif event.is_skipped():
|
|
print_message("SKIPPED", Color.GOLDENROD)
|
|
elif event.is_error() or event.is_failed():
|
|
print_message("[wave]FAILED[/wave]", Color.FIREBRICK)
|
|
elif event.is_warning():
|
|
print_message("WARNING", Color.YELLOW)
|
|
println_message(" %+12s" % LocalTime.elapsed(event.elapsed_time()))
|
|
|
|
var report :GdUnitReport = null if reports.is_empty() else reports[0]
|
|
if report:
|
|
println_message("line %d %s" % [report._line_number, report._message], _text_color, 2)
|
|
|
|
|
|
func _on_gdunit_client_connected(client_id :int) -> void:
|
|
output.clear()
|
|
output.append_text("[color=#9887c4]GdUnit Test Client connected with id %d[/color]\n" % client_id)
|
|
output.newline()
|
|
|
|
|
|
func _on_gdunit_client_disconnected(client_id :int) -> void:
|
|
output.append_text("[color=#9887c4]GdUnit Test Client disconnected with id %d[/color]\n" % client_id)
|
|
output.newline()
|
|
|
|
|
|
func _on_gdunit_message(message :String):
|
|
output.newline()
|
|
output.append_text(message)
|
|
output.newline()
|