!3 Creating a method name from an action
The ${keywords} of an action are concatentated together, with spaces between and converted into a valid Java identifier. Eg:
 * "first example" is mapped to "firstExample"
 * "%age" is mapped to "percentAge"
 * "while" is mapped to "_while"
There's no need to work out the mapping. Run the storytest and ${fitLibrary} will tell you the name of the method that it expects (if it doesn't exist), along with its arguments. Eg, run this:

| !-fitlibrary.eg.chat.ChatSystem-! |
----
|''1 some mix''|1|''of %age''|3|''and .^&''|chat|

||1||2||

The mapping is done using ${extendedCamelCase}.
!3 Rules for coloring Cells in the Report
 * If the called method returns a boolean value, the ''keywords'' of that action are colored green if the returns true. If the method returns false or throws an exception, it colors it red.
 * A 'check'' special action colors the last cell, containing the expected value
 * A 'reject' or 'not' special action color the action green if the action returns false or throws an exception. Otherwise it colors it red.
 * An 'ensure' special action colors the action red if the action returns false or throws an exception. Otherwise it colors it green.
!3 Auto-Wrapping
The value returned by the method called for an action may be auto-wrapped with a Traverse for interpreting the rest of the table. Objects are auto-wrapped as follows:
 * A ''Map'' objects is auto-wrapped with a ${mapTraverse}.
 * A ''Set'' object is auto-wrapped with a ${setTraverse}.
 * A primitive array, such as int[], Integer[], etc is wrapped with an ${arrayTraverse}
 * An ''Object[]'', ''Collection'' or ''Iterator'' is wrapped with a ${listTraverse}.
 * An 'Object' is wrapped with a ${workflow}'. But only if it's not one of the above, nor a ${traverse} nor ${fixture}, and doesn't have a ''static Object parse(String)'' method.
This ${traverse} object, or the one returned explicitly, is used to interpret the rest of the table.

Also see SetUpTearDown
