There are a lot of changes to ''!-FitLibrary-!'' in this version. !3 1. ''!-FitLibraryGeneric-!'' # ''!-FitLibrary-!'' supports jdk1.5 generics and enums through a separate jar (''fitLibraryGeneric.jar'') that's supplied with this release. If you're running jdk1.5 or later, that jar will be used automatically. ''!-FitLibrary-!'' itself still only depends on jdk1.4, but runs with Java versions up to jdk1.6. ''!-FitLibraryGeneric-!'' supports (see .FitLibrary.SpecifiCations.FitLibraryGeneric for details): * Generic lists, sets, maps and other collections. This means that fixture code is no longer needed to create collections, as ''!-FitLibrary-!'' can determine the element type through reflection. * Generic classes defined in an application. ''!-FitLibrary-!'' maintains full generic type information at runtime (reversing Java's ''type erasure''). * Enums. Enum constants can be used directly in storytest. ''!-FitLibrary-!'' manages them directly. The file ''fitlibraryGeneric.jar'' needs to be on the classpath and the ''!-FitLibraryServer-!'' needs to be used (see 3. below). # !3 2. Support for legacy fixtures in ''!-DoFixture-!'' tables Fit fixtures are supported again by name with ''!-DoFixture-!''. Even if a storytest is in flow, a table can name a Fit (or any other) fixture class and it will be run. # !3 3. Getting into Flow It is no longer necessary for the first table of a storytest to be a ''!-DoFixture-!'' for a storytest to go into flow. Now, the first ''!-DoFixture-!'' table in a storytest will take over flow. This depends on using ''!-FitLibraryServer-!'' instead of ''!-FitServer-!''. To do so, place this way up in the page hierarchy: {{{ !define TEST_RUNNER {fitlibrary.suite.FitLibraryServer} }}}See .FitLibrary.SpecifiCations.GoingIntoFlow for further details. # !3 4. New (Postfix) Special Actions in ''!-DoFixture-!'' Instead of writing: |'''check'''|''some action''|a|''with arg''|b|44| you can now write: |''some action''|a|''with arg''|b|'''is'''|44| A similar special action is prepared to wait awhile before the actual value is the same as the expected value: |''some action''|a|''with arg''|b|'''becomes'''|4.*| A similar special action does pattern matching: |''some action''|a|''with arg''|b|'''matches'''|4.*| See .FitLibrary.UserGuide.FitLibraryByExample.DoFixture.DoFixtureSummary for further details. # !3 5. ''!-SelectFixture-!'' See example in .FitLibrary.UserGuide.FitLibraryByExample.SelectFixture See .FitLibrary.SpecifiCations.MultipleFlowObjects for the specification # !3 6. Defined Actions It can be convenient to define the actions in a high-level domain language in terms of actions in a lower-level language, such as actions that drive web tests. Rather than writing fixture code to translate the high-level actions, ''defined actions'' can be used instead. See example in .FitLibrary.UserGuide.FitLibraryByExample.DefinedActions See .FitLibrary.SpecifiCations.DefinedActions # !3 7. Dynamic Variables These are not based on the Fit Fixture symbols, as I needed them to be thread-safe and separated across storytests to allow for several storytests to be run in parallel. # !3 8. Bug Fixes Two bugs have been fixed: * A ''!-DoFixture-!'' subclass may define ''setUp()'' and ''tearDown()'' methods, which are called just before and just after processing. Sometimes the ''tearDown()'' method was called at the wrong time. * When a ''!-DoFixture-!'' was used in a storytest that was run with the standard ''!-FitServer-!'', it processed the first row of the table again and complained about a strange method. This now works with ''!-FitServer-!'', as well as with ''!-FitLibraryServer-!''.