Skip to content

Commit

Permalink
GD-25: Convert autoload GdUnitSignals to singleton to avoid invalid…
Browse files Browse the repository at this point in the history
… project state (#48)
  • Loading branch information
MikeSchulze authored Dec 11, 2022
1 parent 687c50f commit 55a8a2f
Show file tree
Hide file tree
Showing 12 changed files with 35 additions and 28 deletions.
3 changes: 0 additions & 3 deletions addons/gdUnit4/plugin.gd
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,6 @@ func _enter_tree():
Engine.set_meta("GdUnitEditorPlugin", self)
_singleton = GdUnitSingleton.new()
GdUnitSettings.setup()
# install SignalHandler singleton
add_autoload_singleton("GdUnitSignals", "res://addons/gdUnit4/src/core/GdUnitSignals.gd")
# install the GdUnit inspector
_gd_inspector = load("res://addons/gdUnit4/src/ui/GdUnitInspector.tscn").instantiate()
add_control_to_dock(EditorPlugin.DOCK_SLOT_LEFT_UR, _gd_inspector)
Expand All @@ -51,7 +49,6 @@ func _exit_tree():
if is_instance_valid(_server_node):
remove_child(_server_node)
_server_node.free()
remove_autoload_singleton("GdUnitSignals")
if Engine.has_meta("GdUnitEditorPlugin"):
Engine.remove_meta("GdUnitEditorPlugin")
prints("Unload GdUnit4 Plugin success")
2 changes: 1 addition & 1 deletion addons/gdUnit4/src/core/GdUnitExecutor.gd
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ func fire_event(event :GdUnitEvent) -> void:
if Engine.has_singleton("GdUnitSignals"):
Engine.get_singleton("GdUnitSignals").gdunit_event.emit(event)
else:
GdUnitSignals.gdunit_event.emit(event)
GdUnitSignals.instance().gdunit_event.emit(event)

func fire_test_skipped(test_suite :GdUnitTestSuite, test_case :_TestCase):
fire_event(GdUnitEvent.new()\
Expand Down
2 changes: 1 addition & 1 deletion addons/gdUnit4/src/core/GdUnitRunner.gd
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ func _ready():
_state = EXIT
return
_client.connect("connection_failed", Callable(self, "_on_connection_failed"))
GdUnitSignals.gdunit_event.connect(Callable(self, "_on_gdunit_event"))
GdUnitSignals.instance().gdunit_event.connect(Callable(self, "_on_gdunit_event"))
var result := _client.start("127.0.0.1", _config.server_port())
if result.is_error():
push_error(result.error_message())
Expand Down
12 changes: 10 additions & 2 deletions addons/gdUnit4/src/core/GdUnitSignals.gd
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
@tool
extends Node
class_name GdUnitSignals
extends RefCounted

signal gdunit_client_connected(client_id :int)
signal gdunit_client_disconnected(client_id :int)
Expand All @@ -8,3 +8,11 @@ signal gdunit_client_terminated()
signal gdunit_event(event :GdUnitEvent)
signal gdunit_add_test_suite(test_suite :GdUnitTestSuiteDto)
signal gdunit_message(message :String)


static func instance() -> GdUnitSignals:
if Engine.has_meta("GdUnitSignals"):
return Engine.get_meta("GdUnitSignals")
var instance := GdUnitSignals.new()
Engine.set_meta("GdUnitSignals", instance)
return instance
10 changes: 5 additions & 5 deletions addons/gdUnit4/src/network/GdUnitServer.gd
Original file line number Diff line number Diff line change
Expand Up @@ -18,21 +18,21 @@ func _ready():
_server.connect("rpc_data", Callable(self, "_receive_rpc_data"))

func _on_client_connected(client_id :int) -> void:
GdUnitSignals.gdunit_client_connected.emit(client_id)
GdUnitSignals.instance().gdunit_client_connected.emit(client_id)

func _on_client_disconnected(client_id :int) -> void:
GdUnitSignals.gdunit_client_disconnected.emit(client_id)
GdUnitSignals.instance().gdunit_client_disconnected.emit(client_id)

func _on_gdunit_runner_stop(client_id :int):
if _server:
_server.disconnect_client(client_id)

func _receive_rpc_data(rpc :RPC) -> void:
if rpc is RPCMessage:
GdUnitSignals.gdunit_message.emit(rpc.message())
GdUnitSignals.instance().gdunit_message.emit(rpc.message())
return
if rpc is RPCGdUnitEvent:
GdUnitSignals.gdunit_event.emit(rpc.event())
GdUnitSignals.instance().gdunit_event.emit(rpc.event())
return
if rpc is RPCGdUnitTestSuite:
GdUnitSignals.gdunit_add_test_suite.emit(rpc.dto())
GdUnitSignals.instance().gdunit_add_test_suite.emit(rpc.dto())
8 changes: 4 additions & 4 deletions addons/gdUnit4/src/ui/GdUnitConsole.gd
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,10 @@ var _summary = {
func _ready():
init_colors()
GdUnit4Version.init_version_label(title)
GdUnitSignals.gdunit_event.connect(Callable(self, "_on_gdunit_event"))
GdUnitSignals.gdunit_message.connect(Callable(self, "_on_gdunit_message"))
GdUnitSignals.gdunit_client_connected.connect(Callable(self, "_on_gdunit_client_connected"))
GdUnitSignals.gdunit_client_disconnected.connect(Callable(self, "_on_gdunit_client_disconnected"))
GdUnitSignals.instance().gdunit_event.connect(Callable(self, "_on_gdunit_event"))
GdUnitSignals.instance().gdunit_message.connect(Callable(self, "_on_gdunit_message"))
GdUnitSignals.instance().gdunit_client_connected.connect(Callable(self, "_on_gdunit_client_connected"))
GdUnitSignals.instance().gdunit_client_disconnected.connect(Callable(self, "_on_gdunit_client_disconnected"))
output.clear()

func _notification(what):
Expand Down
6 changes: 3 additions & 3 deletions addons/gdUnit4/src/ui/GdUnitInspector.gd
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,9 @@ var _runner_config := GdUnitRunnerConfig.new()


func _ready():
GdUnitSignals.gdunit_client_connected.connect(Callable(self, "_on_client_connected"))
GdUnitSignals.gdunit_client_disconnected.connect(Callable(self, "_on_client_disconnected"))
GdUnitSignals.gdunit_event.connect(Callable(self, "_on_event"))
GdUnitSignals.instance().gdunit_client_connected.connect(Callable(self, "_on_client_connected"))
GdUnitSignals.instance().gdunit_client_disconnected.connect(Callable(self, "_on_client_disconnected"))
GdUnitSignals.instance().gdunit_event.connect(Callable(self, "_on_event"))
var plugin :EditorPlugin = Engine.get_meta("GdUnitEditorPlugin") as EditorPlugin
_editor_interface = plugin.get_editor_interface()
if Engine.is_editor_hint():
Expand Down
2 changes: 1 addition & 1 deletion addons/gdUnit4/src/ui/parts/InspectorMonitor.gd
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ var total_elapsed_time := 0
var total_orphans := 0

func _ready():
GdUnitSignals.gdunit_event.connect(Callable(self, "_on_gdunit_event"))
GdUnitSignals.instance().gdunit_event.connect(Callable(self, "_on_gdunit_event"))
_time.text = ""
_orphans.text = "0"

Expand Down
2 changes: 1 addition & 1 deletion addons/gdUnit4/src/ui/parts/InspectorProgressBar.gd
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ extends ProgressBar
@onready var style :StyleBoxFlat = bar.get("theme_override_styles/fill")

func _ready():
GdUnitSignals.gdunit_event.connect(Callable(self, "_on_gdunit_event"))
GdUnitSignals.instance().gdunit_event.connect(Callable(self, "_on_gdunit_event"))
style.bg_color = Color.DARK_GREEN
#var plugin := EditorPlugin.new()
#var settings := plugin.get_editor_interface().get_editor_settings()
Expand Down
2 changes: 1 addition & 1 deletion addons/gdUnit4/src/ui/parts/InspectorStatusBar.gd
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ var total_failed := 0
var total_errors := 0

func _ready():
GdUnitSignals.gdunit_event.connect(Callable(self, "_on_gdunit_event"))
GdUnitSignals.instance().gdunit_event.connect(Callable(self, "_on_gdunit_event"))
_failures.text = "0"
_errors.text = "0"

Expand Down
4 changes: 2 additions & 2 deletions addons/gdUnit4/src/ui/parts/InspectorTreeMainPanel.gd
Original file line number Diff line number Diff line change
Expand Up @@ -113,8 +113,8 @@ func _ready():
init_tree()
if Engine.is_editor_hint():
_editor = Engine.get_meta("GdUnitEditorPlugin")
GdUnitSignals.gdunit_add_test_suite.connect(Callable(self, "_on_gdunit_add_test_suite"))
GdUnitSignals.gdunit_event.connect(Callable(self, "_on_gdunit_event"))
GdUnitSignals.instance().gdunit_add_test_suite.connect(Callable(self, "_on_gdunit_add_test_suite"))
GdUnitSignals.instance().gdunit_event.connect(Callable(self, "_on_gdunit_event"))


# we need current to manually redraw bacause of the animation bug
Expand Down
10 changes: 6 additions & 4 deletions project.godot
Original file line number Diff line number Diff line change
Expand Up @@ -774,6 +774,11 @@ _global_script_classes=[{
"language": &"GDScript",
"path": "res://addons/gdUnit4/test/core/GdUnitSignalAwaiterTest.gd"
}, {
"base": "RefCounted",
"class": &"GdUnitSignals",
"language": &"GDScript",
"path": "res://addons/gdUnit4/src/core/GdUnitSignals.gd"
}, {
"base": "GdUnitStaticDictionary",
"class": &"GdUnitSingleton",
"language": &"GDScript",
Expand Down Expand Up @@ -1348,6 +1353,7 @@ _global_script_class_icons={
"GdUnitSignalAssertImplTest": "",
"GdUnitSignalAwaiter": "",
"GdUnitSignalAwaiterTest": "",
"GdUnitSignals": "",
"GdUnitSingleton": "",
"GdUnitSpyBuilder": "",
"GdUnitSpyBuilderTest": "",
Expand Down Expand Up @@ -1444,10 +1450,6 @@ config/icon="res://icon.png"

default_bus_layout=""

[autoload]

GdUnitSignals="*res://addons/gdUnit4/src/core/GdUnitSignals.gd"

[debug]

gdscript/warnings/unused_signal=false
Expand Down

0 comments on commit 55a8a2f

Please sign in to comment.