Ticket #382: formatExecutionOrderFix.patch

File formatExecutionOrderFix.patch, 48.7 kB (added by cfgrok, 16 years ago)

Proposed solution for request format execution order problem

  • ModelGlue/gesture/eventhandler/EventHandler.cfc

     
    1313 
    1414<cfset this.name = "" /> 
    1515<cfset this.access = "public" /> 
    16 <cfset this.messages = structNew() /> 
    17 <cfset this.messages.cfNullKeyWorkaround = arrayNew(1) /> 
    18 <cfset this.views = structNew() /> 
    19 <cfset this.views.cfNullKeyWorkaround = arrayNew(1) /> 
     16<cfset this.messages = arrayNew(1) /> 
     17<cfset this.views = arrayNew(1) /> 
    2018<cfset this.results = structNew() /> 
    21 <cfset this.results.cfNullKeyWorkaround = structNew() /> 
    2219<cfset this.cache = 0 /> 
    2320<cfset this.cacheKey = "" /> 
    2421<cfset this.cacheKeyValues = "" /> 
     
    2724 
    2825<cffunction name="addMessage" returntype="ModelGlue.gesture.eventhandler.EventHandler" output="false" hint="Adds a Message and returns this."> 
    2926        <cfargument name="message" type="ModelGlue.gesture.eventhandler.Message" /> 
    30         <cfargument name="format" type="string" default="cfNullKeyWorkaround" /> 
    31          
    32         <cfif not structKeyExists(this.messages, arguments.format)> 
    33                 <cfset this.messages[arguments.format] = arrayNew(1) /> 
    34         </cfif> 
    3527         
    36         <cfset arrayAppend(this.messages[arguments.format], message) /> 
     28        <cfset arrayAppend(this.messages, message) /> 
    3729 
    3830        <cfreturn this /> 
    3931</cffunction> 
    4032 
    4133<cffunction name="hasMessage" access="public" returnType="boolean" output="false" hint="I state if a message already exists in this EventHandler.  Incurs a loop:  not a map lookup"> 
    4234  <cfargument name="messagename" required="true" type="string"> 
    43   <cfargument name="format" default="cfNullKeyWorkaround" type="string"> 
    4435         
    4536        <cfset var i = "" /> 
    4637         
    47         <cfif not structKeyExists(this.messages, arguments.format)> 
    48                 <cfset this.messages[arguments.format] = arrayNew(1) /> 
    49         </cfif> 
    50          
    51         <cfloop from="1" to="#arrayLen(this.messages[arguments.format])#" index="i"> 
    52                 <cfif this.messages[arguments.format][i].name eq messageName> 
     38        <cfloop from="1" to="#arrayLen(this.messages)#" index="i"> 
     39                <cfif this.messages[i].name eq messageName> 
    5340                        <cfreturn true /> 
    5441                </cfif> 
    5542        </cfloop> 
     
    5946 
    6047<cffunction name="addView" returntype="ModelGlue.gesture.eventhandler.EventHandler" output="false" hint="Adds a View and returns this."> 
    6148        <cfargument name="view" type="ModelGlue.gesture.eventhandler.View" /> 
    62   <cfargument name="format" default="cfNullKeyWorkaround" type="string"> 
    6349         
    64         <cfif not structKeyExists(this.views, arguments.format)> 
    65                 <cfset this.views[arguments.format] = arrayNew(1) /> 
    66         </cfif> 
    67  
    68         <cfset arrayAppend(this.views[arguments.format], view) /> 
     50        <cfset arrayAppend(this.views, view) /> 
    6951         
    7052        <cfreturn this /> 
    7153</cffunction> 
    7254 
    7355<cffunction name="addResult" returntype="ModelGlue.gesture.eventhandler.EventHandler" output="false" hint="Adds a Result and returns this."> 
    7456        <cfargument name="result" type="ModelGlue.gesture.eventhandler.Result" /> 
    75         <cfargument name="format" type="string" default="cfNullKeyWorkaround" /> 
    7657         
    7758        <cfif arguments.result.name eq ""> 
    7859                <cfset arguments.result.name = "cfNullKeyWorkaround" /> 
    7960        </cfif> 
    8061         
    81         <cfif not structKeyExists(this.results, arguments.format)> 
    82                 <cfset this.results[arguments.format] = structNew() /> 
    83         </cfif> 
    84          
    85         <cfif not structKeyExists(this.results[arguments.format], arguments.result.name)> 
    86                 <cfset this.results[arguments.format][arguments.result.name] = arrayNew(1) /> 
     62        <cfif not structKeyExists(this.results, arguments.result.name)> 
     63                <cfset this.results[arguments.result.name] = arrayNew(1) /> 
    8764        </cfif> 
    8865         
    89         <cfset arrayAppend(this.results[arguments.format][arguments.result.name], result) /> 
     66        <cfset arrayAppend(this.results[arguments.result.name], result) /> 
    9067         
    9168        <cfreturn this /> 
    9269</cffunction> 
    9370 
    9471<cffunction name="hasResult" access="public" returntype="boolean" output="false" hint="I state if any resMappings exist for the given result name.  Map lookup (fast operation)."> 
    9572        <cfargument name="name" required="true" type="string"> 
    96         <cfargument name="format" required="false" default="cfNullKeyWorkaround" /> 
    9773         
    98         <cfreturn structKeyExists(this.results, arguments.format) and structKeyExists(this.results[arguments.format], arguments.name) /> 
     74        <cfreturn structKeyExists(this.results, arguments.name) /> 
    9975</cffunction> 
    10076 
    10177<cffunction name="resultMappingExists" access="public" returntype="boolean" output="false" hint="Deprecated for consistency:  use hasResult()."> 
    10278        <cfargument name="name" required="true" type="string"> 
    103         <cfargument name="format" required="false" default="cfNullKeyWorkaround" /> 
    10479 
    10580        <cfreturn hasResult(argumentCollection=arguments) /> 
    10681</cffunction> 
  • ModelGlue/gesture/eventhandler/Message.cfc

     
    22 
    33<cfproperty name="name" type="string" hint="The name of the message." /> 
    44<cfproperty name="arguments" type="ModelGlue.gesture.collections.MapCollection" hint="The collection of arguments associated with the message." /> 
     5<cfproperty name="format" type="string" hint="The request format of the message." /> 
    56 
    67<cfset this.name = "" /> 
    78<cfset this.arguments = createObject("component", "ModelGlue.gesture.collections.MapCollection").init() /> 
     9<cfset this.format = "" /> 
    810 
    911</cfcomponent> 
     12 No newline at end of file 
  • ModelGlue/gesture/eventhandler/Result.cfc

     
    66<cfproperty name="append" type="string" hint="If a redirect occurs, I'm a comma-delimited list of event values to append to the resultant url."> 
    77<cfproperty name="anchor" type="string" hint="If a redirect occurs, I'm the name of an event value containing a string to append as an anchor (index.cfm?event=foo##Anchor)"> 
    88<cfproperty name="preserveState" default="true" type="boolean" hint="If a redirect takes place, should state be preserved?"> 
     9<cfproperty name="format" type="string" hint="The request format of the message." /> 
    910 
    1011<cfset this.name = "" /> 
    1112<cfset this.event = "" /> 
     
    1314<cfset this.append = "" /> 
    1415<cfset this.anchor = "" /> 
    1516<cfset this.preserveState = true /> 
     17<cfset this.format = "" /> 
    1618 
    1719</cfcomponent> 
     20 No newline at end of file 
  • ModelGlue/gesture/eventhandler/View.cfc

     
    88<cfproperty name="cacheKey" type="string" hint="Key by which this event-handler should be known in the cache.  Typically set by convention." /> 
    99<cfproperty name="cacheKeyValues" type="string" hint="List of event values to append to the cache key." /> 
    1010<cfproperty name="cacheTimeout" type="numeric" hint="Number of seconds this event-handler should be cached." /> 
     11<cfproperty name="format" type="string" hint="The request format of the message." /> 
    1112 
    1213<cfset this.name = "" /> 
    1314<cfset this.values = structNew() /> 
     
    1718<cfset this.cacheKey = "" /> 
    1819<cfset this.cacheKeyValues = "" /> 
    1920<cfset this.cacheTimeout = 0 /> 
     21<cfset this.format = "" /> 
    2022 
    2123<cffunction name="addValue" returntype="ModelGlue.gesture.eventhandler.View" output="false" hint="Adds a Value and returns this."> 
    2224        <cfargument name="value" type="ModelGlue.gesture.eventhandler.Value" /> 
  • ModelGlue/gesture/eventhandler/test/TestEventHandler.cfc

     
    4848 
    4949        <cfset eh.addMessage(message) /> 
    5050 
    51         <cfset assertTrue(arrayLen(eh.messages.cfNullKeyWorkaround), "messages should have a length after add")>         
     51        <cfset assertTrue(arrayLen(eh.messages), "messages should have a length after add")>     
    5252        <cfset assertTrue(eh.hasMessage("message"), "hasMessage returned false after adding message!") /> 
    5353</cffunction> 
    5454 
     
    6262 
    6363        <cfset eh.addResult(result) /> 
    6464         
    65         <cfset assertTrue(structCount(eh.results.cfNullKeyWorkaround), "results should have length after add")>  
     65        <cfset assertTrue(structCount(eh.results), "results should have length after add")>      
    6666        <cfset assertTrue(eh.hasResult("result"), "hasResult returned false after adding result!") /> 
    6767</cffunction> 
    6868 
     
    7070<cffunction name="testView_defaultProperties" returntype="void" access="public"> 
    7171        <cfset var view = createView() /> 
    7272         
    73         <cfset assertFalse(view.append, "view should have apend=true by default")>       
     73        <cfset assertFalse(view.append, "view should have append=true by default")>      
    7474        <cfset assertTrue(view.cache eq false) /> 
    7575        <cfset assertTrue(view.cacheKey eq "") /> 
    7676        <cfset assertTrue(view.cacheKeyValues eq "") /> 
     
    8585 
    8686        <cfset eh.addView(view) /> 
    8787         
    88         <cfset assertTrue(arrayLen(eh.views["cfNullKeyWorkaround"]), "views should have length before add")>     
     88        <cfset assertTrue(arrayLen(eh.views), "views should have length before add")>    
    8989</cffunction> 
    9090 
    9191<cffunction name="testView_AddValue" returntype="void" access="public"> 
  • ModelGlue/gesture/eventrequest/EventContext.cfc

     
    281281        <cfset variables._currentEventHandler = arguments.eventHandler /> 
    282282         
    283283        <cfset this.addTraceStatement("Event Handler", "Execute ""#arguments.eventHandler.name#""", "<event-handler name=""#arguments.eventHandler.name#"">") />  
    284         <!---  
    285                 Invoke "" message broadcasts.  Code repeated for format, if necessary, to  
    286                 avoid string parsing - this is a per-request invocation! 
    287         ---> 
    288         <cfloop from="1" to="#arrayLen(arguments.eventHandler.messages.cfNullKeyWorkaround)#" index="i"> 
    289                 <cfset message = arguments.eventHandler.messages.cfNullKeyWorkaround[i] /> 
     284         
     285        <!--- Invoke message broadcasts ---> 
     286        <cfloop from="1" to="#arrayLen(arguments.eventHandler.messages)#" index="i"> 
     287                <cfset message = arguments.eventHandler.messages[i] /> 
    290288                 
    291                 <cfset variables._currentMessage = message /> 
    292  
    293                 <cfset this.addTraceStatement("Message Broadcast", "Broadcasting ""#message.name#""", "<message name=""#message.name#"">") />  
    294  
    295                 <cfif structKeyExists(variables._listeners, message.name)> 
    296                         <cfloop from="1" to="#arrayLen(variables._listeners[message.name])#" index="j"> 
    297                                 <cfset this.addTraceStatement("Message Listener", "Invoking #variables._listeners[message.name][j].listenerFunction# in #getMetadata(variables._listeners[message.name][j].target).name#", "<message-listener message=""#message.name#"" function=""#variables._listeners[message.name][j].listenerFunction#"" />") />  
    298                                 <!--- 
    299                                 <cfset variables._listeners[message.name][j].invokeListener(this) /> 
    300                                 ---> 
    301                                 <cfinvoke component="#variables._listeners[message.name][j].target#" method="#variables._listeners[message.name][j].listenerFunction#"> 
    302                                         <cfinvokeargument name="event" value="#this#" /> 
    303                                 </cfinvoke> 
    304                         </cfloop> 
    305                 </cfif> 
    306         </cfloop> 
    307         <cfif len(requestFormat) and structKeyExists(arguments.eventHandler.messages, requestFormat)> 
    308                 <cfloop from="1" to="#arrayLen(arguments.eventHandler.messages[requestFormat])#" index="i"> 
    309                         <cfset message = arguments.eventHandler.messages[requestFormat][i] /> 
     289                <cfif len(requestFormat) and (not len(message.format) or message.format is requestFormat)> 
    310290                         
    311291                        <cfset variables._currentMessage = message /> 
    312          
     292                         
    313293                        <cfset this.addTraceStatement("Message Broadcast", "Broadcasting ""#message.name#""", "<message name=""#message.name#"">") />  
    314          
     294                         
    315295                        <cfif structKeyExists(variables._listeners, message.name)> 
    316296                                <cfloop from="1" to="#arrayLen(variables._listeners[message.name])#" index="j"> 
    317297                                        <cfset this.addTraceStatement("Message Listener", "Invoking #variables._listeners[message.name][j].listenerFunction# in #getMetadata(variables._listeners[message.name][j].target).name#", "<message-listener message=""#message.name#"" function=""#variables._listeners[message.name][j].listenerFunction#"" />") />  
     298                                        <!--- 
    318299                                        <cfset variables._listeners[message.name][j].invokeListener(this) /> 
     300                                        ---> 
     301                                        <cfinvoke component="#variables._listeners[message.name][j].target#" method="#variables._listeners[message.name][j].listenerFunction#"> 
     302                                                <cfinvokeargument name="event" value="#this#" /> 
     303                                        </cfinvoke> 
    319304                                </cfloop> 
    320305                        </cfif> 
    321                 </cfloop> 
    322         </cfif> 
     306                         
     307                </cfif> 
     308        </cfloop> 
    323309                 
    324310        <!--- Get, queue, and reset results. ---> 
    325311        <cfset results = getResults() /> 
    326312         
    327         <!--- Queue explicit results: repetitive on purpose. ---> 
     313        <!--- Queue explicit results. ---> 
    328314        <cfloop from="1" to="#arrayLen(results)#" index="i"> 
    329                 <cfif len(results[i]) and arguments.eventHandler.hasResult(results[i]) and isArray(arguments.eventHandler.results.cfNullKeyWorkaround[results[i]])> 
    330                         <cfloop from="1" to="#arrayLen(arguments.eventHandler.results.cfNullKeyWorkaround[results[i]])#" index="j"> 
    331                                 <cfset result = arguments.eventHandler.results.cfNullKeyWorkaround[results[i]][j] /> 
     315                <cfif len(results[i]) and arguments.eventHandler.hasResult(results[i]) and isArray(arguments.eventHandler.results[results[i]])> 
     316                        <cfloop from="1" to="#arrayLen(arguments.eventHandler.results[results[i]])#" index="j"> 
     317                                <cfset result = arguments.eventHandler.results[results[i]][j] /> 
    332318                                 
    333                                 <cfif result.redirect> 
    334                                         <cfset this.addTraceStatement("Result", "Explicit result ""#result.name#"" added, redirecting to event event ""#result.event#""", "<result name=""#result.name#"" do=""#result.event#"" redirect=""#true#"" />") />  
    335                                         <cfset forward(eventName:result.event, preserveState:result.preserveState, addToken:false, append:result.append, anchor:result.anchor) /> 
    336                                 <cfelse> 
    337                                         <cfset this.addTraceStatement("Result", "Explicit result ""#result.name#"" added, queueing event event ""#result.event#""", "<result name=""#result.name#"" do=""#result.event#"" />") />  
    338                                         <cfset addEventHandler(variables._eventHandlers[arguments.eventHandler.results.cfNullKeyWorkaround[results[i]][j].event]) /> 
    339                                 </cfif> 
    340                         </cfloop> 
    341                 </cfif> 
    342         </cfloop> 
    343         <cfif len(requestFormat)> 
    344                  
    345                 <cfloop from="1" to="#arrayLen(results)#" index="i"> 
    346                         <cfif len(results[i]) and arguments.eventHandler.hasResult(results[i], requestFormat) and isArray(arguments.eventHandler.results[requestFormat][results[i]])> 
    347                                 <cfloop from="1" to="#arrayLen(arguments.eventHandler.results[requestFormat][results[i]])#" index="j"> 
    348                                         <cfset result = arguments.eventHandler.results[requestFormat][results[i]][j] /> 
     319                                <cfif len(requestFormat) and (not len(result.format) or result.format is requestFormat)> 
    349320                                         
    350321                                        <cfif result.redirect> 
    351322                                                <cfset this.addTraceStatement("Result", "Explicit result ""#result.name#"" added, redirecting to event event ""#result.event#""", "<result name=""#result.name#"" do=""#result.event#"" redirect=""#true#"" />") />  
    352323                                                <cfset forward(eventName:result.event, preserveState:result.preserveState, addToken:false, append:result.append, anchor:result.anchor) /> 
    353324                                        <cfelse> 
    354                                                 <cfset this.addTraceStatement("Result", "Explicit result ""#result.name#"" added, queing event ""#result.event#""", "<result name=""#result.name#"" do=""#result.event#"" />") />  
    355                                                 <cfset addEventHandler(variables._eventHandlers[arguments.eventHandler.results[requestFormat][results[i]][j].event]) /> 
     325                                                <cfset this.addTraceStatement("Result", "Explicit result ""#result.name#"" added, queueing event event ""#result.event#""", "<result name=""#result.name#"" do=""#result.event#"" />") />  
     326                                                <cfset addEventHandler(variables._eventHandlers[arguments.eventHandler.results[results[i]][j].event]) /> 
    356327                                        </cfif> 
    357                                 </cfloop> 
    358                         </cfif> 
    359                 </cfloop> 
    360         </cfif> 
     328                                         
     329                                </cfif> 
     330                        </cfloop> 
     331                </cfif> 
     332        </cfloop> 
    361333         
    362334        <!--- Queue implicit results ---> 
    363         <cfif structKeyExists(arguments.eventHandler.results.cfNullKeyWorkaround, "cfNullKeyWorkaround") and isArray(arguments.eventHandler.results.cfNullKeyWorkaround.cfNullKeyWorkaround)> 
    364                 <cfset results = arguments.eventHandler.results.cfNullKeyWorkaround.cfNullKeyWorkaround /> 
     335        <cfif structKeyExists(arguments.eventHandler.results, "cfNullKeyWorkaround") and isArray(arguments.eventHandler.results.cfNullKeyWorkaround)> 
     336                <cfset results = arguments.eventHandler.results.cfNullKeyWorkaround /> 
    365337                 
    366338                <cfloop from="1" to="#arrayLen(results)#" index="i"> 
    367339                                <cfset result = results[i] /> 
    368  
    369                                 <cfif result.redirect> 
    370                                         <cfset this.addTraceStatement("Result", "Implicit result redirecting to event ""#result.event#""", "<result do=""#result.event#"" redirect=""true"" />") />  
    371                                         <cfset forward(eventName:result.event, preserveState:result.preserveState, addToken:false, append:result.append, anchor:result.anchor) /> 
    372                                 <cfelse> 
    373                                         <cfset this.addTraceStatement("Result", "Implicit result queing event ""#result.event#""", "<result do=""#result.event#"" />") />  
    374                                         <cfset addEventHandler(variables._eventHandlers[results[i].event]) /> 
    375                                 </cfif> 
    376                 </cfloop> 
    377         </cfif> 
    378         <cfif len(requestFormat) and structKeyExists(arguments.eventHandler.results, requestFormat)> 
    379                 <cfif structKeyExists(arguments.eventHandler.results[requestFormat], "cfNullKeyWorkaround")  
    380                                         and isArray(arguments.eventHandler.results[requestFormat].cfNullKeyWorkaround)> 
    381                         <cfset results = arguments.eventHandler.results[requestFormat].cfNullKeyWorkaround /> 
    382                          
    383                         <cfloop from="1" to="#arrayLen(results)#" index="i"> 
    384                                         <cfset result = results[i] /> 
    385          
     340                                 
     341                                <cfif len(requestFormat) and (not len(result.format) or result.format is requestFormat)> 
     342                                         
    386343                                        <cfif result.redirect> 
    387344                                                <cfset this.addTraceStatement("Result", "Implicit result redirecting to event ""#result.event#""", "<result do=""#result.event#"" redirect=""true"" />") />  
    388345                                                <cfset forward(eventName:result.event, preserveState:result.preserveState, addToken:false, append:result.append, anchor:result.anchor) /> 
     
    390347                                                <cfset this.addTraceStatement("Result", "Implicit result queing event ""#result.event#""", "<result do=""#result.event#"" />") />  
    391348                                                <cfset addEventHandler(variables._eventHandlers[results[i].event]) /> 
    392349                                        </cfif> 
    393                         </cfloop> 
    394                 </cfif> 
     350                                         
     351                                </cfif> 
     352                </cfloop> 
    395353        </cfif> 
    396354                 
    397355        <!--- Reset results ---> 
    398356        <cfset resetResults() /> 
    399357         
    400         <!--- Queue views.  Repetitive on purpose - speed over elegance here. ---> 
    401         <cfloop from="1" to="#arrayLen(arguments.eventHandler.views.cfNullKeyWorkaround)#" index="i"> 
    402                 <cfset queueView(arguments.eventHandler.views.cfNullKeyWorkaround[i]) /> 
     358        <!--- Queue views.  ---> 
     359        <cfloop from="1" to="#arrayLen(arguments.eventHandler.views)#" index="i"> 
     360                <cfif len(requestFormat) and (not len(arguments.eventHandler.views[i].format) or arguments.eventHandler.views[i].format is requestFormat)> 
     361                        <cfset queueView(arguments.eventHandler.views[i]) /> 
     362                </cfif> 
    403363        </cfloop> 
    404         <cfif len(requestFormat) and structKeyExists(arguments.eventHandler.views, requestFormat)> 
    405                 <cfloop from="1" to="#arrayLen(arguments.eventHandler.views[requestFormat])#" index="i"> 
    406                         <cfset queueView(arguments.eventHandler.views[requestFormat][i]) /> 
    407                 </cfloop> 
    408         </cfif> 
    409364</cffunction> 
    410365 
    411366<!--- EVENT KNOWLEDGE ---> 
     
    470425        <cfargument name="resultName" type="string" hint="The name of the result (e.g., ""formInvalid"" or the like) to add." /> 
    471426         
    472427        <cfset var results = getResults() /> 
    473         <cfset var format = "" /> 
    474         <cfset var formatList = listappend(getValue("requestFormat", ""),  "cfNullKeyWorkaround") /> 
     428        <cfset var requestFormat = getValue("requestFormat", "") /> 
    475429        <cfset var i = "" /> 
    476430        <cfset var eh = getCurrentEventHandler() /> 
    477431        <cfset var result = "" /> 
     
    479433         
    480434        <cfset addTraceStatement("Message Listener", "A named result ""#arguments.resultName#"" has been added.") /> 
    481435         
    482         <cfloop list="#formatList#" index="format"> 
    483                 <cfif structkeyexists(eh.results, format) AND structKeyExists(eh.results[format], arguments.resultName)>         
    484                         <cfloop from="1" to="#arrayLen(eh.results[format][arguments.resultName])#" index="i"> 
    485                                 <cfset result = eh.results[format][arguments.resultName][i] /> 
     436        <cfif structkeyexists(eh.results, arguments.resultName)>         
     437                <cfloop from="1" to="#arrayLen(eh.results[arguments.resultName])#" index="i"> 
     438                        <cfset result = eh.results[arguments.resultName][i] /> 
     439                         
     440                        <cfif len(requestFormat) and (not len(result.format) or result.format is requestFormat)> 
    486441                                 
    487442                                <cfif result.redirect> 
    488443                                        <cfset this.addTraceStatement("Result", "Explicit result redirecting to event ""#result.event#""", "<result do=""#result.event#"" redirect=""true"" />") />  
    489444                                        <cfset forward(eventName:result.event, preserveState:result.preserveState, addToken:false, append:result.append, anchor:result.anchor) /> 
    490445                                </cfif> 
    491                         </cfloop> 
    492                 </cfif> 
    493         </cfloop> 
     446                                 
     447                        </cfif> 
     448                </cfloop> 
     449        </cfif> 
    494450         
    495451        <cfset arrayAppend(variables._results, arguments.resultName) /> 
    496452</cffunction> 
  • ModelGlue/gesture/eventrequest/test/TestEventContext.cfc

     
    148148        <cfset listener.listenerFunction = "listener_testExecuteEventHandler_ListenerInvocation_byFormat" /> 
    149149        <cfset msg = createMessage() /> 
    150150        <cfset msg.name = "explicitFormatMessage" /> 
     151        <cfset msg.format = "explicitFormat" /> 
    151152        <cfset listeners[msg.name] = arrayNew(1) /> 
    152153        <cfset arrayAppend(listeners[msg.name], listener) /> 
    153         <cfset eh1.addMessage(msg, "explicitFormat") /> 
     154        <cfset eh1.addMessage(msg) /> 
    154155         
    155156        <cfset er = createEventContext() /> 
    156157        <cfset er.setListenerMap(listeners) /> 
     
    278279        <cfset listener1.target = this /> 
    279280        <cfset listener1.listenerFunction = "listener1_testExecuteEventHandler_ResultQueueing" /> 
    280281        <cfset msg1.name = "message1" /> 
     282        <cfset msg1.format = "explicitFormat" /> 
    281283        <cfset makePublic(this,"listener1_testExecuteEventHandler_ResultQueueing") /> 
    282284         
    283285        <cfset listener2.target = this /> 
    284286        <cfset listener2.listenerFunction = "listener2_testExecuteEventHandler_ResultQueueing" /> 
    285287        <cfset msg2.name = "message2" /> 
     288        <cfset msg2.format = "explicitFormat" /> 
    286289        <cfset makePublic(this,"listener2_testExecuteEventHandler_ResultQueueing") /> 
    287290         
    288291        <cfset listener3.target = this /> 
    289292        <cfset listener3.listenerFunction = "listener3_testExecuteEventHandler_ResultQueueing" /> 
    290293        <cfset msg3.name = "message3" /> 
    291                 <cfset makePublic(this,"listener3_testExecuteEventHandler_ResultQueueing") /> 
     294        <cfset msg3.format = "explicitFormat" /> 
     295        <cfset makePublic(this,"listener3_testExecuteEventHandler_ResultQueueing") /> 
     296         
    292297        <cfset listeners[msg1.name] = arrayNew(1) /> 
    293298        <cfset listeners[msg2.name] = arrayNew(1) /> 
    294299        <cfset listeners[msg3.name] = arrayNew(1) /> 
     
    299304 
    300305        <!--- Set up event handlers --->         
    301306        <cfset eh1.name = "eh1" /> 
    302         <cfset eh1.addMessage(msg1, "explicitFormat") /> 
     307        <cfset eh1.addMessage(msg1) /> 
    303308        <!--- Explicit result ---> 
    304309        <cfset result1.name = "result1" /> 
    305310        <cfset result1.event = "eh2" /> 
    306         <cfset eh1.addResult(result1, "explicitFormat") /> 
     311        <cfset result1.format = "explicitFormat" /> 
     312        <cfset eh1.addResult(result1) /> 
    307313        <!--- Implicit result ---> 
    308314        <cfset result2.name = "" /> 
    309315        <cfset result2.event = "eh3" /> 
    310         <cfset eh1.addResult(result2, "explicitFormat") /> 
     316        <cfset result2.format = "explicitFormat" /> 
     317        <cfset eh1.addResult(result2) /> 
    311318 
    312319        <cfset eh2.name = "eh2" /> 
    313         <cfset eh2.addMessage(msg2, "explicitFormat") /> 
     320        <cfset eh2.addMessage(msg2) /> 
    314321 
    315322        <cfset eh3.name = "eh3" /> 
    316         <cfset eh3.addMessage(msg3, "explicitFormat") /> 
     323        <cfset eh3.addMessage(msg3) /> 
    317324 
    318325        <cfset eventHandlers[eh1.name] = eh1 /> 
    319326        <cfset eventHandlers[eh2.name] = eh2 /> 
     
    379386 
    380387        <cfset formattedView.name = "testFormattedRenderView" /> 
    381388        <cfset formattedView.template = "testFormatView.cfm" /> 
     389        <cfset formattedView.format = "explicitFormat" /> 
    382390 
    383391        <cfset eh.name = "eh" /> 
    384392        <cfset eh.addView(view) /> 
    385         <cfset eh.addView(formattedView, "explicitFormat") /> 
     393        <cfset eh.addView(formattedView) /> 
    386394 
    387395        <cfset ec = createEventContext() /> 
    388396        <cfset ec.setValue("viewContents", "testEventHandler_ViewRendering") /> 
     
    567575        <cfset ec = mg.handleRequest() /> 
    568576         
    569577        <cfset assertEquals( "home", ec.getInitialEventHandlerName(), "The requested event should be ""home"" " ) /> 
     578         
     579        <cfset structClear(url) /> 
    570580</cffunction> 
    571581 
    572582<cffunction name="testGetInitialEventHandlerNameForExplicitEvent" returntype="void" access="public"> 
     
    584594        <cfset ec = mg.handleRequest() /> 
    585595         
    586596        <cfset assertEquals( "test", ec.getInitialEventHandlerName(), "The requested event should be ""test"" " ) /> 
     597         
     598        <cfset structClear(url) /> 
    587599</cffunction> 
    588600 
    589601<!--- EVENT HANDLER EXTENSIBILITY TEST ---> 
     
    601613         
    602614        <cfset assertTrue( ec.exists("onRequestStart"), "The internal onRequestStart function was not invoked" ) /> 
    603615        <cfset assertTrue( ec.exists("customOnRequestStart"), "The custom onRequestStart function was not invoked" ) /> 
     616         
     617        <cfset structClear(url) /> 
     618</cffunction> 
     619 
     620<!--- FORMAT EXECUTION ORDER TESTS ---> 
     621<cffunction name="testExecutionOrderOfMessageBroadcastWithFormat" returntype="void" access="public"> 
     622        <cfset var mg = createModelGlue(this.coldspringPath) /> 
     623        <cfset var loader = "" /> 
     624        <cfset var ec = "" /> 
     625         
     626        <cfset loader = mg.getInternalBean("modelglue.ModuleLoaderFactory").create("XML") /> 
     627        <cfset loader.load(mg, "/ModelGlue/gesture/eventrequest/test/format/formatOrder.xml") /> 
     628         
     629        <cfset structClear(url) /> 
     630         
     631        <cfset url.event = "broadcastEvent" /> 
     632        <cfset url.requestFormat = "format" /> 
     633         
     634        <cfset ec = mg.handleRequest() /> 
     635         
     636        <cfset assertEquals( "format,none", ec.getValue("messageFormats"), "The message with the format of ""format"" should be broadcast first" ) /> 
     637         
     638        <cfset structClear(url) /> 
     639</cffunction> 
     640 
     641<cffunction name="testExecutionOrderOfMessageBroadcastWithFormatFromEventType" returntype="void" access="public"> 
     642        <cfset var mg = createModelGlue(this.coldspringPath) /> 
     643        <cfset var loader = "" /> 
     644        <cfset var ec = "" /> 
     645         
     646        <cfset loader = mg.getInternalBean("modelglue.ModuleLoaderFactory").create("XML") /> 
     647        <cfset loader.load(mg, "/ModelGlue/gesture/eventrequest/test/format/formatOrder.xml") /> 
     648         
     649        <cfset structClear(url) /> 
     650         
     651        <cfset url.event = "typedBroadcastEvent" /> 
     652        <cfset url.requestFormat = "format" /> 
     653         
     654        <cfset ec = mg.handleRequest() /> 
     655         
     656        <cfset assertEquals( "format,none", ec.getValue("messageFormats"), "The message with the format of ""format"" should be broadcast first" ) /> 
     657         
     658        <cfset structClear(url) /> 
     659</cffunction> 
     660 
     661<cffunction name="testExecutionOrderOfImplicitResultQueuedWithFormat" returntype="void" access="public"> 
     662        <cfset var mg = createModelGlue(this.coldspringPath) /> 
     663        <cfset var loader = "" /> 
     664        <cfset var ec = "" /> 
     665         
     666        <cfset loader = mg.getInternalBean("modelglue.ModuleLoaderFactory").create("XML") /> 
     667        <cfset loader.load(mg, "/ModelGlue/gesture/eventrequest/test/format/formatOrder.xml") /> 
     668         
     669        <cfset structClear(url) /> 
     670         
     671        <cfset url.event = "resultEvent" /> 
     672        <cfset url.requestFormat = "format" /> 
     673         
     674        <cfset ec = mg.handleRequest() /> 
     675         
     676        <cfset assertEquals( "format,none", ec.getValue("messageFormats"), "The message with the format of ""format"" should be broadcast first" ) /> 
     677         
     678        <cfset structClear(url) /> 
     679</cffunction> 
     680 
     681<cffunction name="testExecutionOrderOfImplicitResultQueuedWithFormatFromEventType" returntype="void" access="public"> 
     682        <cfset var mg = createModelGlue(this.coldspringPath) /> 
     683        <cfset var loader = "" /> 
     684        <cfset var ec = "" /> 
     685         
     686        <cfset loader = mg.getInternalBean("modelglue.ModuleLoaderFactory").create("XML") /> 
     687        <cfset loader.load(mg, "/ModelGlue/gesture/eventrequest/test/format/formatOrder.xml") /> 
     688         
     689        <cfset structClear(url) /> 
     690         
     691        <cfset url.event = "typedResultEvent" /> 
     692        <cfset url.requestFormat = "format" /> 
     693         
     694        <cfset ec = mg.handleRequest() /> 
     695         
     696        <cfset assertEquals( "format,none", ec.getValue("messageFormats"), "The message with the format of ""format"" should be broadcast first" ) /> 
     697         
     698        <cfset structClear(url) /> 
     699</cffunction> 
     700 
     701<cffunction name="testExecutionOrderOfNamedResultQueuedWithFormat" returntype="void" access="public"> 
     702        <cfset var mg = createModelGlue(this.coldspringPath) /> 
     703        <cfset var loader = "" /> 
     704        <cfset var ec = "" /> 
     705         
     706        <cfset loader = mg.getInternalBean("modelglue.ModuleLoaderFactory").create("XML") /> 
     707        <cfset loader.load(mg, "/ModelGlue/gesture/eventrequest/test/format/formatOrder.xml") /> 
     708         
     709        <cfset structClear(url) /> 
     710         
     711        <cfset url.event = "namedResultEvent" /> 
     712        <cfset url.requestFormat = "format" /> 
     713         
     714        <cfset ec = mg.handleRequest() /> 
     715         
     716        <cfset assertEquals( "format,none", ec.getValue("messageFormats"), "The message with the format of ""format"" should be broadcast first" ) /> 
     717         
     718        <cfset structClear(url) /> 
     719</cffunction> 
     720 
     721<cffunction name="testExecutionOrderOfNamedResultQueuedWithFormatFromEventType" returntype="void" access="public"> 
     722        <cfset var mg = createModelGlue(this.coldspringPath) /> 
     723        <cfset var loader = "" /> 
     724        <cfset var ec = "" /> 
     725         
     726        <cfset loader = mg.getInternalBean("modelglue.ModuleLoaderFactory").create("XML") /> 
     727        <cfset loader.load(mg, "/ModelGlue/gesture/eventrequest/test/format/formatOrder.xml") /> 
     728         
     729        <cfset structClear(url) /> 
     730         
     731        <cfset url.event = "typedNamedResultEvent" /> 
     732        <cfset url.requestFormat = "format" /> 
     733         
     734        <cfset ec = mg.handleRequest() /> 
     735         
     736        <cfset assertEquals( "format,none", ec.getValue("messageFormats"), "The message with the format of ""format"" should be broadcast first" ) /> 
     737         
     738        <cfset structClear(url) /> 
     739</cffunction> 
     740 
     741<cffunction name="testExecutionOrderOfViewQueuedWithFormat" returntype="void" access="public"> 
     742        <cfset var mg = createModelGlue(this.coldspringPath) /> 
     743        <cfset var loader = "" /> 
     744        <cfset var ec = "" /> 
     745         
     746        <cfset loader = mg.getInternalBean("modelglue.ModuleLoaderFactory").create("XML") /> 
     747        <cfset loader.load(mg, "/ModelGlue/gesture/eventrequest/test/format/formatOrder.xml") /> 
     748         
     749        <cfset structClear(url) /> 
     750         
     751        <cfset url.event = "viewEvent" /> 
     752        <cfset url.requestFormat = "format" /> 
     753         
     754        <cfset ec = mg.handleRequest() /> 
     755         
     756        <cfset assertEquals( "none", ec.getViewCollection().getFinalView(), "The view with the content of ""none"" should be the final view" ) /> 
     757         
     758        <cfset structClear(url) /> 
     759</cffunction> 
     760 
     761<cffunction name="testExecutionOrderOfViewQueuedWithFormatFromEventType" returntype="void" access="public"> 
     762        <cfset var mg = createModelGlue(this.coldspringPath) /> 
     763        <cfset var loader = "" /> 
     764        <cfset var ec = "" /> 
     765         
     766        <cfset loader = mg.getInternalBean("modelglue.ModuleLoaderFactory").create("XML") /> 
     767        <cfset loader.load(mg, "/ModelGlue/gesture/eventrequest/test/format/formatOrder.xml") /> 
     768         
     769        <cfset structClear(url) /> 
     770         
     771        <cfset url.event = "typedViewEvent" /> 
     772        <cfset url.requestFormat = "format" /> 
     773         
     774        <cfset ec = mg.handleRequest() /> 
     775         
     776        <cfset assertEquals( "none", ec.getViewCollection().getFinalView(), "The view with the content of ""none"" should be the final view" ) /> 
     777         
     778        <cfset structClear(url) /> 
    604779</cffunction> 
    605780 
    606781</cfcomponent> 
     782 No newline at end of file 
  • ModelGlue/gesture/eventrequest/test/format/FormatController.cfc

     
     1<cfcomponent output="false" extends="ModelGlue.gesture.controller.Controller"> 
     2 
     3<cffunction name="addNamedResult" access="public" output="false" returntype="void"> 
     4        <cfargument name="event" type="any" required="true" /> 
     5         
     6        <cfset arguments.event.addResult("target") /> 
     7</cffunction> 
     8 
     9<cffunction name="addFormatNamedResult" access="public" output="false" returntype="void"> 
     10        <cfargument name="event" type="any" required="true" /> 
     11         
     12        <cfset arguments.event.addResult("formatTarget") /> 
     13</cffunction> 
     14 
     15<cffunction name="message" access="public" output="false" returntype="void"> 
     16        <cfargument name="event" type="any" required="true" /> 
     17         
     18        <cfset var messageFormats = arguments.event.getValue("messageFormats") /> 
     19         
     20        <cfset messageFormats = listAppend(messageFormats, "none") /> 
     21         
     22        <cfset arguments.event.setValue("messageFormats", messageFormats) /> 
     23</cffunction> 
     24 
     25<cffunction name="formatMessage" access="public" output="false" returntype="void"> 
     26        <cfargument name="event" type="any" required="true" /> 
     27         
     28        <cfset var messageFormats = arguments.event.getValue("messageFormats") /> 
     29         
     30        <cfset messageFormats = listAppend(messageFormats, "format") /> 
     31         
     32        <cfset arguments.event.setValue("messageFormats", messageFormats) /> 
     33</cffunction> 
     34 
     35</cfcomponent> 
     36 No newline at end of file 
  • ModelGlue/gesture/eventrequest/test/format/formatOrder.xml

     
     1<modelglue> 
     2 
     3<config> 
     4 
     5        <setting name="viewMappings" value="/ModelGlue/gesture/eventrequest/test/format" /> 
     6 
     7</config> 
     8 
     9<controllers> 
     10 
     11        <controller id="FormatController" type="ModelGlue.gesture.eventrequest.test.format.FormatController"> 
     12                <message-listener message="addNamedResult" /> 
     13                <message-listener message="addFormatNamedResult" /> 
     14                <message-listener message="message" /> 
     15                <message-listener message="formatMessage" /> 
     16        </controller> 
     17 
     18</controllers> 
     19 
     20<event-types> 
     21 
     22        <event-type name="broadcastType"> 
     23                <before> 
     24                        <broadcasts format="format"> 
     25                                <message name="formatMessage" /> 
     26                        </broadcasts> 
     27                </before> 
     28        </event-type> 
     29 
     30        <event-type name="resultType"> 
     31                <before> 
     32                        <results format="format"> 
     33                                <result do="formatTargetEvent" /> 
     34                        </results> 
     35                </before> 
     36        </event-type> 
     37 
     38        <event-type name="namedResultType"> 
     39                <before> 
     40                        <broadcasts format="format"> 
     41                                <message name="addFormatNamedResult" /> 
     42                        </broadcasts> 
     43                </before> 
     44        </event-type> 
     45 
     46        <event-type name="viewType"> 
     47                <before> 
     48                        <views format="format"> 
     49                                <include name="view" template="formatView.cfm" /> 
     50                        </views> 
     51                </before> 
     52        </event-type> 
     53 
     54</event-types> 
     55 
     56<event-handlers> 
     57 
     58        <event-handler name="broadcastEvent"> 
     59                <broadcasts format="format"> 
     60                        <message name="formatMessage" /> 
     61                </broadcasts> 
     62                <broadcasts> 
     63                        <message name="message" /> 
     64                </broadcasts> 
     65        </event-handler> 
     66        <event-handler name="typedBroadcastEvent" type="broadcastType"> 
     67                <broadcasts> 
     68                        <message name="message" /> 
     69                </broadcasts> 
     70        </event-handler> 
     71 
     72        <event-handler name="resultEvent"> 
     73                <results format="format"> 
     74                        <result do="formatTargetEvent" /> 
     75                </results> 
     76                <results> 
     77                        <result do="targetEvent" /> 
     78                </results> 
     79        </event-handler> 
     80        <event-handler name="typedResultEvent" type="resultType"> 
     81                <results> 
     82                        <result do="targetEvent" /> 
     83                </results> 
     84        </event-handler> 
     85 
     86        <event-handler name="namedResultEvent"> 
     87                <broadcasts format="format"> 
     88                        <message name="addFormatNamedResult" /> 
     89                </broadcasts> 
     90                <broadcasts> 
     91                        <message name="addNamedResult" /> 
     92                </broadcasts> 
     93                <results> 
     94                        <result name="target" do="targetEvent" /> 
     95                        <result name="formatTarget" do="formatTargetEvent" /> 
     96                </results> 
     97        </event-handler> 
     98        <event-handler name="typedNamedResultEvent" type="namedResultType"> 
     99                <broadcasts> 
     100                        <message name="addNamedResult" /> 
     101                </broadcasts> 
     102                <results> 
     103                        <result name="target" do="targetEvent" /> 
     104                        <result name="formatTarget" do="formatTargetEvent" /> 
     105                </results> 
     106        </event-handler> 
     107 
     108        <event-handler name="targetEvent"> 
     109                <broadcasts> 
     110                        <message name="message" /> 
     111                </broadcasts> 
     112        </event-handler> 
     113        <event-handler name="formatTargetEvent"> 
     114                <broadcasts> 
     115                        <message name="formatMessage" /> 
     116                </broadcasts> 
     117        </event-handler> 
     118 
     119        <event-handler name="viewEvent"> 
     120                <views format="format"> 
     121                        <include name="view" template="formatView.cfm" /> 
     122                </views> 
     123                <views> 
     124                        <include name="view" template="view.cfm" /> 
     125                </views> 
     126        </event-handler> 
     127        <event-handler name="typedViewEvent" type="viewType"> 
     128                <views> 
     129                        <include name="view" template="view.cfm" /> 
     130                </views> 
     131        </event-handler> 
     132 
     133</event-handlers> 
     134 
     135</modelglue> 
     136 No newline at end of file 
  • ModelGlue/gesture/eventrequest/test/format/formatView.cfm

     
     1format 
     2 No newline at end of file 
  • ModelGlue/gesture/eventrequest/test/format/view.cfm

     
     1none 
     2 No newline at end of file 
  • ModelGlue/gesture/module/XMLModuleLoader.cfc

     
    456456        <cfloop from="1" to="#arrayLen(arguments.broadcastsXml.xmlChildren)#" index="i"> 
    457457                <cfset msgXml = arguments.broadcastsXml.xmlChildren[i] /> 
    458458                <cfset msgInst = createObject("component", "ModelGlue.gesture.eventhandler.Message") /> 
     459                 
     460                <cfparam name="arguments.broadcastsXml.xmlAttributes.format" default="" /> 
    459461         
    460462                <cfset msgInst.name = msgXml.xmlAttributes.name /> 
     463                <cfset msgInst.format = arguments.broadcastsXml.xmlAttributes.format /> 
    461464                 
    462465                <cfloop from="1" to="#arrayLen(msgXml.xmlChildren)#" index="j"> 
    463466                        <cfset argXml = msgXml.xmlChildren[j] /> 
    464467                        <cfset msgInst.arguments.setValue(argXml.xmlAttributes.name, argXml.xmlAttributes.value) /> 
    465468                </cfloop> 
    466469                 
    467                 <cfif structKeyExists(arguments.broadcastsXml.xmlAttributes, "format")> 
    468                         <cfset arguments.eventHandler.addMessage(msgInst, arguments.broadcastsXml.xmlAttributes.format) /> 
    469                 <cfelse> 
    470                         <cfset arguments.eventHandler.addMessage(msgInst) /> 
    471                 </cfif> 
     470                <cfset arguments.eventHandler.addMessage(msgInst) /> 
    472471        </cfloop> 
    473472</cffunction> 
    474473 
     
    486485        <cfloop from="1" to="#arrayLen(arguments.resultsXml.xmlChildren)#" index="i"> 
    487486                <cfset resXml = arguments.resultsXml.xmlChildren[i] /> 
    488487                <cfset resInst = createObject("component", "ModelGlue.gesture.eventhandler.Result") /> 
    489  
    490                          
     488                 
     489                <cfparam name="arguments.resultsXml.xmlAttributes.format" default="" /> 
     490                 
     491                <cfset resInst.format = arguments.resultsXml.xmlAttributes.format /> 
     492                 
    491493                <cfloop collection="#resXml.xmlAttributes#" item="j"> 
    492494                        <cfswitch expression="#j#"> 
    493495                                <cfcase value="do"> 
     
    505507                        </cfswitch> 
    506508                </cfloop> 
    507509 
    508                 <cfif structKeyExists(arguments.resultsXml.xmlAttributes, "format")> 
    509                         <cfset arguments.eventHandler.addResult(resInst, arguments.resultsXml.xmlAttributes.format) /> 
    510                 <cfelse> 
    511                         <cfset arguments.eventHandler.addResult(resInst) /> 
    512                 </cfif> 
     510                <cfset arguments.eventHandler.addResult(resInst) /> 
    513511        </cfloop> 
    514512</cffunction> 
    515513 
     
    564562        <cfloop from="1" to="#arrayLen(arguments.viewsXml.xmlChildren)#" index="i"> 
    565563                <cfset viewXml = arguments.viewsXml.xmlChildren[i] /> 
    566564                <cfset viewInst = createObject("component", "ModelGlue.gesture.eventhandler.View") /> 
    567          
     565                 
     566                <cfparam name="arguments.viewsXml.xmlAttributes.format" default="" /> 
     567                 
    568568                <cfset viewInst.name = viewXml.xmlAttributes.name /> 
    569569                <cfset viewInst.template = viewXml.xmlAttributes.template /> 
     570                <cfset viewInst.format = arguments.viewsXml.xmlAttributes.format /> 
    570571                 
    571572                <cfparam name="viewXml.xmlAttributes.append" default="false" /> 
    572573                <cfparam name="viewXml.xmlAttributes.cache" default="false" /> 
     
    603604                        <cfset viewInst.addValue(valueInst) /> 
    604605                </cfloop> 
    605606 
    606                 <cfif structKeyExists(arguments.viewsXml.xmlAttributes, "format")> 
    607                         <cfset arguments.eventHandler.addView(viewInst, arguments.viewsXml.xmlAttributes.format) /> 
    608                 <cfelse> 
    609                         <cfset arguments.eventHandler.addView(viewInst) /> 
    610                 </cfif> 
     607                <cfset arguments.eventHandler.addView(viewInst) /> 
    611608 
    612609        </cfloop> 
    613610</cffunction> 
  • ModelGlue/gesture/module/test/TestXMLModuleLoader.cfc

     
    4848        <cfset assertTrue(isObject(obj), "event handler not object!") /> 
    4949         
    5050        <!--- Messages ---> 
    51         <cfset assertTrue(structCount(obj.messages) eq 1, "message not found or more than one message found") /> 
     51        <cfset assertTrue(arrayLen(obj.messages) eq 1, "message not found or more than one message found") /> 
    5252 
    53         <cfset assertTrue(obj.messages.CFNULLKEYWORKAROUND[1].name eq "messageName", "message name not set") /> 
    54         <cfset assertTrue(obj.messages.CFNULLKEYWORKAROUND[1].arguments.getValue("argumentName") eq "argumentValue", "argument value not set (result = '#obj.messages.CFNULLKEYWORKAROUND[1].arguments.getValue("argumentName")#')") /> 
     53        <cfset assertTrue(obj.messages[1].name eq "messageName", "message name not set") /> 
     54        <cfset assertTrue(obj.messages[1].arguments.getValue("argumentName") eq "argumentValue", "argument value not set (result = '#obj.messages[1].arguments.getValue("argumentName")#')") /> 
    5555 
    5656 
    5757        <!--- Results ---> 
    58         <cfset assertTrue(structCount(obj.results.CFNULLKEYWORKAROUND) eq 2, "results not found or two results not found") /> 
    59         <cfset assertTrue(arrayLen(obj.results.CFNULLKEYWORKAROUND.resultName) eq 1, "resultName result not  found or more than one result mapped") /> 
    60         <cfset assertTrue(obj.results.CFNULLKEYWORKAROUND.resultName[1].event eq "eventName", "resultName event prop misdefined") /> 
    61         <cfset assertTrue(obj.results.CFNULLKEYWORKAROUND.resultName[1].redirect, "resultName redirect prop misdefined") /> 
    62         <cfset assertTrue(obj.results.CFNULLKEYWORKAROUND.resultName[1].append eq "appendValue", "resultName append prop misdefined") /> 
    63         <cfset assertTrue(obj.results.CFNULLKEYWORKAROUND.resultName[1].anchor eq "anchorValue", "resultName anchor prop misdefined") /> 
    64         <cfset assertFalse(obj.results.CFNULLKEYWORKAROUND.resultName[1].preservestate, "resultName preservestate prop misdefined") /> 
    65         <cfset assertTrue(arrayLen(obj.results.CFNULLKEYWORKAROUND["CFNULLKEYWORKAROUND"]) eq 1, "implicit result result not  found or more than one result mapped") /> 
    66         <cfset assertTrue(obj.results.CFNULLKEYWORKAROUND["CFNULLKEYWORKAROUND"][1].event eq "implicitEventName", "implicit result event prop misdefined") /> 
    67         <cfset assertTrue(obj.results.CFNULLKEYWORKAROUND["CFNULLKEYWORKAROUND"][1].redirect, "implicit result redirect prop misdefined") /> 
    68         <cfset assertTrue(obj.results.CFNULLKEYWORKAROUND["CFNULLKEYWORKAROUND"][1].append eq "appendValue", "implicit result append prop misdefined") /> 
    69         <cfset assertTrue(obj.results.CFNULLKEYWORKAROUND["CFNULLKEYWORKAROUND"][1].anchor eq "anchorValue", "implicit result anchor prop misdefined") /> 
    70         <cfset assertFalse(obj.results.CFNULLKEYWORKAROUND["CFNULLKEYWORKAROUND"][1].preservestate, "implicit result preservestate prop misdefined") /> 
     58        <cfset assertTrue(structCount(obj.results) eq 2, "results not found or two results not found") /> 
     59        <cfset assertTrue(arrayLen(obj.results.resultName) eq 1, "resultName result not  found or more than one result mapped") /> 
     60        <cfset assertTrue(obj.results.resultName[1].event eq "eventName", "resultName event prop misdefined") /> 
     61        <cfset assertTrue(obj.results.resultName[1].redirect, "resultName redirect prop misdefined") /> 
     62        <cfset assertTrue(obj.results.resultName[1].append eq "appendValue", "resultName append prop misdefined") /> 
     63        <cfset assertTrue(obj.results.resultName[1].anchor eq "anchorValue", "resultName anchor prop misdefined") /> 
     64        <cfset assertFalse(obj.results.resultName[1].preservestate, "resultName preservestate prop misdefined") /> 
     65        <cfset assertTrue(arrayLen(obj.results["CFNULLKEYWORKAROUND"]) eq 1, "implicit result result not  found or more than one result mapped") /> 
     66        <cfset assertTrue(obj.results["CFNULLKEYWORKAROUND"][1].event eq "implicitEventName", "implicit result event prop misdefined") /> 
     67        <cfset assertTrue(obj.results["CFNULLKEYWORKAROUND"][1].redirect, "implicit result redirect prop misdefined") /> 
     68        <cfset assertTrue(obj.results["CFNULLKEYWORKAROUND"][1].append eq "appendValue", "implicit result append prop misdefined") /> 
     69        <cfset assertTrue(obj.results["CFNULLKEYWORKAROUND"][1].anchor eq "anchorValue", "implicit result anchor prop misdefined") /> 
     70        <cfset assertFalse(obj.results["CFNULLKEYWORKAROUND"][1].preservestate, "implicit result preservestate prop misdefined") /> 
    7171         
    7272        <!--- Views ---> 
    73         <cfset assertTrue(arrayLen(obj.views.CFNULLKEYWORKAROUND) eq 1, "view not found or more than one view found") /> 
    74         <cfset assertTrue(obj.views.CFNULLKEYWORKAROUND[1].name eq "viewName", "view name not set") /> 
    75         <cfset assertTrue(obj.views.CFNULLKEYWORKAROUND[1].template eq "templateName", "view template not set") /> 
    76         <cfset assertTrue(structCount(obj.views.CFNULLKEYWORKAROUND[1].values) eq 1, "number of values is not one") /> 
    77         <cfset assertTrue(structKeyExists(obj.views.CFNULLKEYWORKAROUND[1].values, "valueName"), "value named ""valuename"" not found") /> 
    78         <cfset assertTrue(obj.views.CFNULLKEYWORKAROUND[1].values.valueName.name eq "valueName", "valueName value not named valueName (ugh, that's confusing.)") />      
    79         <cfset assertTrue(obj.views.CFNULLKEYWORKAROUND[1].values.valueName.value eq "valueValue", "valueName value not set to valueValue") />   
    80         <cfset assertFalse(obj.views.CFNULLKEYWORKAROUND[1].values.valueName.overwrite eq "valueValue", "valueName value wasn't set to not overwrite") />        
     73        <cfset assertTrue(arrayLen(obj.views) eq 1, "view not found or more than one view found") /> 
     74        <cfset assertTrue(obj.views[1].name eq "viewName", "view name not set") /> 
     75        <cfset assertTrue(obj.views[1].template eq "templateName", "view template not set") /> 
     76        <cfset assertTrue(structCount(obj.views[1].values) eq 1, "number of values is not one") /> 
     77        <cfset assertTrue(structKeyExists(obj.views[1].values, "valueName"), "value named ""valuename"" not found") /> 
     78        <cfset assertTrue(obj.views[1].values.valueName.name eq "valueName", "valueName value not named valueName (ugh, that's confusing.)") />  
     79        <cfset assertTrue(obj.views[1].values.valueName.value eq "valueValue", "valueName value not set to valueValue") />       
     80        <cfset assertFalse(obj.views[1].values.valueName.overwrite eq "valueValue", "valueName value wasn't set to not overwrite") />    
    8181         
    8282</cffunction> 
    8383 
  • ModelGlue/gesture/modules/internal/utility/test/TestUtilityModule.cfc

     
    3535        <cfset url.event = "eventHandlerWithEventTypeOfDisabledDebug" /> 
    3636        <cfset ec = mg.handleRequest() /> 
    3737        <cfset assertTrue( request.modelGlueSuppressDebugging IS true, "Disable Debug setting did not work when event type had modelglue.disableModelGlueDebugging broadcast ") /> 
     38        <cfset structClear(url) />       
    3839         
    3940        <!--- If we don't throw error, we made it. ---> 
    4041</cffunction> 
  • ModelGlue/gesture/test/TestModelGlue.cfc

     
    8080        <cfset assertTrue(context.getValue("someFormKey") eq "someFormValue", "form value not populated") /> 
    8181        <cfset assertTrue(context.getValue("someUrlKey") eq "someUrlValue", "form value not populated") /> 
    8282        <cfset assertTrue(context.getValue("conflictKey") eq "formConflictValue", "conflict value not recognized from form") /> 
    83                  
     83         
     84        <cfset structClear(url) /> 
     85        <cfset structClear(form) /> 
    8486</cffunction> 
    8587 
    8688<cffunction name="testPhase_StatefulRedirectPopulation" returntype="void" access="public"> 
     
    99101        <cfset assertTrue(context.getValue("preservedValueName") eq "preservedValue", "preserved value not populated") /> 
    100102        <cfset assertFalse(structKeyExists(session, "_modelgluePreservedState"), "preserved state not cleared") /> 
    101103        <cfset assertTrue(context.getValue("conflictKey") eq "formConflictValue", "conflict value not recognized from form") /> 
     104 
     105        <cfset structClear(form) /> 
     106        <cfset structClear(url) /> 
    102107</cffunction> 
    103108 
    104109</cfcomponent> 
     110 No newline at end of file