Gut

Godot Unit Test. Unit testing tool for Godot Game Engine.

Stars
1.6K
Committers
47

Bot releases are hidden (Show)

Gut - v7.4.3 Latest Release

Published by bitwes 8 months ago

What's Changed

Full Changelog: https://github.com/bitwes/Gut/compare/v7.4.2...v7.4.3

Gut - v9.2.1

Published by bitwes 8 months ago

What's Changed

  • Issue #570 Doubling scripts that contain a statically typed variable of another class_name script (var foo := Foo.new() where foo is a class_name in another script) could cause errors.
  • Add support for running tests through the debugger via VSCode via the gut-extension.

Full Changelog: https://github.com/bitwes/Gut/compare/v9.2.0...v9.2.1

Gut - v7.4.2

Published by bitwes 8 months ago

7.4.2

  • Issue #485 GUT prints a warning and ignores scripts that do not extend GutTest.
  • Documentation changes for readthedocs.
  • Issue #436 Doubled Scenes now retain export variable values that were set in the editor.
  • Issue #547 GutPanel now saves output_font_name and output_font_size correctly.
  • Issue #450 yield timer is now stopped to avoid possible leaking of yield time between tests.

New Contributors

Full Changelog: https://github.com/bitwes/Gut/compare/v7.4.1...v7.4.2

Gut - v9.2.0

Published by bitwes 8 months ago

9.2.0

