Skip to content

Commit

Permalink
Update GUT to version 9.1.1
Browse files Browse the repository at this point in the history
  • Loading branch information
lihop committed Jan 6, 2024
1 parent b18726e commit ce2f6b0
Show file tree
Hide file tree
Showing 64 changed files with 4,172 additions and 2,989 deletions.
256 changes: 85 additions & 171 deletions addons/gut/GutScene.gd
Original file line number Diff line number Diff line change
@@ -1,201 +1,105 @@
extends Node2D
# ##############################################################################
# This is a wrapper around the normal and compact gui controls and serves as
# the interface between gut.gd and the gui. The GutRunner creates an instance
# of this and then this takes care of managing the different GUI controls.
# ##############################################################################
@onready var _normal_gui = $Normal
@onready var _compact_gui = $Compact

var gut = null:
set(val):
gut = val
_set_gut(val)

class GuiHandler:
var _gui = null
var _gut = null

var _ctrls = {
btn_continue = null,
path_dir = null,
path_file = null,
prog_script = null,
prog_test = null,
rtl = null,
rtl_bg = null,
time_label = null
}

func _init(gui):
_gui = gui

# Brute force, but flexible.
_ctrls.btn_continue = _get_first_child_named("Continue", _gui)
_ctrls.path_dir = _get_first_child_named("Path", _gui)
_ctrls.path_file = _get_first_child_named("File", _gui)
_ctrls.prog_script = _get_first_child_named("ProgressScript", _gui)
_ctrls.prog_test = _get_first_child_named("ProgressTest", _gui)
_ctrls.rtl = _get_first_child_named("Output", _gui)
_ctrls.rtl_bg = _get_first_child_named("OutputBG", _gui)
_ctrls.time_label = _get_first_child_named("TimeLabel", _gui)

_ctrls.btn_continue.visible = false
_ctrls.btn_continue.pressed.connect(_on_continue_pressed)

_ctrls.prog_script.value = 0
_ctrls.prog_test.value = 0
_ctrls.path_dir.text = ""
_ctrls.path_file.text = ""
_ctrls.time_label.text = ""

# ------------------
# Events
# ------------------
func _on_continue_pressed():
_ctrls.btn_continue.visible = false
_gut.end_teardown_pause()

func _on_gut_start_run():
if _ctrls.rtl != null:
_ctrls.rtl.clear()
set_num_scripts(_gut.get_test_collector().scripts.size())

func _on_gut_end_run():
_ctrls.time_label.text = ""

func _on_gut_start_script(script_obj):
next_script(script_obj.get_full_name(), script_obj.tests.size())

func _on_gut_end_script():
pass

func _on_gut_start_test(test_name):
next_test(test_name)

func _on_gut_end_test():
pass

func _on_gut_start_pause():
pause_before_teardown()

func _on_gut_end_pause():
pass

# ------------------
# Private
# ------------------
func _get_first_child_named(obj_name, parent_obj):
if parent_obj == null:
return null

var kids = parent_obj.get_children()
var index = 0
var to_return = null

while index < kids.size() and to_return == null:
if str(kids[index]).find(str(obj_name, ":")) != -1:
to_return = kids[index]
else:
to_return = _get_first_child_named(obj_name, kids[index])
if to_return == null:
index += 1

return to_return

# ------------------
# Public
# ------------------
func set_num_scripts(val):
_ctrls.prog_script.value = 0
_ctrls.prog_script.max_value = val

func next_script(path, num_tests):
_ctrls.prog_script.value += 1
_ctrls.prog_test.value = 0
_ctrls.prog_test.max_value = num_tests

_ctrls.path_dir.text = path.get_base_dir()
_ctrls.path_file.text = path.get_file()

func next_test(test_name):
_ctrls.prog_test.value += 1

func pause_before_teardown():
_ctrls.btn_continue.visible = true

func set_gut(g):
_gut = g
g.start_run.connect(_on_gut_start_run)
g.end_run.connect(_on_gut_end_run)

g.start_script.connect(_on_gut_start_script)
g.end_script.connect(_on_gut_end_script)

g.start_test.connect(_on_gut_start_test)
g.end_test.connect(_on_gut_end_test)
func _ready():
_normal_gui.switch_modes.connect(use_compact_mode.bind(true))
_compact_gui.switch_modes.connect(use_compact_mode.bind(false))

g.start_pause_before_teardown.connect(_on_gut_start_pause)
g.end_pause_before_teardown.connect(_on_gut_end_pause)
_normal_gui.set_title("GUT")
_compact_gui.set_title("GUT")

