summaryrefslogtreecommitdiff
path: root/addons/gut/gui
diff options
context:
space:
mode:
authorSophia Pearson <codergal89@gmail.com>2022-10-03 22:22:50 +0200
committerSophia Pearson <codergal89@gmail.com>2022-10-04 22:18:18 +0200
commite127ad39e742396030352240d829bc903b1d4464 (patch)
tree10cc21d70bf13181aef7c8ad0344077ff63579a3 /addons/gut/gui
parentddbb045f6387a8ba23b1210b27a745516a387a52 (diff)
downloadtexty-e127ad39e742396030352240d829bc903b1d4464.tar.xz
texty-e127ad39e742396030352240d829bc903b1d4464.zip
godot: inital Godot 4 migration
Diffstat (limited to 'addons/gut/gui')
-rw-r--r--addons/gut/gui/BottomPanelShortcuts.gd82
-rw-r--r--addons/gut/gui/BottomPanelShortcuts.tscn232
-rw-r--r--addons/gut/gui/GutBottomPanel.gd370
-rw-r--r--addons/gut/gui/GutBottomPanel.tscn385
-rw-r--r--addons/gut/gui/GutRunner.gd95
-rw-r--r--addons/gut/gui/GutRunner.tscn9
-rw-r--r--addons/gut/gui/GutSceneTheme.tres11
-rw-r--r--addons/gut/gui/OutputText.gd291
-rw-r--r--addons/gut/gui/OutputText.tscn123
-rw-r--r--addons/gut/gui/RunAtCursor.gd153
-rw-r--r--addons/gut/gui/RunAtCursor.tscn80
-rw-r--r--addons/gut/gui/RunResults.gd509
-rw-r--r--addons/gut/gui/RunResults.tscn165
-rw-r--r--addons/gut/gui/Settings.tscn7
-rw-r--r--addons/gut/gui/ShortcutButton.gd164
-rw-r--r--addons/gut/gui/ShortcutButton.tscn80
-rw-r--r--addons/gut/gui/arrow.png3
-rw-r--r--addons/gut/gui/arrow.png.import35
-rw-r--r--addons/gut/gui/gut_config_gui.gd411
-rw-r--r--addons/gut/gui/play.png3
-rw-r--r--addons/gut/gui/play.png.import35
-rw-r--r--addons/gut/gui/script_text_editor_controls.gd230
22 files changed, 0 insertions, 3473 deletions
diff --git a/addons/gut/gui/BottomPanelShortcuts.gd b/addons/gut/gui/BottomPanelShortcuts.gd
deleted file mode 100644
index 86fbf8d..0000000
--- a/addons/gut/gui/BottomPanelShortcuts.gd
+++ /dev/null
@@ -1,82 +0,0 @@
-tool
-extends WindowDialog
-
-onready var _ctrls = {
- run_all = $Layout/CRunAll/ShortcutButton,
- run_current_script = $Layout/CRunCurrentScript/ShortcutButton,
- run_current_inner = $Layout/CRunCurrentInner/ShortcutButton,
- run_current_test = $Layout/CRunCurrentTest/ShortcutButton,
- panel_button = $Layout/CPanelButton/ShortcutButton,
-}
-
-func _ready():
- for key in _ctrls:
- var sc_button = _ctrls[key]
- sc_button.connect('start_edit', self, '_on_edit_start', [sc_button])
- sc_button.connect('end_edit', self, '_on_edit_end')
-
-
- # show dialog when running scene from editor.
- if(get_parent() == get_tree().root):
- popup_centered()
-
-# ------------
-# Events
-# ------------
-func _on_Hide_pressed():
- hide()
-
-func _on_edit_start(which):
- for key in _ctrls:
- var sc_button = _ctrls[key]
- if(sc_button != which):
- sc_button.disable_set(true)
- sc_button.disable_clear(true)
-
-func _on_edit_end():
- for key in _ctrls:
- var sc_button = _ctrls[key]
- sc_button.disable_set(false)
- sc_button.disable_clear(false)
-
-# ------------
-# Public
-# ------------
-func get_run_all():
- return _ctrls.run_all.get_shortcut()
-
-func get_run_current_script():
- return _ctrls.run_current_script.get_shortcut()
-
-func get_run_current_inner():
- return _ctrls.run_current_inner.get_shortcut()
-
-func get_run_current_test():
- return _ctrls.run_current_test.get_shortcut()
-
-func get_panel_button():
- return _ctrls.panel_button.get_shortcut()
-
-
-func save_shortcuts(path):
- var f = ConfigFile.new()
-
- f.set_value('main', 'run_all', _ctrls.run_all.get_shortcut())
- f.set_value('main', 'run_current_script', _ctrls.run_current_script.get_shortcut())
- f.set_value('main', 'run_current_inner', _ctrls.run_current_inner.get_shortcut())
- f.set_value('main', 'run_current_test', _ctrls.run_current_test.get_shortcut())
- f.set_value('main', 'panel_button', _ctrls.panel_button.get_shortcut())
-
- f.save(path)
-
-
-func load_shortcuts(path):
- var emptyShortcut = ShortCut.new()
- var f = ConfigFile.new()
- f.load(path)
-
- _ctrls.run_all.set_shortcut(f.get_value('main', 'run_all', emptyShortcut))
- _ctrls.run_current_script.set_shortcut(f.get_value('main', 'run_current_script', emptyShortcut))
- _ctrls.run_current_inner.set_shortcut(f.get_value('main', 'run_current_inner', emptyShortcut))
- _ctrls.run_current_test.set_shortcut(f.get_value('main', 'run_current_test', emptyShortcut))
- _ctrls.panel_button.set_shortcut(f.get_value('main', 'panel_button', emptyShortcut))
diff --git a/addons/gut/gui/BottomPanelShortcuts.tscn b/addons/gut/gui/BottomPanelShortcuts.tscn
deleted file mode 100644
index 5e2e5d9..0000000
--- a/addons/gut/gui/BottomPanelShortcuts.tscn
+++ /dev/null
@@ -1,232 +0,0 @@
-[gd_scene load_steps=3 format=2]
-
-[ext_resource path="res://addons/gut/gui/ShortcutButton.tscn" type="PackedScene" id=1]
-[ext_resource path="res://addons/gut/gui/BottomPanelShortcuts.gd" type="Script" id=2]
-
-[node name="BottomPanelShortcuts" type="WindowDialog"]
-visible = true
-anchor_right = 0.234
-anchor_bottom = 0.328
-margin_right = 195.384
-margin_bottom = 62.2
-rect_min_size = Vector2( 435, 305 )
-popup_exclusive = true
-window_title = "GUT Shortcuts"
-resizable = true
-script = ExtResource( 2 )
-__meta__ = {
-"_edit_use_anchors_": false
-}
-
-[node name="Layout" type="VBoxContainer" parent="."]
-anchor_right = 1.0
-anchor_bottom = 1.0
-margin_left = 5.0
-margin_right = -5.0
-margin_bottom = 2.0
-__meta__ = {
-"_edit_use_anchors_": false
-}
-
-[node name="TopPad" type="CenterContainer" parent="Layout"]
-margin_right = 425.0
-margin_bottom = 5.0
-rect_min_size = Vector2( 0, 5 )
-
-[node name="Label2" type="Label" parent="Layout"]
-margin_top = 9.0
-margin_right = 425.0
-margin_bottom = 29.0
-rect_min_size = Vector2( 0, 20 )
-text = "Always Active"
-align = 1
-valign = 1
-autowrap = true
-
-[node name="ColorRect" type="ColorRect" parent="Layout/Label2"]
-show_behind_parent = true
-anchor_right = 1.0
-anchor_bottom = 1.0
-color = Color( 0, 0, 0, 0.196078 )
-__meta__ = {
-"_edit_use_anchors_": false
-}
-
-[node name="CPanelButton" type="HBoxContainer" parent="Layout"]
-margin_top = 33.0
-margin_right = 425.0
-margin_bottom = 58.0
-
-[node name="Label" type="Label" parent="Layout/CPanelButton"]
-margin_right = 138.0
-margin_bottom = 25.0
-rect_min_size = Vector2( 50, 0 )
-size_flags_vertical = 7
-text = "Show/Hide GUT Panel"
-valign = 1
-
-[node name="ShortcutButton" parent="Layout/CPanelButton" instance=ExtResource( 1 )]
-anchor_right = 0.0
-anchor_bottom = 0.0
-margin_left = 142.0
-margin_right = 425.0
-margin_bottom = 25.0
-size_flags_horizontal = 3
-
-[node name="GutPanelPad" type="CenterContainer" parent="Layout"]
-margin_top = 62.0
-margin_right = 425.0
-margin_bottom = 67.0
-rect_min_size = Vector2( 0, 5 )
-
-[node name="Label" type="Label" parent="Layout"]
-margin_top = 71.0
-margin_right = 425.0
-margin_bottom = 91.0
-rect_min_size = Vector2( 0, 20 )
-text = "Only Active When GUT Panel Shown"
-align = 1
-valign = 1
-autowrap = true
-
-[node name="ColorRect2" type="ColorRect" parent="Layout/Label"]
-show_behind_parent = true
-anchor_right = 1.0
-anchor_bottom = 1.0
-color = Color( 0, 0, 0, 0.196078 )
-__meta__ = {
-"_edit_use_anchors_": false
-}
-
-[node name="TopPad2" type="CenterContainer" parent="Layout"]
-margin_top = 95.0
-margin_right = 425.0
-margin_bottom = 100.0
-rect_min_size = Vector2( 0, 5 )
-
-[node name="CRunAll" type="HBoxContainer" parent="Layout"]
-margin_top = 104.0
-margin_right = 425.0
-margin_bottom = 129.0
-
-[node name="Label" type="Label" parent="Layout/CRunAll"]
-margin_right = 50.0
-margin_bottom = 25.0
-rect_min_size = Vector2( 50, 0 )
-size_flags_vertical = 7
-text = "Run All"
-valign = 1
-
-[node name="ShortcutButton" parent="Layout/CRunAll" instance=ExtResource( 1 )]
-anchor_right = 0.0
-anchor_bottom = 0.0
-margin_left = 54.0
-margin_right = 425.0
-margin_bottom = 25.0
-size_flags_horizontal = 3
-
-[node name="CRunCurrentScript" type="HBoxContainer" parent="Layout"]
-margin_top = 133.0
-margin_right = 425.0
-margin_bottom = 158.0
-
-[node name="Label" type="Label" parent="Layout/CRunCurrentScript"]
-margin_right = 115.0
-margin_bottom = 25.0
-rect_min_size = Vector2( 50, 0 )
-size_flags_vertical = 7
-text = "Run Current Script"
-valign = 1
-
-[node name="ShortcutButton" parent="Layout/CRunCurrentScript" instance=ExtResource( 1 )]
-anchor_right = 0.0
-anchor_bottom = 0.0
-margin_left = 119.0
-margin_right = 425.0
-margin_bottom = 25.0
-size_flags_horizontal = 3
-
-[node name="CRunCurrentInner" type="HBoxContainer" parent="Layout"]
-margin_top = 162.0
-margin_right = 425.0
-margin_bottom = 187.0
-
-[node name="Label" type="Label" parent="Layout/CRunCurrentInner"]
-margin_right = 150.0
-margin_bottom = 25.0
-rect_min_size = Vector2( 50, 0 )
-size_flags_vertical = 7
-text = "Run Current Inner Class"
-valign = 1
-
-[node name="ShortcutButton" parent="Layout/CRunCurrentInner" instance=ExtResource( 1 )]
-anchor_right = 0.0
-anchor_bottom = 0.0
-margin_left = 154.0
-margin_right = 425.0
-margin_bottom = 25.0
-size_flags_horizontal = 3
-
-[node name="CRunCurrentTest" type="HBoxContainer" parent="Layout"]
-margin_top = 191.0
-margin_right = 425.0
-margin_bottom = 216.0
-
-[node name="Label" type="Label" parent="Layout/CRunCurrentTest"]
-margin_right = 106.0
-margin_bottom = 25.0
-rect_min_size = Vector2( 50, 0 )
-size_flags_vertical = 7
-text = "Run Current Test"
-valign = 1
-
-[node name="ShortcutButton" parent="Layout/CRunCurrentTest" instance=ExtResource( 1 )]
-anchor_right = 0.0
-anchor_bottom = 0.0
-margin_left = 110.0
-margin_right = 425.0
-margin_bottom = 25.0
-size_flags_horizontal = 3
-
-[node name="CenterContainer2" type="CenterContainer" parent="Layout"]
-margin_top = 220.0
-margin_right = 425.0
-margin_bottom = 241.0
-rect_min_size = Vector2( 0, 5 )
-size_flags_horizontal = 3
-size_flags_vertical = 3
-
-[node name="ShiftDisclaimer" type="Label" parent="Layout"]
-margin_top = 245.0
-margin_right = 425.0
-margin_bottom = 259.0
-text = "\"Shift\" cannot be the only modifier for a shortcut."
-align = 2
-autowrap = true
-
-[node name="HBoxContainer" type="HBoxContainer" parent="Layout"]
-margin_top = 263.0
-margin_right = 425.0
-margin_bottom = 293.0
-
-[node name="CenterContainer" type="CenterContainer" parent="Layout/HBoxContainer"]
-margin_right = 361.0
-margin_bottom = 30.0
-size_flags_horizontal = 3
-size_flags_vertical = 3
-
-[node name="Hide" type="Button" parent="Layout/HBoxContainer"]
-margin_left = 365.0
-margin_right = 425.0
-margin_bottom = 30.0
-rect_min_size = Vector2( 60, 30 )
-text = "Close"
-
-[node name="BottomPad" type="CenterContainer" parent="Layout"]
-margin_top = 297.0
-margin_right = 425.0
-margin_bottom = 307.0
-rect_min_size = Vector2( 0, 10 )
-size_flags_horizontal = 3
-
-[connection signal="pressed" from="Layout/HBoxContainer/Hide" to="." method="_on_Hide_pressed"]
diff --git a/addons/gut/gui/GutBottomPanel.gd b/addons/gut/gui/GutBottomPanel.gd
deleted file mode 100644
index e7b5037..0000000
--- a/addons/gut/gui/GutBottomPanel.gd
+++ /dev/null
@@ -1,370 +0,0 @@
-tool
-extends Control
-
-const RUNNER_JSON_PATH = 'res://.gut_editor_config.json'
-const RESULT_FILE = 'user://.gut_editor.bbcode'
-const RESULT_JSON = 'user://.gut_editor.json'
-const SHORTCUTS_PATH = 'res://.gut_editor_shortcuts.cfg'
-
-var TestScript = load('res://addons/gut/test.gd')
-var GutConfigGui = load('res://addons/gut/gui/gut_config_gui.gd')
-var ScriptTextEditors = load('res://addons/gut/gui/script_text_editor_controls.gd')
-
-var _interface = null;
-var _is_running = false;
-var _gut_config = load('res://addons/gut/gut_config.gd').new()
-var _gut_config_gui = null
-var _gut_plugin = null
-var _light_color = Color(0, 0, 0, .5)
-var _panel_button = null
-var _last_selected_path = null
-
-
-onready var _ctrls = {
- output = $layout/RSplit/CResults/Tabs/OutputText.get_rich_text_edit(),
- output_ctrl = $layout/RSplit/CResults/Tabs/OutputText,
- run_button = $layout/ControlBar/RunAll,
- shortcuts_button = $layout/ControlBar/Shortcuts,
-
- settings_button = $layout/ControlBar/Settings,
- run_results_button = $layout/ControlBar/RunResultsBtn,
- output_button = $layout/ControlBar/OutputBtn,
-
- settings = $layout/RSplit/sc/Settings,
- shortcut_dialog = $BottomPanelShortcuts,
- light = $layout/RSplit/CResults/ControlBar/Light,
- results = {
- bar = $layout/RSplit/CResults/ControlBar,
- passing = $layout/RSplit/CResults/ControlBar/Passing/value,
- failing = $layout/RSplit/CResults/ControlBar/Failing/value,
- pending = $layout/RSplit/CResults/ControlBar/Pending/value,
- errors = $layout/RSplit/CResults/ControlBar/Errors/value,
- warnings = $layout/RSplit/CResults/ControlBar/Warnings/value,
- orphans = $layout/RSplit/CResults/ControlBar/Orphans/value
- },
- run_at_cursor = $layout/ControlBar/RunAtCursor,
- run_results = $layout/RSplit/CResults/Tabs/RunResults
-}
-
-
-func _init():
- _gut_config.load_panel_options(RUNNER_JSON_PATH)
-
-
-func _ready():
- _ctrls.results.bar.connect('draw', self, '_on_results_bar_draw', [_ctrls.results.bar])
- hide_settings(!_ctrls.settings_button.pressed)
- _gut_config_gui = GutConfigGui.new(_ctrls.settings)
- _gut_config_gui.set_options(_gut_config.options)
-
- _apply_options_to_controls()
-
- _ctrls.shortcuts_button.icon = get_icon('ShortCut', 'EditorIcons')
- _ctrls.settings_button.icon = get_icon('Tools', 'EditorIcons')
- _ctrls.run_results_button.icon = get_icon('AnimationTrackGroup', 'EditorIcons') # Tree
- _ctrls.output_button.icon = get_icon('Font', 'EditorIcons')
-
- _ctrls.run_results.set_output_control(_ctrls.output_ctrl)
- _ctrls.run_results.set_font(
- _gut_config.options.panel_options.font_name,
- _gut_config.options.panel_options.font_size)
-
- var check_import = load('res://addons/gut/images/red.png')
- if(check_import == null):
- _ctrls.run_results.add_centered_text("GUT got some new images that are not imported yet. Please restart Godot.")
- print('GUT got some new images that are not imported yet. Please restart Godot.')
- else:
- _ctrls.run_results.add_centered_text("Let's run some tests!")
-
-
-func _apply_options_to_controls():
- hide_settings(_gut_config.options.panel_options.hide_settings)
- hide_result_tree(_gut_config.options.panel_options.hide_result_tree)
- hide_output_text(_gut_config.options.panel_options.hide_output_text)
-
- _ctrls.output_ctrl.set_use_colors(_gut_config.options.panel_options.use_colors)
- _ctrls.output_ctrl.set_all_fonts(_gut_config.options.panel_options.font_name)
- _ctrls.output_ctrl.set_font_size(_gut_config.options.panel_options.font_size)
-
- _ctrls.run_results.set_font(
- _gut_config.options.panel_options.font_name,
- _gut_config.options.panel_options.font_size)
- _ctrls.run_results.set_show_orphans(!_gut_config.options.hide_orphans)
-
-
-func _process(delta):
- if(_is_running):
- if(!_interface.is_playing_scene()):
- _is_running = false
- _ctrls.output_ctrl.add_text("\ndone")
- load_result_output()
- _gut_plugin.make_bottom_panel_item_visible(self)
-
-# ---------------
-# Private
-# ---------------
-
-func load_shortcuts():
- _ctrls.shortcut_dialog.load_shortcuts(SHORTCUTS_PATH)
- _apply_shortcuts()
-
-
-func _is_test_script(script):
- var from = script.get_base_script()
- while(from and from.resource_path != 'res://addons/gut/test.gd'):
- from = from.get_base_script()
-
- return from != null
-
-
-func _show_errors(errs):
- _ctrls.output_ctrl.clear()
- var text = "Cannot run tests, you have a configuration error:\n"
- for e in errs:
- text += str('* ', e, "\n")
- text += "Check your settings ----->"
- _ctrls.output_ctrl.add_text(text)
- hide_output_text(false)
- hide_settings(false)
-
-
-func _save_config():
- _gut_config.options = _gut_config_gui.get_options(_gut_config.options)
- _gut_config.options.panel_options.hide_settings = !_ctrls.settings_button.pressed
- _gut_config.options.panel_options.hide_result_tree = !_ctrls.run_results_button.pressed
- _gut_config.options.panel_options.hide_output_text = !_ctrls.output_button.pressed
- _gut_config.options.panel_options.use_colors = _ctrls.output_ctrl.get_use_colors()
-
- var w_result = _gut_config.write_options(RUNNER_JSON_PATH)
- if(w_result != OK):
- push_error(str('Could not write options to ', RUNNER_JSON_PATH, ': ', w_result))
- return;
-
-
-func _run_tests():
- var issues = _gut_config_gui.get_config_issues()
- if(issues.size() > 0):
- _show_errors(issues)
- return
-
- write_file(RESULT_FILE, 'Run in progress')
- _save_config()
- _apply_options_to_controls()
-
- _ctrls.output_ctrl.clear()
- _ctrls.run_results.clear()
- _ctrls.run_results.add_centered_text('Running...')
-
- _interface.play_custom_scene('res://addons/gut/gui/GutRunner.tscn')
- _is_running = true
- _ctrls.output_ctrl.add_text('Running...')
-
-
-func _apply_shortcuts():
- _ctrls.run_button.shortcut = _ctrls.shortcut_dialog.get_run_all()
-
- _ctrls.run_at_cursor.get_script_button().shortcut = \
- _ctrls.shortcut_dialog.get_run_current_script()
- _ctrls.run_at_cursor.get_inner_button().shortcut = \
- _ctrls.shortcut_dialog.get_run_current_inner()
- _ctrls.run_at_cursor.get_test_button().shortcut = \
- _ctrls.shortcut_dialog.get_run_current_test()
-
- _panel_button.shortcut = _ctrls.shortcut_dialog.get_panel_button()
-
-
-func _run_all():
- _gut_config.options.selected = null
- _gut_config.options.inner_class = null
- _gut_config.options.unit_test_name = null
-
- _run_tests()
-
-
-# ---------------
-# Events
-# ---------------
-func _on_results_bar_draw(bar):
- bar.draw_rect(Rect2(Vector2(0, 0), bar.rect_size), Color(0, 0, 0, .2))
-
-
-func _on_Light_draw():
- var l = _ctrls.light
- l.draw_circle(Vector2(l.rect_size.x / 2, l.rect_size.y / 2), l.rect_size.x / 2, _light_color)
-
-
-func _on_editor_script_changed(script):
- if(script):
- set_current_script(script)
-
-
-func _on_RunAll_pressed():
- _run_all()
-
-
-func _on_Shortcuts_pressed():
- _ctrls.shortcut_dialog.popup_centered()
-
-
-func _on_BottomPanelShortcuts_popup_hide():
- _apply_shortcuts()
- _ctrls.shortcut_dialog.save_shortcuts(SHORTCUTS_PATH)
-
-
-func _on_RunAtCursor_run_tests(what):
- _gut_config.options.selected = what.script
- _gut_config.options.inner_class = what.inner_class
- _gut_config.options.unit_test_name = what.test_method
-
- _run_tests()
-
-
-func _on_Settings_pressed():
- hide_settings(!_ctrls.settings_button.pressed)
- _save_config()
-
-
-func _on_OutputBtn_pressed():
- hide_output_text(!_ctrls.output_button.pressed)
- _save_config()
-
-
-func _on_RunResultsBtn_pressed():
- hide_result_tree(! _ctrls.run_results_button.pressed)
- _save_config()
-
-
-# Currently not used, but will be when I figure out how to put
-# colors into the text results
-func _on_UseColors_pressed():
- pass
-
-# ---------------
-# Public
-# ---------------
-func hide_result_tree(should):
- _ctrls.run_results.visible = !should
- _ctrls.run_results_button.pressed = !should
-
-
-func hide_settings(should):
- var s_scroll = _ctrls.settings.get_parent()
- s_scroll.visible = !should
-
- # collapse only collapses the first control, so we move
- # settings around to be the collapsed one
- if(should):
- s_scroll.get_parent().move_child(s_scroll, 0)
- else:
- s_scroll.get_parent().move_child(s_scroll, 1)
-
- $layout/RSplit.collapsed = should
- _ctrls.settings_button.pressed = !should
-
-
-func hide_output_text(should):
- $layout/RSplit/CResults/Tabs/OutputText.visible = !should
- _ctrls.output_button.pressed = !should
-
-
-func load_result_output():
- _ctrls.output_ctrl.load_file(RESULT_FILE)
-
- var summary = get_file_as_text(RESULT_JSON)
- var results = JSON.parse(summary)
- if(results.error != OK):
- return
-
- _ctrls.run_results.load_json_results(results.result)
-
- var summary_json = results.result['test_scripts']['props']
- _ctrls.results.passing.text = str(summary_json.passing)
- _ctrls.results.passing.get_parent().visible = true
-
- _ctrls.results.failing.text = str(summary_json.failures)
- _ctrls.results.failing.get_parent().visible = true
-
- _ctrls.results.pending.text = str(summary_json.pending)
- _ctrls.results.pending.get_parent().visible = _ctrls.results.pending.text != '0'
-
- _ctrls.results.errors.text = str(summary_json.errors)
- _ctrls.results.errors.get_parent().visible = _ctrls.results.errors.text != '0'
-
- _ctrls.results.warnings.text = str(summary_json.warnings)
- _ctrls.results.warnings.get_parent().visible = _ctrls.results.warnings.text != '0'
-
- _ctrls.results.orphans.text = str(summary_json.orphans)
- _ctrls.results.orphans.get_parent().visible = _ctrls.results.orphans.text != '0' and !_gut_config.options.hide_orphans
-
- if(summary_json.tests == 0):
- _light_color = Color(1, 0, 0, .75)
- elif(summary_json.failures != 0):
- _light_color = Color(1, 0, 0, .75)
- elif(summary_json.pending != 0):
- _light_color = Color(1, 1, 0, .75)
- else:
- _light_color = Color(0, 1, 0, .75)
- _ctrls.light.visible = true
- _ctrls.light.update()
-
-
-func set_current_script(script):
- if(script):
- if(_is_test_script(script)):
- var file = script.resource_path.get_file()
- _last_selected_path = script.resource_path.get_file()
- _ctrls.run_at_cursor.activate_for_script(script.resource_path)
-
-
-func set_interface(value):
- _interface = value
- _interface.get_script_editor().connect("editor_script_changed", self, '_on_editor_script_changed')
-
- var ste = ScriptTextEditors.new(_interface.get_script_editor())
- _ctrls.run_results.set_interface(_interface)
- _ctrls.run_results.set_script_text_editors(ste)
- _ctrls.run_at_cursor.set_script_text_editors(ste)
- set_current_script(_interface.get_script_editor().get_current_script())
-
-
-func set_plugin(value):
- _gut_plugin = value
-
-
-func set_panel_button(value):
- _panel_button = value
-
-# ------------------------------------------------------------------------------
-# Write a file.
-# ------------------------------------------------------------------------------
-func write_file(path, content):
- var f = File.new()
- var result = f.open(path, f.WRITE)
- if(result == OK):
- f.store_string(content)
- f.close()
- return result
-
-
-# ------------------------------------------------------------------------------
-# Returns the text of a file or an empty string if the file could not be opened.
-# ------------------------------------------------------------------------------
-func get_file_as_text(path):
- var to_return = ''
- var f = File.new()
- var result = f.open(path, f.READ)
- if(result == OK):
- to_return = f.get_as_text()
- f.close()
- return to_return
-
-
-# ------------------------------------------------------------------------------
-# return if_null if value is null otherwise return value
-# ------------------------------------------------------------------------------
-func nvl(value, if_null):
- if(value == null):
- return if_null
- else:
- return value
-
diff --git a/addons/gut/gui/GutBottomPanel.tscn b/addons/gut/gui/GutBottomPanel.tscn
deleted file mode 100644
index 7ec6649..0000000
--- a/addons/gut/gui/GutBottomPanel.tscn
+++ /dev/null
@@ -1,385 +0,0 @@
-[gd_scene load_steps=11 format=2]
-
-[ext_resource path="res://addons/gut/gui/GutBottomPanel.gd" type="Script" id=1]
-[ext_resource path="res://addons/gut/gui/BottomPanelShortcuts.tscn" type="PackedScene" id=2]
-[ext_resource path="res://addons/gut/gui/RunAtCursor.tscn" type="PackedScene" id=3]
-[ext_resource path="res://addons/gut/gui/play.png" type="Texture" id=4]
-[ext_resource path="res://addons/gut/gui/RunResults.tscn" type="PackedScene" id=5]
-[ext_resource path="res://addons/gut/gui/OutputText.tscn" type="PackedScene" id=6]
-
-[sub_resource type="InputEventKey" id=8]
-control = true
-scancode = 49
-
-[sub_resource type="ShortCut" id=9]
-shortcut = SubResource( 8 )
-
-[sub_resource type="Image" id=10]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "LumAlpha8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=2]
-flags = 4
-flags = 4
-image = SubResource( 10 )
-size = Vector2( 16, 16 )
-
-[node name="GutBottomPanel" type="Control"]
-anchor_left = -0.0025866
-anchor_top = -0.00176575
-anchor_right = 0.997413
-anchor_bottom = 0.998234
-margin_left = 2.64868
-margin_top = 1.05945
-margin_right = 2.64862
-margin_bottom = 1.05945
-rect_min_size = Vector2( 0, 300 )
-script = ExtResource( 1 )
-
-[node name="layout" type="VBoxContainer" parent="."]
-anchor_right = 1.0
-anchor_bottom = 1.0
-__meta__ = {
-"_edit_use_anchors_": false
-}
-
-[node name="ControlBar" type="HBoxContainer" parent="layout"]
-margin_right = 1023.0
-margin_bottom = 40.0
-__meta__ = {
-"_edit_use_anchors_": false
-}
-
-[node name="RunAll" type="Button" parent="layout/ControlBar"]
-margin_right = 150.0
-margin_bottom = 40.0
-rect_min_size = Vector2( 150, 0 )
-hint_tooltip = "Run all test scripts in the suite."
-size_flags_vertical = 11
-shortcut = SubResource( 9 )
-text = "Run All"
-icon = ExtResource( 4 )
-__meta__ = {
-"_edit_use_anchors_": false
-}
-
-[node name="Label" type="Label" parent="layout/ControlBar"]
-margin_left = 154.0
-margin_top = 13.0
-margin_right = 213.0
-margin_bottom = 27.0
-hint_tooltip = "When a test script is edited, buttons are displayed to
-run the opened script or an Inner-Test-Class or a
-single test. The buttons change based on the location
-of the cursor in the file.
-
-These buttons will remain active when editing other
-items so that you can run tests without having to switch
-back to the test script.
-
-You can assign keyboard shortcuts for these buttons
-using the \"shortcuts\" button in the GUT panel."
-mouse_filter = 1
-text = "Current: "
-
-[node name="RunAtCursor" parent="layout/ControlBar" instance=ExtResource( 3 )]
-anchor_right = 0.0
-anchor_bottom = 0.0
-margin_left = 217.0
-margin_right = 548.0
-margin_bottom = 40.0
-rect_min_size = Vector2( 0, 40 )
-
-[node name="CenterContainer2" type="CenterContainer" parent="layout/ControlBar"]
-margin_left = 552.0
-margin_right = 883.0
-margin_bottom = 40.0
-size_flags_horizontal = 3
-
-[node name="Sep1" type="ColorRect" parent="layout/ControlBar"]
-margin_left = 887.0
-margin_right = 889.0
-margin_bottom = 40.0
-rect_min_size = Vector2( 2, 0 )
-
-[node name="RunResultsBtn" type="ToolButton" parent="layout/ControlBar"]
-margin_left = 893.0
-margin_right = 921.0
-margin_bottom = 40.0
-hint_tooltip = "Show/Hide Results Tree Panel."
-toggle_mode = true
-pressed = true
-icon = SubResource( 2 )
-
-[node name="OutputBtn" type="ToolButton" parent="layout/ControlBar"]
-margin_left = 925.0
-margin_right = 953.0
-margin_bottom = 40.0
-hint_tooltip = "Show/Hide Output Panel."
-toggle_mode = true
-pressed = true
-icon = SubResource( 2 )
-
-[node name="Settings" type="ToolButton" parent="layout/ControlBar"]
-margin_left = 957.0
-margin_right = 985.0
-margin_bottom = 40.0
-hint_tooltip = "Show/Hide Settings Panel."
-toggle_mode = true
-icon = SubResource( 2 )
-
-[node name="Sep2" type="ColorRect" parent="layout/ControlBar"]
-margin_left = 989.0
-margin_right = 991.0
-margin_bottom = 40.0
-rect_min_size = Vector2( 2, 0 )
-
-[node name="Shortcuts" type="ToolButton" parent="layout/ControlBar"]
-margin_left = 995.0
-margin_right = 1023.0
-margin_bottom = 40.0
-hint_tooltip = "Set shortcuts for GUT buttons. Shortcuts do not work when the GUT panel is not visible."
-size_flags_vertical = 11
-icon = SubResource( 2 )
-
-[node name="RSplit" type="HSplitContainer" parent="layout"]
-margin_top = 44.0
-margin_right = 1023.0
-margin_bottom = 599.0
-size_flags_horizontal = 3
-size_flags_vertical = 3
-collapsed = true
-
-[node name="sc" type="ScrollContainer" parent="layout/RSplit"]
-visible = false
-margin_left = 593.0
-margin_right = 1093.0
-margin_bottom = 555.0
-rect_min_size = Vector2( 500, 0 )
-mouse_filter = 1
-size_flags_vertical = 3
-
-[node name="Settings" type="VBoxContainer" parent="layout/RSplit/sc"]
-margin_right = 500.0
-margin_bottom = 908.0
-size_flags_horizontal = 3
-size_flags_vertical = 3
-
-[node name="CResults" type="VBoxContainer" parent="layout/RSplit"]
-margin_right = 1023.0
-margin_bottom = 555.0
-size_flags_horizontal = 3
-size_flags_vertical = 3
-
-[node name="ControlBar" type="HBoxContainer" parent="layout/RSplit/CResults"]
-margin_right = 1023.0
-margin_bottom = 35.0
-rect_min_size = Vector2( 0, 35 )
-
-[node name="Light" type="Control" parent="layout/RSplit/CResults/ControlBar"]
-visible = false
-margin_right = 30.0
-margin_bottom = 35.0
-rect_min_size = Vector2( 30, 30 )
-
-[node name="Passing" type="HBoxContainer" parent="layout/RSplit/CResults/ControlBar"]
-visible = false
-margin_left = 34.0
-margin_right = 107.0
-margin_bottom = 35.0
-
-[node name="Sep" type="ColorRect" parent="layout/RSplit/CResults/ControlBar/Passing"]
-margin_right = 2.0
-margin_bottom = 35.0
-rect_min_size = Vector2( 2, 0 )
-
-[node name="label" type="Label" parent="layout/RSplit/CResults/ControlBar/Passing"]
-margin_left = 6.0
-margin_top = 10.0
-margin_right = 54.0
-margin_bottom = 24.0
-text = "Passing"
-
-[node name="value" type="Label" parent="layout/RSplit/CResults/ControlBar/Passing"]
-margin_left = 58.0
-margin_top = 10.0
-margin_right = 73.0
-margin_bottom = 24.0
-text = "---"
-
-[node name="Failing" type="HBoxContainer" parent="layout/RSplit/CResults/ControlBar"]
-visible = false
-margin_left = 34.0
-margin_right = 100.0
-margin_bottom = 35.0
-
-[node name="Sep" type="ColorRect" parent="layout/RSplit/CResults/ControlBar/Failing"]
-margin_right = 2.0
-margin_bottom = 35.0
-rect_min_size = Vector2( 2, 0 )
-
-[node name="label" type="Label" parent="layout/RSplit/CResults/ControlBar/Failing"]
-margin_left = 6.0
-margin_top = 10.0
-margin_right = 47.0
-margin_bottom = 24.0
-text = "Failing"
-
-[node name="value" type="Label" parent="layout/RSplit/CResults/ControlBar/Failing"]
-margin_left = 51.0
-margin_top = 10.0
-margin_right = 66.0
-margin_bottom = 24.0
-text = "---"
-
-[node name="Pending" type="HBoxContainer" parent="layout/RSplit/CResults/ControlBar"]
-visible = false
-margin_left = 34.0
-margin_right = 110.0
-margin_bottom = 35.0
-
-[node name="Sep" type="ColorRect" parent="layout/RSplit/CResults/ControlBar/Pending"]
-margin_right = 2.0
-margin_bottom = 35.0
-rect_min_size = Vector2( 2, 0 )
-
-[node name="label" type="Label" parent="layout/RSplit/CResults/ControlBar/Pending"]
-margin_left = 6.0
-margin_top = 10.0
-margin_right = 57.0
-margin_bottom = 24.0
-text = "Pending"
-
-[node name="value" type="Label" parent="layout/RSplit/CResults/ControlBar/Pending"]
-margin_left = 61.0
-margin_top = 10.0
-margin_right = 76.0
-margin_bottom = 24.0
-text = "---"
-
-[node name="Orphans" type="HBoxContainer" parent="layout/RSplit/CResults/ControlBar"]
-visible = false
-margin_left = 34.0
-margin_right = 110.0
-margin_bottom = 35.0
-
-[node name="Sep" type="ColorRect" parent="layout/RSplit/CResults/ControlBar/Orphans"]
-margin_right = 2.0
-margin_bottom = 35.0
-rect_min_size = Vector2( 2, 0 )
-
-[node name="label" type="Label" parent="layout/RSplit/CResults/ControlBar/Orphans"]
-margin_left = 6.0
-margin_top = 10.0
-margin_right = 57.0
-margin_bottom = 24.0
-text = "Orphans"
-
-[node name="value" type="Label" parent="layout/RSplit/CResults/ControlBar/Orphans"]
-margin_left = 61.0
-margin_top = 10.0
-margin_right = 76.0
-margin_bottom = 24.0
-text = "---"
-
-[node name="Errors" type="HBoxContainer" parent="layout/RSplit/CResults/ControlBar"]
-visible = false
-margin_left = 34.0
-margin_right = 96.0
-margin_bottom = 35.0
-
-[node name="Sep" type="ColorRect" parent="layout/RSplit/CResults/ControlBar/Errors"]
-margin_right = 2.0
-margin_bottom = 35.0
-rect_min_size = Vector2( 2, 0 )
-
-[node name="label" type="Label" parent="layout/RSplit/CResults/ControlBar/Errors"]
-margin_left = 6.0
-margin_top = 10.0
-margin_right = 43.0
-margin_bottom = 24.0
-hint_tooltip = "The number of GUT errors generated. This does not include engine errors."
-text = "Errors"
-
-[node name="value" type="Label" parent="layout/RSplit/CResults/ControlBar/Errors"]
-margin_left = 47.0
-margin_top = 10.0
-margin_right = 62.0
-margin_bottom = 24.0
-text = "---"
-
-[node name="Warnings" type="HBoxContainer" parent="layout/RSplit/CResults/ControlBar"]
-visible = false
-margin_left = 34.0
-margin_right = 118.0
-margin_bottom = 35.0
-
-[node name="Sep" type="ColorRect" parent="layout/RSplit/CResults/ControlBar/Warnings"]
-margin_right = 2.0
-margin_bottom = 35.0
-rect_min_size = Vector2( 2, 0 )
-
-[node name="label" type="Label" parent="layout/RSplit/CResults/ControlBar/Warnings"]
-margin_left = 6.0
-margin_top = 10.0
-margin_right = 65.0
-margin_bottom = 24.0
-text = "Warnings"
-__meta__ = {
-"_editor_description_": "The number of GUT Warnings generated. This does not include engine warnings."
-}
-
-[node name="value" type="Label" parent="layout/RSplit/CResults/ControlBar/Warnings"]
-margin_left = 69.0
-margin_top = 10.0
-margin_right = 84.0
-margin_bottom = 24.0
-text = "---"
-
-[node name="CenterContainer" type="CenterContainer" parent="layout/RSplit/CResults/ControlBar"]
-margin_right = 1023.0
-margin_bottom = 35.0
-size_flags_horizontal = 3
-
-[node name="Tabs" type="HSplitContainer" parent="layout/RSplit/CResults"]
-margin_top = 39.0
-margin_right = 1023.0
-margin_bottom = 555.0
-size_flags_horizontal = 3
-size_flags_vertical = 3
-
-[node name="RunResults" parent="layout/RSplit/CResults/Tabs" instance=ExtResource( 5 )]
-margin_right = 505.0
-margin_bottom = 516.0
-size_flags_horizontal = 3
-size_flags_vertical = 3
-
-[node name="OutputText" parent="layout/RSplit/CResults/Tabs" instance=ExtResource( 6 )]
-margin_left = 517.0
-margin_right = 1023.0
-margin_bottom = 516.0
-
-[node name="BottomPanelShortcuts" parent="." instance=ExtResource( 2 )]
-visible = false
-anchor_left = -0.000517324
-anchor_top = 0.000882874
-anchor_right = 0.233483
-anchor_bottom = 0.328883
-margin_left = 10.0649
-margin_top = -173.752
-margin_right = 31.6969
-margin_bottom = -125.552
-
-[connection signal="pressed" from="layout/ControlBar/RunAll" to="." method="_on_RunAll_pressed"]
-[connection signal="run_tests" from="layout/ControlBar/RunAtCursor" to="." method="_on_RunAtCursor_run_tests"]
-[connection signal="pressed" from="layout/ControlBar/RunResultsBtn" to="." method="_on_RunResultsBtn_pressed"]
-[connection signal="pressed" from="layout/ControlBar/OutputBtn" to="." method="_on_OutputBtn_pressed"]
-[connection signal="pressed" from="layout/ControlBar/Settings" to="." method="_on_Settings_pressed"]
-[connection signal="pressed" from="layout/ControlBar/Shortcuts" to="." method="_on_Shortcuts_pressed"]
-[connection signal="draw" from="layout/RSplit/CResults/ControlBar/Light" to="." method="_on_Light_draw"]
-[connection signal="popup_hide" from="BottomPanelShortcuts" to="." method="_on_BottomPanelShortcuts_popup_hide"]
diff --git a/addons/gut/gui/GutRunner.gd b/addons/gut/gui/GutRunner.gd
deleted file mode 100644
index 608fc26..0000000
--- a/addons/gut/gui/GutRunner.gd
+++ /dev/null
@@ -1,95 +0,0 @@
-extends Node2D
-
-var Gut = load('res://addons/gut/gut.gd')
-var ResultExporter = load('res://addons/gut/result_exporter.gd')
-var GutConfig = load('res://addons/gut/gut_config.gd')
-
-const RUNNER_JSON_PATH = 'res://.gut_editor_config.json'
-const RESULT_FILE = 'user://.gut_editor.bbcode'
-const RESULT_JSON = 'user://.gut_editor.json'
-
-var _gut_config = null
-var _gut = null;
-var _wrote_results = false
-# Flag for when this is being used at the command line. Otherwise it is
-# assumed this is being used by the panel and being launched with
-# play_custom_scene
-var _cmdln_mode = false
-
-onready var _gut_layer = $GutLayer
-
-
-func _ready():
- if(_gut_config == null):
- _gut_config = GutConfig.new()
- _gut_config.load_panel_options(RUNNER_JSON_PATH)
-
- # The command line will call run_tests on its own. When used from the panel
- # we have to kick off the tests ourselves b/c there's no way I know of to
- # interact with the scene that was run via play_custom_scene.
- if(!_cmdln_mode):
- call_deferred('run_tests')
-
-
-func run_tests():
- if(_gut == null):
- _gut = Gut.new()
-
- _gut.set_add_children_to(self)
- if(_gut_config.options.gut_on_top):
- _gut_layer.add_child(_gut)
- else:
- add_child(_gut)
-
- if(!_cmdln_mode):
- _gut.connect('tests_finished', self, '_on_tests_finished',
- [_gut_config.options.should_exit, _gut_config.options.should_exit_on_success])
-
- _gut_config.config_gut(_gut)
- if(_gut_config.options.gut_on_top):
- _gut.get_gui().goto_bottom_right_corner()
-
- var run_rest_of_scripts = _gut_config.options.unit_test_name == ''
- _gut.test_scripts(run_rest_of_scripts)
-
-
-func _write_results():
- var content = _gut.get_logger().get_gui_bbcode()
-
- var f = File.new()
- var result = f.open(RESULT_FILE, f.WRITE)
- if(result == OK):
- f.store_string(content)
- f.close()
- else:
- print('ERROR Could not save bbcode, result = ', result)
-
- var exporter = ResultExporter.new()
- var f_result = exporter.write_json_file(_gut, RESULT_JSON)
- _wrote_results = true
-
-
-func _exit_tree():
- if(!_wrote_results and !_cmdln_mode):
- _write_results()
-
-
-func _on_tests_finished(should_exit, should_exit_on_success):
- _write_results()
-
- if(should_exit):
- get_tree().quit()
- elif(should_exit_on_success and _gut.get_fail_count() == 0):
- get_tree().quit()
-
-
-func get_gut():
- if(_gut == null):
- _gut = Gut.new()
- return _gut
-
-func set_gut_config(which):
- _gut_config = which
-
-func set_cmdln_mode(is_it):
- _cmdln_mode = is_it
diff --git a/addons/gut/gui/GutRunner.tscn b/addons/gut/gui/GutRunner.tscn
deleted file mode 100644
index 077e411..0000000
--- a/addons/gut/gui/GutRunner.tscn
+++ /dev/null
@@ -1,9 +0,0 @@
-[gd_scene load_steps=2 format=2]
-
-[ext_resource path="res://addons/gut/gui/GutRunner.gd" type="Script" id=1]
-
-[node name="GutRunner" type="Node2D"]
-script = ExtResource( 1 )
-
-[node name="GutLayer" type="CanvasLayer" parent="."]
-layer = 128
diff --git a/addons/gut/gui/GutSceneTheme.tres b/addons/gut/gui/GutSceneTheme.tres
deleted file mode 100644
index 565a6af..0000000
--- a/addons/gut/gui/GutSceneTheme.tres
+++ /dev/null
@@ -1,11 +0,0 @@
-[gd_resource type="Theme" load_steps=3 format=2]
-
-[sub_resource type="DynamicFontData" id=9]
-font_path = "res://addons/gut/fonts/AnonymousPro-Regular.ttf"
-
-[sub_resource type="DynamicFont" id=10]
-size = 14
-font_data = SubResource( 9 )
-
-[resource]
-default_font = SubResource( 10 )
diff --git a/addons/gut/gui/OutputText.gd b/addons/gut/gui/OutputText.gd
deleted file mode 100644
index e5cf2b6..0000000
--- a/addons/gut/gui/OutputText.gd
+++ /dev/null
@@ -1,291 +0,0 @@
-extends VBoxContainer
-tool
-
-class SearchResults:
- const L = TextEdit.SEARCH_RESULT_LINE
- const C = TextEdit.SEARCH_RESULT_COLUMN
-
- var positions = []
- var te = null
- var _last_term = ''
-
- func _search_te(text, start_position, flags=0):
- var start_pos = start_position
- if(start_pos[L] < 0 or start_pos[L] > te.get_line_count()):
- start_pos[L] = 0
- if(start_pos[C] < 0):
- start_pos[L] = 0
-
- var result = te.search(text, flags, start_pos[L], start_pos[C])
- if(result.size() == 2 and result[L] == start_position[L] and
- result[C] == start_position[C] and text == _last_term):
- if(flags == TextEdit.SEARCH_BACKWARDS):
- result[C] -= 1
- else:
- result[C] += 1
- result = _search_te(text, result, flags)
- elif(result.size() == 2):
- te.scroll_vertical = result[L]
- te.select(result[L], result[C], result[L], result[C] + text.length())
- te.cursor_set_column(result[C])
- te.cursor_set_line(result[L])
- te.center_viewport_to_cursor()
-
- _last_term = text
- te.center_viewport_to_cursor()
- return result
-
- func _cursor_to_pos():
- var to_return = [0, 0]
- to_return[L] = te.cursor_get_line()
- to_return[C] = te.cursor_get_column()
- return to_return
-
- func find_next(term):
- return _search_te(term, _cursor_to_pos())
-
- func find_prev(term):
- var new_pos = _search_te(term, _cursor_to_pos(), TextEdit.SEARCH_BACKWARDS)
- return new_pos
-
- func get_next_pos():
- pass
-
- func get_prev_pos():
- pass
-
- func clear():
- pass
-
- func find_all(text):
- var c_pos = [0, 0]
- var found = true
- var last_pos = [0, 0]
- positions.clear()
-
- while(found):
- c_pos = te.search(text, 0, c_pos[L], c_pos[C])
-
- if(c_pos.size() > 0 and
- (c_pos[L] > last_pos[L] or
- (c_pos[L] == last_pos[L] and c_pos[C] > last_pos[C]))):
- positions.append([c_pos[L], c_pos[C]])
- c_pos[C] += 1
- last_pos = c_pos
- else:
- found = false
-
-
-
-onready var _ctrls = {
- output = $Output,
-
- copy_button = $Toolbar/CopyButton,
- use_colors = $Toolbar/UseColors,
- clear_button = $Toolbar/ClearButton,
- word_wrap = $Toolbar/WordWrap,
- show_search = $Toolbar/ShowSearch,
-
- search_bar = {
- bar = $Search,
- search_term = $Search/SearchTerm,
- }
-}
-var _sr = SearchResults.new()
-
-func _test_running_setup():
- _ctrls.use_colors.text = 'use colors'
- _ctrls.show_search.text = 'search'
- _ctrls.word_wrap.text = 'ww'
-
- set_all_fonts("CourierPrime")
- set_font_size(20)
-
- load_file('user://.gut_editor.bbcode')
-
-
-func _ready():
- _sr.te = _ctrls.output
- _ctrls.use_colors.icon = get_icon('RichTextEffect', 'EditorIcons')
- _ctrls.show_search.icon = get_icon('Search', 'EditorIcons')
- _ctrls.word_wrap.icon = get_icon('Loop', 'EditorIcons')
-
- _setup_colors()
- if(get_parent() == get_tree().root):
- _test_running_setup()
-
-
-# ------------------
-# Private
-# ------------------
-func _setup_colors():
- _ctrls.output.clear_colors()
- var keywords = [
- ['Failed', Color.red],
- ['Passed', Color.green],
- ['Pending', Color.yellow],
- ['Orphans', Color.yellow],
- ['WARNING', Color.yellow],
- ['ERROR', Color.red]
- ]
-
- for keyword in keywords:
- _ctrls.output.add_keyword_color(keyword[0], keyword[1])
-
- var f_color = _ctrls.output.get_color("font_color")
- _ctrls.output.add_color_override("font_color_readonly", f_color)
- _ctrls.output.add_color_override("function_color", f_color)
- _ctrls.output.add_color_override("member_variable_color", f_color)
- _ctrls.output.update()
-
-
-func _set_font(font_name, custom_name):
- var rtl = _ctrls.output
- if(font_name == null):
- rtl.set('custom_fonts/' + custom_name, null)
- else:
- var dyn_font = DynamicFont.new()
- var font_data = DynamicFontData.new()
- font_data.font_path = 'res://addons/gut/fonts/' + font_name + '.ttf'
- font_data.antialiased = true
- dyn_font.font_data = font_data
- rtl.set('custom_fonts/' + custom_name, dyn_font)
-
-
-# ------------------
-# Events
-# ------------------
-func _on_CopyButton_pressed():
- copy_to_clipboard()
-
-
-func _on_UseColors_pressed():
- _ctrls.output.syntax_highlighting = _ctrls.use_colors.pressed
-
-
-func _on_ClearButton_pressed():
- clear()
-
-
-func _on_ShowSearch_pressed():
- show_search(_ctrls.show_search.pressed)
-
-
-func _on_SearchTerm_focus_entered():
- _ctrls.search_bar.search_term.call_deferred('select_all')
-
-func _on_SearchNext_pressed():
- _sr.find_next(_ctrls.search_bar.search_term.text)
-
-
-func _on_SearchPrev_pressed():
- _sr.find_prev(_ctrls.search_bar.search_term.text)
-
-
-func _on_SearchTerm_text_changed(new_text):
- if(new_text == ''):
- _ctrls.output.deselect()
- else:
- _sr.find_next(new_text)
-
-
-func _on_SearchTerm_text_entered(new_text):
- if(Input.is_physical_key_pressed(KEY_SHIFT)):
- _sr.find_prev(new_text)
- else:
- _sr.find_next(new_text)
-
-
-func _on_SearchTerm_gui_input(event):
- if(event is InputEventKey and !event.pressed and event.scancode == KEY_ESCAPE):
- show_search(false)
-
-func _on_WordWrap_pressed():
- _ctrls.output.wrap_enabled = _ctrls.word_wrap.pressed
- _ctrls.output.update()
-
-# ------------------
-# Public
-# ------------------
-func show_search(should):
- _ctrls.search_bar.bar.visible = should
- if(should):
- _ctrls.search_bar.search_term.grab_focus()
- _ctrls.search_bar.search_term.select_all()
- _ctrls.show_search.pressed = should
-
-
-func search(text, start_pos, highlight=true):
- return _sr.find_next(text)
-
-
-func copy_to_clipboard():
- var selected = _ctrls.output.get_selection_text()
- if(selected != ''):
- OS.clipboard = selected
- else:
- OS.clipboard = _ctrls.output.text
-
-
-func clear():
- _ctrls.output.text = ''
-
-
-func set_all_fonts(base_name):
- if(base_name == 'Default'):
- _set_font(null, 'font')
-# _set_font(null, 'normal_font')
-# _set_font(null, 'bold_font')
-# _set_font(null, 'italics_font')
-# _set_font(null, 'bold_italics_font')
- else:
- _set_font(base_name + '-Regular', 'font')
-# _set_font(base_name + '-Regular', 'normal_font')
-# _set_font(base_name + '-Bold', 'bold_font')
-# _set_font(base_name + '-Italic', 'italics_font')
-# _set_font(base_name + '-BoldItalic', 'bold_italics_font')
-
-
-func set_font_size(new_size):
- var rtl = _ctrls.output
- if(rtl.get('custom_fonts/font') != null):
- rtl.get('custom_fonts/font').size = new_size
-# rtl.get('custom_fonts/bold_italics_font').size = new_size
-# rtl.get('custom_fonts/bold_font').size = new_size
-# rtl.get('custom_fonts/italics_font').size = new_size
-# rtl.get('custom_fonts/normal_font').size = new_size
-
-
-func set_use_colors(value):
- pass
-
-
-func get_use_colors():
- return false;
-
-
-func get_rich_text_edit():
- return _ctrls.output
-
-
-func load_file(path):
- var f = File.new()
- var result = f.open(path, f.READ)
- if(result != OK):
- return
-
- var t = f.get_as_text()
- f.close()
- _ctrls.output.text = t
- _ctrls.output.scroll_vertical = _ctrls.output.get_line_count()
- _ctrls.output.set_deferred('scroll_vertical', _ctrls.output.get_line_count())
-
-
-func add_text(text):
- if(is_inside_tree()):
- _ctrls.output.text += text
-
-
-func scroll_to_line(line):
- _ctrls.output.scroll_vertical = line
- _ctrls.output.cursor_set_line(line)
diff --git a/addons/gut/gui/OutputText.tscn b/addons/gut/gui/OutputText.tscn
deleted file mode 100644
index d7c693a..0000000
--- a/addons/gut/gui/OutputText.tscn
+++ /dev/null
@@ -1,123 +0,0 @@
-[gd_scene load_steps=4 format=2]
-
-[ext_resource path="res://addons/gut/gui/OutputText.gd" type="Script" id=1]
-
-[sub_resource type="Image" id=3]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "LumAlpha8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=2]
-flags = 4
-flags = 4
-image = SubResource( 3 )
-size = Vector2( 16, 16 )
-
-[node name="OutputText" type="VBoxContainer"]
-margin_right = 862.0
-margin_bottom = 523.0
-size_flags_horizontal = 3
-size_flags_vertical = 3
-script = ExtResource( 1 )
-
-[node name="Toolbar" type="HBoxContainer" parent="."]
-margin_right = 862.0
-margin_bottom = 24.0
-size_flags_horizontal = 3
-
-[node name="ShowSearch" type="ToolButton" parent="Toolbar"]
-margin_right = 28.0
-margin_bottom = 24.0
-toggle_mode = true
-icon = SubResource( 2 )
-
-[node name="UseColors" type="ToolButton" parent="Toolbar"]
-margin_left = 32.0
-margin_right = 60.0
-margin_bottom = 24.0
-hint_tooltip = "Colorize output.
- It's not the same as everywhere else (long story),
- but it is better than nothing."
-toggle_mode = true
-pressed = true
-icon = SubResource( 2 )
-
-[node name="WordWrap" type="ToolButton" parent="Toolbar"]
-margin_left = 64.0
-margin_right = 92.0
-margin_bottom = 24.0
-hint_tooltip = "Word wrap"
-toggle_mode = true
-icon = SubResource( 2 )
-
-[node name="CenterContainer" type="CenterContainer" parent="Toolbar"]
-margin_left = 96.0
-margin_right = 743.0
-margin_bottom = 24.0
-size_flags_horizontal = 3
-
-[node name="CopyButton" type="Button" parent="Toolbar"]
-margin_left = 747.0
-margin_right = 798.0
-margin_bottom = 24.0
-hint_tooltip = "Copy to clipboard"
-text = " Copy "
-
-[node name="ClearButton" type="Button" parent="Toolbar"]
-margin_left = 802.0
-margin_right = 862.0
-margin_bottom = 24.0
-text = " Clear "
-
-[node name="Output" type="TextEdit" parent="."]
-margin_top = 28.0
-margin_right = 862.0
-margin_bottom = 523.0
-size_flags_horizontal = 3
-size_flags_vertical = 3
-readonly = true
-highlight_current_line = true
-syntax_highlighting = true
-show_line_numbers = true
-smooth_scrolling = true
-
-[node name="Search" type="HBoxContainer" parent="."]
-visible = false
-margin_top = 499.0
-margin_right = 862.0
-margin_bottom = 523.0
-
-[node name="SearchTerm" type="LineEdit" parent="Search"]
-margin_right = 804.0
-margin_bottom = 24.0
-size_flags_horizontal = 3
-
-[node name="SearchNext" type="Button" parent="Search"]
-margin_left = 808.0
-margin_right = 862.0
-margin_bottom = 24.0
-hint_tooltip = "Find next (enter)"
-text = "Next"
-
-[node name="SearchPrev" type="Button" parent="Search"]
-margin_left = 808.0
-margin_right = 820.0
-margin_bottom = 20.0
-hint_tooltip = "Find previous (shift + enter)"
-text = "Prev"
-
-[connection signal="pressed" from="Toolbar/ShowSearch" to="." method="_on_ShowSearch_pressed"]
-[connection signal="pressed" from="Toolbar/UseColors" to="." method="_on_UseColors_pressed"]
-[connection signal="pressed" from="Toolbar/WordWrap" to="." method="_on_WordWrap_pressed"]
-[connection signal="pressed" from="Toolbar/CopyButton" to="." method="_on_CopyButton_pressed"]
-[connection signal="pressed" from="Toolbar/ClearButton" to="." method="_on_ClearButton_pressed"]
-[connection signal="focus_entered" from="Search/SearchTerm" to="." method="_on_SearchTerm_focus_entered"]
-[connection signal="gui_input" from="Search/SearchTerm" to="." method="_on_SearchTerm_gui_input"]
-[connection signal="text_changed" from="Search/SearchTerm" to="." method="_on_SearchTerm_text_changed"]
-[connection signal="text_entered" from="Search/SearchTerm" to="." method="_on_SearchTerm_text_entered"]
-[connection signal="pressed" from="Search/SearchNext" to="." method="_on_SearchNext_pressed"]
-[connection signal="pressed" from="Search/SearchPrev" to="." method="_on_SearchPrev_pressed"]
diff --git a/addons/gut/gui/RunAtCursor.gd b/addons/gut/gui/RunAtCursor.gd
deleted file mode 100644
index dc83c3e..0000000
--- a/addons/gut/gui/RunAtCursor.gd
+++ /dev/null
@@ -1,153 +0,0 @@
-tool
-extends Control
-
-
-var ScriptTextEditors = load('res://addons/gut/gui/script_text_editor_controls.gd')
-
-onready var _ctrls = {
- btn_script = $HBox/BtnRunScript,
- btn_inner = $HBox/BtnRunInnerClass,
- btn_method = $HBox/BtnRunMethod,
- lbl_none = $HBox/LblNoneSelected,
- arrow_1 = $HBox/Arrow1,
- arrow_2 = $HBox/Arrow2
-}
-
-var _editors = null
-var _cur_editor = null
-var _last_line = -1
-var _cur_script_path = null
-var _last_info = null
-
-signal run_tests(what)
-
-
-func _ready():
- _ctrls.lbl_none.visible = true
- _ctrls.btn_script.visible = false
- _ctrls.btn_inner.visible = false
- _ctrls.btn_method.visible = false
-
-# ----------------
-# Private
-# ----------------
-func _set_editor(which):
- _last_line = -1
- if(_cur_editor != null and _cur_editor.get_ref()):
- _cur_editor.get_ref().disconnect('cursor_changed', self, '_on_cursor_changed')
-
- if(which != null):
- _cur_editor = weakref(which)
- which.connect('cursor_changed', self, '_on_cursor_changed', [which])
-
- _last_line = which.cursor_get_line()
- _last_info = _editors.get_line_info()
- _update_buttons(_last_info)
-
-
-func _update_buttons(info):
- _ctrls.lbl_none.visible = _cur_script_path == null
- _ctrls.btn_script.visible = _cur_script_path != null
-
- _ctrls.btn_inner.visible = info.inner_class != null
- _ctrls.arrow_1.visible = info.inner_class != null
- _ctrls.btn_inner.text = str(info.inner_class)
- _ctrls.btn_inner.hint_tooltip = str("Run all tests in Inner-Test-Class ", info.inner_class)
-
- _ctrls.btn_method.visible = info.test_method != null
- _ctrls.arrow_2.visible = info.test_method != null
- _ctrls.btn_method.text = str(info.test_method)
- _ctrls.btn_method.hint_tooltip = str("Run test ", info.test_method)
-
- # The button's new size won't take effect until the next frame.
- # This appears to be what was causing the button to not be clickable the
- # first time.
- call_deferred("_update_rect_size")
-
-
-func _update_rect_size():
- rect_min_size.x = _ctrls.btn_method.rect_size.x + _ctrls.btn_method.rect_position.x
-
-# ----------------
-# Events
-# ----------------
-func _on_cursor_changed(which):
- if(which.cursor_get_line() != _last_line):
- _last_line = which.cursor_get_line()
- _last_info = _editors.get_line_info()
- _update_buttons(_last_info)
-
-
-func _on_BtnRunScript_pressed():
- var info = _last_info.duplicate()
- info.script = _cur_script_path.get_file()
- info.inner_class = null
- info.test_method = null
- emit_signal("run_tests", info)
-
-
-func _on_BtnRunInnerClass_pressed():
- var info = _last_info.duplicate()
- info.script = _cur_script_path.get_file()
- info.test_method = null
- emit_signal("run_tests", info)
-
-
-func _on_BtnRunMethod_pressed():
- var info = _last_info.duplicate()
- info.script = _cur_script_path.get_file()
- emit_signal("run_tests", info)
-
-
-# ----------------
-# Public
-# ----------------
-func set_script_text_editors(value):
- _editors = value
-
-
-func activate_for_script(path):
- _ctrls.btn_script.visible = true
- _ctrls.btn_script.text = path.get_file()
- _ctrls.btn_script.hint_tooltip = str("Run all tests in script ", path)
- _cur_script_path = path
- _editors.refresh()
- _set_editor(_editors.get_current_text_edit())
-
-
-func get_script_button():
- return _ctrls.btn_script
-
-
-func get_inner_button():
- return _ctrls.btn_inner
-
-
-func get_test_button():
- return _ctrls.btn_method
-
-
-# not used, thought was configurable but it's just the script prefix
-func set_method_prefix(value):
- _editors.set_method_prefix(value)
-
-
-# not used, thought was configurable but it's just the script prefix
-func set_inner_class_prefix(value):
- _editors.set_inner_class_prefix(value)
-
-
-# Mashed this function in here b/c it has _editors. Probably should be
-# somewhere else (possibly in script_text_editor_controls).
-func search_current_editor_for_text(txt):
- var te = _editors.get_current_text_edit()
- var result = te.search(txt, 0, 0, 0)
- var to_return = -1
-
- if result.size() > 0:
- to_return = result[TextEdit.SEARCH_RESULT_LINE]
-
- return to_return
-
-
-
diff --git a/addons/gut/gui/RunAtCursor.tscn b/addons/gut/gui/RunAtCursor.tscn
deleted file mode 100644
index b4662df..0000000
--- a/addons/gut/gui/RunAtCursor.tscn
+++ /dev/null
@@ -1,80 +0,0 @@
-[gd_scene load_steps=4 format=2]
-
-[ext_resource path="res://addons/gut/gui/RunAtCursor.gd" type="Script" id=1]
-[ext_resource path="res://addons/gut/gui/play.png" type="Texture" id=2]
-[ext_resource path="res://addons/gut/gui/arrow.png" type="Texture" id=3]
-
-[node name="RunAtCursor" type="Control"]
-anchor_right = 1.0
-anchor_bottom = 1.0
-margin_right = 1.0
-margin_bottom = -527.0
-size_flags_horizontal = 3
-size_flags_vertical = 3
-script = ExtResource( 1 )
-__meta__ = {
-"_edit_use_anchors_": false
-}
-
-[node name="HBox" type="HBoxContainer" parent="."]
-anchor_right = 1.0
-anchor_bottom = 1.0
-size_flags_horizontal = 3
-size_flags_vertical = 3
-__meta__ = {
-"_edit_use_anchors_": false
-}
-
-[node name="LblNoneSelected" type="Label" parent="HBox"]
-margin_top = 29.0
-margin_right = 50.0
-margin_bottom = 43.0
-text = "<None>"
-
-[node name="BtnRunScript" type="Button" parent="HBox"]
-visible = false
-margin_left = 54.0
-margin_right = 140.0
-margin_bottom = 73.0
-text = "<script>"
-icon = ExtResource( 2 )
-
-[node name="Arrow1" type="TextureButton" parent="HBox"]
-visible = false
-margin_left = 54.0
-margin_right = 78.0
-margin_bottom = 73.0
-rect_min_size = Vector2( 24, 0 )
-texture_normal = ExtResource( 3 )
-expand = true
-stretch_mode = 3
-
-[node name="BtnRunInnerClass" type="Button" parent="HBox"]
-visible = false
-margin_left = 134.0
-margin_right = 243.0
-margin_bottom = 73.0
-text = "<inner class>"
-icon = ExtResource( 2 )
-
-[node name="Arrow2" type="TextureButton" parent="HBox"]
-visible = false
-margin_left = 54.0
-margin_right = 78.0
-margin_bottom = 73.0
-rect_min_size = Vector2( 24, 0 )
-texture_normal = ExtResource( 3 )
-expand = true
-stretch_mode = 3
-
-[node name="BtnRunMethod" type="Button" parent="HBox"]
-visible = false
-margin_left = 247.0
-margin_right = 337.0
-margin_bottom = 73.0
-text = "<method>"
-icon = ExtResource( 2 )
-
-[connection signal="pressed" from="HBox/BtnRunScript" to="." method="_on_BtnRunScript_pressed"]
-[connection signal="pressed" from="HBox/BtnRunInnerClass" to="." method="_on_BtnRunInnerClass_pressed"]
-[connection signal="pressed" from="HBox/BtnRunMethod" to="." method="_on_BtnRunMethod_pressed"]
diff --git a/addons/gut/gui/RunResults.gd b/addons/gut/gui/RunResults.gd
deleted file mode 100644
index a36d10f..0000000
--- a/addons/gut/gui/RunResults.gd
+++ /dev/null
@@ -1,509 +0,0 @@
-extends Control
-tool
-
-var _interface = null
-var _utils = load('res://addons/gut/utils.gd').new()
-var _hide_passing = true
-var _font = null
-var _font_size = null
-var _root = null
-var _max_icon_width = 10
-var _editors = null # script_text_editor_controls.gd
-var _show_orphans = true
-var _output_control = null
-
-const _col_1_bg_color = Color(0, 0, 0, .1)
-
-var _icons = {
- red = load('res://addons/gut/images/red.png'),
- green = load('res://addons/gut/images/green.png'),
- yellow = load('res://addons/gut/images/yellow.png'),
-}
-
-signal search_for_text(text)
-
-onready var _ctrls = {
- tree = $VBox/Output/Scroll/Tree,
- lbl_overlay = $VBox/Output/OverlayMessage,
- chk_hide_passing = $VBox/Toolbar/HidePassing,
- toolbar = {
- toolbar = $VBox/Toolbar,
- collapse = $VBox/Toolbar/Collapse,
- collapse_all = $VBox/Toolbar/CollapseAll,
- expand = $VBox/Toolbar/Expand,
- expand_all = $VBox/Toolbar/ExpandAll,
- hide_passing = $VBox/Toolbar/HidePassing,
- show_script = $VBox/Toolbar/ShowScript,
- scroll_output = $VBox/Toolbar/ScrollOutput
- }
-}
-
-func _test_running_setup():
- _hide_passing = true
- _show_orphans = true
- var _gut_config = load('res://addons/gut/gut_config.gd').new()
- _gut_config.load_panel_options('res://.gut_editor_config.json')
- set_font(
- _gut_config.options.panel_options.font_name,
- _gut_config.options.panel_options.font_size)
-
- _ctrls.toolbar.hide_passing.text = '[hp]'
- load_json_file('user://.gut_editor.json')
-
-
-func _set_toolbutton_icon(btn, icon_name, text):
- if(Engine.editor_hint):
- btn.icon = get_icon(icon_name, 'EditorIcons')
- else:
- btn.text = str('[', text, ']')
-
-
-func _ready():
- var f = $FontSampler.get_font("font")
- var s_size = f.get_string_size("000 of 000 passed")
- _root = _ctrls.tree.create_item()
- _ctrls.tree.set_hide_root(true)
- _ctrls.tree.columns = 2
- _ctrls.tree.set_column_expand(0, true)
- _ctrls.tree.set_column_expand(1, false)
- _ctrls.tree.set_column_min_width(1, s_size.x)
-
- _set_toolbutton_icon(_ctrls.toolbar.collapse, 'CollapseTree', 'c')
- _set_toolbutton_icon(_ctrls.toolbar.collapse_all, 'CollapseTree', 'c')
- _set_toolbutton_icon(_ctrls.toolbar.expand, 'ExpandTree', 'e')
- _set_toolbutton_icon(_ctrls.toolbar.expand_all, 'ExpandTree', 'e')
- _set_toolbutton_icon(_ctrls.toolbar.show_script, 'Script', 'ss')
- _set_toolbutton_icon(_ctrls.toolbar.scroll_output, 'Font', 'so')
-
- _ctrls.toolbar.hide_passing.set('custom_icons/checked', get_icon('GuiVisibilityHidden', 'EditorIcons'))
- _ctrls.toolbar.hide_passing.set('custom_icons/unchecked', get_icon('GuiVisibilityVisible', 'EditorIcons'))
-
- if(get_parent() == get_tree().root):
- _test_running_setup()
-
- call_deferred('_update_min_width')
-
-func _update_min_width():
- rect_min_size.x = _ctrls.toolbar.toolbar.rect_size.x
-
-func _open_file(path, line_number):
- if(_interface == null):
- print('Too soon, wait a bit and try again.')
- return
-
- var r = load(path)
- if(line_number != -1):
- _interface.edit_script(r, line_number)
- else:
- _interface.edit_script(r)
-
- if(_ctrls.toolbar.show_script.pressed):
- _interface.set_main_screen_editor('Script')
-
-
-func _add_script_tree_item(script_path, script_json):
- var path_info = _get_path_and_inner_class_name_from_test_path(script_path)
- # print('* adding script ', path_info)
- var item_text = script_path
- var parent = _root
-
- if(path_info.inner_class != ''):
- parent = _find_script_item_with_path(path_info.path)
- item_text = path_info.inner_class
- if(parent == null):
- parent = _add_script_tree_item(path_info.path, {})
-
- var item = _ctrls.tree.create_item(parent)
- item.set_text(0, item_text)
- var meta = {
- "type":"script",
- "path":path_info.path,
- "inner_class":path_info.inner_class,
- "json":script_json}
- item.set_metadata(0, meta)
- item.set_custom_bg_color(1, _col_1_bg_color)
-
- return item
-
-
-func _add_assert_item(text, icon, parent_item):
- # print(' * adding assert')
- var assert_item = _ctrls.tree.create_item(parent_item)
- assert_item.set_icon_max_width(0, _max_icon_width)
- assert_item.set_text(0, text)
- assert_item.set_metadata(0, {"type":"assert"})
- assert_item.set_icon(0, icon)
- assert_item.set_custom_bg_color(1, _col_1_bg_color)
-
- return assert_item
-
-
-func _add_test_tree_item(test_name, test_json, script_item):
- # print(' * adding test ', test_name)
- var no_orphans_to_show = !_show_orphans or (_show_orphans and test_json.orphans == 0)
- if(_hide_passing and test_json['status'] == 'pass' and no_orphans_to_show):
- return
-
- var item = _ctrls.tree.create_item(script_item)
- var status = test_json['status']
- var meta = {"type":"test", "json":test_json}
-
- item.set_text(0, test_name)
- item.set_text(1, status)
- item.set_text_align(1, TreeItem.ALIGN_RIGHT)
- item.set_custom_bg_color(1, _col_1_bg_color)
-
- item.set_metadata(0, meta)
- item.set_icon_max_width(0, _max_icon_width)
-
- var orphan_text = 'orphans'
- if(test_json.orphans == 1):
- orphan_text = 'orphan'
- orphan_text = str(test_json.orphans, ' ', orphan_text)
-
-
- if(status == 'pass' and no_orphans_to_show):
- item.set_icon(0, _icons.green)
- elif(status == 'pass' and !no_orphans_to_show):
- item.set_icon(0, _icons.yellow)
- item.set_text(1, orphan_text)
- elif(status == 'fail'):
- item.set_icon(0, _icons.red)
- else:
- item.set_icon(0, _icons.yellow)
-
- if(!_hide_passing):
- for passing in test_json.passing:
- _add_assert_item('pass: ' + passing, _icons.green, item)
-
- for failure in test_json.failing:
- _add_assert_item("fail: " + failure.replace("\n", ''), _icons.red, item)
-
- for pending in test_json.pending:
- _add_assert_item("pending: " + pending.replace("\n", ''), _icons.yellow, item)
-
- if(status != 'pass' and !no_orphans_to_show):
- _add_assert_item(orphan_text, _icons.yellow, item)
-
- return item
-
-
-func _load_result_tree(j):
- var scripts = j['test_scripts']['scripts']
- var script_keys = scripts.keys()
- # if we made it here, the json is valid and we did something, otherwise the
- # 'nothing to see here' should be visible.
- clear_centered_text()
-
- var _last_script_item = null
- for key in script_keys:
- var tests = scripts[key]['tests']
- var test_keys = tests.keys()
- var s_item = _add_script_tree_item(key, scripts[key])
- var bad_count = 0
-
- for test_key in test_keys:
- var t_item = _add_test_tree_item(test_key, tests[test_key], s_item)
- if(tests[test_key].status != 'pass'):
- bad_count += 1
- elif(t_item != null):
- t_item.collapsed = true
-
- # get_children returns the first child or null. its a dumb name.
- if(s_item.get_children() == null):
- # var m = s_item.get_metadata(0)
- # print('!! Deleting ', m.path, ' ', m.inner_class)
- s_item.free()
- else:
- var total_text = str(test_keys.size(), ' passed')
- s_item.set_text_align(1, s_item.ALIGN_LEFT)
- if(bad_count == 0):
- s_item.collapsed = true
- else:
- total_text = str(test_keys.size() - bad_count, ' of ', test_keys.size(), ' passed')
- s_item.set_text(1, total_text)
-
- _free_childless_scripts()
- _show_all_passed()
-
-
-func _free_childless_scripts():
- var item = _root.get_children()
- while(item != null):
- var next_item = item.get_next()
- if(item.get_children() == null):
- item.free()
- item = next_item
-
-
-func _find_script_item_with_path(path):
- var item = _root.get_children()
- var to_return = null
-
- while(item != null and to_return == null):
- if(item.get_metadata(0).path == path):
- to_return = item
- else:
- item = item.get_next()
-
- return to_return
-
-
-func _get_line_number_from_assert_msg(msg):
- var line = -1
- if(msg.find('at line') > 0):
- line = int(msg.split("at line")[-1].split(" ")[-1])
- return line
-
-
-func _get_path_and_inner_class_name_from_test_path(path):
- var to_return = {
- path = '',
- inner_class = ''
- }
-
- to_return.path = path
- if !path.ends_with('.gd'):
- var loc = path.find('.gd')
- to_return.inner_class = path.split('.')[-1]
- to_return.path = path.substr(0, loc + 3)
- return to_return
-
-
-func _handle_tree_item_select(item, force_scroll):
- var item_type = item.get_metadata(0).type
-
- var path = '';
- var line = -1;
- var method_name = ''
- var inner_class = ''
-
- if(item_type == 'test'):
- var s_item = item.get_parent()
- path = s_item.get_metadata(0)['path']
- inner_class = s_item.get_metadata(0)['inner_class']
- line = -1
- method_name = item.get_text(0)
- elif(item_type == 'assert'):
- var s_item = item.get_parent().get_parent()
- path = s_item.get_metadata(0)['path']
- inner_class = s_item.get_metadata(0)['inner_class']
-
- line = _get_line_number_from_assert_msg(item.get_text(0))
- method_name = item.get_parent().get_text(0)
- elif(item_type == 'script'):
- path = item.get_metadata(0)['path']
- if(item.get_parent() != _root):
- inner_class = item.get_text(0)
- line = -1
- method_name = ''
- else:
- return
-
- var path_info = _get_path_and_inner_class_name_from_test_path(path)
- if(force_scroll or _ctrls.toolbar.show_script.pressed):
- _goto_code(path, line, method_name, inner_class)
- if(force_scroll or _ctrls.toolbar.scroll_output.pressed):
- _goto_output(path, method_name, inner_class)
-
-
-# starts at beginning of text edit and searches for each search term, moving
-# through the text as it goes; ensuring that, when done, it found the first
-# occurance of the last srting that happend after the first occurance of
-# each string before it. (Generic way of searching for a method name in an
-# inner class that may have be a duplicate of a method name in a different
-# inner class)
-func _get_line_number_for_seq_search(search_strings, te):
-# var te = _editors.get_current_text_edit()
- var result = null
- var to_return = -1
- var start_line = 0
- var start_col = 0
- var s_flags = 0
-
- var i = 0
- var string_found = true
- while(i < search_strings.size() and string_found):
- result = te.search(search_strings[i], s_flags, start_line, start_col)
- if(result.size() > 0):
- start_line = result[TextEdit.SEARCH_RESULT_LINE]
- start_col = result[TextEdit.SEARCH_RESULT_COLUMN]
- to_return = start_line
- else:
- string_found = false
- i += 1
-
- return to_return
-
-
-func _goto_code(path, line, method_name='', inner_class =''):
- if(_interface == null):
- print('going to ', [path, line, method_name, inner_class])
- return
-
- _open_file(path, line)
- if(line == -1):
- var search_strings = []
- if(inner_class != ''):
- search_strings.append(inner_class)
-
- if(method_name != ''):
- search_strings.append(method_name)
-
- line = _get_line_number_for_seq_search(search_strings, _editors.get_current_text_edit())
- if(line != -1):
- _interface.get_script_editor().goto_line(line)
-
-
-func _goto_output(path, method_name, inner_class):
- if(_output_control == null):
- return
-
- var search_strings = [path]
-
- if(inner_class != ''):
- search_strings.append(inner_class)
-
- if(method_name != ''):
- search_strings.append(method_name)
-
- var line = _get_line_number_for_seq_search(search_strings, _output_control.get_rich_text_edit())
- if(line != -1):
- _output_control.scroll_to_line(line)
-
-
-func _show_all_passed():
- if(_root.get_children() == null):
- add_centered_text('Everything passed!')
-
-
-func _set_collapsed_on_all(item, value):
- if(item == _root):
- var node = _root.get_children()
- while(node != null):
- node.call_recursive('set_collapsed', value)
- node = node.get_next()
- else:
- item.call_recursive('set_collapsed', value)
-
-# --------------
-# Events
-# --------------
-func _on_Tree_item_selected():
- # do not force scroll
- var item = _ctrls.tree.get_selected()
- _handle_tree_item_select(item, false)
- # it just looks better if the left is always selected.
- if(item.is_selected(1)):
- item.deselect(1)
- item.select(0)
-
-
-func _on_Tree_item_activated():
- # force scroll
- print('double clicked')
- _handle_tree_item_select(_ctrls.tree.get_selected(), true)
-
-func _on_Collapse_pressed():
- collapse_selected()
-
-
-func _on_Expand_pressed():
- expand_selected()
-
-
-func _on_CollapseAll_pressed():
- collapse_all()
-
-
-func _on_ExpandAll_pressed():
- expand_all()
-
-
-func _on_Hide_Passing_pressed():
- _hide_passing = _ctrls.toolbar.hide_passing.pressed
-
-# --------------
-# Public
-# --------------
-func load_json_file(path):
- var text = _utils.get_file_as_text(path)
- if(text != ''):
- var result = JSON.parse(text)
- if(result.error != OK):
- add_centered_text(str(path, " has invalid json in it \n",
- 'Error ', result.error, "@", result.error_line, "\n",
- result.error_string))
- return
-
- load_json_results(result.result)
- else:
- add_centered_text(str(path, ' was empty or does not exist.'))
-
-
-func load_json_results(j):
- clear()
- add_centered_text('Nothing Here')
- _load_result_tree(j)
-
-
-func add_centered_text(t):
- _ctrls.lbl_overlay.text = t
-
-
-func clear_centered_text():
- _ctrls.lbl_overlay.text = ''
-
-
-func clear():
- _ctrls.tree.clear()
- _root = _ctrls.tree.create_item()
- clear_centered_text()
-
-
-func set_interface(which):
- _interface = which
-
-
-func set_script_text_editors(value):
- _editors = value
-
-
-func collapse_all():
- _set_collapsed_on_all(_root, true)
-
-
-func expand_all():
- _set_collapsed_on_all(_root, false)
-
-
-func collapse_selected():
- var item = _ctrls.tree.get_selected()
- if(item != null):
- _set_collapsed_on_all(item, true)
-
-func expand_selected():
- var item = _ctrls.tree.get_selected()
- if(item != null):
- _set_collapsed_on_all(item, false)
-
-
-func set_show_orphans(should):
- _show_orphans = should
-
-
-func set_font(font_name, size):
- pass
-# var dyn_font = DynamicFont.new()
-# var font_data = DynamicFontData.new()
-# font_data.font_path = 'res://addons/gut/fonts/' + font_name + '-Regular.ttf'
-# font_data.antialiased = true
-# dyn_font.font_data = font_data
-#
-# _font = dyn_font
-# _font.size = size
-# _font_size = size
-
-
-func set_output_control(value):
- _output_control = value
diff --git a/addons/gut/gui/RunResults.tscn b/addons/gut/gui/RunResults.tscn
deleted file mode 100644
index be4c1d5..0000000
--- a/addons/gut/gui/RunResults.tscn
+++ /dev/null
@@ -1,165 +0,0 @@
-[gd_scene load_steps=4 format=2]
-
-[ext_resource path="res://addons/gut/gui/RunResults.gd" type="Script" id=1]
-
-[sub_resource type="Image" id=3]
-data = {
-"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
-"format": "LumAlpha8",
-"height": 16,
-"mipmaps": false,
-"width": 16
-}
-
-[sub_resource type="ImageTexture" id=2]
-flags = 4
-flags = 4
-image = SubResource( 3 )
-size = Vector2( 16, 16 )
-
-[node name="RunResults" type="Control"]
-margin_right = 595.0
-margin_bottom = 459.0
-rect_min_size = Vector2( 302, 0 )
-script = ExtResource( 1 )
-
-[node name="VBox" type="VBoxContainer" parent="."]
-anchor_right = 1.0
-anchor_bottom = 1.0
-
-[node name="Toolbar" type="HBoxContainer" parent="VBox"]
-margin_right = 296.0
-margin_bottom = 24.0
-size_flags_horizontal = 0
-
-[node name="Expand" type="ToolButton" parent="VBox/Toolbar"]
-margin_right = 28.0
-margin_bottom = 24.0
-hint_tooltip = "Expand selected item and all children."
-icon = SubResource( 2 )
-
-[node name="Collapse" type="ToolButton" parent="VBox/Toolbar"]
-margin_left = 32.0
-margin_right = 60.0
-margin_bottom = 24.0
-hint_tooltip = "Collapse selected item and all children."
-icon = SubResource( 2 )
-
-[node name="Sep" type="ColorRect" parent="VBox/Toolbar"]
-margin_left = 64.0
-margin_right = 66.0
-margin_bottom = 24.0
-rect_min_size = Vector2( 2, 0 )
-
-[node name="LblAll" type="Label" parent="VBox/Toolbar"]
-margin_left = 70.0
-margin_top = 5.0
-margin_right = 91.0
-margin_bottom = 19.0
-text = "All:"
-align = 1
-
-[node name="ExpandAll" type="ToolButton" parent="VBox/Toolbar"]
-margin_left = 95.0
-margin_right = 123.0
-margin_bottom = 24.0
-hint_tooltip = "Expand All."
-icon = SubResource( 2 )
-
-[node name="CollapseAll" type="ToolButton" parent="VBox/Toolbar"]
-margin_left = 127.0
-margin_right = 155.0
-margin_bottom = 24.0
-hint_tooltip = "Collapse all."
-icon = SubResource( 2 )
-
-[node name="Sep2" type="ColorRect" parent="VBox/Toolbar"]
-margin_left = 159.0
-margin_right = 161.0
-margin_bottom = 24.0
-rect_min_size = Vector2( 2, 0 )
-
-[node name="HidePassing" type="CheckBox" parent="VBox/Toolbar"]
-margin_left = 165.0
-margin_right = 189.0
-margin_bottom = 24.0
-hint_tooltip = "Show/Hide passing tests. Takes effect on next run."
-size_flags_horizontal = 4
-custom_icons/checked = SubResource( 2 )
-custom_icons/unchecked = SubResource( 2 )
-pressed = true
-__meta__ = {
-"_editor_description_": ""
-}
-
-[node name="Sep3" type="ColorRect" parent="VBox/Toolbar"]
-margin_left = 193.0
-margin_right = 195.0
-margin_bottom = 24.0
-rect_min_size = Vector2( 2, 0 )
-
-[node name="LblSync" type="Label" parent="VBox/Toolbar"]
-margin_left = 199.0
-margin_top = 5.0
-margin_right = 232.0
-margin_bottom = 19.0
-text = "Sync:"
-align = 1
-
-[node name="ShowScript" type="ToolButton" parent="VBox/Toolbar"]
-margin_left = 236.0
-margin_right = 264.0
-margin_bottom = 24.0
-hint_tooltip = "Open script and scroll to line when a tree item is clicked."
-toggle_mode = true
-pressed = true
-icon = SubResource( 2 )
-
-[node name="ScrollOutput" type="ToolButton" parent="VBox/Toolbar"]
-margin_left = 268.0
-margin_right = 296.0
-margin_bottom = 24.0
-hint_tooltip = "Scroll to related line in the output panel when tree item clicked."
-toggle_mode = true
-pressed = true
-icon = SubResource( 2 )
-
-[node name="Output" type="Panel" parent="VBox"]
-self_modulate = Color( 1, 1, 1, 0.541176 )
-margin_top = 28.0
-margin_right = 595.0
-margin_bottom = 459.0
-size_flags_horizontal = 3
-size_flags_vertical = 3
-
-[node name="Scroll" type="ScrollContainer" parent="VBox/Output"]
-anchor_right = 1.0
-anchor_bottom = 1.0
-
-[node name="Tree" type="Tree" parent="VBox/Output/Scroll"]
-margin_right = 595.0
-margin_bottom = 431.0
-size_flags_horizontal = 3
-size_flags_vertical = 3
-columns = 2
-hide_root = true
-
-[node name="OverlayMessage" type="Label" parent="VBox/Output"]
-anchor_right = 1.0
-anchor_bottom = 1.0
-align = 1
-valign = 1
-
-[node name="FontSampler" type="Label" parent="."]
-visible = false
-margin_right = 40.0
-margin_bottom = 14.0
-text = "000 of 000 passed"
-
-[connection signal="pressed" from="VBox/Toolbar/Expand" to="." method="_on_Expand_pressed"]
-[connection signal="pressed" from="VBox/Toolbar/Collapse" to="." method="_on_Collapse_pressed"]
-[connection signal="pressed" from="VBox/Toolbar/ExpandAll" to="." method="_on_ExpandAll_pressed"]
-[connection signal="pressed" from="VBox/Toolbar/CollapseAll" to="." method="_on_CollapseAll_pressed"]
-[connection signal="pressed" from="VBox/Toolbar/HidePassing" to="." method="_on_Hide_Passing_pressed"]
-[connection signal="item_activated" from="VBox/Output/Scroll/Tree" to="." method="_on_Tree_item_activated"]
-[connection signal="item_selected" from="VBox/Output/Scroll/Tree" to="." method="_on_Tree_item_selected"]
diff --git a/addons/gut/gui/Settings.tscn b/addons/gut/gui/Settings.tscn
deleted file mode 100644
index 819a56e..0000000
--- a/addons/gut/gui/Settings.tscn
+++ /dev/null
@@ -1,7 +0,0 @@
-[gd_scene format=2]
-
-[node name="Settings" type="VBoxContainer"]
-margin_right = 388.0
-margin_bottom = 586.0
-size_flags_horizontal = 3
-size_flags_vertical = 3
diff --git a/addons/gut/gui/ShortcutButton.gd b/addons/gut/gui/ShortcutButton.gd
deleted file mode 100644
index 116659d..0000000
--- a/addons/gut/gui/ShortcutButton.gd
+++ /dev/null
@@ -1,164 +0,0 @@
-tool
-extends Control
-
-
-onready var _ctrls = {
- shortcut_label = $Layout/lblShortcut,
- set_button = $Layout/SetButton,
- save_button = $Layout/SaveButton,
- cancel_button = $Layout/CancelButton,
- clear_button = $Layout/ClearButton
-}
-
-signal changed
-signal start_edit
-signal end_edit
-
-const NO_SHORTCUT = '<None>'
-
-var _source_event = InputEventKey.new()
-var _pre_edit_event = null
-var _key_disp = NO_SHORTCUT
-
-var _modifier_keys = [KEY_ALT, KEY_CONTROL, KEY_META, KEY_SHIFT]
-
-# Called when the node enters the scene tree for the first time.
-func _ready():
- set_process_unhandled_key_input(false)
-
-
-func _display_shortcut():
- _ctrls.shortcut_label.text = to_s()
-
-
-func _is_shift_only_modifier():
- return _source_event.shift and \
- !(_source_event.meta or _source_event.control or _source_event.alt)
-
-
-func _has_modifier():
- return _source_event.alt or _source_event.control or _source_event.meta or _source_event.shift
-
-
-func _is_modifier(scancode):
- return _modifier_keys.has(scancode)
-
-
-func _edit_mode(should):
- set_process_unhandled_key_input(should)
- _ctrls.set_button.visible = !should
- _ctrls.save_button.visible = should
- _ctrls.save_button.disabled = should
- _ctrls.cancel_button.visible = should
- _ctrls.clear_button.visible = !should
-
- if(should and to_s() == ''):
- _ctrls.shortcut_label.text = 'press buttons'
- else:
- _ctrls.shortcut_label.text = to_s()
-
- if(should):
- emit_signal("start_edit")
- else:
- emit_signal("end_edit")
-
-# ---------------
-# Events
-# ---------------
-func _unhandled_key_input(event):
- if(event is InputEventKey):
- if(event.pressed):
- _source_event.alt = event.alt or event.scancode == KEY_ALT
- _source_event.control = event.control or event.scancode == KEY_CONTROL
- _source_event.meta = event.meta or event.scancode == KEY_META
- _source_event.shift = event.shift or event.scancode == KEY_SHIFT
-
- if(_has_modifier() and !_is_modifier(event.scancode)):
- _source_event.scancode = event.scancode
- _key_disp = OS.get_scancode_string(event.scancode)
- else:
-# _source_event.set_scancode = null
- _key_disp = NO_SHORTCUT
- _display_shortcut()
- _ctrls.save_button.disabled = !is_valid()
-
-
-func _on_SetButton_pressed():
- _pre_edit_event = _source_event.duplicate(true)
- _edit_mode(true)
-
-
-func _on_SaveButton_pressed():
- _edit_mode(false)
- _pre_edit_event = null
- emit_signal('changed')
-
-
-func _on_CancelButton_pressed():
- _edit_mode(false)
- _source_event = _pre_edit_event
- _key_disp = OS.get_scancode_string(_source_event.scancode)
- if(_key_disp == ''):
- _key_disp = NO_SHORTCUT
- _display_shortcut()
-
-
-func _on_ClearButton_pressed():
- clear_shortcut()
-
-# ---------------
-# Public
-# ---------------
-func to_s():
- var modifiers = []
- if(_source_event.alt):
- modifiers.append('alt')
- if(_source_event.control):
- modifiers.append('ctrl')
- if(_source_event.meta):
- modifiers.append('meta')
- if(_source_event.shift):
- modifiers.append('shift')
-
- if(_source_event.scancode != null):
- modifiers.append(_key_disp)
-
- var mod_text = ''
- for i in range(modifiers.size()):
- mod_text += modifiers[i]
- if(i != modifiers.size() - 1):
- mod_text += ' + '
-
- return mod_text
-
-
-func is_valid():
- return _has_modifier() and _key_disp != NO_SHORTCUT and !_is_shift_only_modifier()
-
-
-func get_shortcut():
- var to_return = ShortCut.new()
- to_return.shortcut = _source_event
- return to_return
-
-
-func set_shortcut(sc):
- if(sc == null or sc.shortcut == null):
- clear_shortcut()
- else:
- _source_event = sc.shortcut
- _key_disp = OS.get_scancode_string(_source_event.scancode)
- _display_shortcut()
-
-
-func clear_shortcut():
- _source_event = InputEventKey.new()
- _key_disp = NO_SHORTCUT
- _display_shortcut()
-
-
-func disable_set(should):
- _ctrls.set_button.disabled = should
-
-func disable_clear(should):
- _ctrls.clear_button.disabled = should
diff --git a/addons/gut/gui/ShortcutButton.tscn b/addons/gut/gui/ShortcutButton.tscn
deleted file mode 100644
index 3c94317..0000000
--- a/addons/gut/gui/ShortcutButton.tscn
+++ /dev/null
@@ -1,80 +0,0 @@
-[gd_scene load_steps=2 format=2]
-
-[ext_resource path="res://addons/gut/gui/ShortcutButton.gd" type="Script" id=1]
-
-[node name="ShortcutButton" type="Control"]
-anchor_right = 0.123
-anchor_bottom = 0.04
-margin_right = 33.048
-margin_bottom = 1.0
-rect_min_size = Vector2( 125, 25 )
-script = ExtResource( 1 )
-__meta__ = {
-"_edit_use_anchors_": false
-}
-
-[node name="Layout" type="HBoxContainer" parent="."]
-anchor_right = 1.0
-anchor_bottom = 1.0
-__meta__ = {
-"_edit_use_anchors_": false
-}
-
-[node name="lblShortcut" type="Label" parent="Layout"]
-margin_right = 50.0
-margin_bottom = 25.0
-size_flags_horizontal = 3
-size_flags_vertical = 7
-text = "<None>"
-align = 2
-valign = 1
-
-[node name="CenterContainer" type="CenterContainer" parent="Layout"]
-margin_left = 54.0
-margin_right = 64.0
-margin_bottom = 25.0
-rect_min_size = Vector2( 10, 0 )
-
-[node name="SetButton" type="Button" parent="Layout"]
-margin_left = 68.0
-margin_right = 128.0
-margin_bottom = 25.0
-rect_min_size = Vector2( 60, 0 )
-text = "Set"
-__meta__ = {
-"_edit_use_anchors_": false
-}
-
-[node name="SaveButton" type="Button" parent="Layout"]
-visible = false
-margin_left = 82.0
-margin_right = 142.0
-margin_bottom = 25.0
-rect_min_size = Vector2( 60, 0 )
-text = "Save"
-__meta__ = {
-"_edit_use_anchors_": false
-}
-
-[node name="CancelButton" type="Button" parent="Layout"]
-visible = false
-margin_left = 82.0
-margin_right = 142.0
-margin_bottom = 25.0
-rect_min_size = Vector2( 60, 0 )
-text = "Cancel"
-__meta__ = {
-"_edit_use_anchors_": false
-}
-
-[node name="ClearButton" type="Button" parent="Layout"]
-margin_left = 132.0
-margin_right = 192.0
-margin_bottom = 25.0
-rect_min_size = Vector2( 60, 0 )
-text = "Clear"
-
-[connection signal="pressed" from="Layout/SetButton" to="." method="_on_SetButton_pressed"]
-[connection signal="pressed" from="Layout/SaveButton" to="." method="_on_SaveButton_pressed"]
-[connection signal="pressed" from="Layout/CancelButton" to="." method="_on_CancelButton_pressed"]
-[connection signal="pressed" from="Layout/ClearButton" to="." method="_on_ClearButton_pressed"]
diff --git a/addons/gut/gui/arrow.png b/addons/gut/gui/arrow.png
deleted file mode 100644
index 26a7dc4..0000000
--- a/addons/gut/gui/arrow.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:7f5a2f25d0cc68b8281bda24cdcd1d816e718d11fa0d050ede6cbad9033d17ed
-size 122
diff --git a/addons/gut/gui/arrow.png.import b/addons/gut/gui/arrow.png.import
deleted file mode 100644
index 3336a6b..0000000
--- a/addons/gut/gui/arrow.png.import
+++ /dev/null
@@ -1,35 +0,0 @@
-[remap]
-
-importer="texture"
-type="StreamTexture"
-path="res://.import/arrow.png-2b5b2d838b5b3467cf300ac2da1630d9.stex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://addons/gut/gui/arrow.png"
-dest_files=[ "res://.import/arrow.png-2b5b2d838b5b3467cf300ac2da1630d9.stex" ]
-
-[params]
-
-compress/mode=0
-compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
-compress/normal_map=0
-flags/repeat=0
-flags/filter=true
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
-process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
diff --git a/addons/gut/gui/gut_config_gui.gd b/addons/gut/gui/gut_config_gui.gd
deleted file mode 100644
index 4f056ff..0000000
--- a/addons/gut/gui/gut_config_gui.gd
+++ /dev/null
@@ -1,411 +0,0 @@
-# ------------------------------------------------------------------------------
-# ------------------------------------------------------------------------------
-class DirectoryCtrl:
- extends HBoxContainer
-
- var text = '' setget set_text, get_text
- var _txt_path = LineEdit.new()
- var _btn_dir = Button.new()
- var _dialog = FileDialog.new()
-
- func _init():
- _btn_dir.text = '...'
- _btn_dir.connect('pressed', self, '_on_dir_button_pressed')
-
- _txt_path.size_flags_horizontal = _txt_path.SIZE_EXPAND_FILL
-
- _dialog.mode = _dialog.MODE_OPEN_DIR
- _dialog.resizable = true
- _dialog.connect("dir_selected", self, '_on_selected')
- _dialog.connect("file_selected", self, '_on_selected')
- _dialog.rect_size = Vector2(1000, 700)
-
- func _on_selected(path):
- set_text(path)
-
-
- func _on_dir_button_pressed():
- _dialog.current_dir = _txt_path.text
- _dialog.popup_centered()
-
-
- func _ready():
- add_child(_txt_path)
- add_child(_btn_dir)
- add_child(_dialog)
-
- func get_text():
- return _txt_path.text
-
- func set_text(t):
- text = t
- _txt_path.text = text
-
- func get_line_edit():
- return _txt_path
-
-# ------------------------------------------------------------------------------
-# ------------------------------------------------------------------------------
-class FileCtrl:
- extends DirectoryCtrl
-
- func _init():
- _dialog.mode = _dialog.MODE_OPEN_FILE
-
-# ------------------------------------------------------------------------------
-# ------------------------------------------------------------------------------
-class Vector2Ctrl:
- extends VBoxContainer
-
- var value = Vector2(-1, -1) setget set_value, get_value
- var disabled = false setget set_disabled, get_disabled
- var x_spin = SpinBox.new()
- var y_spin = SpinBox.new()
-
- func _init():
- add_child(_make_one('x: ', x_spin))
- add_child(_make_one('y: ', y_spin))
-
- func _make_one(txt, spinner):
- var hbox = HBoxContainer.new()
- var lbl = Label.new()
- lbl.text = txt
- hbox.add_child(lbl)
- hbox.add_child(spinner)
- spinner.min_value = -1
- spinner.max_value = 10000
- spinner.size_flags_horizontal = spinner.SIZE_EXPAND_FILL
- return hbox
-
- func set_value(v):
- if(v != null):
- x_spin.value = v[0]
- y_spin.value = v[1]
-
- # Returns array instead of vector2 b/c that is what is stored in
- # in the dictionary and what is expected everywhere else.
- func get_value():
- return [x_spin.value, y_spin.value]
-
- func set_disabled(should):
- get_parent().visible = !should
- x_spin.visible = !should
- y_spin.visible = !should
-
- func get_disabled():
- pass
-
-
-
-# ------------------------------------------------------------------------------
-# ------------------------------------------------------------------------------
-var _base_container = null
-var _base_control = null
-const DIRS_TO_LIST = 6
-var _cfg_ctrls = {}
-var _avail_fonts = ['AnonymousPro', 'CourierPrime', 'LobsterTwo', 'Default']
-
-
-func _init(cont):
- _base_container = cont
-
- _base_control = HBoxContainer.new()
- _base_control.size_flags_horizontal = _base_control.SIZE_EXPAND_FILL
- _base_control.mouse_filter = _base_control.MOUSE_FILTER_PASS
-
- # I don't remember what this is all about at all. Could be
- # garbage. Decided to spend more time typing this message
- # than figuring it out.
- var lbl = Label.new()
- lbl.size_flags_horizontal = lbl.SIZE_EXPAND_FILL
- lbl.mouse_filter = lbl.MOUSE_FILTER_STOP
- _base_control.add_child(lbl)
-
-
-# ------------------
-# Private
-# ------------------
-func _new_row(key, disp_text, value_ctrl, hint):
- var ctrl = _base_control.duplicate()
- var lbl = ctrl.get_node("Label")
-
- lbl.hint_tooltip = hint
- lbl.text = disp_text
- _base_container.add_child(ctrl)
-
- _cfg_ctrls[key] = value_ctrl
- ctrl.add_child(value_ctrl)
-
- var rpad = CenterContainer.new()
- rpad.rect_min_size.x = 5
- ctrl.add_child(rpad)
-
- return ctrl
-
-
-func _add_title(text):
- var row = _base_control.duplicate()
- var lbl = row.get_node('Label')
-
- lbl.text = text
- lbl.align = Label.ALIGN_CENTER
- _base_container.add_child(row)
-
- row.connect('draw', self, '_on_title_cell_draw', [row])
-
-
-func _add_number(key, value, disp_text, v_min, v_max, hint=''):
- var value_ctrl = SpinBox.new()
- value_ctrl.value = value
- value_ctrl.size_flags_horizontal = value_ctrl.SIZE_EXPAND_FILL
- value_ctrl.min_value = v_min
- value_ctrl.max_value = v_max
- _wire_select_on_focus(value_ctrl.get_line_edit())
-
- _new_row(key, disp_text, value_ctrl, hint)
-
-
-func _add_select(key, value, values, disp_text, hint=''):
- var value_ctrl = OptionButton.new()
- var select_idx = 0
- for i in range(values.size()):
- value_ctrl.add_item(values[i])
- if(value == values[i]):
- select_idx = i
- value_ctrl.selected = select_idx
- value_ctrl.size_flags_horizontal = value_ctrl.SIZE_EXPAND_FILL
-
- _new_row(key, disp_text, value_ctrl, hint)
-
-
-func _add_value(key, value, disp_text, hint=''):
- var value_ctrl = LineEdit.new()
- value_ctrl.size_flags_horizontal = value_ctrl.SIZE_EXPAND_FILL
- value_ctrl.text = value
- _wire_select_on_focus(value_ctrl)
-
- _new_row(key, disp_text, value_ctrl, hint)
-
-
-func _add_boolean(key, value, disp_text, hint=''):
- var value_ctrl = CheckBox.new()
- value_ctrl.pressed = value
-
- _new_row(key, disp_text, value_ctrl, hint)
-
-
-func _add_directory(key, value, disp_text, hint=''):
- var value_ctrl = DirectoryCtrl.new()
- value_ctrl.size_flags_horizontal = value_ctrl.SIZE_EXPAND_FILL
- value_ctrl.text = value
- _wire_select_on_focus(value_ctrl.get_line_edit())
-
- _new_row(key, disp_text, value_ctrl, hint)
-
-
-func _add_file(key, value, disp_text, hint=''):
- var value_ctrl = FileCtrl.new()
- value_ctrl.size_flags_horizontal = value_ctrl.SIZE_EXPAND_FILL
- value_ctrl.text = value
- _wire_select_on_focus(value_ctrl.get_line_edit())
-
- _new_row(key, disp_text, value_ctrl, hint)
-
-
-func _add_color(key, value, disp_text, hint=''):
- var value_ctrl = ColorPickerButton.new()
- value_ctrl.size_flags_horizontal = value_ctrl.SIZE_EXPAND_FILL
- value_ctrl.color = value
-
- _new_row(key, disp_text, value_ctrl, hint)
-
-
-func _add_vector2(key, value, disp_text, hint=''):
- var value_ctrl = Vector2Ctrl.new()
- value_ctrl.size_flags_horizontal = value_ctrl.SIZE_EXPAND_FILL
- value_ctrl.value = value
- _wire_select_on_focus(value_ctrl.x_spin.get_line_edit())
- _wire_select_on_focus(value_ctrl.y_spin.get_line_edit())
-
- _new_row(key, disp_text, value_ctrl, hint)
-# -----------------------------
-
-
-# ------------------
-# Events
-# ------------------
-func _wire_select_on_focus(which):
- which.connect('focus_entered', self, '_on_ctrl_focus_highlight', [which])
- which.connect('focus_exited', self, '_on_ctrl_focus_unhighlight', [which])
-
-
-func _on_ctrl_focus_highlight(which):
- if(which.has_method('select_all')):
- which.call_deferred('select_all')
-
-
-func _on_ctrl_focus_unhighlight(which):
- if(which.has_method('select')):
- which.select(0, 0)
-
-
-func _on_title_cell_draw(which):
- which.draw_rect(Rect2(Vector2(0, 0), which.rect_size), Color(0, 0, 0, .15))
-
-
-# ------------------
-# Public
-# ------------------
-func get_config_issues():
- var to_return = []
- var has_directory = false
- var dir = Directory.new()
-
- for i in range(DIRS_TO_LIST):
- var key = str('directory_', i)
- var path = _cfg_ctrls[key].text
- if(path != null and path != ''):
- has_directory = true
- if(!dir.dir_exists(path)):
- to_return.append(str('Test directory ', path, ' does not exist.'))
-
- if(!has_directory):
- to_return.append('You do not have any directories set.')
-
- if(!_cfg_ctrls['suffix'].text.ends_with('.gd')):
- to_return.append("Script suffix must end in '.gd'")
-
- return to_return
-
-
-func set_options(options):
- _add_title("Settings")
- _add_number("log_level", options.log_level, "Log Level", 0, 3,
- "Detail level for log messages.\n" + \
- "\t0: Errors and failures only.\n" + \
- "\t1: Adds all test names + warnings + info\n" + \
- "\t2: Shows all asserts\n" + \
- "\t3: Adds more stuff probably, maybe not.")
- _add_boolean('ignore_pause', options.ignore_pause, 'Ignore Pause',
- "Ignore calls to pause_before_teardown")
- _add_boolean('hide_orphans', options.hide_orphans, 'Hide Orphans',
- 'Do not display orphan counts in output.')
- _add_boolean('should_exit', options.should_exit, 'Exit on Finish',
- "Exit when tests finished.")
- _add_boolean('should_exit_on_success', options.should_exit_on_success, 'Exit on Success',
- "Exit if there are no failures. Does nothing if 'Exit on Finish' is enabled.")
-
-
- _add_title("Panel Output")
- _add_select('output_font_name', options.panel_options.font_name, _avail_fonts, 'Font',
- "The name of the font to use when running tests and in the output panel to the left.")
- _add_number('output_font_size', options.panel_options.font_size, 'Font Size', 5, 100,
- "The font size to use when running tests and in the output panel to the left.")
-
-
- _add_title('Runner Window')
- _add_boolean("gut_on_top", options.gut_on_top, "On Top",
- "The GUT Runner appears above children added during tests.")
- _add_number('opacity', options.opacity, 'Opacity', 0, 100,
- "The opacity of GUT when tests are running.")
- _add_boolean('should_maximize', options.should_maximize, 'Maximize',
- "Maximize GUT when tests are being run.")
- _add_boolean('compact_mode', options.compact_mode, 'Compact Mode',
- 'The runner will be in compact mode. This overrides Maximize.')
-
- _add_title('Runner Appearance')
- _add_select('font_name', options.font_name, _avail_fonts, 'Font',
- "The font to use for text output in the Gut Runner.")
- _add_number('font_size', options.font_size, 'Font Size', 5, 100,
- "The font size for text output in the Gut Runner.")
- _add_color('font_color', options.font_color, 'Font Color',
- "The font color for text output in the Gut Runner.")
- _add_color('background_color', options.background_color, 'Background Color',
- "The background color for text output in the Gut Runner.")
- _add_boolean('disable_colors', options.disable_colors, 'Disable Formatting',
- 'Disable formatting and colors used in the Runner. Does not affect panel output.')
-
- _add_title('Test Directories')
- _add_boolean('include_subdirs', options.include_subdirs, 'Include Subdirs',
- "Include subdirectories of the directories configured below.")
- for i in range(DIRS_TO_LIST):
- var value = ''
- if(options.dirs.size() > i):
- value = options.dirs[i]
-
- _add_directory(str('directory_', i), value, str('Directory ', i))
-
- _add_title("XML Output")
- _add_value("junit_xml_file", options.junit_xml_file, "Output Path",
- "Path and filename where GUT should create a JUnit compliant XML file. " +
- "This file will contain the results of the last test run. To avoid " +
- "overriding the file use Include Timestamp.")
- _add_boolean("junit_xml_timestamp", options.junit_xml_timestamp, "Include Timestamp",
- "Include a timestamp in the filename so that each run gets its own xml file.")
-
-
- _add_title('Hooks')
- _add_file('pre_run_script', options.pre_run_script, 'Pre-Run Hook',
- 'This script will be run by GUT before any tests are run.')
- _add_file('post_run_script', options.post_run_script, 'Post-Run Hook',
- 'This script will be run by GUT after all tests are run.')
-
-
- _add_title('Misc')
- _add_value('prefix', options.prefix, 'Script Prefix',
- "The filename prefix for all test scripts.")
- _add_value('suffix', options.suffix, 'Script Suffix',
- "Script suffix, including .gd extension. For example '_foo.gd'.")
-
-
-func get_options(base_opts):
- var to_return = base_opts.duplicate()
-
- # Settings
- to_return.log_level = _cfg_ctrls.log_level.value
- to_return.ignore_pause = _cfg_ctrls.ignore_pause.pressed
- to_return.hide_orphans = _cfg_ctrls.hide_orphans.pressed
- to_return.should_exit = _cfg_ctrls.should_exit.pressed
- to_return.should_exit_on_success = _cfg_ctrls.should_exit_on_success.pressed
-
- #Output
- to_return.panel_options.font_name = _cfg_ctrls.output_font_name.get_item_text(
- _cfg_ctrls.output_font_name.selected)
- to_return.panel_options.font_size = _cfg_ctrls.output_font_size.value
-
- # Runner Appearance
- to_return.font_name = _cfg_ctrls.font_name.get_item_text(
- _cfg_ctrls.font_name.selected)
- to_return.font_size = _cfg_ctrls.font_size.value
- to_return.should_maximize = _cfg_ctrls.should_maximize.pressed
- to_return.compact_mode = _cfg_ctrls.compact_mode.pressed
- to_return.opacity = _cfg_ctrls.opacity.value
- to_return.background_color = _cfg_ctrls.background_color.color.to_html()
- to_return.font_color = _cfg_ctrls.font_color.color.to_html()
- to_return.disable_colors = _cfg_ctrls.disable_colors.pressed
- to_return.gut_on_top = _cfg_ctrls.gut_on_top.pressed
-
-
- # Directories
- to_return.include_subdirs = _cfg_ctrls.include_subdirs.pressed
- var dirs = []
- for i in range(DIRS_TO_LIST):
- var key = str('directory_', i)
- var val = _cfg_ctrls[key].text
- if(val != '' and val != null):
- dirs.append(val)
- to_return.dirs = dirs
-
- # XML Output
- to_return.junit_xml_file = _cfg_ctrls.junit_xml_file.text
- to_return.junit_xml_timestamp = _cfg_ctrls.junit_xml_timestamp.pressed
-
- # Hooks
- to_return.pre_run_script = _cfg_ctrls.pre_run_script.text
- to_return.post_run_script = _cfg_ctrls.post_run_script.text
-
- # Misc
- to_return.prefix = _cfg_ctrls.prefix.text
- to_return.suffix = _cfg_ctrls.suffix.text
-
- return to_return
diff --git a/addons/gut/gui/play.png b/addons/gut/gui/play.png
deleted file mode 100644
index 2be1d4d..0000000
--- a/addons/gut/gui/play.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:d4280462a7940ebaf184e2b92bd01a69cf09ae1c97b175ac92e1410d16ecf278
-size 143
diff --git a/addons/gut/gui/play.png.import b/addons/gut/gui/play.png.import
deleted file mode 100644
index 047fdc4..0000000
--- a/addons/gut/gui/play.png.import
+++ /dev/null
@@ -1,35 +0,0 @@
-[remap]
-
-importer="texture"
-type="StreamTexture"
-path="res://.import/play.png-5c90e88e8136487a183a099d67a7de24.stex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://addons/gut/gui/play.png"
-dest_files=[ "res://.import/play.png-5c90e88e8136487a183a099d67a7de24.stex" ]
-
-[params]
-
-compress/mode=0
-compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
-compress/normal_map=0
-flags/repeat=0
-flags/filter=true
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
-process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
diff --git a/addons/gut/gui/script_text_editor_controls.gd b/addons/gut/gui/script_text_editor_controls.gd
deleted file mode 100644
index 98741e9..0000000
--- a/addons/gut/gui/script_text_editor_controls.gd
+++ /dev/null
@@ -1,230 +0,0 @@
-# Holds weakrefs to a ScriptTextEditor and related children nodes
-# that might be useful. Though the TextEdit is really the only one, but
-# since the tree may change, the first TextEdit under a CodeTextEditor is
-# the one we use...so we hold a ref to the CodeTextEditor too.
-class ScriptEditorControlRef:
- var _text_edit = null
- var _script_editor = null
- var _code_editor = null
-
- func _init(script_edit):
- _script_editor = weakref(script_edit)
- _populate_controls()
-
-
- func _populate_controls():
- # who knows if the tree will change so get the first instance of each
- # type of control we care about. Chances are there won't be more than
- # one of these in the future, but their position in the tree may change.
- _code_editor = weakref(_get_first_child_named('CodeTextEditor', _script_editor.get_ref()))
- _text_edit = weakref(_get_first_child_named("TextEdit", _code_editor.get_ref()))
-
-
- func _get_first_child_named(obj_name, parent_obj):
- if(parent_obj == null):
- return null
-
- var kids = parent_obj.get_children()
- var index = 0
- var to_return = null
-
- while(index < kids.size() and to_return == null):
- if(str(kids[index]).find(str("[", obj_name)) != -1):
- to_return = kids[index]
- else:
- to_return = _get_first_child_named(obj_name, kids[index])
- if(to_return == null):
- index += 1
-
- return to_return
-
-
- func get_script_text_edit():
- return _script_editor.get_ref()
-
-
- func get_text_edit():
- # ScriptTextEditors that are loaded when the project is opened
- # do not have their children populated yet. So if we may have to
- # _populate_controls again if we don't have one.
- if(_text_edit == null):
- _populate_controls()
- return _text_edit.get_ref()
-
-
- func get_script_editor():
- return _script_editor
-
-
- func is_visible():
- var to_return = false
- if(_script_editor.get_ref()):
- to_return = _script_editor.get_ref().visible
- return to_return
-
-# ##############################################################################
-#
-# ##############################################################################
-
-# Used to make searching for the controls easier and faster.
-var _script_editors_parent = null
-# reference the ScriptEditor instance
-var _script_editor = null
-# Array of ScriptEditorControlRef containing all the opened ScriptTextEditors
-# and related controls at the time of the last refresh.
-var _script_editor_controls = []
-
-var _method_prefix = 'test_'
-var _inner_class_prefix = 'Test'
-
-func _init(script_edit):
- _script_editor = script_edit
- refresh()
-
-
-func _is_script_editor(obj):
- return str(obj).find('[ScriptTextEditor') != -1
-
-
-# Find the first ScriptTextEditor and then get its parent. Done this way
-# because who knows if the parent object will change. This is somewhat
-# future proofed.
-func _find_script_editors_parent():
- var _first_editor = _get_first_child_of_type_name("ScriptTextEditor", _script_editor)
- if(_first_editor != null):
- _script_editors_parent = _first_editor.get_parent()
-
-
-func _populate_editors():
- if(_script_editors_parent == null):
- return
-
- _script_editor_controls.clear()
- for child in _script_editors_parent.get_children():
- if(_is_script_editor(child)):
- var ref = ScriptEditorControlRef.new(child)
- _script_editor_controls.append(ref)
-
-# Yes, this is the same as the one above but with a different name. This was
-# easier than trying to find a place where it could be used by both.
-func _get_first_child_of_type_name(obj_name, parent_obj):
- if(parent_obj == null):
- return null
-
- var kids = parent_obj.get_children()
- var index = 0
- var to_return = null
-
- while(index < kids.size() and to_return == null):
- if(str(kids[index]).find(str("[", obj_name)) != -1):
- to_return = kids[index]
- else:
- to_return = _get_first_child_of_type_name(obj_name, kids[index])
- if(to_return == null):
- index += 1
-
- return to_return
-
-
-func _get_func_name_from_line(text):
- text = text.strip_edges()
- var left = text.split("(")[0]
- var func_name = left.split(" ")[1]
- return func_name
-
-
-func _get_class_name_from_line(text):
- text = text.strip_edges()
- var right = text.split(" ")[1]
- var the_name = right.rstrip(":")
- return the_name
-
-func refresh():
- if(_script_editors_parent == null):
- _find_script_editors_parent()
-
- if(_script_editors_parent != null):
- _populate_editors()
-
-
-func get_current_text_edit():
- var cur_script_editor = null
- var idx = 0
-
- while(idx < _script_editor_controls.size() and cur_script_editor == null):
- if(_script_editor_controls[idx].is_visible()):
- cur_script_editor = _script_editor_controls[idx]
- else:
- idx += 1
-
- var to_return = null
- if(cur_script_editor != null):
- to_return = cur_script_editor.get_text_edit()
-
- return to_return
-
-
-func get_script_editor_controls():
- var to_return = []
- for ctrl_ref in _script_editor_controls:
- to_return.append(ctrl_ref.get_script_text_edit())
-
- return to_return
-
-
-func get_line_info():
- var editor = get_current_text_edit()
- if(editor == null):
- return
-
- var info = {
- script = null,
- inner_class = null,
- test_method = null
- }
-
- var line = editor.cursor_get_line()
- var done_func = false
- var done_inner = false
- while(line > 0 and (!done_func or !done_inner)):
- if(editor.can_fold(line)):
- var text = editor.get_line(line)
- var strip_text = text.strip_edges(true, false) # only left
-
- if(!done_func and strip_text.begins_with("func ")):
- var func_name = _get_func_name_from_line(text)
- if(func_name.begins_with(_method_prefix)):
- info.test_method = func_name
- done_func = true
- # If the func line is left justified then there won't be any
- # inner classes above it.
- if(strip_text == text):
- done_inner = true
-
- if(!done_inner and strip_text.begins_with("class")):
- var inner_name = _get_class_name_from_line(text)
- if(inner_name.begins_with(_inner_class_prefix)):
- info.inner_class = inner_name
- done_inner = true
- # if we found an inner class then we are already past
- # any test the cursor could be in.
- done_func = true
- line -= 1
-
- return info
-
-
-func get_method_prefix():
- return _method_prefix
-
-
-func set_method_prefix(method_prefix):
- _method_prefix = method_prefix
-
-
-func get_inner_class_prefix():
- return _inner_class_prefix
-
-
-func set_inner_class_prefix(inner_class_prefix):
- _inner_class_prefix = inner_class_prefix