summaryrefslogtreecommitdiff
path: root/addons/gdUnit4/src/ui/parts/InspectorStatusBar.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/ui/parts/InspectorStatusBar.gd
parent6d53d8cac78250dc888aa49d5f9d4175c6652feb (diff)
escoria updateHEADmain
Diffstat (limited to 'addons/gdUnit4/src/ui/parts/InspectorStatusBar.gd')
-rw-r--r--addons/gdUnit4/src/ui/parts/InspectorStatusBar.gd209
1 files changed, 209 insertions, 0 deletions
diff --git a/addons/gdUnit4/src/ui/parts/InspectorStatusBar.gd b/addons/gdUnit4/src/ui/parts/InspectorStatusBar.gd
new file mode 100644
index 0000000..1863459
--- /dev/null
+++ b/addons/gdUnit4/src/ui/parts/InspectorStatusBar.gd
@@ -0,0 +1,209 @@
+@tool
+extends PanelContainer
+
+signal select_failure_next()
+signal select_failure_prevous()
+signal select_error_next()
+signal select_error_prevous()
+signal select_flaky_next()
+signal select_flaky_prevous()
+signal select_skipped_next()
+signal select_skipped_prevous()
+
+@warning_ignore("unused_signal")
+signal tree_view_mode_changed(flat :bool)
+
+@onready var _errors: Label = %error_value
+@onready var _failures: Label = %failure_value
+@onready var _flaky_value: Label = %flaky_value
+@onready var _skipped_value: Label = %skipped_value
+#@onready var _button_failure_up: Button = %btn_failure_up
+#@onready var _button_failure_down: Button = %btn_failure_down
+@onready var _button_sync: Button = %btn_tree_sync
+@onready var _button_view_mode: MenuButton = %btn_tree_mode
+@onready var _button_sort_mode: MenuButton = %btn_tree_sort
+
+@onready var _icon_errors: TextureRect = %icon_errors
+@onready var _icon_failures: TextureRect = %icon_failures
+@onready var _icon_flaky: TextureRect = %icon_flaky
+@onready var _icon_skipped: TextureRect = %icon_skipped
+
+var total_failed := 0
+var total_errors := 0
+var total_flaky := 0
+var total_skipped := 0
+
+
+var icon_mappings := {
+ # tree sort modes
+ 0x100 + GdUnitInspectorTreeConstants.SORT_MODE.UNSORTED : GdUnitUiTools.get_icon("TripleBar"),
+ 0x100 + GdUnitInspectorTreeConstants.SORT_MODE.NAME_ASCENDING : GdUnitUiTools.get_icon("Sort"),
+ 0x100 + GdUnitInspectorTreeConstants.SORT_MODE.NAME_DESCENDING : GdUnitUiTools.get_flipped_icon("Sort"),
+ 0x100 + GdUnitInspectorTreeConstants.SORT_MODE.EXECUTION_TIME : GdUnitUiTools.get_icon("History"),
+ # tree view modes
+ 0x200 + GdUnitInspectorTreeConstants.TREE_VIEW_MODE.TREE : GdUnitUiTools.get_icon("Tree", Color.GHOST_WHITE),
+ 0x200 + GdUnitInspectorTreeConstants.TREE_VIEW_MODE.FLAT : GdUnitUiTools.get_icon("AnimationTrackGroup", Color.GHOST_WHITE)
+}
+
+
+@warning_ignore("return_value_discarded")
+func _ready() -> void:
+ _failures.text = "0"
+ _errors.text = "0"
+ _flaky_value.text = "0"
+ _skipped_value.text = "0"
+ _icon_failures.texture = GdUnitUiTools.get_icon("StatusError", Color.SKY_BLUE)
+ _icon_errors.texture = GdUnitUiTools.get_icon("StatusError", Color.DARK_RED)
+ _icon_flaky.texture = GdUnitUiTools.get_icon("CheckBox", Color.GREEN_YELLOW)
+ _icon_skipped.texture = GdUnitUiTools.get_icon("CheckBox", Color.WEB_GRAY)
+
+ #_button_failure_up.icon = GdUnitUiTools.get_icon("ArrowUp")
+ #_button_failure_down.icon = GdUnitUiTools.get_icon("ArrowDown")
+ _button_sync.icon = GdUnitUiTools.get_icon("Loop")
+ _set_sort_mode_menu_options()
+ _set_view_mode_menu_options()
+ GdUnitSignals.instance().gdunit_event.connect(_on_gdunit_event)
+ GdUnitSignals.instance().gdunit_settings_changed.connect(_on_settings_changed)
+
+
+func _set_sort_mode_menu_options() -> void:
+ _button_sort_mode.icon = GdUnitUiTools.get_icon("Sort")
+ # construct context sort menu according to the available modes
+ var context_menu :PopupMenu = _button_sort_mode.get_popup()
+ context_menu.clear()
+
+ if not context_menu.index_pressed.is_connected(_on_sort_mode_changed):
+ @warning_ignore("return_value_discarded")
+ context_menu.index_pressed.connect(_on_sort_mode_changed)
+
+ var configured_sort_mode := GdUnitSettings.get_inspector_tree_sort_mode()
+ for sort_mode: String in GdUnitInspectorTreeConstants.SORT_MODE.keys():
+ var enum_value :int = GdUnitInspectorTreeConstants.SORT_MODE.get(sort_mode)
+ var icon :Texture2D = icon_mappings[0x100 + enum_value]
+ context_menu.add_icon_check_item(icon, normalise(sort_mode), enum_value)
+ context_menu.set_item_checked(enum_value, configured_sort_mode == enum_value)
+
+
+func _set_view_mode_menu_options() -> void:
+ _button_view_mode.icon = GdUnitUiTools.get_icon("Tree", Color.GHOST_WHITE)
+ # construct context tree view menu according to the available modes
+ var context_menu :PopupMenu = _button_view_mode.get_popup()
+ context_menu.clear()
+
+ if not context_menu.index_pressed.is_connected(_on_tree_view_mode_changed):
+ @warning_ignore("return_value_discarded")
+ context_menu.index_pressed.connect(_on_tree_view_mode_changed)
+
+ var configured_tree_view_mode := GdUnitSettings.get_inspector_tree_view_mode()
+ for tree_view_mode: String in GdUnitInspectorTreeConstants.TREE_VIEW_MODE.keys():
+ var enum_value :int = GdUnitInspectorTreeConstants.TREE_VIEW_MODE.get(tree_view_mode)
+ var icon :Texture2D = icon_mappings[0x200 + enum_value]
+ context_menu.add_icon_check_item(icon, normalise(tree_view_mode), enum_value)
+ context_menu.set_item_checked(enum_value, configured_tree_view_mode == enum_value)
+
+
+func normalise(value: String) -> String:
+ var parts := value.to_lower().split("_")
+ parts[0] = parts[0].capitalize()
+ return " ".join(parts)
+
+
+func status_changed(errors: int, failed: int, flaky: int, skipped: int) -> void:
+ total_failed += failed
+ total_errors += errors
+ total_flaky += flaky
+ total_skipped += skipped
+ _failures.text = str(total_failed)
+ _errors.text = str(total_errors)
+ _flaky_value.text = str(total_flaky)
+ _skipped_value.text = str(total_skipped)
+
+
+func disable_buttons(value :bool) -> void:
+ _button_sync.set_disabled(value)
+ _button_sort_mode.set_disabled(value)
+ _button_view_mode.set_disabled(value)
+
+
+func _on_gdunit_event(event: GdUnitEvent) -> void:
+ match event.type():
+ GdUnitEvent.DISCOVER_START:
+ disable_buttons(true)
+
+ GdUnitEvent.DISCOVER_END:
+ disable_buttons(false)
+
+ GdUnitEvent.INIT:
+ total_errors = 0
+ total_failed = 0
+ total_flaky = 0
+ total_skipped = 0
+ status_changed(total_errors, total_failed, total_flaky, total_skipped)
+
+ GdUnitEvent.TESTCASE_AFTER:
+ status_changed(event.error_count(), event.failed_count(), event.is_flaky(), event.is_skipped())
+
+ GdUnitEvent.TESTSUITE_AFTER:
+ status_changed(event.error_count(), event.failed_count(), event.is_flaky(), 0)
+
+ GdUnitEvent.SESSION_START:
+ disable_buttons(true)
+
+ GdUnitEvent.SESSION_CLOSE:
+ disable_buttons(false)
+
+
+func _on_btn_error_up_pressed() -> void:
+ select_error_prevous.emit()
+
+
+func _on_btn_error_down_pressed() -> void:
+ select_error_next.emit()
+
+
+func _on_failure_up_pressed() -> void:
+ select_failure_prevous.emit()
+
+
+func _on_failure_down_pressed() -> void:
+ select_failure_next.emit()
+
+
+func _on_btn_flaky_up_pressed() -> void:
+ select_flaky_prevous.emit()
+
+
+func _on_btn_flaky_down_pressed() -> void:
+ select_flaky_next.emit()
+
+
+func _on_btn_skipped_up_pressed() -> void:
+ select_skipped_prevous.emit()
+
+
+func _on_btn_skipped_down_pressed() -> void:
+ select_skipped_next.emit()
+
+
+func _on_btn_tree_sync_pressed() -> void:
+ await GdUnitTestDiscoverer.run()
+
+
+func _on_sort_mode_changed(index: int) -> void:
+ var selected_sort_mode :GdUnitInspectorTreeConstants.SORT_MODE = GdUnitInspectorTreeConstants.SORT_MODE.values()[index]
+ GdUnitSettings.set_inspector_tree_sort_mode(selected_sort_mode)
+
+
+func _on_tree_view_mode_changed(index: int) ->void:
+ var selected_tree_mode :GdUnitInspectorTreeConstants.TREE_VIEW_MODE = GdUnitInspectorTreeConstants.TREE_VIEW_MODE.values()[index]
+ GdUnitSettings.set_inspector_tree_view_mode(selected_tree_mode)
+
+
+################################################################################
+# external signal receiver
+################################################################################
+func _on_settings_changed(property :GdUnitProperty) -> void:
+ if property.name() == GdUnitSettings.INSPECTOR_TREE_SORT_MODE:
+ _set_sort_mode_menu_options()
+ if property.name() == GdUnitSettings.INSPECTOR_TREE_VIEW_MODE:
+ _set_view_mode_menu_options()