You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
486 lines
14 KiB
486 lines
14 KiB
3 years ago
|
[gd_scene load_steps=8 format=2]
|
||
|
|
||
|
[ext_resource path="res://addons/WAT/assets/icon_add.png" type="Texture" id=1]
|
||
|
[ext_resource path="res://addons/WAT/ui/results/ResultsForest.tscn" type="PackedScene" id=2]
|
||
|
[ext_resource path="res://addons/WAT/assets/play.svg" type="Texture" id=8]
|
||
|
[ext_resource path="res://addons/WAT/assets/kofi.png" type="Texture" id=9]
|
||
|
|
||
|
[sub_resource type="GDScript" id=1]
|
||
|
script/source = "tool
|
||
|
extends PanelContainer
|
||
|
|
||
|
enum RESULTS { EXPAND_ALL, COLLAPSE_ALL, EXPAND_FAILURES }
|
||
|
enum RUN { ALL, DIRECTORY, SCRIPT, TAGGED, METHOD, RERUN_FAILURES }
|
||
|
const NOTHING_SELECTED: int = -1
|
||
|
const filesystem = preload(\"res://addons/WAT/system/filesystem.gd\")
|
||
|
const TestRunner: String = \"res://addons/WAT/core/test_runner/TestRunner.tscn\"
|
||
|
onready var GUI: VBoxContainer = $GUI
|
||
|
onready var Interact: HBoxContainer = $GUI/Interact
|
||
|
onready var Summary: Label = $GUI/Summary
|
||
|
onready var Results: TabContainer = $GUI/Results
|
||
|
onready var Run: HBoxContainer = $GUI/Interact/Run
|
||
|
onready var Select: HBoxContainer = $GUI/Interact/Select
|
||
|
onready var ViewMenu: PopupMenu = $GUI/Interact/View.get_popup()
|
||
|
onready var QuickStart: Button = $GUI/Interact/Run/QuickStart
|
||
|
onready var Menu: PopupMenu = $GUI/Interact/Run/Menu.get_popup()
|
||
|
onready var DirectorySelector: OptionButton = $GUI/Interact/Select/Directory
|
||
|
onready var ScriptSelector: OptionButton = $GUI/Interact/Select/Script
|
||
|
onready var TagSelector: OptionButton = $GUI/Interact/Select/Tag
|
||
|
onready var Repeater: SpinBox = $GUI/Interact/Repeat
|
||
|
onready var HiddenBorder: Separator = $GUI/HiddenBorder
|
||
|
onready var MethodSelector: OptionButton = $GUI/Method
|
||
|
onready var More: Button = $GUI/Interact/More
|
||
|
var execute = preload(\"res://addons/WAT/core/test_runner/execute.gd\").new()
|
||
|
|
||
|
func _on_view_pressed(id: int) -> void:
|
||
|
match id:
|
||
|
RESULTS.EXPAND_ALL:
|
||
|
Results.expand_all()
|
||
|
RESULTS.COLLAPSE_ALL:
|
||
|
Results.collapse_all()
|
||
|
RESULTS.EXPAND_FAILURES:
|
||
|
Results.expand_failures()
|
||
|
|
||
|
func _ready() -> void:
|
||
|
set_process(false)
|
||
|
More.connect(\"pressed\", self, \"_show_more\")
|
||
|
_link($GUI/Links/Issue, \"https://github.com/CodeDarigan/WAT/issues/new\")
|
||
|
_link($GUI/Links/RequestDocs, \"https://github.com/CodeDarigan/WATDocs/issues/new\")
|
||
|
_link($GUI/Links/OnlineDocs, \"https://wat.readthedocs.io/en/latest/index.html\")
|
||
|
_link($GUI/Links/Support, \"https://www.ko-fi.com/alexanddraw\")
|
||
|
Menu.clear()
|
||
|
Menu.add_item(\"Run All Tests\")
|
||
|
Menu.add_item(\"Run Selected Directory\")
|
||
|
Menu.add_item(\"Run Selected Script\")
|
||
|
Menu.add_item(\"Run Tagged\")
|
||
|
Menu.add_item(\"Run Method\")
|
||
|
Menu.add_item(\"Rerun Failures\")
|
||
|
ViewMenu.clear()
|
||
|
ViewMenu.add_item(\"Expand All Results\")
|
||
|
ViewMenu.add_item(\"Collapse All Results\")
|
||
|
ViewMenu.add_item(\"Expand All Failures\")
|
||
|
QuickStart.connect(\"pressed\", self, \"_on_run_pressed\", [RUN.ALL])
|
||
|
Menu.connect(\"id_pressed\", self, \"_on_run_pressed\")
|
||
|
ViewMenu.connect(\"id_pressed\", $GUI/Results, \"_on_view_pressed\")
|
||
|
DirectorySelector.clear()
|
||
|
ScriptSelector.clear()
|
||
|
TagSelector.clear()
|
||
|
DirectorySelector.add_item(\"Select Directory\")
|
||
|
ScriptSelector.add_item(\"Select Script\")
|
||
|
TagSelector.add_item(\"Select Tag\")
|
||
|
DirectorySelector.connect(\"pressed\", self, \"_on_directory_selector_pressed\")
|
||
|
ScriptSelector.connect(\"pressed\", self, \"_on_script_selector_pressed\")
|
||
|
TagSelector.connect(\"pressed\", self, \"_on_tag_selector_pressed\")
|
||
|
MethodSelector.connect(\"pressed\", self, \"_on_method_selector_pressed\")
|
||
|
ScriptSelector.get_popup().hide()
|
||
|
TagSelector.get_popup().hide()
|
||
|
|
||
|
func _show_more() -> void:
|
||
|
MethodSelector.visible = not MethodSelector.visible
|
||
|
HiddenBorder.visible = MethodSelector.visible
|
||
|
|
||
|
func _on_method_selector_pressed() -> void:
|
||
|
MethodSelector.clear()
|
||
|
var path: String = ScriptSelector.get_item_text(ScriptSelector.selected)
|
||
|
if not path.ends_with(\".gd\"):
|
||
|
MethodSelector.add_item(\"Please Select A Script First\")
|
||
|
return
|
||
|
var script = load(path)
|
||
|
for method in script.get_script_method_list():
|
||
|
if method.name.begins_with(\"test\"):
|
||
|
MethodSelector.add_item(method.name)
|
||
|
|
||
|
func _on_run_pressed(option: int) -> void:
|
||
|
set_process(true)
|
||
|
ProjectSettings.set(\"WAT/TestStrategy\", {})
|
||
|
ProjectSettings.save()
|
||
|
match option:
|
||
|
RUN.ALL:
|
||
|
var strat = strategy()
|
||
|
strat[\"strategy\"] = \"RunAll\"
|
||
|
strat[\"repeat\"] = Repeater.value as int
|
||
|
ProjectSettings.set(\"WAT/TestStrategy\", strat)
|
||
|
_run()
|
||
|
RUN.DIRECTORY:
|
||
|
var strat = strategy()
|
||
|
strat[\"strategy\"] = \"RunDirectory\"
|
||
|
strat[\"directory\"] = selected(DirectorySelector)
|
||
|
strat[\"repeat\"] = Repeater.value as int
|
||
|
ProjectSettings.set(\"WAT/TestStrategy\", strat)
|
||
|
_run()
|
||
|
RUN.SCRIPT:
|
||
|
var strat = strategy()
|
||
|
strat[\"strategy\"] = \"RunScript\"
|
||
|
strat[\"script\"] = selected(ScriptSelector)
|
||
|
strat[\"repeat\"] = Repeater.value as int
|
||
|
ProjectSettings.set(\"WAT/TestStrategy\", strat)
|
||
|
_run()
|
||
|
RUN.TAGGED:
|
||
|
var strat = strategy()
|
||
|
strat[\"strategy\"] = \"RunTag\"
|
||
|
strat[\"tag\"] = selected(TagSelector)
|
||
|
strat[\"repeat\"] = Repeater.value as int
|
||
|
ProjectSettings.set(\"WAT/TestStrategy\", strat)
|
||
|
_run()
|
||
|
RUN.METHOD:
|
||
|
var strat = strategy()
|
||
|
strat[\"strategy\"] = \"RunMethod\"
|
||
|
strat[\"script\"] = selected(ScriptSelector)
|
||
|
strat[\"method\"] = selected(MethodSelector)
|
||
|
strat[\"repeat\"] = Repeater.value as int
|
||
|
ProjectSettings.set(\"WAT/TestStrategy\", strat)
|
||
|
_run()
|
||
|
RUN.RERUN_FAILURES:
|
||
|
var strat = strategy()
|
||
|
strat[\"strategy\"] = \"RerunFailures\"
|
||
|
strat[\"repeat\"] = Repeater.value as int
|
||
|
ProjectSettings.set(\"WAT/TestStrategy\", strat)
|
||
|
_run()
|
||
|
|
||
|
func strategy() -> Dictionary:
|
||
|
return ProjectSettings.get_setting(\"WAT/TestStrategy\")
|
||
|
|
||
|
func _run() -> void:
|
||
|
start_time()
|
||
|
Results.clear()
|
||
|
execute.run(TestRunner)
|
||
|
EditorPlugin.new().make_bottom_panel_item_visible(self)
|
||
|
|
||
|
func _process(delta):
|
||
|
if WAT.Results.exist():
|
||
|
var results = WAT.Results.withdraw()
|
||
|
summarize(results)
|
||
|
Results.display(results)
|
||
|
set_process(false)
|
||
|
|
||
|
func selected(selector: OptionButton) -> String:
|
||
|
if selector.selected == NOTHING_SELECTED:
|
||
|
push_warning(\"Nothing Selected\")
|
||
|
return selector.get_item_text(selector.selected)
|
||
|
|
||
|
func _on_directory_selector_pressed() -> void:
|
||
|
DirectorySelector.clear()
|
||
|
DirectorySelector.add_item(ProjectSettings.get_setting(\"WAT/Test_Directory\"))
|
||
|
for directory in filesystem.directories():
|
||
|
DirectorySelector.add_item(directory)
|
||
|
|
||
|
func _on_script_selector_pressed() -> void:
|
||
|
ScriptSelector.clear()
|
||
|
for script in filesystem.scripts():
|
||
|
if script.ends_with(\".gd\"):
|
||
|
if load(script).get(\"TEST\") != null:
|
||
|
ScriptSelector.add_item(script)
|
||
|
if load(script).get(\"IS_WAT_SUITE\"):
|
||
|
ScriptSelector.add_item(script)
|
||
|
|
||
|
func _on_tag_selector_pressed() -> void:
|
||
|
TagSelector.clear()
|
||
|
for tag in ProjectSettings.get_setting(\"WAT/Tags\"):
|
||
|
TagSelector.add_item(tag)
|
||
|
|
||
|
func _link(button: Button, link: String):
|
||
|
button.connect(\"pressed\", OS, \"shell_open\", [link], CONNECT_DEFERRED)
|
||
|
|
||
|
func test_directory() -> String:
|
||
|
return ProjectSettings.get_setting(\"WAT/Test_Directory\")
|
||
|
|
||
|
func set_run_path(path: String) -> void:
|
||
|
ProjectSettings.set(\"WAT/ActiveRunPath\", path)
|
||
|
|
||
|
const SUMMARY: String = \\
|
||
|
\"Time Taken: {t} | Ran {r} Tests | {p} Tests Passed | {f} Tests Failed | Ran Tests {e} Times\"
|
||
|
|
||
|
var time: float = 0
|
||
|
var passed: int = 0
|
||
|
var failed: int = 0
|
||
|
var total: int = 0
|
||
|
var runcount: int = 0
|
||
|
|
||
|
func start_time() -> void:
|
||
|
runcount += 1
|
||
|
time = OS.get_ticks_msec()
|
||
|
|
||
|
func summarize(caselist: Array) -> void:
|
||
|
time = (OS.get_ticks_msec() - time) / 1000
|
||
|
passed = 0
|
||
|
failed = 0
|
||
|
total = 0
|
||
|
for case in caselist:
|
||
|
total += 1
|
||
|
if case.success:
|
||
|
passed += 1
|
||
|
else:
|
||
|
failed += 1
|
||
|
var summary = {t = time, r = total, p = passed, f = failed, e = runcount}
|
||
|
$GUI/Summary.text = SUMMARY.format(summary)
|
||
|
"
|
||
|
|
||
|
[sub_resource type="InputEventKey" id=2]
|
||
|
control = true
|
||
|
command = true
|
||
|
pressed = true
|
||
|
scancode = 178
|
||
|
|
||
|
[sub_resource type="ShortCut" id=3]
|
||
|
shortcut = SubResource( 2 )
|
||
|
|
||
|
[node name="Tests" type="PanelContainer"]
|
||
|
margin_right = 1024.0
|
||
|
margin_bottom = 600.0
|
||
|
rect_min_size = Vector2( 0, 300 )
|
||
|
size_flags_horizontal = 3
|
||
|
size_flags_vertical = 3
|
||
|
script = SubResource( 1 )
|
||
|
__meta__ = {
|
||
|
"_edit_use_anchors_": false
|
||
|
}
|
||
|
|
||
|
[node name="GUI" type="VBoxContainer" parent="."]
|
||
|
margin_left = 7.0
|
||
|
margin_top = 7.0
|
||
|
margin_right = 1017.0
|
||
|
margin_bottom = 593.0
|
||
|
size_flags_horizontal = 3
|
||
|
size_flags_vertical = 3
|
||
|
__meta__ = {
|
||
|
"_edit_use_anchors_": false
|
||
|
}
|
||
|
|
||
|
[node name="Interact" type="HBoxContainer" parent="GUI"]
|
||
|
margin_right = 1010.0
|
||
|
margin_bottom = 24.0
|
||
|
size_flags_horizontal = 3
|
||
|
custom_constants/separation = 10
|
||
|
__meta__ = {
|
||
|
"_edit_use_anchors_": false
|
||
|
}
|
||
|
|
||
|
[node name="Run" type="HBoxContainer" parent="GUI/Interact"]
|
||
|
margin_right = 76.0
|
||
|
margin_bottom = 24.0
|
||
|
|
||
|
[node name="QuickStart" type="Button" parent="GUI/Interact/Run"]
|
||
|
margin_right = 28.0
|
||
|
margin_bottom = 24.0
|
||
|
hint_tooltip = "Run All Tests"
|
||
|
shortcut = SubResource( 3 )
|
||
|
icon = ExtResource( 8 )
|
||
|
flat = true
|
||
|
|
||
|
[node name="VSeparator" type="VSeparator" parent="GUI/Interact/Run"]
|
||
|
margin_left = 32.0
|
||
|
margin_right = 36.0
|
||
|
margin_bottom = 24.0
|
||
|
|
||
|
[node name="Menu" type="MenuButton" parent="GUI/Interact/Run"]
|
||
|
margin_left = 40.0
|
||
|
margin_right = 76.0
|
||
|
margin_bottom = 24.0
|
||
|
text = "Run"
|
||
|
items = [ "Run All Tests", null, 0, false, false, 0, 0, null, "", false, "Run Selected Directory", null, 0, false, false, 1, 0, null, "", false, "Run Selected Script", null, 0, false, false, 2, 0, null, "", false, "Run Tagged", null, 0, false, false, 3, 0, null, "", false, "Run Method", null, 0, false, false, 4, 0, null, "", false, "Rerun Failures", null, 0, false, false, 5, 0, null, "", false ]
|
||
|
switch_on_hover = true
|
||
|
|
||
|
[node name="View" type="MenuButton" parent="GUI/Interact"]
|
||
|
margin_left = 86.0
|
||
|
margin_right = 128.0
|
||
|
margin_bottom = 24.0
|
||
|
text = "View"
|
||
|
items = [ "Expand All Results", null, 0, false, false, 0, 0, null, "", false, "Collapse All Results", null, 0, false, false, 1, 0, null, "", false, "Expand All Failures", null, 0, false, false, 2, 0, null, "", false ]
|
||
|
switch_on_hover = true
|
||
|
|
||
|
[node name="VSeparator" type="VSeparator" parent="GUI/Interact"]
|
||
|
margin_left = 138.0
|
||
|
margin_right = 142.0
|
||
|
margin_bottom = 24.0
|
||
|
|
||
|
[node name="Select" type="HBoxContainer" parent="GUI/Interact"]
|
||
|
margin_left = 152.0
|
||
|
margin_right = 818.0
|
||
|
margin_bottom = 24.0
|
||
|
size_flags_horizontal = 3
|
||
|
size_flags_vertical = 3
|
||
|
|
||
|
[node name="Directory" type="OptionButton" parent="GUI/Interact/Select"]
|
||
|
margin_right = 219.0
|
||
|
margin_bottom = 24.0
|
||
|
grow_horizontal = 0
|
||
|
grow_vertical = 0
|
||
|
hint_tooltip = "select a directory of tests to run"
|
||
|
size_flags_horizontal = 3
|
||
|
size_flags_vertical = 3
|
||
|
custom_constants/hseparation = 20
|
||
|
button_mask = 3
|
||
|
text = "Select Directory"
|
||
|
align = 1
|
||
|
items = [ "Select Directory", null, false, 0, null ]
|
||
|
selected = 0
|
||
|
|
||
|
[node name="Script" type="OptionButton" parent="GUI/Interact/Select"]
|
||
|
margin_left = 223.0
|
||
|
margin_right = 442.0
|
||
|
margin_bottom = 24.0
|
||
|
hint_tooltip = "Select a single test script to run (your choices depend on which folder is selected)."
|
||
|
size_flags_horizontal = 3
|
||
|
size_flags_vertical = 3
|
||
|
text = "Select Script"
|
||
|
align = 1
|
||
|
items = [ "Select Script", null, false, 0, null ]
|
||
|
selected = 0
|
||
|
__meta__ = {
|
||
|
"_editor_description_": "select a test script to run"
|
||
|
}
|
||
|
|
||
|
[node name="Tag" type="OptionButton" parent="GUI/Interact/Select"]
|
||
|
margin_left = 446.0
|
||
|
margin_right = 666.0
|
||
|
margin_bottom = 24.0
|
||
|
hint_tooltip = "select a tag and then run all tests that have that tag"
|
||
|
size_flags_horizontal = 3
|
||
|
text = "Select Tag"
|
||
|
align = 1
|
||
|
items = [ "Select Tag", null, false, 0, null ]
|
||
|
selected = 0
|
||
|
|
||
|
[node name="VSeparator2" type="VSeparator" parent="GUI/Interact"]
|
||
|
margin_left = 828.0
|
||
|
margin_right = 832.0
|
||
|
margin_bottom = 24.0
|
||
|
|
||
|
[node name="Repeat" type="SpinBox" parent="GUI/Interact"]
|
||
|
margin_left = 842.0
|
||
|
margin_right = 972.0
|
||
|
margin_bottom = 24.0
|
||
|
rect_min_size = Vector2( 130, 0 )
|
||
|
size_flags_horizontal = 0
|
||
|
max_value = 10.0
|
||
|
value = 1.0
|
||
|
allow_greater = true
|
||
|
allow_lesser = true
|
||
|
prefix = "Repeat"
|
||
|
suffix = "Times"
|
||
|
|
||
|
[node name="More" type="Button" parent="GUI/Interact"]
|
||
|
margin_left = 982.0
|
||
|
margin_right = 1010.0
|
||
|
margin_bottom = 24.0
|
||
|
icon = ExtResource( 1 )
|
||
|
flat = true
|
||
|
|
||
|
[node name="HiddenBorder" type="HSeparator" parent="GUI"]
|
||
|
visible = false
|
||
|
margin_top = 28.0
|
||
|
margin_right = 1010.0
|
||
|
margin_bottom = 38.0
|
||
|
rect_min_size = Vector2( 0, 10 )
|
||
|
size_flags_horizontal = 3
|
||
|
|
||
|
[node name="Method" type="OptionButton" parent="GUI"]
|
||
|
visible = false
|
||
|
margin_top = 28.0
|
||
|
margin_right = 1010.0
|
||
|
margin_bottom = 48.0
|
||
|
text = "Run Test Method"
|
||
|
align = 1
|
||
|
|
||
|
[node name="Results" parent="GUI" instance=ExtResource( 2 )]
|
||
|
margin_top = 28.0
|
||
|
margin_bottom = 518.0
|
||
|
|
||
|
[node name="Summary" type="Label" parent="GUI"]
|
||
|
margin_top = 522.0
|
||
|
margin_right = 1010.0
|
||
|
margin_bottom = 536.0
|
||
|
size_flags_vertical = 1
|
||
|
text = "Time Taken: 0.00 | Ran 0 Tests | 0 Tests Passed | 0 Tests Failed | Ran Tests 0 Times"
|
||
|
valign = 1
|
||
|
__meta__ = {
|
||
|
"_edit_use_anchors_": false
|
||
|
}
|
||
|
|
||
|
[node name="TopSeperator" type="HSeparator" parent="GUI"]
|
||
|
margin_top = 540.0
|
||
|
margin_right = 1010.0
|
||
|
margin_bottom = 544.0
|
||
|
size_flags_horizontal = 3
|
||
|
|
||
|
[node name="Links" type="HBoxContainer" parent="GUI"]
|
||
|
margin_top = 548.0
|
||
|
margin_right = 1010.0
|
||
|
margin_bottom = 578.0
|
||
|
rect_min_size = Vector2( 0, 30 )
|
||
|
size_flags_horizontal = 3
|
||
|
custom_constants/separation = 0
|
||
|
alignment = 1
|
||
|
__meta__ = {
|
||
|
"_edit_use_anchors_": false
|
||
|
}
|
||
|
|
||
|
[node name="Support" type="Button" parent="GUI/Links"]
|
||
|
margin_right = 249.0
|
||
|
margin_bottom = 30.0
|
||
|
grow_horizontal = 0
|
||
|
grow_vertical = 0
|
||
|
rect_min_size = Vector2( 30, 30 )
|
||
|
hint_tooltip = "Support WAT on Kofi"
|
||
|
focus_mode = 1
|
||
|
size_flags_horizontal = 3
|
||
|
size_flags_vertical = 3
|
||
|
enabled_focus_mode = 1
|
||
|
text = " Support WAT "
|
||
|
icon = ExtResource( 9 )
|
||
|
flat = true
|
||
|
expand_icon = true
|
||
|
|
||
|
[node name="VSeparator" type="VSeparator" parent="GUI/Links"]
|
||
|
margin_left = 249.0
|
||
|
margin_right = 253.0
|
||
|
margin_bottom = 30.0
|
||
|
|
||
|
[node name="Issue" type="Button" parent="GUI/Links"]
|
||
|
margin_left = 253.0
|
||
|
margin_right = 502.0
|
||
|
margin_bottom = 30.0
|
||
|
size_flags_horizontal = 3
|
||
|
shortcut_in_tooltip = false
|
||
|
action_mode = 0
|
||
|
text = "Report An Issue"
|
||
|
flat = true
|
||
|
|
||
|
[node name="VSeparator2" type="VSeparator" parent="GUI/Links"]
|
||
|
margin_left = 502.0
|
||
|
margin_right = 506.0
|
||
|
margin_bottom = 30.0
|
||
|
__meta__ = {
|
||
|
"_edit_use_anchors_": false
|
||
|
}
|
||
|
|
||
|
[node name="RequestDocs" type="Button" parent="GUI/Links"]
|
||
|
margin_left = 506.0
|
||
|
margin_right = 755.0
|
||
|
margin_bottom = 30.0
|
||
|
size_flags_horizontal = 3
|
||
|
text = "Request Docs"
|
||
|
flat = true
|
||
|
|
||
|
[node name="VSeparator3" type="VSeparator" parent="GUI/Links"]
|
||
|
margin_left = 755.0
|
||
|
margin_right = 759.0
|
||
|
margin_bottom = 30.0
|
||
|
__meta__ = {
|
||
|
"_edit_use_anchors_": false
|
||
|
}
|
||
|
|
||
|
[node name="OnlineDocs" type="Button" parent="GUI/Links"]
|
||
|
margin_left = 759.0
|
||
|
margin_right = 1010.0
|
||
|
margin_bottom = 30.0
|
||
|
size_flags_horizontal = 3
|
||
|
size_flags_vertical = 3
|
||
|
text = "Online Docs"
|
||
|
flat = true
|
||
|
|
||
|
[node name="BottomSeperator" type="HSeparator" parent="GUI"]
|
||
|
margin_top = 582.0
|
||
|
margin_right = 1010.0
|
||
|
margin_bottom = 586.0
|