func get_textbox():
return _ctrls.rtl
_normal_gui.align_right()
_compact_gui.to_bottom_right()

func set_elapsed_time(t):
_ctrls.time_label.text = str(t, "s")
use_compact_mode(false)

func set_bg_color(c):
_ctrls.rtl_bg.color = c
if get_parent() == get_tree().root:
_test_running_setup()


# ------------------------------------------------------------------------------
# ------------------------------------------------------------------------------
var _large_handler = null
var _min_handler = null
var gut = null:
set(val):
gut = val
_set_gut(val)
func _test_running_setup():
set_font_size(100)
_normal_gui.get_textbox().text = "hello world, how are you doing?"


func _ready():
_large_handler = GuiHandler.new($Large)
_min_handler = GuiHandler.new($Min)
# ------------------------
# Private
# ------------------------
func _set_gut(val):
if _normal_gui.get_gut() == val:
return
_normal_gui.set_gut(val)
_compact_gui.set_gut(val)

$Min.visible = false
$Large.visible = !$Min.visible
val.start_run.connect(_on_gut_start_run)
val.end_run.connect(_on_gut_end_run)
val.start_pause_before_teardown.connect(_on_gut_pause)
val.end_pause_before_teardown.connect(_on_pause_end)


func _process(_delta):
if gut != null and gut.is_running():
_large_handler.set_elapsed_time(gut.get_elapsed_time())
_min_handler.set_elapsed_time(gut.get_elapsed_time())
func _set_both_titles(text):
_normal_gui.set_title(text)
_compact_gui.set_title(text)


func _set_gut(val):
_large_handler.set_gut(val)
_min_handler.set_gut(val)
# ------------------------
# Events
# ------------------------
func _on_gut_start_run():
_set_both_titles("Running")


func _on_gut_end_run():
_set_both_titles("Finished")


func _on_gut_pause():
_set_both_titles("-- Paused --")


func _on_pause_end():
_set_both_titles("Running")


# ------------------------
# Public
# ------------------------
func get_textbox():
return _large_handler.get_textbox()
return _normal_gui.get_textbox()


func set_font_size(new_size):
var rtl = _large_handler.get_textbox()
if rtl.get("custom_fonts/normal_font") != null:
rtl.get("custom_fonts/bold_italics_font").size = new_size
rtl.get("custom_fonts/bold_font").size = new_size
rtl.get("custom_fonts/italics_font").size = new_size
rtl.get("custom_fonts/normal_font").size = new_size
var rtl = _normal_gui.get_textbox()

rtl.set("theme_override_font_sizes/bold_italics_font_size", new_size)
rtl.set("theme_override_font_sizes/bold_font_size", new_size)
rtl.set("theme_override_font_sizes/italics_font_size", new_size)
rtl.set("theme_override_font_sizes/normal_font_size", new_size)


func set_font(font_name):
pass
#_set_all_fonts_in_rtl(_large_handler.get_textbox(), font_name)
_set_all_fonts_in_rtl(_normal_gui.get_textbox(), font_name)


# Needs rework for 4.0, DynamicFont DNE
func _set_font(rtl, font_name, custom_name):
pass
# if(font_name == null):
# rtl.set('custom_fonts/' + custom_name, null)
# else:
# var dyn_font = DynamicFont.new()
# var font_data = DynamicFontData.new()
# font_data.font_path = 'res://addons/gut/fonts/' + font_name + '.ttf'
# font_data.antialiased = true
# dyn_font.font_data = font_data
# rtl.set('custom_fonts/' + custom_name, dyn_font)
if font_name == null:
rtl.add_theme_font_override(custom_name, null)
else:
var dyn_font = FontFile.new()
dyn_font.load_dynamic_font("res://addons/gut/fonts/" + font_name + ".ttf")
rtl.add_theme_font_override(custom_name, dyn_font)


func _set_all_fonts_in_rtl(rtl, base_name):
Expand All @@ -212,8 +116,18 @@ func _set_all_fonts_in_rtl(rtl, base_name):


func set_default_font_color(color):
_large_handler.get_textbox().set("custom_colors/default_color", color)
_normal_gui.get_textbox().set("custom_colors/default_color", color)


func set_background_color(color):
_large_handler.set_bg_color(color)
_normal_gui.set_bg_color(color)


func use_compact_mode(should = true):
_compact_gui.visible = should
_normal_gui.visible = !should


func set_opacity(val):
_normal_gui.modulate.a = val
_compact_gui.modulate.a = val
Loading

0 comments on commit ce2f6b0

Please sign in to comment.