summaryrefslogtreecommitdiff
path: root/addons/gut/gui/GutRunner.gd
diff options
context:
space:
mode:
Diffstat (limited to 'addons/gut/gui/GutRunner.gd')
-rw-r--r--addons/gut/gui/GutRunner.gd98
1 files changed, 98 insertions, 0 deletions
diff --git a/addons/gut/gui/GutRunner.gd b/addons/gut/gui/GutRunner.gd
new file mode 100644
index 0000000..b2b16f2
--- /dev/null
+++ b/addons/gut/gui/GutRunner.gd
@@ -0,0 +1,98 @@
+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_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():
+ # bbcode_text appears to be empty. I'm not 100% sure why. Until that is
+ # figured out we have to just get the text which stinks.
+ var content = _gut.get_gui().get_text_box().text
+
+ 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_summary_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