reinstalling GDUnit from assetlib
Some checks failed
Create tag and build when new code gets to main / Export (push) Failing after 6m41s
Some checks failed
Create tag and build when new code gets to main / Export (push) Failing after 6m41s
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
# This class defines a value extractor by given function name and args
|
||||
class_name GdUnitFuncValueExtractor
|
||||
extends GdUnitValueExtractor
|
||||
|
||||
var _func_names :PackedStringArray
|
||||
var _args :Array
|
||||
|
||||
func _init(func_name :String, p_args :Array) -> void:
|
||||
_func_names = func_name.split(".")
|
||||
_args = p_args
|
||||
|
||||
|
||||
func func_names() -> PackedStringArray:
|
||||
return _func_names
|
||||
|
||||
|
||||
func args() -> Array:
|
||||
return _args
|
||||
|
||||
|
||||
# Extracts a value by given `func_name` and `args`,
|
||||
# Allows to use a chained list of functions setarated ba a dot.
|
||||
# e.g. "func_a.func_b.name"
|
||||
# do calls instance.func_a().func_b().name() and returns finally the name
|
||||
# If a function returns an array, all elements will by collected in a array
|
||||
# e.g. "get_children.get_name" checked a node
|
||||
# do calls node.get_children() for all childs get_name() and returns all names in an array
|
||||
#
|
||||
# if the value not a Object or not accesible be `func_name` the value is converted to `"n.a."`
|
||||
# expecing null values
|
||||
func extract_value(value: Variant) -> Variant:
|
||||
if value == null:
|
||||
return null
|
||||
for func_name in func_names():
|
||||
if GdArrayTools.is_array_type(value):
|
||||
var values := Array()
|
||||
@warning_ignore("unsafe_cast")
|
||||
for element: Variant in (value as Array):
|
||||
values.append(_call_func(element, func_name))
|
||||
value = values
|
||||
else:
|
||||
value = _call_func(value, func_name)
|
||||
var type := typeof(value)
|
||||
if type == TYPE_STRING_NAME:
|
||||
return str(value)
|
||||
if type == TYPE_STRING and value == "n.a.":
|
||||
return value
|
||||
return value
|
||||
|
||||
|
||||
func _call_func(value :Variant, func_name :String) -> Variant:
|
||||
# for array types we need to call explicit by function name, using funcref is only supported for Objects
|
||||
# TODO extend to all array functions
|
||||
if GdArrayTools.is_array_type(value) and func_name == "empty":
|
||||
@warning_ignore("unsafe_cast")
|
||||
return (value as Array).is_empty()
|
||||
|
||||
if is_instance_valid(value):
|
||||
# extract from function
|
||||
var obj_value: Object = value
|
||||
if obj_value.has_method(func_name):
|
||||
var extract := Callable(obj_value, func_name)
|
||||
if extract.is_valid():
|
||||
return obj_value.call(func_name) if args().is_empty() else obj_value.callv(func_name, args())
|
||||
else:
|
||||
# if no function exists than try to extract form parmeters
|
||||
var parameter: Variant = obj_value.get(func_name)
|
||||
if parameter != null:
|
||||
return parameter
|
||||
# nothing found than return 'n.a.'
|
||||
if GdUnitSettings.is_verbose_assert_warnings():
|
||||
push_warning("Extracting value from element '%s' by func '%s' failed! Converting to \"n.a.\"" % [value, func_name])
|
||||
return "n.a."
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
uid://dcaqmjqxw1urv
|
||||
|
||||
Reference in New Issue
Block a user