Configuration Changes

  • The GUT Panel config is now auto-saved/loaded to user:// instead of res://. This file changes a lot and is very annoying with version control and teams that have more than one person (which is all teams since there is no "I" in team).
    • The new location is user://gut_temp_directory/gut_editor_config.json
    • When you open your project, GUT will check to see if there is a file in the new location. If not, it will copy it there.
    • GUT prints a warning to `Output`` telling you that you can delete the old file.
  • You can now Save/Load configs to/from anywhere through the Settings Subpanel.
    • Saving/Loading does not change where the GUT panel auto-saves/loads to.
    • This allows you to define standard config files for your project, but not save any changes in a version controlled file (unless you explicitly resave it using the cool new Save As button).
  • The GUT Panel Shortcuts config file has also been moved. GUT also moves this file automatically and prints a warning.
    • The new location is user://gut_temp_directory/gut_editor_shortcuts.cfg
  • All files that were being saved in user:// have been moved to user://gut_temp_directory for better house keeping.

Features

  • The Settings Subpanel now has on/off switches for directories, so you can turn them off if you want to run a subset of tests.
  • Wiki moved to https://gut.readthedocs.io

Bug Fixes

  • Issue #479 source_code_pro.fnt was malformed, is now bienformed.
  • Issue #549 @andrejp88 debug/gdscript/warnings/untyped_declaration as error would break GUT due to dynamic code generation.
  • Issue #536 Theme refernces font instead of embedding it.
  • Issue #523 "got" values are printed with extra precision for float, Vector2, and Vector3 when using assert_almost_eq, assert_almost_ne, assert_between and assert_not_between.
  • Issue #436 Doubled Scenes now retain export variable values that were set in the editor.
  • Issue #547 The output_font_name and output_font_size for the GutPanel are now saved.
  • PR #544 (@xorblo-doitus) InputSender will now emit the gui_input signal on receivers.
  • Issue #473 Moved gut panel settings and gut options out of res:// so that multiple devs won't fight over files that are really user preferences.
    • Created some Editor Preferences for Gut to handle user only settings.
    • When running GUT from the editor, the config used by the runner is saved to user:// now.
    • You can load and save configs through the editor, so you can have a base set of settings that are not overwritten when running Gut.
    • Moved all files that Gut creates in user:// to user://gut_temp_directory.
    • Output Subanel related settings have moved to the Output Subpanel. Use the "..." button.
  • Issue #557 Tests are now found in exported projects.
  • Fixed issue where the panel was not loading the double strategy correctly.
  • Issue #542 GUT no longer generates orphans...again.

New Contributors

Full Changelog: https://github.com/bitwes/Gut/compare/v9.1.1...v9.2.0

Gut - v9.1.1

Published by bitwes 11 months ago

  • Fixed numerous issues with doubling that were caused by the port from 3.x. Most of these involved using the INCLUDE_NATIVE doubling strategy.
  • Added errors and better failure messages when trying to stub or spy on an invalid method. For example, if your script does not implement _ready and you try to spy on it, your test will now fail since _ready is virtual and you didn't overload it.
  • Doubled methods that have a vararg argument are now auto detected and extra parameters (up to 10) are added to the method signature to handle most use cases (i.e. rpc_id, emit_signal). If you call a doubled method that has a vararg argument and you have not stubbed param_count on the object's script then a warning is generated.
  • Fixed an issue where command line would not launch in 4.2rc1.
  • Issue #510 Added all types to strutils to address #510.
  • Issue #525 Signals are now disconnected when waiting on signals that do not fire in the expected amount of time.
Gut - v9.1.1

Published by bitwes 11 months ago

  • Fixed numerous issues with doubling that were caused by the port from 3.x. Most of these involved using the INCLUDE_NATIVE doubling strategy.
  • Added errors and better failure messages when trying to stub or spy on an invalid method. For example, if your script does not implement _ready and you try to spy on it, your test will now fail since _ready is virtual and you didn't overload it.
  • Doubled methods that have a vararg argument are now auto detected and extra parameters (up to 10) are added to the method signature to handle most use cases (i.e. rpc_id, emit_signal). If you call a doubled method that has a vararg argument and you have not stubbed param_count on the object's script then a warning is generated.
  • Fixed an issue where command line would not launch in 4.2rc1.
  • Issue #510 Added all types to strutils to address #510.
  • Issue #525 Signals are now disconnected when waiting on signals that do not fire in the expected amount of time.
Gut - v9.1.0 (Godot 4.1)

Published by bitwes over 1 year ago

9.1.0 (requires Godot 4.1)

  • GUT generated errors now cause tests to fail (not engine errors, just things GUT thinks are bad). You can disable this through the CLI, .gutconfig, or the panel.
  • Changes to Double Strategy and Double/Partial Double creation to fix #482.
    • See Double-Strategy in the wiki for more information.
    • The default strategy has been changed back to SCRIPT_ONLY (a bug caused it to change). Due to how the Godot Engine calls native methods, the overrides may not be called by the engine so spying and stubbing may not work in some scenarios.
    • Doubling now disables the Native Method Override warning/error when creating Doubles and Partial Doubles. The warning/error is turned off and then restored to previous value after a Double or Partial Double has been loaded.
    • The doubling strategy INCLUDE_SUPER has been renamed to INCLUDE_NATIVE.
    • If you have an invalid Double Strategy set via command line or gutconfig, the default will be used. So if you are explicity setting it to the old INCLUDE_SUPER, it will use SCRIPT_ONLY.
    • You can now set the default double strategy in the GutPanel in the Editor.
  • Added GutControl to aid in running tests in a deployed game. Instructions and sample code can be found in the wiki.
  • Issue 485 GUT prints a warning and ignores scripts that do not extend GutTest.
  • A lot of internal reworkings to simplify logging and info about test statuses. The summary changed and the final line printed by GUT is now the highest severity status of the run (i.e. failed > pending/risky > passed).
  • Issue 503 Fixed issue where GUT would not find script object when doubling PackedScenes.
  • Port PR 409 GUT's simulate function can now check is_processing and is_physics_processing when running thier respective methods.
Gut - v9.0.1 (Godot 4)

Published by bitwes over 1 year ago

Fixed a bug where you could not double scripts that used the new Godot 4 accessors.

Gut - GUT 9 for Godot 4!

Published by bitwes over 1 year ago

This is the initial release of GUT for Godot 4.0. Going forward, GUT 9+ will support Godot 4. GUT 7+ will support Godot 3.x.

GUT 9.0.0 will live in the godot_4 branch of the repo. Eventually it will move to main as Godot 3.x support is not needed. You should read Gut's Godot 4 README for information about what has changed.

What's Changed

New Contributors

Full Changelog: https://github.com/bitwes/Gut/compare/v7.3.0...v9.0.0

Gut - v7.4.1

Published by bitwes about 2 years ago

7.4.1

  • Issue i393 7.4.0 broke running from a scene. On a side note, try the new and improved Gut Panel! It did not break in the last release and was significantly improved!
Gut - v7.4.0

Published by bitwes about 2 years ago

7.4.0

Features

  • Issue 354 Doubles and partial doubles can now be instanced with parameters
    • You can now specify parameters when instancing a double/partial double:
      var dbl = double(MyClass).new(1, 2, 'c')
    • You can now spy on _init to verify parameter values:
      assert_called(my_inst, '_init', [1, 2, 'c'])
    • You can now stub default parameter values for _init:
      stub(MyClass, '_init').param_defaults([1, 2, 'c'])
  • Issue 363 GUT In-Editor Panel Improvements
    • New, super fancy, Tree Panel that shows your failing/pending/risky tests. Click an element in the tree, go to that line in the file AND that line in the output.
    • You can toggle the visibility of Settings, Output, and Tree panels.
    • You can search the output.
    • Some nice editor icons to make things look slick.
  • Issue 375 You can change the suffix of your test files. Example: _foo.gd.

Misc

  • Yield messages are now disabled on log level 0.
  • Tests that do not assert are included in the summary as "risky".
  • Test totals in various places have been adjusted to display a passing count and total count.
  • Running a single test script is faster now. Gut no longer parses scripts with non-matching names.

Bug Fixes

  • Issue 288 First yield in a test does not cause a .4 second delay.
  • Issue 368 Doubling WebSocketClient and anything with a PoolStringArray default value.
  • Issue 387 Introduced auto_flush_input to InputSender to address that Input.use_accumulate_input is enabled by default in Godot 3.5.0.
Gut - v7.3.0

Published by bitwes over 2 years ago

7.3.0

Features

Mocking Input

  • Added some class_name clauses to files:
    • Issue 215 You can now use extends GutTest instead of extends 'res://addons/gut/test.gd' when creating test scripts. That's 45% less text!
    • When making a hook script, you can use extends GutHookScript instead of using the path.
  • Added InputFactory static class to addons/gut/test.gd to simplify creating InputEvent* events for use in tests. See Input Factory.
  • Added InputSender class for mocking input and scripting input sequences. See Mock Input.
func test_fireball_input():
  var player = Fighter.new()
  var sender = InputSender.new(player)

  sender.action_down("down").hold_for(.1)\
    .action_down("down_forward").hold_for(.1)\
    .action_down("forward").key_down("FP")

  yield(sender, 'idle')
  assert_true(player.is_throwing_fireball())

Misc

  • Issue 121 Child tests are now added to the root scene instead of to the GUT Runner. The new "On Top" setting and "Compact Mode" can be used to manage the visibility of objects added during tests and seeing test results.
  • Introduced new setting which causes GUT to always be on top. There is an "On Top" setting added to the GUT Panel. This option can also be specified in gutconfig ("gut_on_top":true).
  • Compact Mode added to the panel, gutconfig and command line. This minimizes the size of the GUT runner and puts it in the corner. Unlike Baby...we all can put GUT in the corner.
  • In-Editor GUT Panel improvements
    • Smart buttons to run tests based on cursor location.
    • Added more settings (hook scripts, font color, background color, panel font settings, directory and file dialog buttons where appropriate, hide orphans, disable colors)
    • Display counts for errors, warnings, orphans (only displayed when present).
  • Issue 310 The summary output now lists the number of passing/failing tests as well as passing/failing assert counts.

Bug Fixes

  • Issue 283 The Gut Scene now has a theme with a font which prevents higher level font changes from applying to the Gut Scene.
  • Issue 294 GUT ignores the res://addons/gut directory if you accidently include it as a test directory.

Related Tutorials

New Gut Panel features: https://youtu.be/tWNswMIJHKk
Mocking Input: https://youtu.be/cRKppa9R7ZQ

Gut - 7.2.0

Published by bitwes almost 3 years ago

7.2.0

Features

  • Run GUT straight from the Editor, no scene needed! This is my first stab at making an Editor GUI for GUT. It's not perfect yet so please me know what works and what doesn't. More info in the Quick Start wiki page.
  • Issue 207 Added ability to export test results in the JUnit XML format.
    • Added "Junit Xml File" setting to the Gut control to specify the file. "Junit Xml Timestamp" will include an epoch timestamp in the filename.
    • -gjunit_xml_file and -gjunit_xml_timestamp are supported on the command line.
    • junit_xml_file and junit_xml_timestamp are supported in the .gutconfig.json file.
  • Added yield_frames. It works similar to yield_for except it will yield for N frames instead of N seconds.
  • Issue #266 Introduced stub(...).param_count(x) which allow you to specify the number of paramters a method has. Useful when working with vararg methods or NativeScripts. This addresses #246 and #252. See the Stubbing page in the wiki for more information.
  • Issue #263 Introduced stub(...).param_defaults([]) which allows you to specify the default values that a method should get. See the Stubbing page in the wiki for more information.
  • Issue #248 Added get_call_count which allows you to get the number of times a method was called.

Bug Fixes

  • Issue 268 Add message when assert_signal_emitted_with_parameters is passed bad parameters.
  • Issue 258 yield_to now supports signals with up to 9 parameters. This is the same limit supported by watch_signals.
  • Issue 304 assert_is no longer errors when asserting objects of type Reference.
  • Issue 257 Gut only uses NativeScript when NativeScript exists in the build.
  • Issue 290 consts defined in test-scripts that start with 'Test' are further validated before being treated as Inner-Test-Classes.
  • Issue 239 @db0 fixed assert_almost_eq and assert_almost_ne to work with Vectors properly.
Gut - 7.1.0

Published by bitwes almost 4 years ago

7.1.0

Misc

  • prerun_setup, setup, teardown, postrun_teardown deprecation warnings have been enabled. These were removed from the documentation over 2 years ago (6.6.0) and replaced with before_all, before_each, after_each, and after_all. Having to make additional changes for these in order to implement Issue 184 annoyed me, so there will now be depracation warnings for these. Earliest they could be removed is 8.0.0.

Features

  • Issue 70 Thanks to @short-story-long for adding "property" asserts assert_property, assert_setget, assert_setget_called. You can now easily asssert you have your setget properties setup correctly including ensuring that your setters/getters are used when accessing an attribute externally.
  • Issue 66 Thanks to @nilold for adding assert_not_between.
  • Enhanced the printing of floats and strings in the various asserts. Floats will always have a deciaml point now making it easier to see float/int comparisons. All strings are now wrapped in double quotes making it easier to see number/string comparisons.
  • Enhanced the display of arrays when using assert_eq and assert_ne. It now lists up to 30 indexes that are different and thier values. Large arrays are also truncated when printed to cut down on output.
  • Added compare_deep, compare_shallow, assert_eq/ne_deep, assert_eq/ne_shallow to aid in comparing dictionaries and arrays. See Comparing Things wiki page for more info.
  • Issue 201 Added pass_test(text), fail_test(text), is_passing(), is_failing() methods to test.gd.
    • No more assert_true(true, 'we got here')! Long live pass_test('we got here')!
  • assert_called_with_paramters now does a deep comparison of values instead of Godot's default equivalence check.
  • Issue 152 assert_signal_emitted_with_parameters now performs a deep compare of the paramters instead of Godot's default equivalence check.
  • Issue 184 Asserts in before_all and after_all are now formally supported. They will appear correctly in the output and asserts will be tracked in the summary.

Bug Fixes

  • Command Line now returns 1 if no sripts could be loaded.
  • Issue 173 An error is now generated if you try to stub the _init method. Documentation has been updated.
  • Issue 195 Parameterized Tests no longer generate deprecated warnings.
  • Fixed various issues with parameterized tests. All test execution is now treated exactly the same(Issue 196, Issue 197, Issue 202).
  • Issue 199 If you pass an instance of something to double or partial_double a GUT error is generated and null is returned.
  • Issue 200 If you pass a non-doubled instance to stub a GUT error is generated and nothing is stubbed.
  • Issue 211 GDNative scripts cause Error calling built-in function 'inst2dict': Not a script with an instance when used in assertions.
  • Issue 230 assert_true and assert_false now only accept boolean values. They will fail with anything else.
  • Issue 231_ assert_is creates an orphan.
Gut - 7.0.0

Published by bitwes over 4 years ago

Breaking Changes

  • Requires Godot 3.2. Versions 3.1 and earlier are no longer supported.
  • You must recreate the GUT node in your test runner scene.
    • Take notes on your GUT settings in the editor.
    • Delete GUT from the tree and add it back in.
    • You may have to restart Godot after this change.
    • Repopulate your settings.
  • All Doubles and Partial Doubles are freed automatically after each test. Doubles and Partial Doubles created in before_all will no longer be around for all tests.
  • A new signal gut_ready should be used instead of _ready when performing any actions on the GUT object in your test runner scene. You should avoid interacting with GUT until this signal has been emitted.
  • gut.p no longer supports the 3rd optional parameter for indent level. The parameter still exists but does nothing and generates a deprecation warning.

Potentially Breaking Changes

  • The order the tests are run is no longer guaranteed. This has been the case with Inner Test cases but it's now true for all tests.
  • The order that Inner Test classes are run is no longer guaranteed.

Features

  • Issue 114 By popular demand Parameterized Tests have been added. You can now create a tests that will be run multiple times and fed a list of parameters. (This feature opened up a giant can of worms for logging which led to more cans and more worms.)
  • Added Memory Management tools.
    • Logging of orphan counts.
    • Warnings for children added to tests that are not freed.
    • New assert: assert_no_new_orphans
    • New utility methods: autofree, autoqfree, add_child_autofree, add_child_autoqfree.
  • Issue 168 Added "user directory" file viewer to additional options for viewing logs on a device. See Running on Devices
  • Issue 167 Added more areas where filenames are printed when printing objects.
  • Redesigned logging to be more consistent across the GUT control, terminal, and Godot console (here be the cans and worms).
  • Can now set the font (from a few choices), font size, font color, and the background color!
  • Some GUI tweaks.

Bug Fixes

  • Thanks to hilfazer for contributing a PR that addressed most of the memory leaks in GUT. This PR also inspired most of the new Memory Management features.

Relevant Wiki Links

Gut - 6.8.3

Published by bitwes over 4 years ago

6.8.3

Features

  • Added filename and inner class paths to "expected" and "got" values in asserts. For example you'll see [Node:1234](my_script.gd) now instead of just [Node:1234]. Types are also included where appropriate. For example Color(1,1,1,1) instead of (1,1,1,1) but strings and numbers aren't changed.
  • Text is now wrapped in the display. If you hate it let me know and I'll add a flag.

Bug Fixes

  • Xrayez found an issue with the signal watcher in 3.2.2 and fixed it.
  • Issue 147 Some built-ins could not be doubled because the underlying class starts with an underscore. This was discovered for File. These are now detected and handled.
  • Issue 149 Using assert_almost_eq no longer breaks all the beautiful colors in the display.
  • Issue 157/160 GDScript templates used for doubling now have a .txt extension instead of .gd. This was causing issues with warnings and exporting tests. If you want to export your tests you must now include *.txt files. A warning was added if the templates are missing.
Gut - 6.8.2

Published by bitwes over 4 years ago

6.8.2

Features

  • Issue 113 ssd71 added asserts assert_connected and assert_not_connected which allow you to assert an object is connected to a signal.
  • Added some colors to the console output. This is disabled by default in the editor and enabled by default at the command line. The colors don't work in the Godot console. Each has options to enable/disable them.
  • Issue 138 Added assert_typeof and assert_not_typeof.
  • Doubles are now created in memmory instead of creating temporary files. This does not change how they are used, just how they are created on the backend.

Bug Fixes

  • When running a single Inner Class GUT generated a lot of ERROR: get_as_ratio: Cannot get ratio when minimum and maximum value are equal. due to changes in 3.2. These have been corrected.
  • Cleaned up some warnings.
Gut - Version 6.8.1

Published by bitwes over 4 years ago

6.8.1

Features

  • Godot 3.2 (RC 1 at least) compatible.
  • Issue 124 CodeDarigan added the assert_freed and assert_not_freed methods.
  • Issue 130 GUT now lists the exact line number of a failing test in all cases instead of just the method number in non-inner classes. Thanks to mschulzeLpz for adding get_stack magic.
  • Issue 133 You can now double/partial_double/stub/spy Native classes like Node2D and Raycast2D. Syntax is the same.
  • Issue 139 There are now pre and post run script hooks that allow you to run your own code before any tests are run and after all tests are run. This can be useful in setting global values before a run or investigating the results of the run for CICD pipelines and the like. Check the wiki for more info

Bug Fixes

  • Issue 127 The method ignore_method_when_doubling was added as a workaround for doubling scripts that have static methods. The Doubles wiki page has more info about this method.
  • Issue 136 Bug can happen when yielding where a attempt to disconnect signal...while emitting can occur. Disconnecting from signals is now done via call_deferred.
Gut - Version 6.8.0

Published by bitwes over 5 years ago

6.8.0

Features

  • Issue 98 Added Stubbing method to_call_super so that you can force a doubled object to call its super method instead of being stubbed out.
  • Added Stubbing method to_do_nothing. This allows you to be a little more deliberate in your stubbing and is more readable than to_return(null) which is basically all it does. It also suppresses un-stubbed method messages.
  • Issue 115 Partial doubles can now be created with the partial_double method. This will give you an object that has all of its methods stubbed to_call_super. So it will act the same as a normal object, but you can spy and stub methods on it as well.
  • Experimental FULL doubling is now working in Godot 3.1.
  • Experimental FULL doubling now stubs all supported built-ins to_call_super under the covers. This means you can stub methods you haven't overloaded in your class (before you could only spy on them).
  • Issue 105 Added -gexit_on_success option to the command line to only exit if all tests passed.
  • Added get_version method to Gut.gd.

Bug Fixes

  • Housekeeping, typos and some unused variables.
  • Issue 108 Maximize doesn't move back to 0,0.
  • Xrayez fixed Issue 109.
  • Issue 117 The Spying related methods now fail if you don't pass an array for the list of expected parameters. Something I forgot about when making "TDD and P O N G" episode 2. You can watch it and enjoy me forgetting how to use my own tool.
  • Exporting tests in 3.1 appears to be working now. Could not reproduce original issue.
  • Issue 111 Tests are now sorted.
Gut - v6.7.0

Published by bitwes over 5 years ago

6.7.0

Upgrade Instructions

  • It is not required, but you should remove the existing Gut node for any scenes you have that use it and then re-add it and re-configure it. Re-adding will get rid of the caution symbol next to the control (this is due to changes in inheritance, Gut changed from a WindowDialog to a Control)
  • For the command line, note that the log option in the .gutconfig.json file has changed to log_level for consistency.

Features

  • 3.1 Compatible (with a few very minor issues, check them out here.)
  • Issue 73 You can now export your tests and run them in your exported game! This means you can run your tests on all the platforms that Godot supports through the executable...no editor, no nothing! Check out the Export Tests wiki page for more information.
  • Issue 102 Added get_call_parameters which allows you to get the parameters sent to a call to a doubled method. It returns the most recent call by default but you can specify an optional index as well.
  • Issue 103 Added replace_node which allows you to replace a node in a scene with another node by specifying the node path. This makes testing scenes that use the $ syntax to get a reference to a child node easier to test by giving you a quick way to inject a double of any child node. The node that was replaced is freed with queue_free
  • A brand new GUI. It looks a lot like the old GUI but it is new. With the ability to export tests I wanted the GUI to be more mobile friendly. So I threw the old one out (which was a relic of the days when Gut was one script...the old GUI was made entirely with code) and created a scene which will make GUI changes soooo much easier going forward.
  • -gprint_gutconfig_sample command line option will print you a full config file that you can start using.

Fixes/Improvements

  • Issue 104 Added all missing settings to the gutconfig file.
    • For consistency the log option in the .gutconfig changed to log_level.
  • Improved logging. More warnings and errors have been added to help when something goes wrong inside Gut. The number of Gut related errors, warnings, and deprecated methods are listed in the summary. If you don't see any listed, there aren't any.
  • A lot of housekeeping and Boy Scouting.

Removals

  • You can no longer set the selected script when adding scripts one by one via add_script. If you pass a 2nd parameter an error is generated, but everything will continue to run.
  • Deprecated the following methods:
    • end_test and the old gut.end_yielded_test. These no longer need to be called.
    • assert_get_set_methods was replaced with assert_accessors awhile ago. In this release I added deprecation messages for this method. It still works, but wanted to start getting the message out.
    • assert_extends has been replaced with assert_is to match the 3.0 names.
  • Stop button was removed. It didn't really work that well anyhow. I could be convinced to put it back.