diff options
Diffstat (limited to 'addons/gut/spy.gd')
| -rw-r--r-- | addons/gut/spy.gd | 108 |
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 |
