class_name GdUnitArgumentMatchers
extends RefCounted

const TYPE_ANY = TYPE_MAX + 100


static func to_matcher(arguments :Array[Variant], auto_deep_check_mode := false) -> ChainedArgumentMatcher:
	var matchers :Array[Variant] = []
	for arg in arguments:
		# argument is already a matcher
		if arg is GdUnitArgumentMatcher:
			matchers.append(arg)
		else:
			# pass argument into equals matcher
			matchers.append(EqualsArgumentMatcher.new(arg, auto_deep_check_mode))
	return ChainedArgumentMatcher.new(matchers)


static func any() -> GdUnitArgumentMatcher:
	return  AnyArgumentMatcher.new()


static func by_type(type :int) -> GdUnitArgumentMatcher:
	return AnyBuildInTypeArgumentMatcher.new([type])


static func by_types(types :PackedInt32Array) -> GdUnitArgumentMatcher:
	return AnyBuildInTypeArgumentMatcher.new(types)


static func any_class(clazz :Object) -> GdUnitArgumentMatcher:
	return AnyClazzArgumentMatcher.new(clazz)
