From 448307df32dd34aa53b6ee47cc9435ed0304a158 Mon Sep 17 00:00:00 2001 From: Butch Wesley Date: Mon, 9 Mar 2026 13:23:15 -0400 Subject: [PATCH 1/9] verified issue, temp documentation --- maybe_rename_inner_classes.md | 51 +++++++++++++++++++++++++++++++++++ project.godot | 2 ++ 2 files changed, 53 insertions(+) create mode 100644 maybe_rename_inner_classes.md diff --git a/maybe_rename_inner_classes.md b/maybe_rename_inner_classes.md new file mode 100644 index 00000000..7b211b45 --- /dev/null +++ b/maybe_rename_inner_classes.md @@ -0,0 +1,51 @@ + +From `res://addons/gut` +``` +grep -r 'class\s*[a-zA-z]*:' +``` + +# Likely to clash with singletons +``` +./printers.gd: class Printer: +./cli/optparse.gd: class Option: +./cli/optparse.gd: class Options: +``` + +# Less likely +``` +./orphan_counter.gd: class Orphanage: +./input_sender.gd: class MouseDraw: +``` + +# Unlikely +``` +./printers.gd: class ConsolePrinter: +./printers.gd: class TerminalPrinter: +./version_numbers.gd: class VerNumTools: +./printers.gd: class GutGuiPrinter: +./version_conversion.gd: class ConfigurationUpdater: +./singleton_parser.gd: class ParsedSingleton: +./script_parser.gd: class ParsedMethod: +./script_parser.gd: class ParsedScript: +./awaiter.gd: class AwaitLogger: +./cli/gut_cli.gd: class OptionResolver: +./cli/optparse.gd: class OptionHeading: +./input_sender.gd: class InputQueueItem: +./gui/gut_logo.gd: class Eyeball: +./gui/panel_controls.gd: class BaseGutPanelControl: +./gui/panel_controls.gd: class NumberControl: +./gui/panel_controls.gd: class FloatControl: +./gui/panel_controls.gd: class StringControl: +./gui/panel_controls.gd: class MultiLineStringControl: +./gui/panel_controls.gd: class BooleanControl: +./gui/panel_controls.gd: class SelectControl: +./gui/panel_controls.gd: class ColorControl: +./gui/panel_controls.gd: class DirectoryControl: +./gui/panel_controls.gd: class FileDialogSuperPlus: +./gui/panel_controls.gd: class SaveLoadControl: +./gui/gut_user_preferences.gd: class GutEditorPref: +./gui/OutputText.gd: class TextEditSearcher: +./method_maker.gd: class CallParameters: +./test.gd: class SignalAssertParameters: +./test.gd: class _ConnectionInfo: +``` diff --git a/project.godot b/project.godot index 54676f5d..8313e25d 100644 --- a/project.godot +++ b/project.godot @@ -18,10 +18,12 @@ config/icon="res://icon.png" [autoload] global="*res://scripts/global.gd" +Options="uid://blr8nb3vvr0sk" [debug] gdscript/warnings/redundant_await=0 +gdscript/warnings/missing_await=1 [display] From b6e0ca7ef90c8b6817f919f2d5d332656596dfd3 Mon Sep 17 00:00:00 2001 From: Butch Wesley Date: Thu, 12 Mar 2026 09:25:10 -0400 Subject: [PATCH 2/9] added example tests --- maybe_rename_inner_classes.md | 22 +++ project.godot | 1 + .../test_bugs/test_i805_autoload_clash.gd | 127 ++++++++++++++++++ .../test_bugs/test_i805_autoload_clash.gd.uid | 1 + 4 files changed, 151 insertions(+) create mode 100644 test/unit/test_bugs/test_i805_autoload_clash.gd create mode 100644 test/unit/test_bugs/test_i805_autoload_clash.gd.uid diff --git a/maybe_rename_inner_classes.md b/maybe_rename_inner_classes.md index 7b211b45..03f4550c 100644 --- a/maybe_rename_inner_classes.md +++ b/maybe_rename_inner_classes.md @@ -1,4 +1,6 @@ + + From `res://addons/gut` ``` grep -r 'class\s*[a-zA-z]*:' @@ -49,3 +51,23 @@ grep -r 'class\s*[a-zA-z]*:' ./test.gd: class SignalAssertParameters: ./test.gd: class _ConnectionInfo: ``` + +``` +grp '^class_name ' +``` +``` +./input_factory.gd: class_name GutInputFactory +./utils.gd: class_name GutUtils +./strutils.gd: class_name GutStringUtils +./gut.gd: class_name GutMain +./hook_script.gd: class_name GutHookScript +./input_sender.gd: class_name GutInputSender +./test.gd: class_name GutTest +./gut_tracked_error.gd: class_name GutTrackedError +./error_tracker.gd: class_name GutErrorTracker +``` + +# Reasoning +All uses of `class_name` in GUT do have a `Gut` prefix. These names have a global context and should avoid clashes as much as possible. They can clash with othe `class_name`, Autoloads, and are visible in many places. + +Inner class names will only clash with Autoloads. \ No newline at end of file diff --git a/project.godot b/project.godot index 8313e25d..16fa4c0b 100644 --- a/project.godot +++ b/project.godot @@ -19,6 +19,7 @@ config/icon="res://icon.png" global="*res://scripts/global.gd" Options="uid://blr8nb3vvr0sk" +ThisSpecialName="*uid://blr8nb3vvr0sk" [debug] diff --git a/test/unit/test_bugs/test_i805_autoload_clash.gd b/test/unit/test_bugs/test_i805_autoload_clash.gd new file mode 100644 index 00000000..fcfcaf00 --- /dev/null +++ b/test/unit/test_bugs/test_i805_autoload_clash.gd @@ -0,0 +1,127 @@ +extends GutTest + +class TestMakingScriptsWithAutoloadName: + extends GutTest + + var DynScript = GutUtils.DynamicGdScript.new() + + func before_all(): + DynScript.default_script_name_no_extension = 'TestMakingScriptsWithAutoloadName' + + + func test_enum(): + var src =""" + enum ThisSpecialName{ + ONE, + TWO, + THREE + } + """ + var Created = DynScript.create_script_from_source(src) + var inst = Created.new() + assert_not_null(inst) + + func test_class(): + var src =""" + class ThisSpecialName: + var foo = 'bar' + """ + var Created = DynScript.create_script_from_source(src) + var inst = Created.new() + assert_not_null(inst) + + func test_var(): + var src =""" + var ThisSpecialName = 'foobar' + """ + var Created = DynScript.create_script_from_source(src) + var inst = Created.new() + assert_not_null(inst) + + func test_class_name(): + var src =""" + class_name ThisSpecialName + + var foo = 'bar' + """ + var Created = DynScript.create_script_from_source(src) + var inst = Created.new() + assert_not_null(inst) + + func test_static_var(): + var src =""" + static var ThisSpecialName = 'foo' + """ + var Created = DynScript.create_script_from_source(src) + var inst = Created.new() + assert_not_null(inst) + + +class TestMakingScriptsWithOptionName: + extends GutTest + + var DynScript = GutUtils.DynamicGdScript.new() + var OptParse = load("res://addons/gut/cli/optparse.gd") + + func before_all(): + DynScript.default_script_name_no_extension = 'TestMakingScriptsWithOptionName' + + + func test_enum(): + var src =""" + enum Options{ + ONE, + TWO, + THREE + } + """ + var Created = DynScript.create_script_from_source(src) + var inst = Created.new() + assert_not_null(inst) + + + func test_class(): + var src =""" + class Options: + var foo = 'bar' + """ + var Created = DynScript.create_script_from_source(src) + var inst = Created.new() + assert_not_null(inst) + + + func test_var(): + var src =""" + var Options = 'foobar' + """ + var Created = DynScript.create_script_from_source(src) + var inst = Created.new() + assert_not_null(inst) + + + func test_class_name(): + var src =""" + class_name Options + + var foo = 'bar' + """ + var Created = DynScript.create_script_from_source(src) + var inst = Created.new() + assert_not_null(inst) + + func test_static_var(): + var src =""" + static var Options = 'foo' + """ + var Created = DynScript.create_script_from_source(src) + var inst = Created.new() + assert_not_null(inst) + + func test_inner_class_of_existing_class_name(): + var src =""" + class GutTrackedError: + var foo = 'bar' + """ + var Created = DynScript.create_script_from_source(src) + var inst = Created.new() + assert_not_null(inst) diff --git a/test/unit/test_bugs/test_i805_autoload_clash.gd.uid b/test/unit/test_bugs/test_i805_autoload_clash.gd.uid new file mode 100644 index 00000000..b6f744dc --- /dev/null +++ b/test/unit/test_bugs/test_i805_autoload_clash.gd.uid @@ -0,0 +1 @@ +uid://bknxkn03rpowb From 4a40d196f1d8bc4eed859ad1b600c793f6a52d4f Mon Sep 17 00:00:00 2001 From: Butch Wesley Date: Mon, 16 Mar 2026 13:59:51 -0400 Subject: [PATCH 3/9] rename Printer, Option, Options --- addons/gut/cli/optparse.gd | 26 +-- addons/gut/gui/ResultsTree.tscn | 8 +- addons/gut/logger.gd | 4 +- addons/gut/printers.gd | 12 +- maybe_rename_inner_classes.md | 52 ++--- project.godot | 2 +- test/output_tests/test_with_errors.gd | 2 +- test/unit/test_awaiter.gd | 12 + .../test_bugs/test_i805_autoload_clash.gd | 217 ++++++++++-------- test/unit/test_optparse.gd | 26 +-- 10 files changed, 192 insertions(+), 169 deletions(-) diff --git a/addons/gut/cli/optparse.gd b/addons/gut/cli/optparse.gd index 75dec1c5..5af3bb7e 100644 --- a/addons/gut/cli/optparse.gd +++ b/addons/gut/cli/optparse.gd @@ -135,7 +135,7 @@ # # value will return the default when it has not been set. #------------------------------------------------------------------------------- -class Option: +class OptParseOption: var _has_been_set = false var _value = null # REMEMBER that when this option is an array, you have to set the value @@ -232,11 +232,11 @@ class OptionHeading: # Organizes options by order, heading, position. Also responsible for all # help related text generation. #------------------------------------------------------------------------------- -class Options: +class OptParseOptions: var options = [] var positional = [] var default_heading = OptionHeading.new() - var script_option = Option.new('-s', '?', 'script option provided by Godot') + var script_option = OptParseOption.new('-s', '?', 'script option provided by Godot') var _options_by_name = {"--script": script_option, "-s": script_option} var _options_by_heading = [default_heading] @@ -347,7 +347,7 @@ class Options: # #------------------------------------------------------------------------------- ## @ignore -var options := Options.new() +var options := OptParseOptions.new() ## Set the banner property to any text you want to appear before the usage and ## options sections when printing the options help. var banner := '' @@ -474,10 +474,10 @@ func is_option(arg) -> bool: ## If the option is not successfully added (e.g. a name collision with another ## option occurs), an error message will be printed and [code]null[/code] ## will be returned. -func add(op_names, default, desc: String) -> Option: +func add(op_names, default, desc: String) -> OptParseOption: var op_name: String var aliases: Array[String] = [] - var new_op: Option = null + var new_op: OptParseOption = null if(typeof(op_names) == TYPE_STRING): op_name = op_names @@ -494,7 +494,7 @@ func add(op_names, default, desc: String) -> Option: elif bad_alias != -1: push_error(str('Option [', aliases[bad_alias], '] already exists.')) else: - new_op = Option.new(op_name, default, desc) + new_op = OptParseOption.new(op_name, default, desc) options.add(new_op, aliases) return new_op @@ -514,7 +514,7 @@ func add(op_names, default, desc: String) -> Option: ## If the option is not successfully added (e.g. a name collision with another ## option occurs), an error message will be printed and [code]null[/code] ## will be returned. -func add_required(op_names, default, desc: String) -> Option: +func add_required(op_names, default, desc: String) -> OptParseOption: var op := add(op_names, default, desc) if(op != null): op.required = true @@ -535,12 +535,12 @@ func add_required(op_names, default, desc: String) -> Option: ## If the option is not successfully added (e.g. a name collision with another ## option occurs), an error message will be printed and [code]null[/code] ## will be returned. -func add_positional(op_name, default, desc: String) -> Option: +func add_positional(op_name, default, desc: String) -> OptParseOption: var new_op = null if(options.get_by_name(op_name) != null): push_error(str('Positional option [', op_name, '] already exists.')) else: - new_op = Option.new(op_name, default, desc) + new_op = OptParseOption.new(op_name, default, desc) options.add_positional(new_op) return new_op @@ -561,7 +561,7 @@ func add_positional(op_name, default, desc: String) -> Option: ## If the option is not successfully added (e.g. a name collision with another ## option occurs), an error message will be printed and [code]null[/code] ## will be returned. -func add_positional_required(op_name, default, desc: String) -> Option: +func add_positional_required(op_name, default, desc: String) -> OptParseOption: var op = add_positional(op_name, default, desc) if(op != null): op.required = true @@ -582,7 +582,7 @@ func add_heading(display_text: String) -> void: ## If the option exists, the value assigned to it during parsing is returned. ## Otherwise, an error message is printed and [code]null[/code] is returned. func get_value(name: String): - var found_param: Option = options.get_by_name(name) + var found_param: OptParseOption = options.get_by_name(name) if(found_param != null): return found_param.value @@ -602,7 +602,7 @@ func get_value(name: String): ## then you do not want to get the default value for a command line option or ## it will overwrite the value in a config file. func get_value_or_null(name: String): - var found_param: Option = options.get_by_name(name) + var found_param: OptParseOption = options.get_by_name(name) if(found_param != null and found_param.has_been_set()): return found_param.value diff --git a/addons/gut/gui/ResultsTree.tscn b/addons/gut/gui/ResultsTree.tscn index bc17425d..3856374a 100644 --- a/addons/gut/gui/ResultsTree.tscn +++ b/addons/gut/gui/ResultsTree.tscn @@ -1,8 +1,8 @@ -[gd_scene load_steps=2 format=3 uid="uid://dls5r5f6157nq"] +[gd_scene format=3 uid="uid://dls5r5f6157nq"] [ext_resource type="Script" uid="uid://dehdhn78qv5tr" path="res://addons/gut/gui/ResultsTree.gd" id="1_b4uub"] -[node name="ResultsTree" type="Tree"] +[node name="ResultsTree" type="Tree" unique_id=2083877882] offset_right = 1082.0 offset_bottom = 544.0 size_flags_horizontal = 3 @@ -11,7 +11,7 @@ columns = 2 hide_root = true script = ExtResource("1_b4uub") -[node name="TextOverlay" type="Label" parent="."] +[node name="TextOverlay" type="Label" parent="." unique_id=397271335] visible = false layout_mode = 1 anchors_preset = 15 @@ -20,7 +20,7 @@ anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 -[node name="ResultsTree" type="VBoxContainer" parent="."] +[node name="ResultsTree" type="VBoxContainer" parent="." unique_id=1266326887] custom_minimum_size = Vector2(10, 10) layout_mode = 1 anchors_preset = 15 diff --git a/addons/gut/logger.gd b/addons/gut/logger.gd index aab68ab8..3f5efe2f 100644 --- a/addons/gut/logger.gd +++ b/addons/gut/logger.gd @@ -68,8 +68,8 @@ var _last_yield_text = '' func _init(): - _printers.terminal = GutUtils.Printers.TerminalPrinter.new() - _printers.console = GutUtils.Printers.ConsolePrinter.new() + _printers.terminal = GutUtils.Printers.GutTerminalPrinter.new() + _printers.console = GutUtils.Printers.GutConsolePrinter.new() # There were some problems in the timing of disabling this at the right # time in gut_cmdln so it is disabled by default. This is enabled # by plugin_control.gd based on settings. diff --git a/addons/gut/printers.gd b/addons/gut/printers.gd index 1b78b4f9..9742356f 100644 --- a/addons/gut/printers.gd +++ b/addons/gut/printers.gd @@ -1,7 +1,7 @@ # ------------------------------------------------------------------------------ # Interface and some basic functionality for all printers. # ------------------------------------------------------------------------------ -class Printer: +class GutPrinter: var _format_enabled = true var _disabled = false var _printer_name = 'NOT SET' @@ -45,7 +45,7 @@ class Printer: # Responsible for sending text to a GUT gui. # ------------------------------------------------------------------------------ class GutGuiPrinter: - extends Printer + extends GutPrinter var _textbox = null var _colors = { @@ -127,8 +127,8 @@ class GutGuiPrinter: # result in duplicate output. printraw does not print to the console so i had # to make another one. # ------------------------------------------------------------------------------ -class ConsolePrinter: - extends Printer +class GutConsolePrinter: + extends GutPrinter var _buffer = '' func _init(): @@ -146,8 +146,8 @@ class ConsolePrinter: # ------------------------------------------------------------------------------ # Prints text to terminal, formats some words. # ------------------------------------------------------------------------------ -class TerminalPrinter: - extends Printer +class GutTerminalPrinter: + extends GutPrinter var escape = PackedByteArray([0x1b]).get_string_from_ascii() var cmd_colors = { diff --git a/maybe_rename_inner_classes.md b/maybe_rename_inner_classes.md index 03f4550c..61e16845 100644 --- a/maybe_rename_inner_classes.md +++ b/maybe_rename_inner_classes.md @@ -1,6 +1,3 @@ - - - From `res://addons/gut` ``` grep -r 'class\s*[a-zA-z]*:' @@ -15,41 +12,42 @@ grep -r 'class\s*[a-zA-z]*:' # Less likely ``` -./orphan_counter.gd: class Orphanage: -./input_sender.gd: class MouseDraw: -``` - -# Unlikely -``` -./printers.gd: class ConsolePrinter: -./printers.gd: class TerminalPrinter: -./version_numbers.gd: class VerNumTools: -./printers.gd: class GutGuiPrinter: -./version_conversion.gd: class ConfigurationUpdater: -./singleton_parser.gd: class ParsedSingleton: -./script_parser.gd: class ParsedMethod: -./script_parser.gd: class ParsedScript: ./awaiter.gd: class AwaitLogger: ./cli/gut_cli.gd: class OptionResolver: ./cli/optparse.gd: class OptionHeading: -./input_sender.gd: class InputQueueItem: ./gui/gut_logo.gd: class Eyeball: +./gui/gut_user_preferences.gd: class GutEditorPref: +./gui/OutputText.gd: class TextEditSearcher: ./gui/panel_controls.gd: class BaseGutPanelControl: -./gui/panel_controls.gd: class NumberControl: -./gui/panel_controls.gd: class FloatControl: -./gui/panel_controls.gd: class StringControl: -./gui/panel_controls.gd: class MultiLineStringControl: ./gui/panel_controls.gd: class BooleanControl: -./gui/panel_controls.gd: class SelectControl: ./gui/panel_controls.gd: class ColorControl: ./gui/panel_controls.gd: class DirectoryControl: ./gui/panel_controls.gd: class FileDialogSuperPlus: +./gui/panel_controls.gd: class FloatControl: +./gui/panel_controls.gd: class MultiLineStringControl: +./gui/panel_controls.gd: class NumberControl: ./gui/panel_controls.gd: class SaveLoadControl: -./gui/gut_user_preferences.gd: class GutEditorPref: -./gui/OutputText.gd: class TextEditSearcher: +./gui/panel_controls.gd: class SelectControl: +./gui/panel_controls.gd: class StringControl: +./input_sender.gd: class InputQueueItem: +./input_sender.gd: class MouseDraw: ./method_maker.gd: class CallParameters: -./test.gd: class SignalAssertParameters: +./orphan_counter.gd: class Orphanage: +./printers.gd: class ConsolePrinter: +./printers.gd: class GutGuiPrinter: +./printers.gd: class TerminalPrinter: +./script_parser.gd: class ParsedMethod: +./script_parser.gd: class ParsedScript: +./singleton_parser.gd: class ParsedSingleton: ./test.gd: class _ConnectionInfo: +./test.gd: class SignalAssertParameters: +./version_conversion.gd: class ConfigurationUpdater: +./version_numbers.gd: class VerNumTools: +``` + +# Unlikely +``` + ``` ``` @@ -68,6 +66,6 @@ grp '^class_name ' ``` # Reasoning -All uses of `class_name` in GUT do have a `Gut` prefix. These names have a global context and should avoid clashes as much as possible. They can clash with othe `class_name`, Autoloads, and are visible in many places. +All uses of `class_name` in GUT do have a `Gut` prefix. These names have a global context and should avoid clashes as much as possible. They can clash with other `class_name`, Autoloads, and are visible in many places. Inner class names will only clash with Autoloads. \ No newline at end of file diff --git a/project.godot b/project.godot index 16fa4c0b..e1c445cf 100644 --- a/project.godot +++ b/project.godot @@ -19,7 +19,7 @@ config/icon="res://icon.png" global="*res://scripts/global.gd" Options="uid://blr8nb3vvr0sk" -ThisSpecialName="*uid://blr8nb3vvr0sk" +ThisSpecialName="uid://blr8nb3vvr0sk" [debug] diff --git a/test/output_tests/test_with_errors.gd b/test/output_tests/test_with_errors.gd index 4c7753d1..fb359d72 100644 --- a/test/output_tests/test_with_errors.gd +++ b/test/output_tests/test_with_errors.gd @@ -3,4 +3,4 @@ extends GutTest func test_with_push_error(): push_error('this is a push error') - assert_true(true, 'passing assert') \ No newline at end of file + assert_true(true, 'passing assert') diff --git a/test/unit/test_awaiter.gd b/test/unit/test_awaiter.gd index a8f0b875..94351d43 100644 --- a/test/unit/test_awaiter.gd +++ b/test/unit/test_awaiter.gd @@ -43,8 +43,13 @@ class PredicateMethods: times_called += 1 return times_called != x +func before_all(): + Engine.set_time_scale(5.0) +func after_all(): + Engine.set_time_scale(1.0) + func test_is_not_paused_by_default(): var a = add_child_autofree(Awaiter.new()) @@ -286,6 +291,13 @@ class TestWaitUntil: extends GutTest var Awaiter = load('res://addons/gut/awaiter.gd') + func before_all(): + Engine.set_time_scale(5.0) + + + func after_all(): + Engine.set_time_scale(1.0) + func test_wait_until_emits_wait_started(): var a = add_child_autoqfree(Awaiter.new()) watch_signals(a) diff --git a/test/unit/test_bugs/test_i805_autoload_clash.gd b/test/unit/test_bugs/test_i805_autoload_clash.gd index fcfcaf00..16a8e470 100644 --- a/test/unit/test_bugs/test_i805_autoload_clash.gd +++ b/test/unit/test_bugs/test_i805_autoload_clash.gd @@ -21,107 +21,120 @@ class TestMakingScriptsWithAutoloadName: var inst = Created.new() assert_not_null(inst) - func test_class(): - var src =""" - class ThisSpecialName: - var foo = 'bar' - """ - var Created = DynScript.create_script_from_source(src) - var inst = Created.new() - assert_not_null(inst) - - func test_var(): - var src =""" - var ThisSpecialName = 'foobar' - """ - var Created = DynScript.create_script_from_source(src) - var inst = Created.new() - assert_not_null(inst) - - func test_class_name(): - var src =""" - class_name ThisSpecialName - - var foo = 'bar' - """ - var Created = DynScript.create_script_from_source(src) - var inst = Created.new() - assert_not_null(inst) - - func test_static_var(): - var src =""" - static var ThisSpecialName = 'foo' - """ - var Created = DynScript.create_script_from_source(src) - var inst = Created.new() - assert_not_null(inst) +# func test_class(): +# var src =""" +# class ThisSpecialName: +# var foo = 'bar' +# """ +# var Created = DynScript.create_script_from_source(src) +# var inst = Created.new() +# assert_not_null(inst) + +# func test_var(): +# var src =""" +# var ThisSpecialName = 'foobar' +# """ +# var Created = DynScript.create_script_from_source(src) +# var inst = Created.new() +# assert_not_null(inst) + +# func test_class_name(): +# var src =""" +# class_name ThisSpecialName + +# var foo = 'bar' +# """ +# var Created = DynScript.create_script_from_source(src) +# var inst = Created.new() +# assert_not_null(inst) + +# func test_static_var(): +# var src =""" +# static var ThisSpecialName = 'foo' +# """ +# var Created = DynScript.create_script_from_source(src) +# var inst = Created.new() +# assert_not_null(inst) + + +# class TestMakingScriptsWithOptionName: +# extends GutTest + +# var DynScript = GutUtils.DynamicGdScript.new() +# var OptParse = load("res://addons/gut/cli/optparse.gd") + +# func before_all(): +# DynScript.default_script_name_no_extension = 'TestMakingScriptsWithOptionName' + + +# func test_enum(): +# var src =""" +# enum Options{ +# ONE, +# TWO, +# THREE +# } +# """ +# var Created = DynScript.create_script_from_source(src) +# var inst = Created.new() +# assert_not_null(inst) + + +# func test_class(): +# var src =""" +# class Options: +# var foo = 'bar' +# """ +# var Created = DynScript.create_script_from_source(src) +# var inst = Created.new() +# assert_not_null(inst) + + +# func test_var(): +# var src =""" +# var Options = 'foobar' +# """ +# var Created = DynScript.create_script_from_source(src) +# var inst = Created.new() +# assert_not_null(inst) + + +# func test_class_name(): +# var src =""" +# class_name Options + +# var foo = 'bar' +# """ +# var Created = DynScript.create_script_from_source(src) +# var inst = Created.new() +# assert_not_null(inst) + +# func test_static_var(): +# var src =""" +# static var Options = 'foo' +# """ +# var Created = DynScript.create_script_from_source(src) +# var inst = Created.new() +# assert_not_null(inst) + +# func test_inner_class_of_existing_class_name(): +# var src =""" +# class GutTest: +# var foo = 'bar' +# """ +# var Created = DynScript.create_script_from_source(src) +# var inst = Created.new() +# assert_not_null(inst) + + +# func test_inner_class_of_existing_class_name_inside_a_class_name(): +# var src =""" +# class_name ThisIsDifferentDoesItMatter +# class GutTrackedError: +# var foo = 'bar' +# """ +# var Created = DynScript.create_script_from_source(src) +# var inst = Created.new() +# assert_not_null(inst) -class TestMakingScriptsWithOptionName: - extends GutTest - - var DynScript = GutUtils.DynamicGdScript.new() - var OptParse = load("res://addons/gut/cli/optparse.gd") - - func before_all(): - DynScript.default_script_name_no_extension = 'TestMakingScriptsWithOptionName' - - - func test_enum(): - var src =""" - enum Options{ - ONE, - TWO, - THREE - } - """ - var Created = DynScript.create_script_from_source(src) - var inst = Created.new() - assert_not_null(inst) - - - func test_class(): - var src =""" - class Options: - var foo = 'bar' - """ - var Created = DynScript.create_script_from_source(src) - var inst = Created.new() - assert_not_null(inst) - - - func test_var(): - var src =""" - var Options = 'foobar' - """ - var Created = DynScript.create_script_from_source(src) - var inst = Created.new() - assert_not_null(inst) - - - func test_class_name(): - var src =""" - class_name Options - - var foo = 'bar' - """ - var Created = DynScript.create_script_from_source(src) - var inst = Created.new() - assert_not_null(inst) - - func test_static_var(): - var src =""" - static var Options = 'foo' - """ - var Created = DynScript.create_script_from_source(src) - var inst = Created.new() - assert_not_null(inst) - - func test_inner_class_of_existing_class_name(): - var src =""" - class GutTrackedError: - var foo = 'bar' - """ - var Created = DynScript.create_script_from_source(src) - var inst = Created.new() - assert_not_null(inst) diff --git a/test/unit/test_optparse.gd b/test/unit/test_optparse.gd index 3080a19d..f4f26b9d 100644 --- a/test/unit/test_optparse.gd +++ b/test/unit/test_optparse.gd @@ -11,39 +11,39 @@ class TestOption: extends BaseTest func test_can_make_one(): - var o = OptParse.Option.new('name', 'default') + var o = OptParse.OptParseOption.new('name', 'default') assert_not_null(o) func test_init_sets_values(): - var o = OptParse.Option.new('name', 'default', 'description') + var o = OptParse.OptParseOption.new('name', 'default', 'description') assert_eq(o.option_name, 'name') assert_eq(o.default, 'default') assert_eq(o.description, 'description') func test_has_been_set_false_by_default(): - var o = OptParse.Option.new('name', 'default') + var o = OptParse.OptParseOption.new('name', 'default') assert_false(o.has_been_set()) func test_has_been_set_true_after_setting_value(): - var o = OptParse.Option.new('name', 'default') + var o = OptParse.OptParseOption.new('name', 'default') o.value = 'value' assert_true(o.has_been_set()) func test_value_returns_default_when_value_not_set(): - var o = OptParse.Option.new('name', 'default') + var o = OptParse.OptParseOption.new('name', 'default') assert_eq(o.value, 'default') func test_value_returned_when_value_has_been_set(): - var o = OptParse.Option.new('name', 'default') + var o = OptParse.OptParseOption.new('name', 'default') o.value = 'value' assert_eq(o.value, 'value') func test_to_s_replaces_default_with_default_value(): - var o = OptParse.Option.new('name', 'foobar', 'put default here [default]') + var o = OptParse.OptParseOption.new('name', 'foobar', 'put default here [default]') assert_string_ends_with(o.to_s(), 'put default here foobar') func test_to_s_indents_multiple_lines(): - var o = OptParse.Option.new("h", 'default', "line one\nline two\nline three") + var o = OptParse.OptParseOption.new("h", 'default', "line one\nline two\nline three") var desc = o.to_s(3) var lines = desc.split("\n") assert_eq(lines[0], "h line one") @@ -51,7 +51,7 @@ class TestOption: assert_eq(lines[2], " line three") func test_to_s_contains_aliases(): - var o = OptParse.Option.new("name", 'default', "description") + var o = OptParse.OptParseOption.new("name", 'default', "description") o.aliases.assign(["alias1", "alias2"]) var desc = o.to_s(4) var lines = desc.split("\n") @@ -59,11 +59,11 @@ class TestOption: assert_eq(lines[1], " aliases: alias1, alias2") func test_required_false_by_default(): - var o = OptParse.Option.new('name', 'default') + var o = OptParse.OptParseOption.new('name', 'default') assert_false(o.required) func test_setting_value_to_an_array_makes_has_been_set_true(): - var o = OptParse.Option.new("name", []) + var o = OptParse.OptParseOption.new("name", []) o.value = [1, 2, 3] assert_true(o.has_been_set()) @@ -421,8 +421,8 @@ class TestOptionAliases: op = OptParse.new() func test_options_add_with_alias(): - var opt = OptParse.Option.new("name", "default") - var opts = OptParse.Options.new() + var opt = OptParse.OptParseOption.new("name", "default") + var opts = OptParse.OptParseOptions.new() opts.add(opt, ["alias1", "alias2"]) assert_eq(opts.get_by_name("alias1"), opt) assert_eq(opts.get_by_name("alias2"), opt) From d1403d87ef084bc710e18546a4215892e01e2ff8 Mon Sep 17 00:00:00 2001 From: Butch Wesley Date: Mon, 16 Mar 2026 16:47:11 -0400 Subject: [PATCH 4/9] Eyeball, OptionHeading, all BaseGutPanelControl --- addons/gut/cli/optparse.gd | 6 +-- addons/gut/gui/OutputText.gd | 4 +- addons/gut/gui/gut_config_gui.gd | 2 +- addons/gut/gui/gut_logo.gd | 6 +-- addons/gut/gui/option_maker.gd | 20 ++++---- addons/gut/gui/panel_controls.gd | 26 +++++----- maybe_rename_inner_classes.md | 81 ++++++++++++++++---------------- scenes/TestPanelControls.gd | 12 ++--- test/unit/test_awaiter.gd | 7 +++ 9 files changed, 85 insertions(+), 79 deletions(-) diff --git a/addons/gut/cli/optparse.gd b/addons/gut/cli/optparse.gd index 5af3bb7e..48ee9cc9 100644 --- a/addons/gut/cli/optparse.gd +++ b/addons/gut/cli/optparse.gd @@ -221,7 +221,7 @@ class OptParseOption: #------------------------------------------------------------------------------- # A struct for organizing options by a heading #------------------------------------------------------------------------------- -class OptionHeading: +class OptParseOptionHeading: var options = [] var display = 'default' @@ -235,7 +235,7 @@ class OptionHeading: class OptParseOptions: var options = [] var positional = [] - var default_heading = OptionHeading.new() + var default_heading = OptParseOptionHeading.new() var script_option = OptParseOption.new('-s', '?', 'script option provided by Godot') var _options_by_name = {"--script": script_option, "-s": script_option} @@ -244,7 +244,7 @@ class OptParseOptions: func add_heading(display): - var heading = OptionHeading.new() + var heading = OptParseOptionHeading.new() heading.display = display _cur_heading = heading _options_by_heading.append(heading) diff --git a/addons/gut/gui/OutputText.gd b/addons/gut/gui/OutputText.gd index ebd5a4fe..fddd9994 100644 --- a/addons/gut/gui/OutputText.gd +++ b/addons/gut/gui/OutputText.gd @@ -145,7 +145,7 @@ func _add_other_ctrls(): var fname = GutUtils.gut_fonts.DEFAULT_CUSTOM_FONT_NAME if(_user_prefs != null): fname = _user_prefs.output_font_name.value - _font_name_pctrl = PanelControls.SelectControl.new('Font', fname, GutUtils.avail_fonts, + _font_name_pctrl = PanelControls.GpcSelect.new('Font', fname, GutUtils.avail_fonts, "The font, you know, for the text below. Change it, see what it does.") _font_name_pctrl.changed.connect(_on_font_name_changed) _font_name_pctrl.label.size_flags_horizontal = SIZE_SHRINK_BEGIN @@ -155,7 +155,7 @@ func _add_other_ctrls(): var fsize = 30 if(_user_prefs != null): fsize = _user_prefs.output_font_size.value - _font_size_pctrl = PanelControls.NumberControl.new('Font Size', fsize , 5, 100, + _font_size_pctrl = PanelControls.GpcNumber.new('Font Size', fsize , 5, 100, "The size of 'The Font'.") _font_size_pctrl.changed.connect(_on_font_size_changed) _font_size_pctrl.label.size_flags_horizontal = SIZE_SHRINK_BEGIN diff --git a/addons/gut/gui/gut_config_gui.gd b/addons/gut/gui/gut_config_gui.gd index e7b943ca..52e38674 100644 --- a/addons/gut/gui/gut_config_gui.gd +++ b/addons/gut/gui/gut_config_gui.gd @@ -18,7 +18,7 @@ func _init(cont): func _add_save_load(): - var ctrl = PanelControls.SaveLoadControl.new('Config', '', '') + var ctrl = PanelControls.GpcSaveLoad.new('Config', '', '') ctrl.save_path_chosen.connect(_on_save_path_chosen) ctrl.load_path_chosen.connect(_on_load_path_chosen) diff --git a/addons/gut/gui/gut_logo.gd b/addons/gut/gui/gut_logo.gd index d576a714..1d88b0d4 100644 --- a/addons/gut/gui/gut_logo.gd +++ b/addons/gut/gui/gut_logo.gd @@ -1,7 +1,7 @@ @tool extends Node2D -class Eyeball: +class GutEyeball: extends Node2D var _should_draw_laser = false @@ -139,8 +139,8 @@ var GutEditorGlobals = load('res://addons/gut/gui/editor_globals.gd') @onready var _reset_timer = $ResetTimer @onready var _face_button = $FaceButton -@onready var left_eye : Eyeball = Eyeball.new($BaseLogo/LeftEye) -@onready var right_eye : Eyeball = Eyeball.new($BaseLogo/RightEye) +@onready var left_eye : GutEyeball = GutEyeball.new($BaseLogo/LeftEye) +@onready var right_eye : GutEyeball = GutEyeball.new($BaseLogo/RightEye) var _no_shine = load("res://addons/gut/images/GutIconV2_no_shine.png") var _normal = load("res://addons/gut/images/GutIconV2_base.png") diff --git a/addons/gut/gui/option_maker.gd b/addons/gut/gui/option_maker.gd index 43f31a55..a2b1473f 100644 --- a/addons/gut/gui/option_maker.gd +++ b/addons/gut/gui/option_maker.gd @@ -27,48 +27,48 @@ func add_ctrl(key, ctrl): func add_number(key, value, disp_text, v_min, v_max, hint=''): - var ctrl = PanelControls.NumberControl.new(disp_text, value, v_min, v_max, hint) + var ctrl = PanelControls.GpcNumber.new(disp_text, value, v_min, v_max, hint) add_ctrl(key, ctrl) return ctrl func add_float(key, value, disp_text, step, v_min, v_max, hint=''): - var ctrl = PanelControls.FloatControl.new(disp_text, value, step, v_min, v_max, hint) + var ctrl = PanelControls.GpcFloat.new(disp_text, value, step, v_min, v_max, hint) add_ctrl(key, ctrl) return ctrl func add_select(key, value, values, disp_text, hint=''): - var ctrl = PanelControls.SelectControl.new(disp_text, value, values, hint) + var ctrl = PanelControls.GpcSelect.new(disp_text, value, values, hint) add_ctrl(key, ctrl) return ctrl func add_value(key, value, disp_text, hint=''): - var ctrl = PanelControls.StringControl.new(disp_text, value, hint) + var ctrl = PanelControls.GpcString.new(disp_text, value, hint) add_ctrl(key, ctrl) return ctrl func add_multiline_text(key, value, disp_text, hint=''): - var ctrl = PanelControls.MultiLineStringControl.new(disp_text, value, hint) + var ctrl = PanelControls.GpcMultiLineString.new(disp_text, value, hint) add_ctrl(key, ctrl) return ctrl func add_boolean(key, value, disp_text, hint=''): - var ctrl = PanelControls.BooleanControl.new(disp_text, value, hint) + var ctrl = PanelControls.GpcBoolean.new(disp_text, value, hint) add_ctrl(key, ctrl) return ctrl func add_directory(key, value, disp_text, hint=''): - var ctrl = PanelControls.DirectoryControl.new(disp_text, value, hint) + var ctrl = PanelControls.GpcDirectory.new(disp_text, value, hint) add_ctrl(key, ctrl) ctrl.dialog.title = disp_text return ctrl func add_file(key, value, disp_text, hint=''): - var ctrl = PanelControls.DirectoryControl.new(disp_text, value, hint) + var ctrl = PanelControls.GpcDirectory.new(disp_text, value, hint) add_ctrl(key, ctrl) ctrl.dialog.file_mode = ctrl.dialog.FILE_MODE_OPEN_FILE ctrl.dialog.title = disp_text @@ -76,7 +76,7 @@ func add_file(key, value, disp_text, hint=''): func add_save_file_anywhere(key, value, disp_text, hint=''): - var ctrl = PanelControls.DirectoryControl.new(disp_text, value, hint) + var ctrl = PanelControls.GpcDirectory.new(disp_text, value, hint) add_ctrl(key, ctrl) ctrl.dialog.file_mode = ctrl.dialog.FILE_MODE_SAVE_FILE ctrl.dialog.access = ctrl.dialog.ACCESS_FILESYSTEM @@ -85,7 +85,7 @@ func add_save_file_anywhere(key, value, disp_text, hint=''): func add_color(key, value, disp_text, hint=''): - var ctrl = PanelControls.ColorControl.new(disp_text, value, hint) + var ctrl = PanelControls.GpcColor.new(disp_text, value, hint) add_ctrl(key, ctrl) return ctrl diff --git a/addons/gut/gui/panel_controls.gd b/addons/gut/gui/panel_controls.gd index a3d5ffe0..227322e9 100644 --- a/addons/gut/gui/panel_controls.gd +++ b/addons/gut/gui/panel_controls.gd @@ -52,7 +52,7 @@ class BaseGutPanelControl: # ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------ -class NumberControl: +class GpcNumber: extends BaseGutPanelControl var value_ctrl = SpinBox.new() @@ -80,8 +80,8 @@ class NumberControl: # ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------ -class FloatControl: - extends NumberControl +class GpcFloat: + extends GpcNumber func _init(title, val, step, v_min, v_max, hint=""): super._init(title, val, v_min, v_max, hint) @@ -91,7 +91,7 @@ class FloatControl: # ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------ -class StringControl: +class GpcString: extends BaseGutPanelControl var value_ctrl = LineEdit.new() @@ -120,7 +120,7 @@ class StringControl: # ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------ -class MultiLineStringControl: +class GpcMultiLineString: extends BaseGutPanelControl var value_ctrl = TextEdit.new() @@ -150,7 +150,7 @@ class MultiLineStringControl: # ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------ -class BooleanControl: +class GpcBoolean: extends BaseGutPanelControl var value_ctrl = CheckBox.new() @@ -176,7 +176,7 @@ class BooleanControl: # value is "selected" and is gettable and settable # text is the text value of the selected item, it is gettable only # ------------------------------------------------------------------------------ -class SelectControl: +class GpcSelect: extends BaseGutPanelControl var value_ctrl = OptionButton.new() @@ -210,7 +210,7 @@ class SelectControl: # ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------ -class ColorControl: +class GpcColor: extends BaseGutPanelControl var value_ctrl = ColorPickerButton.new() @@ -230,7 +230,7 @@ class ColorControl: # ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------ -class DirectoryControl: +class GpcDirectory: extends BaseGutPanelControl var value_ctrl := LineEdit.new() @@ -300,7 +300,7 @@ class DirectoryControl: # Features: # Buttons to pick res://, user://, or anywhere on the OS. # ------------------------------------------------------------------------------ -class FileDialogSuperPlus: +class GpcFileDialogSuperPlus: extends FileDialog var show_diretory_types = true : @@ -371,14 +371,14 @@ class FileDialogSuperPlus: # ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------ -class SaveLoadControl: +class GpcSaveLoad: extends BaseGutPanelControl var btn_load = Button.new() var btn_save = Button.new() - var dlg_load := FileDialogSuperPlus.new() - var dlg_save := FileDialogSuperPlus.new() + var dlg_load := GpcFileDialogSuperPlus.new() + var dlg_save := GpcFileDialogSuperPlus.new() signal save_path_chosen(path) signal load_path_chosen(path) diff --git a/maybe_rename_inner_classes.md b/maybe_rename_inner_classes.md index 61e16845..af691b96 100644 --- a/maybe_rename_inner_classes.md +++ b/maybe_rename_inner_classes.md @@ -1,49 +1,48 @@ -From `res://addons/gut` +eFrom `res://addons/gut` ``` grep -r 'class\s*[a-zA-z]*:' ``` -# Likely to clash with singletons -``` -./printers.gd: class Printer: -./cli/optparse.gd: class Option: -./cli/optparse.gd: class Options: -``` +## Likely to clash + +- [x] `./printers.gd: class Printer:` +- [x] `./cli/optparse.gd: class Option:` +- [x] `./cli/optparse.gd: class Options:` + + +## Less likely +- [ ] `./awaiter.gd: class AwaitLogger:` +- [ ] `./cli/gut_cli.gd: class OptionResolver:` +- [x] `./cli/optparse.gd: class OptionHeading:` +- [x] `./gui/gut_logo.gd: class Eyeball:` +- [x] ~~`./gui/gut_user_preferences.gd: class GutEditorPref:`~~ +- [ ] `./gui/OutputText.gd: class TextEditSearcher:` +- [x] `./gui/panel_controls.gd: class BaseGutPanelControl:` +- [x] `./gui/panel_controls.gd: class BooleanControl:` +- [x] `./gui/panel_controls.gd: class ColorControl:` +- [x] `./gui/panel_controls.gd: class DirectoryControl:` +- [x] `./gui/panel_controls.gd: class FileDialogSuperPlus:` +- [x] `./gui/panel_controls.gd: class FloatControl:` +- [x] `./gui/panel_controls.gd: class MultiLineStringControl:` +- [x] `./gui/panel_controls.gd: class NumberControl:` +- [x] `./gui/panel_controls.gd: class SaveLoadControl:` +- [x] `./gui/panel_controls.gd: class SelectControl:` +- [x] `./gui/panel_controls.gd: class StringControl:` +- [ ] `./input_sender.gd: class InputQueueItem:` +- [ ] `./input_sender.gd: class MouseDraw:` +- [ ] `./method_maker.gd: class CallParameters:` +- [ ] `./orphan_counter.gd: class Orphanage:` +- [x] `./printers.gd: class ConsolePrinter:` +- [x] ~~`./printers.gd: class GutGuiPrinter:`~~ +- [x] `./printers.gd: class TerminalPrinter:` +- [ ] `./script_parser.gd: class ParsedMethod:` +- [ ] `./script_parser.gd: class ParsedScript:` +- [ ] `./singleton_parser.gd: class ParsedSingleton:` +- [ ] `./test.gd: class _ConnectionInfo:` +- [ ] `./test.gd: class SignalAssertParameters:` +- [ ] `./version_conversion.gd: class ConfigurationUpdater:` +- [ ] `./version_numbers.gd: class VerNumTools:` -# Less likely -``` -./awaiter.gd: class AwaitLogger: -./cli/gut_cli.gd: class OptionResolver: -./cli/optparse.gd: class OptionHeading: -./gui/gut_logo.gd: class Eyeball: -./gui/gut_user_preferences.gd: class GutEditorPref: -./gui/OutputText.gd: class TextEditSearcher: -./gui/panel_controls.gd: class BaseGutPanelControl: -./gui/panel_controls.gd: class BooleanControl: -./gui/panel_controls.gd: class ColorControl: -./gui/panel_controls.gd: class DirectoryControl: -./gui/panel_controls.gd: class FileDialogSuperPlus: -./gui/panel_controls.gd: class FloatControl: -./gui/panel_controls.gd: class MultiLineStringControl: -./gui/panel_controls.gd: class NumberControl: -./gui/panel_controls.gd: class SaveLoadControl: -./gui/panel_controls.gd: class SelectControl: -./gui/panel_controls.gd: class StringControl: -./input_sender.gd: class InputQueueItem: -./input_sender.gd: class MouseDraw: -./method_maker.gd: class CallParameters: -./orphan_counter.gd: class Orphanage: -./printers.gd: class ConsolePrinter: -./printers.gd: class GutGuiPrinter: -./printers.gd: class TerminalPrinter: -./script_parser.gd: class ParsedMethod: -./script_parser.gd: class ParsedScript: -./singleton_parser.gd: class ParsedSingleton: -./test.gd: class _ConnectionInfo: -./test.gd: class SignalAssertParameters: -./version_conversion.gd: class ConfigurationUpdater: -./version_numbers.gd: class VerNumTools: -``` # Unlikely ``` diff --git a/scenes/TestPanelControls.gd b/scenes/TestPanelControls.gd index e74b2615..30300cdd 100644 --- a/scenes/TestPanelControls.gd +++ b/scenes/TestPanelControls.gd @@ -6,20 +6,20 @@ var PanelControls = load('res://addons/gut/gui/panel_controls.gd') 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') +var _save_load = PanelControls.GpcSaveLoad.new('whatever', 1, 'hint') +var _res_dir = PanelControls.GpcDirectory.new('some dir', 'res://', 'hint') +var _res_dir_enabled = PanelControls.GpcDirectory.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) - + diff --git a/test/unit/test_awaiter.gd b/test/unit/test_awaiter.gd index 94351d43..859bcdfb 100644 --- a/test/unit/test_awaiter.gd +++ b/test/unit/test_awaiter.gd @@ -390,6 +390,13 @@ class TestWaitWhile: extends GutTest var Awaiter = load('res://addons/gut/awaiter.gd') + func before_all(): + Engine.set_time_scale(5.0) + + func after_all(): + Engine.set_time_scale(1.0) + + func test_wait_while_emits_wait_started(): var a = add_child_autoqfree(Awaiter.new()) watch_signals(a) From 05d8a00614680bf14fb94df27d0422d0c390f74f Mon Sep 17 00:00:00 2001 From: Butch Wesley Date: Mon, 16 Mar 2026 16:58:24 -0400 Subject: [PATCH 5/9] time_scale causes failures from vscode --- test/unit/test_awaiter.gd | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/test/unit/test_awaiter.gd b/test/unit/test_awaiter.gd index 859bcdfb..f5749a9d 100644 --- a/test/unit/test_awaiter.gd +++ b/test/unit/test_awaiter.gd @@ -43,13 +43,6 @@ class PredicateMethods: times_called += 1 return times_called != x -func before_all(): - Engine.set_time_scale(5.0) - - -func after_all(): - Engine.set_time_scale(1.0) - func test_is_not_paused_by_default(): var a = add_child_autofree(Awaiter.new()) @@ -291,12 +284,6 @@ class TestWaitUntil: extends GutTest var Awaiter = load('res://addons/gut/awaiter.gd') - func before_all(): - Engine.set_time_scale(5.0) - - - func after_all(): - Engine.set_time_scale(1.0) func test_wait_until_emits_wait_started(): var a = add_child_autoqfree(Awaiter.new()) @@ -390,12 +377,6 @@ class TestWaitWhile: extends GutTest var Awaiter = load('res://addons/gut/awaiter.gd') - func before_all(): - Engine.set_time_scale(5.0) - - func after_all(): - Engine.set_time_scale(1.0) - func test_wait_while_emits_wait_started(): var a = add_child_autoqfree(Awaiter.new()) From dd0fbbc1c224f0520440b3b5fffa47783463ee75 Mon Sep 17 00:00:00 2001 From: Butch Wesley Date: Mon, 23 Mar 2026 12:55:26 -0400 Subject: [PATCH 6/9] renam eAwaitLogger, OptionResolver, InputQueueItem, MouseDraw, ConfigurationUpdater --- addons/gut/awaiter.gd | 4 ++-- addons/gut/cli/gut_cli.gd | 4 ++-- addons/gut/input_sender.gd | 10 +++++----- addons/gut/version_conversion.gd | 8 ++++---- maybe_rename_inner_classes.md | 10 +++++----- test/unit/test_config_validator.gd | 12 ++++++------ 6 files changed, 24 insertions(+), 24 deletions(-) diff --git a/addons/gut/awaiter.gd b/addons/gut/awaiter.gd index 77e54a55..0f9b1ef5 100644 --- a/addons/gut/awaiter.gd +++ b/addons/gut/awaiter.gd @@ -1,6 +1,6 @@ extends Node -class AwaitLogger: +class GutAwaiterLogger: var _time_waited = 0.0 var logger = GutUtils.get_logger() var waiting_on = "nothing" @@ -31,7 +31,7 @@ class AwaitLogger: signal timeout signal wait_started -var await_logger = AwaitLogger.new() +var await_logger = GutAwaiterLogger.new() var _wait_time := 0.0 var _wait_process_frames := 0 var _wait_physics_frames := 0 diff --git a/addons/gut/cli/gut_cli.gd b/addons/gut/cli/gut_cli.gd index 50e138f7..4bc17de9 100644 --- a/addons/gut/cli/gut_cli.gd +++ b/addons/gut/cli/gut_cli.gd @@ -15,7 +15,7 @@ var GutRunner = load('res://addons/gut/gui/GutRunner.tscn') # hash with null values for the other types of values. Lower precedented hashes # will punch through null values of higher precedented hashes. # ------------------------------------------------------------------------------ -class OptionResolver: +class GutCliOptionResolver: var base_opts = {} var cmd_opts = {} var config_opts = {} @@ -250,7 +250,7 @@ func _check_for_update(): # parse options and run Gut func main(): - var opt_resolver = OptionResolver.new() + var opt_resolver = GutCliOptionResolver.new() opt_resolver.set_base_opts(_gut_config.default_options) var cli_opts = setup_options(_gut_config.default_options, _gut_config.valid_fonts) diff --git a/addons/gut/input_sender.gd b/addons/gut/input_sender.gd index a94e842b..5ea623dd 100644 --- a/addons/gut/input_sender.gd +++ b/addons/gut/input_sender.gd @@ -40,7 +40,7 @@ class_name GutInputSender # ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------ -class InputQueueItem: +class InputSenderQueueItem: extends Node var events = [] @@ -86,7 +86,7 @@ class InputQueueItem: # ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------ -class MouseDraw: +class InputSenderMouseDraw: extends Node2D var down_color = Color(1, 1, 1, .25) @@ -214,7 +214,7 @@ func _init(r=null): _tree_items_parent = Node.new() Engine.get_main_loop().root.add_child(_tree_items_parent) - _mouse_draw = MouseDraw.new() + _mouse_draw = InputSenderMouseDraw.new() _tree_items_parent.add_child(_mouse_draw) _mouse_draw.disabled = false @@ -572,14 +572,14 @@ func release_all(): ## Same as [method wait] but only accepts a number of frames to wait. func wait_frames(num_frames): - var item = InputQueueItem.new(0, num_frames) + var item = InputSenderQueueItem.new(0, num_frames) _add_queue_item(item) return self ## Same as [method wait] but only accepts a number of seconds to wait. func wait_secs(num_secs): - var item = InputQueueItem.new(num_secs, 0) + var item = InputSenderQueueItem.new(num_secs, 0) _add_queue_item(item) return self diff --git a/addons/gut/version_conversion.gd b/addons/gut/version_conversion.gd index fe375787..114a9461 100644 --- a/addons/gut/version_conversion.gd +++ b/addons/gut/version_conversion.gd @@ -1,4 +1,4 @@ -class ConfigurationUpdater: +class GutConfigurationUpdater: var EditorGlobals = load("res://addons/gut/gui/editor_globals.gd") func warn(message): @@ -47,8 +47,8 @@ class ConfigurationUpdater: else: info(str(' ', 'Deleted ', which)) -class v9_2_0: - extends ConfigurationUpdater +class Gutv9_2_0: + extends GutConfigurationUpdater func validate(): moved_file('res://.gut_editor_config.json', EditorGlobals.editor_run_gut_config_path) @@ -116,5 +116,5 @@ static func error_if_not_all_classes_imported() -> bool: static func convert(): - var inst = v9_2_0.new() + var inst = Gutv9_2_0.new() inst.validate() diff --git a/maybe_rename_inner_classes.md b/maybe_rename_inner_classes.md index af691b96..5d9119d0 100644 --- a/maybe_rename_inner_classes.md +++ b/maybe_rename_inner_classes.md @@ -11,8 +11,8 @@ grep -r 'class\s*[a-zA-z]*:' ## Less likely -- [ ] `./awaiter.gd: class AwaitLogger:` -- [ ] `./cli/gut_cli.gd: class OptionResolver:` +- [x] `./awaiter.gd: class AwaitLogger:` +- [x] `./cli/gut_cli.gd: class OptionResolver:` - [x] `./cli/optparse.gd: class OptionHeading:` - [x] `./gui/gut_logo.gd: class Eyeball:` - [x] ~~`./gui/gut_user_preferences.gd: class GutEditorPref:`~~ @@ -28,8 +28,8 @@ grep -r 'class\s*[a-zA-z]*:' - [x] `./gui/panel_controls.gd: class SaveLoadControl:` - [x] `./gui/panel_controls.gd: class SelectControl:` - [x] `./gui/panel_controls.gd: class StringControl:` -- [ ] `./input_sender.gd: class InputQueueItem:` -- [ ] `./input_sender.gd: class MouseDraw:` +- [x] `./input_sender.gd: class InputQueueItem:` +- [x] `./input_sender.gd: class MouseDraw:` - [ ] `./method_maker.gd: class CallParameters:` - [ ] `./orphan_counter.gd: class Orphanage:` - [x] `./printers.gd: class ConsolePrinter:` @@ -40,7 +40,7 @@ grep -r 'class\s*[a-zA-z]*:' - [ ] `./singleton_parser.gd: class ParsedSingleton:` - [ ] `./test.gd: class _ConnectionInfo:` - [ ] `./test.gd: class SignalAssertParameters:` -- [ ] `./version_conversion.gd: class ConfigurationUpdater:` +- [x] `./version_conversion.gd: class ConfigurationUpdater:` - [ ] `./version_numbers.gd: class VerNumTools:` diff --git a/test/unit/test_config_validator.gd b/test/unit/test_config_validator.gd index 77e01ddd..f7ac5e88 100644 --- a/test/unit/test_config_validator.gd +++ b/test/unit/test_config_validator.gd @@ -15,19 +15,19 @@ func after_each(): gut.file_delete(to_file) func test_moved_file_moves_file_to_new_location(): - var updater = VersionConversion.ConfigurationUpdater.new() + var updater = VersionConversion.GutConfigurationUpdater.new() gut.file_touch(from_file) updater.moved_file(from_file, to_file) assert_file_exists(to_file) func test_moved_file_does_not_remove_original(): - var updater = VersionConversion.ConfigurationUpdater.new() + var updater = VersionConversion.GutConfigurationUpdater.new() gut.file_touch(from_file) updater.moved_file(from_file, to_file) assert_file_exists(from_file) func test_moved_file_issues_warning_when_both_files_exist(): - var updater = partial_double(VersionConversion.ConfigurationUpdater).new() + var updater = partial_double(VersionConversion.GutConfigurationUpdater).new() gut.file_touch(from_file) gut.file_touch(to_file) updater.moved_file(from_file, to_file) @@ -35,19 +35,19 @@ func test_moved_file_issues_warning_when_both_files_exist(): assert_string_contains(params[0], 'You can delete') func test_move_user_file_moves_the_file(): - var updater = VersionConversion.ConfigurationUpdater.new() + var updater = VersionConversion.GutConfigurationUpdater.new() gut.file_touch(from_file) updater.move_user_file(from_file, to_file) assert_file_exists(to_file) func test_move_user_file_deletes_from_file(): - var updater = VersionConversion.ConfigurationUpdater.new() + var updater = VersionConversion.GutConfigurationUpdater.new() gut.file_touch(from_file) updater.move_user_file(from_file, to_file) assert_file_does_not_exist(from_file) func test_remove_user_file_deletes_the_file(): - var updater = VersionConversion.ConfigurationUpdater.new() + var updater = VersionConversion.GutConfigurationUpdater.new() gut.file_touch(from_file) updater.remove_user_file(from_file) assert_file_does_not_exist(from_file) From 73705f8ed1082072f6fc809ee94405ca16fc113b Mon Sep 17 00:00:00 2001 From: Butch Wesley Date: Mon, 23 Mar 2026 13:01:31 -0400 Subject: [PATCH 7/9] rename ParsedMethod --- addons/gut/script_parser.gd | 8 ++++---- test/unit/test_script_parser.gd | 10 +++++----- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/addons/gut/script_parser.gd b/addons/gut/script_parser.gd index 090356ce..58dc950f 100644 --- a/addons/gut/script_parser.gd +++ b/addons/gut/script_parser.gd @@ -8,12 +8,12 @@ const BLACKLIST = [ # ------------------------------------------------------------------------------ -# Combins the meta for the method with additional information. +# Combines the meta for the method with additional information. # * flag for whether the method is local # * adds a 'default' property to all parameters that can be easily checked per # parameter # ------------------------------------------------------------------------------ -class ParsedMethod: +class GutParsedMethod: const NO_DEFAULT = '__no__default__' var _meta = {} @@ -158,7 +158,7 @@ class ParsedScript: methods = _get_native_methods(base_type) for m in methods: - var parsed = ParsedMethod.new(m) + var parsed = GutParsedMethod.new(m) _methods_by_name[m.name] = parsed # _init must always be included so that we can initialize # double_tools @@ -173,7 +173,7 @@ class ParsedScript: methods = thing.get_script_method_list() methods.reverse() for m in methods: - var parsed_method = ParsedMethod.new(m) + var parsed_method = GutParsedMethod.new(m) parsed_method.is_local = true _methods_by_name[m.name] = parsed_method diff --git a/test/unit/test_script_parser.gd b/test/unit/test_script_parser.gd index be20fb4e..fdfe053b 100644 --- a/test/unit/test_script_parser.gd +++ b/test/unit/test_script_parser.gd @@ -226,18 +226,18 @@ class TestParsedMethod: } func test_can_make_one(): - var pm = ScriptParser.ParsedMethod.new(_empty_meta) + var pm = ScriptParser.GutParsedMethod.new(_empty_meta) assert_not_null(pm) func test_is_eligible_for_doubling_by_default(): - var pm = ScriptParser.ParsedMethod.new(_empty_meta) + var pm = ScriptParser.GutParsedMethod.new(_empty_meta) assert_true(pm.is_eligible_for_doubling()) var flag_arr = [METHOD_FLAG_STATIC, METHOD_FLAG_VIRTUAL, METHOD_FLAG_OBJECT_CORE] func test_when_has_bad_flag_it_is_not_eligible_for_doubling(p = use_parameters(flag_arr)): var meta = _empty_meta.duplicate() meta.flags = meta.flags | p - var pm = ScriptParser.ParsedMethod.new(meta) + var pm = ScriptParser.GutParsedMethod.new(meta) assert_false(pm.is_eligible_for_doubling()) var flag_arr2 = [METHOD_FLAG_EDITOR, METHOD_FLAG_NORMAL, METHOD_FLAGS_DEFAULT, METHOD_FLAG_VARARG, @@ -245,13 +245,13 @@ class TestParsedMethod: func test_when_has_ok_flag_it_is_eligible_for_doubling(p = use_parameters(flag_arr2)): var meta = _empty_meta.duplicate() meta.flags = meta.flags | p - var pm = ScriptParser.ParsedMethod.new(meta) + var pm = ScriptParser.GutParsedMethod.new(meta) assert_true(pm.is_eligible_for_doubling()) func test_when_method_black_listed_it_is_not_eligible_for_doubling(): var meta = _empty_meta.duplicate() meta.name = ScriptParser.BLACKLIST[0] - var pm = ScriptParser.ParsedMethod.new(meta) + var pm = ScriptParser.GutParsedMethod.new(meta) assert_false(pm.is_eligible_for_doubling()) From 20742b3a7d10fb97bad12291b1e3f779af306e2b Mon Sep 17 00:00:00 2001 From: Butch Wesley Date: Mon, 23 Mar 2026 13:06:44 -0400 Subject: [PATCH 8/9] rename ParsedScript --- addons/gut/script_parser.gd | 4 ++-- test/unit/test_script_parser.gd | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/addons/gut/script_parser.gd b/addons/gut/script_parser.gd index 58dc950f..06e0189f 100644 --- a/addons/gut/script_parser.gd +++ b/addons/gut/script_parser.gd @@ -73,7 +73,7 @@ class GutParsedMethod: # ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------ -class ParsedScript: +class GutParsedScript: # All methods indexed by name. var _methods_by_name = {} @@ -313,7 +313,7 @@ func parse(thing, inner_thing=null): inner = instance_from_id(_get_instance_id(inner_thing)) if(obj is Resource or GutUtils.is_native_class(obj)): - parsed = ParsedScript.new(obj, inner) + parsed = GutParsedScript.new(obj, inner) scripts[key] = parsed return parsed diff --git a/test/unit/test_script_parser.gd b/test/unit/test_script_parser.gd index fdfe053b..1cc66318 100644 --- a/test/unit/test_script_parser.gd +++ b/test/unit/test_script_parser.gd @@ -28,19 +28,19 @@ class TestScriptParser: func test_parse_returns_script_parser(): var collector = ScriptParser.new() var result = collector.parse(DoubleMe) - assert_is(result, ScriptParser.ParsedScript) + assert_is(result, ScriptParser.GutParsedScript) func test_parse_returns_cached_version_on_2nd_parse(): var collector = ScriptParser.new() collector.parse(DoubleMe) var result = collector.parse(DoubleMe) - assert_is(result, ScriptParser.ParsedScript) + assert_is(result, ScriptParser.GutParsedScript) func test_can_get_instance_parse_result_from_gdscript(): var collector = ScriptParser.new() collector.parse(autofree(DoubleMe.new())) var result = collector.parse(DoubleMe) - assert_is(result, ScriptParser.ParsedScript) + assert_is(result, ScriptParser.GutParsedScript) assert_eq(collector.scripts.size(), 1) func test_parsing_more_adds_more_scripts(): @@ -86,7 +86,7 @@ class TestParsedScript: var DoubleMe = load(DOUBLE_ME_PATH) var InnerClasses = load(INNER_CLASSES_PATH) - var ParsedScript = load('res://addons/gut/script_parser.gd').ParsedScript + var ParsedScript = load('res://addons/gut/script_parser.gd').GutParsedScript class ClassWithInner: class InnerClass: From 9664d840e2259c325fbe21f56e1a32391b7e9d40 Mon Sep 17 00:00:00 2001 From: Butch Wesley Date: Mon, 23 Mar 2026 14:41:41 -0400 Subject: [PATCH 9/9] rename CallParameters, Orphanage, ParsedMethod, ParsedScript, ParsedSingleton --- addons/gut/method_maker.gd | 6 +++--- addons/gut/orphan_counter.gd | 4 ++-- addons/gut/singleton_parser.gd | 4 ++-- maybe_rename_inner_classes.md | 10 +++++----- test/unit/test_singleton_parser.gd | 26 +++++++++++++------------- 5 files changed, 25 insertions(+), 25 deletions(-) diff --git a/addons/gut/method_maker.gd b/addons/gut/method_maker.gd index 98a10470..2ade7852 100644 --- a/addons/gut/method_maker.gd +++ b/addons/gut/method_maker.gd @@ -1,4 +1,4 @@ -class CallParameters: +class MethodMakerCallParameters: var p_name = null var default = null var vararg = false @@ -132,10 +132,10 @@ func _make_arg_array(method_meta): for i in range(method_meta.args.size()): var pname = method_meta.args[i].name var dflt_text = _make_stub_default(method_meta.name, i) - to_return.append(CallParameters.new(PARAM_PREFIX + pname, dflt_text)) + to_return.append(MethodMakerCallParameters.new(PARAM_PREFIX + pname, dflt_text)) if(method_meta.flags & METHOD_FLAG_VARARG): - var cp = CallParameters.new("args", "") + var cp = MethodMakerCallParameters.new("args", "") cp.vararg = true to_return.append(cp) diff --git a/addons/gut/orphan_counter.gd b/addons/gut/orphan_counter.gd index 313f8b63..ea9057c7 100644 --- a/addons/gut/orphan_counter.gd +++ b/addons/gut/orphan_counter.gd @@ -1,7 +1,7 @@ # ------------------------------------------------------------------------------ # It keeps track of the orphans...so this is best name it could ever have. # ------------------------------------------------------------------------------ -class Orphanage: +class GutOrphanage: const UNGROUPED = "Outside Tests" const SUBGROUP_SEP = '->' @@ -82,7 +82,7 @@ class Orphanage: # ------------------------------------------------------------------------------ var _strutils = GutStringUtils.new() -var orphanage : Orphanage = Orphanage.new() +var orphanage : GutOrphanage = GutOrphanage.new() var logger = GutUtils.get_logger() var autofree = GutUtils.AutoFree.new() diff --git a/addons/gut/singleton_parser.gd b/addons/gut/singleton_parser.gd index 39ce10e9..7ca42f7a 100644 --- a/addons/gut/singleton_parser.gd +++ b/addons/gut/singleton_parser.gd @@ -1,4 +1,4 @@ -class ParsedSingleton: +class GutParsedSingleton: var methods_by_name = {} var enums = {} var properties = {} @@ -82,6 +82,6 @@ var singletons = {} func parse(singleton): if(!singletons.has(singleton)): - singletons[singleton] = ParsedSingleton.new(singleton) + singletons[singleton] = GutParsedSingleton.new(singleton) return singletons[singleton] \ No newline at end of file diff --git a/maybe_rename_inner_classes.md b/maybe_rename_inner_classes.md index 5d9119d0..f9d93ac0 100644 --- a/maybe_rename_inner_classes.md +++ b/maybe_rename_inner_classes.md @@ -30,14 +30,14 @@ grep -r 'class\s*[a-zA-z]*:' - [x] `./gui/panel_controls.gd: class StringControl:` - [x] `./input_sender.gd: class InputQueueItem:` - [x] `./input_sender.gd: class MouseDraw:` -- [ ] `./method_maker.gd: class CallParameters:` -- [ ] `./orphan_counter.gd: class Orphanage:` +- [x] `./method_maker.gd: class CallParameters:` +- [x] `./orphan_counter.gd: class Orphanage:` - [x] `./printers.gd: class ConsolePrinter:` - [x] ~~`./printers.gd: class GutGuiPrinter:`~~ - [x] `./printers.gd: class TerminalPrinter:` -- [ ] `./script_parser.gd: class ParsedMethod:` -- [ ] `./script_parser.gd: class ParsedScript:` -- [ ] `./singleton_parser.gd: class ParsedSingleton:` +- [x] `./script_parser.gd: class ParsedMethod:` +- [x] `./script_parser.gd: class ParsedScript:` +- [x] `./singleton_parser.gd: class ParsedSingleton:` - [ ] `./test.gd: class _ConnectionInfo:` - [ ] `./test.gd: class SignalAssertParameters:` - [x] `./version_conversion.gd: class ConfigurationUpdater:` diff --git a/test/unit/test_singleton_parser.gd b/test/unit/test_singleton_parser.gd index 3659d9d8..a583b2e6 100644 --- a/test/unit/test_singleton_parser.gd +++ b/test/unit/test_singleton_parser.gd @@ -10,66 +10,66 @@ func test_can_make_one(): func test_can_make_parsed_script(): - var ps = SingletonParser.ParsedSingleton.new(OS) + var ps = SingletonParser.GutParsedSingleton.new(OS) assert_not_null(ps) func test_parsed_singleton_populates_methods(): - var ps = SingletonParser.ParsedSingleton.new(Time) + var ps = SingletonParser.GutParsedSingleton.new(Time) assert_ne(ps.methods_by_name.size(), 0) func test_parsed_singleton_does_not_include_object_methods(): - var ps = SingletonParser.ParsedSingleton.new(Time) + var ps = SingletonParser.GutParsedSingleton.new(Time) assert_does_not_have(ps.methods_by_name, 'free') func test_parsed_singleton_has_enums(): - var ps = SingletonParser.ParsedSingleton.new(Time) + var ps = SingletonParser.GutParsedSingleton.new(Time) assert_eq(ps.enums["WEEKDAY_SUNDAY"], 0) func test_parsed_singleton_enum_values_match_class_enum_values(): - var ps = SingletonParser.ParsedSingleton.new(Time) + var ps = SingletonParser.GutParsedSingleton.new(Time) assert_eq(ps.enums["MONTH_JANUARY"], 1) func test_parsed_singleton_does_not_have_object_enums(): - var ps = SingletonParser.ParsedSingleton.new(Time) + var ps = SingletonParser.GutParsedSingleton.new(Time) assert_does_not_have(ps.enums, "CONNECT_DEFERRED") func test_parsed_singleton_contains_properties(): - var ps = SingletonParser.ParsedSingleton.new(OS) + var ps = SingletonParser.GutParsedSingleton.new(OS) assert_has(ps.properties, "delta_smoothing") func test_parsed_singleton_properties_have_singleton_values(): - var ps = SingletonParser.ParsedSingleton.new(OS) + var ps = SingletonParser.GutParsedSingleton.new(OS) assert_eq(ps.properties["low_processor_usage_mode_sleep_usec"], OS.low_processor_usage_mode_sleep_usec) func test_parsed_singleton_has_signals(): - var ps = SingletonParser.ParsedSingleton.new(AudioServer) + var ps = SingletonParser.GutParsedSingleton.new(AudioServer) assert_has(ps.signals, 'bus_layout_changed') func test_can_parse_all_singletons(p = use_parameters(GutUtils.GodotSingletons.class_ref)): - var ps = SingletonParser.ParsedSingleton.new(p) + var ps = SingletonParser.GutParsedSingleton.new(p) assert_not_null(ps) func test_constants_are_added_as_enums(): - var ps = SingletonParser.ParsedSingleton.new(DisplayServer) + var ps = SingletonParser.GutParsedSingleton.new(DisplayServer) assert_has(ps.enums, "INVALID_SCREEN") func test_get_signal_text(): - var ps = SingletonParser.ParsedSingleton.new(AudioServer) + var ps = SingletonParser.GutParsedSingleton.new(AudioServer) var signal_meta = ps.signals['bus_renamed'] var text = ps.get_signal_text(signal_meta) assert_eq(text, 'signal bus_renamed(bus_index, old_name, new_name)') func test_get_all_signal_text(): - var ps = SingletonParser.ParsedSingleton.new(AudioServer) + var ps = SingletonParser.GutParsedSingleton.new(AudioServer) var text = ps.get_all_signal_text() assert_string_contains(text, 'signal bus_renamed(bus_index, old_name, new_name)') assert_string_contains(text, 'signal bus_layout_changed()') \ No newline at end of file