<cffunction name="makePublic" access="public" hint="creates a public method proxy for the indicated private method for the passed-in object" returntype="WEB-INF.cftags.component">
<cfargument name="ObjectUnderTest" required="true" type="WEB-INF.cftags.component" hint="an instance of the object with a private method to be proxied">
<cfargument name="privateMethodName" required="true" type="string" hint="name of the private method to be proxied">
<cfargument name="proxyMethodName" required="false" type="string" default="" hint="name of the proxy method name to be used; if not passed, defaults to the name of the private method prefixed with an underscore">
<cfset var md = getMetadata(ObjectUnderTest)>
<cfset var methodStruct = findMethodStruct(md,privateMethodName)>
<cfset var output = "">
<cfset var cfcode = "">
<cfset var file = "">
<cfset var cfcnotation = "">
<cfset var dir = getDirectoryFromPath(getCurrentTemplatePath()) & dirSep & "generated" & dirSep>
<cfset var proxy = "">
<cfset var s_args = "">
<cfset var componentReturnTag = "return">
<cfset var renamedExistingMethod = arguments.privateMethodName & "_mxunitproxy">
<cfif StructIsEmpty(methodStruct)>
<cfthrow message="Attempting to make public proxy for private method: method named #privateMethodName# did not exist in object of type #md.name#">
<!--- NOTE: all of this rejiggering is so that we can call the private method directly rather than having to call a differently-named proxy method! --->
<!--- move the current privateMethod into a newly named method --->
<cffunction name="constructArgumentsTags" returntype="string" access="private" hint="creates the cfargument tags, the method call to the private method, and the return statement for the component">
<cfargument name="privateMethodStruct" type="struct" hint="the structure of metadata for the private method under consideration">
<cfset var strArgTags = "">
<cfset var thisParamString = "">
<cfset var thisTagString = "">
<cfset var a_params = privateMethodStruct.Parameters>