use t::Jifty; run_is_deeply; __DATA__ === one action --- form J:A-mymoniker: DoSomething J:A:F-id-mymoniker: 23 J:A:F-something-mymoniker: else J:ACTIONS: mymoniker --- request request_method: GET path: / state_variables: {} actions: mymoniker: moniker: mymoniker class: DoSomething active: 1 has_run: 0 arguments: id: 23 something: else arguments: J:A-mymoniker: DoSomething J:A:F-id-mymoniker: 23 J:A:F-something-mymoniker: else J:ACTIONS: mymoniker template_arguments: {} fragments: {} === two actions --- form J:A-mymoniker: DoSomething J:A:F-id-mymoniker: 23 J:A:F-something-mymoniker: else J:A-second: DoSomething J:A:F-id-second: 42 J:A:F-something-second: bla J:ACTIONS: mymoniker!second --- request request_method: GET path: / state_variables: {} actions: mymoniker: moniker: mymoniker class: DoSomething active: 1 has_run: 0 arguments: id: 23 something: else second: moniker: second class: DoSomething active: 1 has_run: 0 arguments: id: 42 something: bla arguments: J:A-mymoniker: DoSomething J:A:F-id-mymoniker: 23 J:A:F-something-mymoniker: else J:A-second: DoSomething J:A:F-id-second: 42 J:A:F-something-second: bla J:ACTIONS: mymoniker!second template_arguments: {} fragments: {} === two different actions --- form J:A-mymoniker: DoSomething J:A:F-id-mymoniker: 23 J:A:F-something-mymoniker: else J:A-second: DoThat J:A:F-id-second: 42 J:A:F-something-second: bla J:ACTIONS: mymoniker!second --- request request_method: GET path: / state_variables: {} actions: mymoniker: moniker: mymoniker class: DoSomething active: 1 has_run: 0 arguments: id: 23 something: else second: moniker: second class: DoThat active: 1 has_run: 0 arguments: id: 42 something: bla arguments: J:A-mymoniker: DoSomething J:A:F-id-mymoniker: 23 J:A:F-something-mymoniker: else J:A-second: DoThat J:A:F-id-second: 42 J:A:F-something-second: bla J:ACTIONS: mymoniker!second template_arguments: {} fragments: {} === ignore arguments without actions --- form J:A-mymoniker: DoSomething J:A:F-id-mymoniker: 23 J:A:F-something-mymoniker: else J:A:F-id-second: 42 J:A:F-something-second: bla J:ACTIONS: mymoniker!second --- request request_method: GET path: / state_variables: {} actions: mymoniker: moniker: mymoniker class: DoSomething active: 1 has_run: 0 arguments: id: 23 something: else arguments: J:A-mymoniker: DoSomething J:A:F-id-mymoniker: 23 J:A:F-something-mymoniker: else J:A:F-id-second: 42 J:A:F-something-second: bla J:ACTIONS: mymoniker!second template_arguments: {} fragments: {} === one active, one inactive action --- form J:A-mymoniker: DoSomething J:A:F-id-mymoniker: 23 J:A:F-something-mymoniker: else J:A-second: DoThat J:A:F-id-second: 42 J:A:F-something-second: bla J:ACTIONS: second --- request request_method: GET path: / state_variables: {} actions: mymoniker: moniker: mymoniker class: DoSomething active: 0 has_run: 0 arguments: id: 23 something: else second: moniker: second class: DoThat active: 1 has_run: 0 arguments: id: 42 something: bla arguments: J:A-mymoniker: DoSomething J:A:F-id-mymoniker: 23 J:A:F-something-mymoniker: else J:A-second: DoThat J:A:F-id-second: 42 J:A:F-something-second: bla J:ACTIONS: second template_arguments: {} fragments: {} === two actions, no J:ACTIONS --- form J:A-mymoniker: DoSomething J:A:F-id-mymoniker: 23 J:A:F-something-mymoniker: else J:A-second: DoThat J:A:F-id-second: 42 J:A:F-something-second: bla --- request request_method: GET path: / state_variables: {} actions: mymoniker: moniker: mymoniker class: DoSomething active: 1 has_run: 0 arguments: id: 23 something: else second: moniker: second class: DoThat active: 1 has_run: 0 arguments: id: 42 something: bla arguments: J:A-mymoniker: DoSomething J:A:F-id-mymoniker: 23 J:A:F-something-mymoniker: else J:A-second: DoThat J:A:F-id-second: 42 J:A:F-something-second: bla template_arguments: {} fragments: {} === ignore totally random stuff --- form J:A: bloopybloopy J:A-mymoniker: DoSomething J:A:E-id-mymoniker: 5423 J:A:F-id-mymoniker: 23 asdfk-asdfkjasdlf:J:A:F-asdkfjllsadf: bla J:A:F-something-mymoniker: else foo: bar J:A-second: DoThat J:A:F-id-second: 42 J:A:F-something-second: bla --- request request_method: GET path: / state_variables: {} actions: mymoniker: moniker: mymoniker class: DoSomething active: 1 has_run: 0 arguments: id: 23 something: else second: moniker: second class: DoThat active: 1 has_run: 0 arguments: id: 42 something: bla arguments: J:A: bloopybloopy J:A-mymoniker: DoSomething J:A:E-id-mymoniker: 5423 J:A:F-id-mymoniker: 23 asdfk-asdfkjasdlf:J:A:F-asdkfjllsadf: bla J:A:F-something-mymoniker: else foo: bar J:A-second: DoThat J:A:F-id-second: 42 J:A:F-something-second: bla template_arguments: {} fragments: {} === order doesn't matter --- form J:A:F-id-mymoniker: 23 J:A:F-something-second: bla J:A:F-id-second: 42 J:A-second: DoThat J:A:F-something-mymoniker: else J:A-mymoniker: DoSomething --- request request_method: GET path: / state_variables: {} actions: mymoniker: moniker: mymoniker class: DoSomething active: 1 has_run: 0 arguments: id: 23 something: else second: moniker: second class: DoThat active: 1 has_run: 0 arguments: id: 42 something: bla arguments: J:A:F-id-mymoniker: 23 J:A:F-something-second: bla J:A:F-id-second: 42 J:A-second: DoThat J:A:F-something-mymoniker: else J:A-mymoniker: DoSomething template_arguments: {} fragments: {} === fallbacks being ignored --- form J:A-mymoniker: DoSomething J:A:F-id-mymoniker: 23 J:A:F:F-id-mymoniker: 96 J:A:F-something-mymoniker: else J:ACTIONS: mymoniker --- request request_method: GET path: / state_variables: {} actions: mymoniker: moniker: mymoniker class: DoSomething active: 1 has_run: 0 arguments: id: 23 something: else arguments: J:A-mymoniker: DoSomething J:A:F-id-mymoniker: 23 J:A:F:F-id-mymoniker: 96 J:A:F-something-mymoniker: else J:ACTIONS: mymoniker template_arguments: {} fragments: {} === fallbacks being ignored (other order) --- form J:A-mymoniker: DoSomething J:A:F:F-id-mymoniker: 96 J:A:F-id-mymoniker: 23 J:A:F-something-mymoniker: else J:ACTIONS: mymoniker --- request request_method: GET path: / state_variables: {} actions: mymoniker: moniker: mymoniker class: DoSomething active: 1 has_run: 0 arguments: id: 23 something: else arguments: J:A-mymoniker: DoSomething J:A:F:F-id-mymoniker: 96 J:A:F-id-mymoniker: 23 J:A:F-something-mymoniker: else J:ACTIONS: mymoniker template_arguments: {} fragments: {} === fallbacks being used --- form J:A-mymoniker: DoSomething J:A:F:F-id-mymoniker: 96 J:A:F-something-mymoniker: else J:ACTIONS: mymoniker --- request request_method: GET path: / state_variables: {} actions: mymoniker: moniker: mymoniker class: DoSomething active: 1 has_run: 0 arguments: id: 96 something: else arguments: J:A-mymoniker: DoSomething J:A:F:F-id-mymoniker: 96 J:A:F-something-mymoniker: else J:ACTIONS: mymoniker template_arguments: {} fragments: {} === two different actions, one with fallback, one without --- form J:A-mymoniker: DoSomething J:A:F-id-mymoniker: 23 J:A:F-something-mymoniker: else J:A:F:F-something-second: bla J:A-second: DoThat J:A:F-id-second: 42 J:A:F-something-second: feepy J:ACTIONS: mymoniker!second --- request request_method: GET path: / state_variables: {} actions: mymoniker: moniker: mymoniker class: DoSomething active: 1 has_run: 0 arguments: id: 23 something: else second: moniker: second class: DoThat active: 1 has_run: 0 arguments: id: 42 something: feepy arguments: J:A-mymoniker: DoSomething J:A:F-id-mymoniker: 23 J:A:F-something-mymoniker: else J:A:F:F-something-second: bla J:A-second: DoThat J:A:F-id-second: 42 J:A:F-something-second: feepy J:ACTIONS: mymoniker!second template_arguments: {} fragments: {} === just validating ---- form J:A-mymoniker: DoSomething J:A:F-id-mymoniker: 23 J:A:F-something-mymoniker: else J:A-second: DoSomething J:VALIDATE: 1 J:A:F-id-second: 42 J:A:F-something-second: bla J:ACTIONS: mymoniker;second --- request request_method: GET path: / state_variables: {} actions: mymoniker: moniker: mymoniker class: DoSomething active: 1 has_run: 0 arguments: id: 23 something: else second: moniker: second class: DoSomething active: 1 has_run: 0 arguments: id: 42 something: bla just_validating: 1 arguments: J:A-mymoniker: DoSomething J:A:F-id-mymoniker: 23 J:A:F-something-mymoniker: else J:A-second: DoSomething J:VALIDATE: 1 J:A:F-id-second: 42 J:A:F-something-second: bla J:ACTIONS: mymoniker!second template_arguments: {} fragments: {}