- 修复 WebSocketManager/SocketIOClient 函数缩进错误 - 重命名 is_connected() 避免与 Object 基类冲突 - 修复 tscn 文件多余前导空格 - 修复测试文件 GUT 断言函数调用 - 添加 GUT 测试框架
172 lines
4.3 KiB
GDScript
172 lines
4.3 KiB
GDScript
@tool
|
|
extends Control
|
|
|
|
var EditorCaretContextNotifier = load('res://addons/gut/editor_caret_context_notifier.gd')
|
|
|
|
@onready var _ctrls = {
|
|
btn_script = $HBox/BtnRunScript,
|
|
btn_inner = $HBox/BtnRunInnerClass,
|
|
btn_method = $HBox/BtnRunMethod,
|
|
lbl_none = $HBox/LblNoneSelected,
|
|
arrow_1 = $HBox/Arrow1,
|
|
arrow_2 = $HBox/Arrow2
|
|
}
|
|
|
|
var _caret_notifier = null
|
|
|
|
var _last_info = {
|
|
script = null,
|
|
inner_class = null,
|
|
method = null
|
|
}
|
|
|
|
var disabled = false :
|
|
set(val):
|
|
disabled = val
|
|
if(is_inside_tree()):
|
|
_ctrls.btn_script.disabled = val
|
|
_ctrls.btn_inner.disabled = val
|
|
_ctrls.btn_method.disabled = val
|
|
var method_prefix = 'test_'
|
|
var inner_class_prefix = 'Test'
|
|
var menu_manager = null :
|
|
set(val):
|
|
menu_manager = val
|
|
menu_manager.run_script.connect(_on_BtnRunScript_pressed)
|
|
menu_manager.run_at_cursor.connect(run_at_cursor)
|
|
menu_manager.rerun.connect(rerun)
|
|
menu_manager.run_inner_class.connect(_on_BtnRunInnerClass_pressed)
|
|
menu_manager.run_test.connect(_on_BtnRunMethod_pressed)
|
|
_update_buttons(_last_info)
|
|
|
|
|
|
signal run_tests(what)
|
|
|
|
|
|
func _ready():
|
|
_ctrls.lbl_none.visible = true
|
|
_ctrls.btn_script.visible = false
|
|
_ctrls.btn_inner.visible = false
|
|
_ctrls.btn_method.visible = false
|
|
_ctrls.arrow_1.visible = false
|
|
_ctrls.arrow_2.visible = false
|
|
|
|
_caret_notifier = EditorCaretContextNotifier.new()
|
|
add_child(_caret_notifier)
|
|
_caret_notifier.it_changed.connect(_on_caret_notifer_changed)
|
|
|
|
disabled = disabled
|
|
|
|
|
|
func _on_caret_notifer_changed(data):
|
|
if(data.is_test_script):
|
|
_last_info = data
|
|
_update_buttons(_last_info)
|
|
|
|
|
|
# ----------------
|
|
# Private
|
|
# ----------------
|
|
|
|
func _update_buttons(info):
|
|
_ctrls.lbl_none.visible = false
|
|
_ctrls.btn_script.visible = info.script != null
|
|
|
|
if(info.script != null and info.is_test_script):
|
|
_ctrls.btn_script.text = info.script.resource_path.get_file()
|
|
|
|
_ctrls.btn_inner.visible = info.inner_class != null
|
|
_ctrls.arrow_1.visible = info.inner_class != null
|
|
_ctrls.btn_inner.text = str(info.inner_class)
|
|
_ctrls.btn_inner.tooltip_text = str("Run all tests in Inner-Test-Class ", info.inner_class)
|
|
|
|
var is_test_method = info.method != null and info.method.begins_with(method_prefix)
|
|
_ctrls.btn_method.visible = is_test_method
|
|
_ctrls.arrow_2.visible = is_test_method
|
|
if(is_test_method):
|
|
_ctrls.btn_method.text = str(info.method)
|
|
_ctrls.btn_method.tooltip_text = str("Run test ", info.method)
|
|
|
|
if(menu_manager != null):
|
|
menu_manager.disable_menu("run_script", info.script == null)
|
|
menu_manager.disable_menu("run_inner_class", info.inner_class == null)
|
|
menu_manager.disable_menu("run_at_cursor", info.script == null)
|
|
menu_manager.disable_menu("run_test", is_test_method)
|
|
menu_manager.disable_menu("rerun", _last_run_info == {})
|
|
# The button's new size won't take effect until the next frame.
|
|
# This appears to be what was causing the button to not be clickable the
|
|
# first time.
|
|
_update_size.call_deferred()
|
|
|
|
|
|
func _update_size():
|
|
custom_minimum_size.x = _ctrls.btn_method.size.x + _ctrls.btn_method.position.x
|
|
|
|
var _last_run_info = {}
|
|
func _emit_run_tests(info):
|
|
_last_run_info = info.duplicate()
|
|
run_tests.emit(info)
|
|
|
|
# ----------------
|
|
# Events
|
|
# ----------------
|
|
func _on_BtnRunScript_pressed():
|
|
var info = _last_info.duplicate()
|
|
info.script = info.script.resource_path.get_file()
|
|
info.inner_class = null
|
|
info.method = null
|
|
_emit_run_tests(info)
|
|
|
|
|
|
func _on_BtnRunInnerClass_pressed():
|
|
var info = _last_info.duplicate()
|
|
info.script = info.script.resource_path.get_file()
|
|
info.method = null
|
|
_emit_run_tests(info)
|
|
|
|
|
|
func _on_BtnRunMethod_pressed():
|
|
var info = _last_info.duplicate()
|
|
info.script = info.script.resource_path.get_file()
|
|
_emit_run_tests(info)
|
|
|
|
|
|
# ----------------
|
|
# Public
|
|
# ----------------
|
|
func rerun():
|
|
if(_last_run_info != {}):
|
|
_emit_run_tests(_last_run_info)
|
|
|
|
|
|
func run_at_cursor():
|
|
if(_ctrls.btn_method.visible):
|
|
_on_BtnRunMethod_pressed()
|
|
elif(_ctrls.btn_inner.visible):
|
|
_on_BtnRunInnerClass_pressed()
|
|
elif(_ctrls.btn_script.visible):
|
|
_on_BtnRunScript_pressed()
|
|
else:
|
|
print("nothing selected")
|
|
|
|
|
|
func get_script_button():
|
|
return _ctrls.btn_script
|
|
|
|
|
|
func get_inner_button():
|
|
return _ctrls.btn_inner
|
|
|
|
|
|
func get_test_button():
|
|
return _ctrls.btn_method
|
|
|
|
|
|
func set_inner_class_prefix(value):
|
|
_caret_notifier.inner_class_prefix = value
|
|
|
|
|
|
func apply_gut_config(gut_config):
|
|
_caret_notifier.script_prefix = gut_config.options.prefix
|
|
_caret_notifier.script_suffix = gut_config.options.suffix
|