chore: add GUT test framework
This commit is contained in:
75
addons/gut/scenes/TestGutControl.gd
Normal file
75
addons/gut/scenes/TestGutControl.gd
Normal file
@@ -0,0 +1,75 @@
|
||||
extends Node2D
|
||||
@onready var _gut_control = $GutControl
|
||||
|
||||
var _current_script_object = null
|
||||
var _current_test_name = null
|
||||
|
||||
|
||||
func _ready():
|
||||
_gut_control.load_config_file('res://test/resources/GutControlDirs/gut_control_config.json')
|
||||
|
||||
# Returns a gut_config.gd instance.
|
||||
var config = _gut_control.get_config()
|
||||
# Override soecific values for the purposes of this
|
||||
# scene. You can see all the options available in
|
||||
# the default_options dictionary in gut_config.gd
|
||||
config.options.should_exit = false
|
||||
config.options.compact_mode = false
|
||||
|
||||
call_deferred('_post_ready_setup')
|
||||
|
||||
|
||||
func _post_ready_setup():
|
||||
var gut = _gut_control.get_gut()
|
||||
gut.start_run.connect(_on_gut_run_start)
|
||||
|
||||
gut.start_script.connect(_on_gut_start_script)
|
||||
gut.end_script.connect(_on_gut_end_script)
|
||||
|
||||
gut.start_test.connect(_on_gut_start_test)
|
||||
gut.end_test.connect(_on_gut_end_test)
|
||||
|
||||
gut.end_run.connect(_on_gut_run_end)
|
||||
|
||||
|
||||
func _on_gut_run_start():
|
||||
print('Starting tests')
|
||||
|
||||
|
||||
# This signal passes a TestCollector.gd/TestScript instance
|
||||
func _on_gut_start_script(script_obj):
|
||||
print(script_obj.get_full_name(), ' has ', script_obj.tests.size(), ' tests')
|
||||
_current_script_object = script_obj
|
||||
|
||||
|
||||
func _on_gut_end_script():
|
||||
var pass_count = 0
|
||||
for test in _current_script_object.tests:
|
||||
if(test.did_pass()):
|
||||
pass_count += 1
|
||||
print(pass_count, '/', _current_script_object.tests.size(), " passed\n")
|
||||
_current_script_object = null
|
||||
|
||||
|
||||
func _on_gut_start_test(test_name):
|
||||
_current_test_name = test_name
|
||||
print(' ', test_name)
|
||||
|
||||
|
||||
func _on_gut_end_test():
|
||||
# get_test_named returns a TestCollector.gd/Test instance for the name
|
||||
# passed in.
|
||||
var test_object = _current_script_object.get_test_named(_current_test_name)
|
||||
var status = "failed"
|
||||
if(test_object.did_pass()):
|
||||
status = "passed"
|
||||
elif(test_object.pending):
|
||||
status = "pending"
|
||||
|
||||
print(' ', status)
|
||||
_current_test_name = null
|
||||
|
||||
|
||||
func _on_gut_run_end():
|
||||
print('Tests Done')
|
||||
#
|
||||
1
addons/gut/scenes/TestGutControl.gd.uid
Normal file
1
addons/gut/scenes/TestGutControl.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://cmkliinaud5n3
|
||||
14
addons/gut/scenes/TestGutControl.tscn
Normal file
14
addons/gut/scenes/TestGutControl.tscn
Normal file
@@ -0,0 +1,14 @@
|
||||
[gd_scene load_steps=3 format=3 uid="uid://cvpbqdkdvsloh"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://cmkliinaud5n3" path="res://scenes/TestGutControl.gd" id="1_1k2gg"]
|
||||
[ext_resource type="PackedScene" uid="uid://4jb53yqktyfg" path="res://addons/gut/gui/GutControl.tscn" id="1_iog3j"]
|
||||
|
||||
[node name="TestGutControl" type="Node2D"]
|
||||
script = ExtResource("1_1k2gg")
|
||||
|
||||
[node name="GutControl" parent="." instance=ExtResource("1_iog3j")]
|
||||
offset_left = 10.0
|
||||
offset_top = 12.0
|
||||
offset_right = 397.0
|
||||
offset_bottom = 631.0
|
||||
bg_color = Color(0.152941, 0.572549, 0.788235, 1)
|
||||
15
addons/gut/scenes/TestGutGui.gd
Normal file
15
addons/gut/scenes/TestGutGui.gd
Normal file
@@ -0,0 +1,15 @@
|
||||
extends Node2D
|
||||
|
||||
var GutRunner = load('res://addons/gut/gui/GutRunner.tscn')
|
||||
|
||||
var _runner = GutRunner.instantiate()
|
||||
|
||||
|
||||
func _ready():
|
||||
# wait a bit for _utils to be happy.
|
||||
await get_tree().create_timer(.2).timeout
|
||||
add_child(_runner)
|
||||
|
||||
|
||||
func _on_start_run_pressed():
|
||||
_runner.run_tests()
|
||||
1
addons/gut/scenes/TestGutGui.gd.uid
Normal file
1
addons/gut/scenes/TestGutGui.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://c67l2on1prsb6
|
||||
63
addons/gut/scenes/TestGutGui.tscn
Normal file
63
addons/gut/scenes/TestGutGui.tscn
Normal file
@@ -0,0 +1,63 @@
|
||||
[gd_scene load_steps=2 format=3 uid="uid://1gpt1yhn1rlg"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://c67l2on1prsb6" path="res://scenes/TestGutGui.gd" id="1"]
|
||||
|
||||
[node name="TestGutGui" type="Node2D"]
|
||||
script = ExtResource("1")
|
||||
|
||||
[node name="Controls" type="Panel" parent="."]
|
||||
offset_left = 790.0
|
||||
offset_top = 10.0
|
||||
offset_right = 1010.0
|
||||
offset_bottom = 400.0
|
||||
|
||||
[node name="StartRun" type="Button" parent="Controls"]
|
||||
layout_mode = 0
|
||||
offset_left = 30.0
|
||||
offset_top = 10.0
|
||||
offset_right = 190.0
|
||||
offset_bottom = 60.0
|
||||
text = "Start Run"
|
||||
clip_text = true
|
||||
|
||||
[node name="PauseBeforeTeardown" type="Button" parent="Controls"]
|
||||
visible = false
|
||||
layout_mode = 0
|
||||
offset_left = 30.0
|
||||
offset_top = 70.0
|
||||
offset_right = 191.0
|
||||
offset_bottom = 120.0
|
||||
text = "Pause Before Teardown"
|
||||
|
||||
[node name="Clear Summary" type="Button" parent="Controls"]
|
||||
visible = false
|
||||
layout_mode = 0
|
||||
offset_left = 30.0
|
||||
offset_top = 190.0
|
||||
offset_right = 191.0
|
||||
offset_bottom = 240.0
|
||||
text = "Clear Summary"
|
||||
|
||||
[node name="Pass" type="Button" parent="Controls"]
|
||||
visible = false
|
||||
layout_mode = 0
|
||||
offset_left = 110.0
|
||||
offset_top = 130.0
|
||||
offset_right = 191.0
|
||||
offset_bottom = 180.0
|
||||
text = "Pass"
|
||||
|
||||
[node name="Fail" type="Button" parent="Controls"]
|
||||
visible = false
|
||||
layout_mode = 0
|
||||
offset_left = 30.0
|
||||
offset_top = 130.0
|
||||
offset_right = 99.0
|
||||
offset_bottom = 163.0
|
||||
text = "Fail"
|
||||
|
||||
[connection signal="pressed" from="Controls/StartRun" to="." method="_on_start_run_pressed"]
|
||||
[connection signal="pressed" from="Controls/PauseBeforeTeardown" to="." method="_on_PauseBeforeTeardown_pressed"]
|
||||
[connection signal="pressed" from="Controls/Clear Summary" to="." method="_on_Clear_Summary_pressed"]
|
||||
[connection signal="pressed" from="Controls/Pass" to="." method="_on_Pass_pressed"]
|
||||
[connection signal="pressed" from="Controls/Fail" to="." method="_on_Fail_pressed"]
|
||||
62
addons/gut/scenes/TestGutGuiSettings.gd
Normal file
62
addons/gut/scenes/TestGutGuiSettings.gd
Normal file
@@ -0,0 +1,62 @@
|
||||
extends Node2D
|
||||
const RUNNER_JSON_PATH = 'user://test_gut_editor_config.json'
|
||||
var GutConfigGui = load('res://addons/gut/gui/gut_config_gui.gd')
|
||||
|
||||
@onready var _ctrls = {
|
||||
settings = $ColorRect/ScrollContainer/Settings,
|
||||
issues = $Controls/VBox/Issues
|
||||
}
|
||||
|
||||
var _gut_config = load('res://addons/gut/gut_config.gd').new()
|
||||
var _gut_config_gui = null
|
||||
var _settings_vbox = null
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready():
|
||||
_settings_vbox = _ctrls.settings.duplicate()
|
||||
_gut_config.load_options(RUNNER_JSON_PATH)
|
||||
_create_options()
|
||||
|
||||
|
||||
func _clear_options():
|
||||
if(_gut_config_gui != null):
|
||||
_gut_config_gui.clear()
|
||||
|
||||
|
||||
func _display_issues():
|
||||
var issues : Array = _gut_config_gui.get_config_issues()
|
||||
if(issues.size() > 0):
|
||||
_ctrls.issues.text = "\n".join(issues)
|
||||
else:
|
||||
_ctrls.issues.text = "-- No Issues --"
|
||||
|
||||
|
||||
func _create_options():
|
||||
_gut_config_gui = GutConfigGui.new(_ctrls.settings)
|
||||
_gut_config_gui.set_options(_gut_config.options)
|
||||
|
||||
func save_options():
|
||||
_gut_config.options = _gut_config_gui.get_options(_gut_config.options)
|
||||
var w_result = _gut_config.write_options(RUNNER_JSON_PATH)
|
||||
if(w_result != OK):
|
||||
push_error(str('Could not write options to ', RUNNER_JSON_PATH, ': ', w_result))
|
||||
else:
|
||||
_gut_config_gui.mark_saved()
|
||||
|
||||
|
||||
func _on_save_pressed():
|
||||
save_options()
|
||||
_display_issues()
|
||||
print('saved')
|
||||
|
||||
|
||||
func _on_load_pressed():
|
||||
_clear_options()
|
||||
await get_tree().create_timer(.5).timeout
|
||||
_create_options()
|
||||
_display_issues()
|
||||
print('loaded')
|
||||
|
||||
|
||||
func _on_get_issues_pressed():
|
||||
_display_issues()
|
||||
1
addons/gut/scenes/TestGutGuiSettings.gd.uid
Normal file
1
addons/gut/scenes/TestGutGuiSettings.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://nuh4mbmnf3p3
|
||||
63
addons/gut/scenes/TestGutGuiSettings.tscn
Normal file
63
addons/gut/scenes/TestGutGuiSettings.tscn
Normal file
@@ -0,0 +1,63 @@
|
||||
[gd_scene load_steps=2 format=3 uid="uid://cgndmr3wi311q"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://nuh4mbmnf3p3" path="res://scenes/TestGutGuiSettings.gd" id="1_5452u"]
|
||||
|
||||
[node name="TestGutGuiSettings" type="Node2D"]
|
||||
script = ExtResource("1_5452u")
|
||||
|
||||
[node name="ColorRect" type="ColorRect" parent="."]
|
||||
anchors_preset = -1
|
||||
offset_left = 71.0
|
||||
offset_top = 22.0
|
||||
offset_right = 585.0
|
||||
offset_bottom = 523.0
|
||||
color = Color(0.137255, 0.164706, 0.270588, 1)
|
||||
|
||||
[node name="ScrollContainer" type="ScrollContainer" parent="ColorRect"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="Settings" type="VBoxContainer" parent="ColorRect/ScrollContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
|
||||
[node name="Controls" type="ColorRect" parent="."]
|
||||
anchors_preset = -1
|
||||
offset_left = 634.0
|
||||
offset_top = 4.0
|
||||
offset_right = 1001.0
|
||||
offset_bottom = 405.0
|
||||
color = Color(0.176471, 0.176471, 0.176471, 1)
|
||||
|
||||
[node name="VBox" type="VBoxContainer" parent="Controls"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="Save" type="Button" parent="Controls/VBox"]
|
||||
layout_mode = 2
|
||||
text = "Save"
|
||||
|
||||
[node name="Load" type="Button" parent="Controls/VBox"]
|
||||
layout_mode = 2
|
||||
text = "Load"
|
||||
|
||||
[node name="GetIssues" type="Button" parent="Controls/VBox"]
|
||||
layout_mode = 2
|
||||
text = "Get Issues"
|
||||
|
||||
[node name="Issues" type="TextEdit" parent="Controls/VBox"]
|
||||
layout_mode = 2
|
||||
size_flags_vertical = 3
|
||||
|
||||
[connection signal="pressed" from="Controls/VBox/Save" to="." method="_on_save_pressed"]
|
||||
[connection signal="pressed" from="Controls/VBox/Load" to="." method="_on_load_pressed"]
|
||||
[connection signal="pressed" from="Controls/VBox/GetIssues" to="." method="_on_get_issues_pressed"]
|
||||
25
addons/gut/scenes/TestPanelControls.gd
Normal file
25
addons/gut/scenes/TestPanelControls.gd
Normal file
@@ -0,0 +1,25 @@
|
||||
extends Node2D
|
||||
|
||||
var PanelControls = load('res://addons/gut/gui/panel_controls.gd')
|
||||
|
||||
@onready var _ctrls = {
|
||||
pc_vbox = $PanelControls/VBox
|
||||
}
|
||||
|
||||
var _save_load = PanelControls.SaveLoadControl.new('whatever', 1, 'hint')
|
||||
var _res_dir = PanelControls.DirectoryControl.new('some dir', 'res://', 'hint')
|
||||
var _res_dir_enabled = PanelControls.DirectoryControl.new('other dir', 'res://', 'hint')
|
||||
|
||||
|
||||
func _ready():
|
||||
#_save_load.dlg_load.show_diretory_types = false
|
||||
#_save_load.dlg_load.show_user = false
|
||||
#_save_load.dlg_save.show_os = false
|
||||
|
||||
_res_dir_enabled.enabled_button.visible = true
|
||||
|
||||
_ctrls.pc_vbox.add_child(_save_load)
|
||||
_ctrls.pc_vbox.add_child(_res_dir)
|
||||
_ctrls.pc_vbox.add_child(_res_dir_enabled)
|
||||
|
||||
|
||||
1
addons/gut/scenes/TestPanelControls.gd.uid
Normal file
1
addons/gut/scenes/TestPanelControls.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://dg8cn53rwfxsy
|
||||
39
addons/gut/scenes/TestPanelControls.tscn
Normal file
39
addons/gut/scenes/TestPanelControls.tscn
Normal file
@@ -0,0 +1,39 @@
|
||||
[gd_scene load_steps=2 format=3 uid="uid://c5lpntmguguv"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://dg8cn53rwfxsy" path="res://scenes/TestPanelControls.gd" id="1_1ruap"]
|
||||
|
||||
[node name="TestPanelControls" type="Node2D"]
|
||||
script = ExtResource("1_1ruap")
|
||||
|
||||
[node name="Controls" type="ColorRect" parent="."]
|
||||
offset_left = 44.0
|
||||
offset_top = 64.0
|
||||
offset_right = 260.0
|
||||
offset_bottom = 326.0
|
||||
color = Color(0.0745098, 0.0745098, 0.0745098, 1)
|
||||
|
||||
[node name="VBox" type="VBoxContainer" parent="Controls"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="Button" type="Button" parent="Controls/VBox"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="PanelControls" type="ColorRect" parent="."]
|
||||
offset_left = 510.0
|
||||
offset_top = 62.0
|
||||
offset_right = 1026.0
|
||||
offset_bottom = 568.0
|
||||
color = Color(0.164706, 0.164706, 0.164706, 1)
|
||||
|
||||
[node name="VBox" type="VBoxContainer" parent="PanelControls"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
74
addons/gut/scenes/TestPrint.gd
Normal file
74
addons/gut/scenes/TestPrint.gd
Normal file
@@ -0,0 +1,74 @@
|
||||
extends Node2D
|
||||
|
||||
var _lgr = null
|
||||
var _gut = null
|
||||
|
||||
var yield_timer = null
|
||||
|
||||
func before_all():
|
||||
yield_timer = Timer.new()
|
||||
|
||||
func after_all():
|
||||
yield_timer.free()
|
||||
|
||||
func _on_Gut_gut_ready():
|
||||
yield_timer.wait_time = .5
|
||||
yield_timer.connect('timeout',Callable(self,'on_yield_timer_timeout'))
|
||||
yield_timer.one_shot = false
|
||||
add_child(yield_timer)
|
||||
|
||||
_lgr = load('res://addons/gut/logger.gd').new()
|
||||
|
||||
#$Gut.get_gut().get_gui().set_font_size(30)
|
||||
_gut = $Gut.get_gut()
|
||||
_gut.add_directory('res://test/samples')
|
||||
_gut.logger = _lgr
|
||||
_gut.maximize()
|
||||
|
||||
_lgr.disable_printer('console', false)
|
||||
|
||||
yield_timer.start()
|
||||
|
||||
func _run_print_routines():
|
||||
_print_some_things()
|
||||
_print_all_formats()
|
||||
|
||||
_lgr.log()
|
||||
_lgr.log()
|
||||
_lgr.set_indent_level(3)
|
||||
_lgr.set_indent_string('|...')
|
||||
_print_some_things()
|
||||
_print_all_formats()
|
||||
|
||||
_lgr.set_indent_level(0)
|
||||
_lgr.set_indent_string(' ')
|
||||
|
||||
func _print_some_things():
|
||||
_lgr.log('Hello World3D')
|
||||
_lgr.passed('This passed')
|
||||
_lgr.failed('This failed')
|
||||
_lgr.info('infoing')
|
||||
_lgr.warn('warning')
|
||||
_lgr.error('erroring')
|
||||
_lgr.pending('pending')
|
||||
_lgr.pending('')
|
||||
_lgr.deprecated('you do not need this anymore')
|
||||
_lgr.deprecated('deprecated', 'use me')
|
||||
_lgr.log()
|
||||
_lgr.log()
|
||||
|
||||
|
||||
func _print_all_formats():
|
||||
for key in _lgr.fmts:
|
||||
_lgr.lograw(key, _lgr.fmts[key])
|
||||
_lgr.lograw(' ')
|
||||
_lgr.log()
|
||||
|
||||
_lgr.lograw(_lgr.get_indent())
|
||||
for key in _lgr.fmts:
|
||||
_lgr.lograw(key, _lgr.fmts[key])
|
||||
_lgr.lograw(' ')
|
||||
_lgr.log()
|
||||
|
||||
for key in _lgr.fmts:
|
||||
_lgr.log(key, _lgr.fmts[key])
|
||||
1
addons/gut/scenes/TestPrint.gd.uid
Normal file
1
addons/gut/scenes/TestPrint.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://b482k25b7slsb
|
||||
6
addons/gut/scenes/TestPrint.tscn
Normal file
6
addons/gut/scenes/TestPrint.tscn
Normal file
@@ -0,0 +1,6 @@
|
||||
[gd_scene load_steps=2 format=3 uid="uid://cn5k7ildpase3"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://b482k25b7slsb" path="res://scenes/TestPrint.gd" id="2"]
|
||||
|
||||
[node name="TestPrint" type="Node2D"]
|
||||
script = ExtResource("2")
|
||||
25
addons/gut/scenes/main.tscn
Normal file
25
addons/gut/scenes/main.tscn
Normal file
@@ -0,0 +1,25 @@
|
||||
[gd_scene format=3 uid="uid://cme7ha7tcw3y8"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://c6wm4h7xfrlor" path="res://scripts/main.gd" id="1"]
|
||||
[ext_resource type="PackedScene" uid="uid://4jb53yqktyfg" path="res://addons/gut/gui/GutControl.tscn" id="2_f2w0u"]
|
||||
|
||||
[node name="main" type="Node2D" unique_id=702701755]
|
||||
script = ExtResource("1")
|
||||
|
||||
[node name="RunTestsButton" type="Button" parent="." unique_id=1193447907]
|
||||
offset_left = 11.0
|
||||
offset_top = 19.0
|
||||
offset_right = 194.0
|
||||
offset_bottom = 94.0
|
||||
text = "Run Tests
|
||||
"
|
||||
|
||||
[node name="GutControl" parent="." unique_id=1396051957 instance=ExtResource("2_f2w0u")]
|
||||
anchors_preset = -1
|
||||
offset_left = 11.0
|
||||
offset_top = 104.0
|
||||
offset_right = 349.0
|
||||
offset_bottom = 628.0
|
||||
bg_color = Color(0.227451, 0.270588, 0.376471, 1)
|
||||
|
||||
[connection signal="pressed" from="RunTestsButton" to="." method="_on_run_gut_tests_button_pressed"]
|
||||
Reference in New Issue
Block a user