82 lines
2.1 KiB
GDScript
82 lines
2.1 KiB
GDScript
class_name DynamicGutTest
|
|
# ------------------------------------------------------------------------------
|
|
# Used to create dynamic GutTest scripts for integration tests that require
|
|
# running tests through GUT. This makes it easier to keep the source of the
|
|
# test scripts created in tests to test the tests closer to the tests that
|
|
# test the test.
|
|
# ------------------------------------------------------------------------------
|
|
static var should_print_source = false
|
|
var source_entries = []
|
|
var lambdas = []
|
|
|
|
|
|
func make_source():
|
|
var src = "extends GutTest\n"
|
|
for e in source_entries:
|
|
src += str(e, "\n")
|
|
|
|
return src
|
|
|
|
|
|
func make_script():
|
|
return GutUtils.create_script_from_source(make_source())
|
|
|
|
|
|
func make_new():
|
|
var to_return = make_script().new()
|
|
if(should_print_source):
|
|
print(to_return.get_script().resource_path)
|
|
print_source()
|
|
|
|
return to_return
|
|
|
|
|
|
func add_source(p1='', p2='', p3='', p4='', p5='', p6='', p7='', p8='', p9='', p10=''):
|
|
var source = str(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10)
|
|
source_entries.append(source.dedent())
|
|
return self
|
|
|
|
|
|
func add_lambda_test(lambda, test_name=null):
|
|
var idx = lambdas.size()
|
|
var func_name = test_name
|
|
if(func_name == null):
|
|
func_name = str("test_run_lambda_", idx)
|
|
lambdas.append(lambda)
|
|
add_source("func ", func_name, "():\n",
|
|
"\tinstance_from_id(", get_instance_id(), ").lambdas[", idx, "].call(self)")
|
|
return self
|
|
|
|
|
|
func add_as_test_to_gut(which):
|
|
var dyn = make_script()
|
|
if(should_print_source):
|
|
print(dyn.resource_path)
|
|
print_source()
|
|
|
|
which.get_test_collector().add_script(dyn.resource_path)
|
|
return dyn
|
|
|
|
|
|
# This leaks SceneTreeTimers in some cases. Not sure of all the cases, but
|
|
# if you get leaked instances and don't want to figure it out, use
|
|
# run_tests_in_gut_await instead.
|
|
func run_test_in_gut(which):
|
|
add_as_test_to_gut(which)
|
|
which.run_tests()
|
|
var s = GutUtils.Summary.new()
|
|
return s.get_totals(which)
|
|
|
|
|
|
func run_tests_in_gut_await(which):
|
|
add_as_test_to_gut(which)
|
|
which.run_tests()
|
|
await which.end_run
|
|
await which.get_tree().create_timer(.1).timeout
|
|
var s = GutUtils.Summary.new()
|
|
return s.get_totals(which)
|
|
|
|
|
|
func print_source():
|
|
print(GutUtils.add_line_numbers(make_source()))
|