var return_val = null
var stub_target = null
var target_subpath = null
var parameters = null
var stub_method = null
var call_super = false

const NOT_SET = '|_1_this_is_not_set_1_|'

func _init(target=null, method=null, subpath=null):
	stub_target = target
	stub_method = method
	target_subpath = subpath

func to_return(val):
	return_val = val
	call_super = false
	return self

func to_do_nothing():
	return to_return(null)

func to_call_super():
	call_super = true
	return self

func when_passed(p1=NOT_SET,p2=NOT_SET,p3=NOT_SET,p4=NOT_SET,p5=NOT_SET,p6=NOT_SET,p7=NOT_SET,p8=NOT_SET,p9=NOT_SET,p10=NOT_SET):
	parameters = [p1,p2,p3,p4,p5,p6,p7,p8,p9,p10]
	var idx = 0
	while(idx < parameters.size()):
		if(str(parameters[idx]) == NOT_SET):
			parameters.remove(idx)
		else:
			idx += 1
	return self

func to_s():
	var base_string = str(stub_target, '[', target_subpath, '].', stub_method)
	if(call_super):
		base_string += " to call SUPER"
	else:
		base_string += str(' with (', parameters, ') = ', return_val)
	return base_string
