extends 'res://addons/gut/compare_result.gd' const INDENT = ' ' enum { DEEP, SHALLOW, SIMPLE } var _utils = load('res://addons/gut/utils.gd').get_instance() var _strutils = _utils.Strutils.new() var _compare = _utils.Comparator.new() var DiffTool = load('res://addons/gut/diff_tool.gd') var _value_1 = null var _value_2 = null var _total_count = 0 var _diff_type = null var _brackets = null var _valid = true var _desc_things = 'somethings' # -------- comapre_result.gd "interface" --------------------- func set_are_equal(val): _block_set('are_equal', val) func get_are_equal(): if(!_valid): return null else: return differences.size() == 0 func set_summary(val): _block_set('summary', val) func get_summary(): return summarize() func get_different_count(): return differences.size() func get_total_count(): return _total_count func get_short_summary(): var text = str(_strutils.truncate_string(str(_value_1), 50), ' ', _compare.get_compare_symbol(are_equal), ' ', _strutils.truncate_string(str(_value_2), 50)) if(!are_equal): text += str(' ', get_different_count(), ' of ', get_total_count(), ' ', _desc_things, ' do not match.') return text func get_brackets(): return _brackets # -------- comapre_result.gd "interface" --------------------- func _invalidate(): _valid = false differences = null func _init(v1,v2,diff_type=DEEP): _value_1 = v1 _value_2 = v2 _diff_type = diff_type _compare.set_should_compare_int_to_float(false) _find_differences(_value_1, _value_2) func _find_differences(v1, v2): if(_utils.are_datatypes_same(v1, v2)): if(typeof(v1) == TYPE_ARRAY): _brackets = {'open':'[', 'close':']'} _desc_things = 'indexes' _diff_array(v1, v2) elif(typeof(v2) == TYPE_DICTIONARY): _brackets = {'open':'{', 'close':'}'} _desc_things = 'keys' _diff_dictionary(v1, v2) else: _invalidate() _utils.get_logger().error('Only Arrays and Dictionaries are supported.') else: _invalidate() _utils.get_logger().error('Only Arrays and Dictionaries are supported.') func _diff_array(a1, a2): _total_count = max(a1.size(), a2.size()) for i in range(a1.size()): var result = null if(i < a2.size()): if(_diff_type == DEEP): result = _compare.deep(a1[i], a2[i]) else: result = _compare.simple(a1[i], a2[i]) else: result = _compare.simple(a1[i], _compare.MISSING, 'index') if(!result.are_equal): differences[i] = result if(a1.size() < a2.size()): for i in range(a1.size(), a2.size()): differences[i] = _compare.simple(_compare.MISSING, a2[i], 'index') func _diff_dictionary(d1, d2): var d1_keys = d1.keys() var d2_keys = d2.keys() # Process all the keys in d1 _total_count += d1_keys.size() for key in d1_keys: if(!d2.has(key)): differences[key] = _compare.simple(d1[key], _compare.MISSING, 'key') else: d2_keys.remove_at(d2_keys.find(key)) var result = null if(_diff_type == DEEP): result = _compare.deep(d1[key], d2[key]) else: result = _compare.simple(d1[key], d2[key]) if(!result.are_equal): differences[key] = result # Process all the keys in d2 that didn't exist in d1 _total_count += d2_keys.size() for i in range(d2_keys.size()): differences[d2_keys[i]] = _compare.simple(_compare.MISSING, d2[d2_keys[i]], 'key') func summarize(): var summary = '' if(are_equal): summary = get_short_summary() else: var formatter = load('res://addons/gut/diff_formatter.gd').new() formatter.set_max_to_display(max_differences) summary = formatter.make_it(self) return summary func get_diff_type(): return _diff_type func get_value_1(): return _value_1 func get_value_2(): return _value_2