summaryrefslogtreecommitdiff
path: root/addons/gut/spy.gd
diff options
context:
space:
mode:
authorSophia Pearson <codergal89@gmail.com>2022-05-20 00:45:25 +0200
committerSophia Pearson <codergal89@gmail.com>2022-05-20 18:56:04 +0200
commit05d29ccce1898ed89c0b650c77242c2fa2805128 (patch)
treee8ee3bcb570fa6f3d9d96273c2bf4d4c8618d08b /addons/gut/spy.gd
downloadtexty-05d29ccce1898ed89c0b650c77242c2fa2805128.tar.xz
texty-05d29ccce1898ed89c0b650c77242c2fa2805128.zip
texty: initial commit
Diffstat (limited to 'addons/gut/spy.gd')
-rw-r--r--addons/gut/spy.gd108
1 files changed, 108 insertions, 0 deletions
diff --git a/addons/gut/spy.gd b/addons/gut/spy.gd
new file mode 100644
index 0000000..2aef4ad
--- /dev/null
+++ b/addons/gut/spy.gd
@@ -0,0 +1,108 @@
+# {
+# instance_id_or_path1:{
+# method1:[ [p1, p2], [p1, p2] ],
+# method2:[ [p1, p2], [p1, p2] ]
+# },
+# instance_id_or_path1:{
+# method1:[ [p1, p2], [p1, p2] ],
+# method2:[ [p1, p2], [p1, p2] ]
+# },
+# }
+var _calls = {}
+var _utils = load('res://addons/gut/utils.gd').get_instance()
+var _lgr = _utils.get_logger()
+var _compare = _utils.Comparator.new()
+
+func _find_parameters(call_params, params_to_find):
+ var found = false
+ var idx = 0
+ while(idx < call_params.size() and !found):
+ var result = _compare.deep(call_params[idx], params_to_find)
+ if(result.are_equal):
+ found = true
+ else:
+ idx += 1
+ return found
+
+func _get_params_as_string(params):
+ var to_return = ''
+ if(params == null):
+ return ''
+
+ for i in range(params.size()):
+ if(params[i] == null):
+ to_return += 'null'
+ else:
+ if(typeof(params[i]) == TYPE_STRING):
+ to_return += str('"', params[i], '"')
+ else:
+ to_return += str(params[i])
+ if(i != params.size() -1):
+ to_return += ', '
+ return to_return
+
+func add_call(variant, method_name, parameters=null):
+ if(!_calls.has(variant)):
+ _calls[variant] = {}
+
+ if(!_calls[variant].has(method_name)):
+ _calls[variant][method_name] = []
+
+ _calls[variant][method_name].append(parameters)
+
+func was_called(variant, method_name, parameters=null):
+ var to_return = false
+ if(_calls.has(variant) and _calls[variant].has(method_name)):
+ if(parameters):
+ to_return = _find_parameters(_calls[variant][method_name], parameters)
+ else:
+ to_return = true
+ return to_return
+
+func get_call_parameters(variant, method_name, index=-1):
+ var to_return = null
+ var get_index = -1
+
+ if(_calls.has(variant) and _calls[variant].has(method_name)):
+ var call_size = _calls[variant][method_name].size()
+ if(index == -1):
+ # get the most recent call by default
+ get_index = call_size -1
+ else:
+ get_index = index
+
+ if(get_index < call_size):
+ to_return = _calls[variant][method_name][get_index]
+ else:
+ _lgr.error(str('Specified index ', index, ' is outside range of the number of registered calls: ', call_size))
+
+ return to_return
+
+func call_count(instance, method_name, parameters=null):
+ var to_return = 0
+
+ if(was_called(instance, method_name)):
+ if(parameters):
+ for i in range(_calls[instance][method_name].size()):
+ if(_calls[instance][method_name][i] == parameters):
+ to_return += 1
+ else:
+ to_return = _calls[instance][method_name].size()
+ return to_return
+
+func clear():
+ _calls = {}
+
+func get_call_list_as_string(instance):
+ var to_return = ''
+ if(_calls.has(instance)):
+ for method in _calls[instance]:
+ for i in range(_calls[instance][method].size()):
+ to_return += str(method, '(', _get_params_as_string(_calls[instance][method][i]), ")\n")
+ return to_return
+
+func get_logger():
+ return _lgr
+
+func set_logger(logger):
+ _lgr = logger