26 lines
824 B
GDScript
26 lines
824 B
GDScript
class_name GdUnitExpressionRunner
|
|
extends RefCounted
|
|
|
|
const CLASS_TEMPLATE = """
|
|
class_name _ExpressionRunner extends '${clazz_path}'
|
|
|
|
func __run_expression() -> Variant:
|
|
return $expression
|
|
|
|
"""
|
|
|
|
func execute(src_script :GDScript, expression :String) -> Variant:
|
|
var script := GDScript.new()
|
|
var resource_path := "res://addons/gdUnit4/src/Fuzzers.gd" if src_script.resource_path.is_empty() else src_script.resource_path
|
|
script.source_code = CLASS_TEMPLATE.dedent()\
|
|
.replace("${clazz_path}", resource_path)\
|
|
.replace("$expression", expression)
|
|
script.reload(false)
|
|
var runner :Variant = script.new()
|
|
if runner.has_method("queue_free"):
|
|
runner.queue_free()
|
|
return runner.__run_expression()
|
|
|
|
|
|
func to_fuzzer(src_script :GDScript, expression :String) -> Fuzzer:
|
|
return execute(src_script, expression) as Fuzzer
|