You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2010/11/16 11:10:43 UTC

svn commit: r1035570 - in /incubator/isis/trunk: ./ support/prototype/viewer-bdd/src/test/resources/org/apache/isis/support/prototype/common/ support/prototype/viewer-bdd/src/test/resources/org/apache/isis/support/prototype/stories/ viewer/bdd/concordi...

Author: danhaywood
Date: Tue Nov 16 10:10:42 2010
New Revision: 1035570

URL: http://svn.apache.org/viewvc?rev=1035570&view=rev
Log:
some changes for BDD viewer; utility scripts in trunk

Added:
    incubator/isis/trunk/mvn-build-all.sh   (with props)
    incubator/isis/trunk/mvn-build-standard.sh   (with props)
    incubator/isis/trunk/mvn-site-standard-local-full.sh   (with props)
    incubator/isis/trunk/mvn-site-standard-local.sh   (with props)
    incubator/isis/trunk/svn-st.sh   (with props)
    incubator/isis/trunk/svn-up.cmd
      - copied unchanged from r1035481, incubator/isis/trunk/svnup.cmd
    incubator/isis/trunk/svn-up.sh   (props changed)
      - copied unchanged from r1035481, incubator/isis/trunk/svnup.sh
Removed:
    incubator/isis/trunk/svnup.cmd
    incubator/isis/trunk/svnup.sh
Modified:
    incubator/isis/trunk/support/prototype/viewer-bdd/src/test/resources/org/apache/isis/support/prototype/common/BootstrapInExplorationMode.html
    incubator/isis/trunk/support/prototype/viewer-bdd/src/test/resources/org/apache/isis/support/prototype/stories/NewClaimDefaultsOkStory.html
    incubator/isis/trunk/viewer/bdd/concordion/src/main/java/org/apache/isis/viewer/bdd/concordion/AbstractIsisConcordionTest.java
    incubator/isis/trunk/viewer/bdd/src/docbkx/guide/isis-bdd-viewer.xml

Added: incubator/isis/trunk/mvn-build-all.sh
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/mvn-build-all.sh?rev=1035570&view=auto
==============================================================================
--- incubator/isis/trunk/mvn-build-all.sh (added)
+++ incubator/isis/trunk/mvn-build-all.sh Tue Nov 16 10:10:42 2010
@@ -0,0 +1 @@
+mvn clean install -D modules=all -o
\ No newline at end of file

Propchange: incubator/isis/trunk/mvn-build-all.sh
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/isis/trunk/mvn-build-all.sh
------------------------------------------------------------------------------
    svn:executable = *

Added: incubator/isis/trunk/mvn-build-standard.sh
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/mvn-build-standard.sh?rev=1035570&view=auto
==============================================================================
--- incubator/isis/trunk/mvn-build-standard.sh (added)
+++ incubator/isis/trunk/mvn-build-standard.sh Tue Nov 16 10:10:42 2010
@@ -0,0 +1 @@
+mvn clean install -D modules=standard -o
\ No newline at end of file

Propchange: incubator/isis/trunk/mvn-build-standard.sh
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/isis/trunk/mvn-build-standard.sh
------------------------------------------------------------------------------
    svn:executable = *

Added: incubator/isis/trunk/mvn-site-standard-local-full.sh
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/mvn-site-standard-local-full.sh?rev=1035570&view=auto
==============================================================================
--- incubator/isis/trunk/mvn-site-standard-local-full.sh (added)
+++ incubator/isis/trunk/mvn-site-standard-local-full.sh Tue Nov 16 10:10:42 2010
@@ -0,0 +1 @@
+mvn site-deploy -D modules=standard -D site=full -D deploy=local -o
\ No newline at end of file

Propchange: incubator/isis/trunk/mvn-site-standard-local-full.sh
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/isis/trunk/mvn-site-standard-local-full.sh
------------------------------------------------------------------------------
    svn:executable = *

Added: incubator/isis/trunk/mvn-site-standard-local.sh
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/mvn-site-standard-local.sh?rev=1035570&view=auto
==============================================================================
--- incubator/isis/trunk/mvn-site-standard-local.sh (added)
+++ incubator/isis/trunk/mvn-site-standard-local.sh Tue Nov 16 10:10:42 2010
@@ -0,0 +1 @@
+mvn site-deploy -D modules=standard -D deploy=local -o
\ No newline at end of file

Propchange: incubator/isis/trunk/mvn-site-standard-local.sh
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/isis/trunk/mvn-site-standard-local.sh
------------------------------------------------------------------------------
    svn:executable = *

Modified: incubator/isis/trunk/support/prototype/viewer-bdd/src/test/resources/org/apache/isis/support/prototype/common/BootstrapInExplorationMode.html
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/support/prototype/viewer-bdd/src/test/resources/org/apache/isis/support/prototype/common/BootstrapInExplorationMode.html?rev=1035570&r1=1035569&r2=1035570&view=diff
==============================================================================
--- incubator/isis/trunk/support/prototype/viewer-bdd/src/test/resources/org/apache/isis/support/prototype/common/BootstrapInExplorationMode.html (original)
+++ incubator/isis/trunk/support/prototype/viewer-bdd/src/test/resources/org/apache/isis/support/prototype/common/BootstrapInExplorationMode.html Tue Nov 16 10:10:42 2010
@@ -17,7 +17,7 @@ mode,
 </li>
 <li>
 <p>with services: </p>
-<table isis:execute="#result=aliasServices(#aliasAs, #className)">
+<table concordion:execute="#result=aliasService(#aliasAs, #className)">
 	<tr>
 		<th concordion:set="#className">Class Name</th>
 		<th concordion:set="#aliasAs">aliasAs</th>

Modified: incubator/isis/trunk/support/prototype/viewer-bdd/src/test/resources/org/apache/isis/support/prototype/stories/NewClaimDefaultsOkStory.html
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/support/prototype/viewer-bdd/src/test/resources/org/apache/isis/support/prototype/stories/NewClaimDefaultsOkStory.html?rev=1035570&r1=1035569&r2=1035570&view=diff
==============================================================================
--- incubator/isis/trunk/support/prototype/viewer-bdd/src/test/resources/org/apache/isis/support/prototype/stories/NewClaimDefaultsOkStory.html (original)
+++ incubator/isis/trunk/support/prototype/viewer-bdd/src/test/resources/org/apache/isis/support/prototype/stories/NewClaimDefaultsOkStory.html Tue Nov 16 10:10:42 2010
@@ -14,7 +14,7 @@
 		href="../common/BootstrapInExplorationMode.html">exploration</a> mode.</p>
 	</li>
 	<li>
-	<p concordion:execute="#result=timeIsNow(#dateTime)"><span
+	<p concordion:execute="#result=timeIs(#dateTime)"><span
 		concordion:assertTrue="#result">date/time</span> being <span
 		concordion:set="#dateTime">2 mar 2007 09:20</span>, and</p>
 	</li>

Added: incubator/isis/trunk/svn-st.sh
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/svn-st.sh?rev=1035570&view=auto
==============================================================================
--- incubator/isis/trunk/svn-st.sh (added)
+++ incubator/isis/trunk/svn-st.sh Tue Nov 16 10:10:42 2010
@@ -0,0 +1 @@
+svn st --ignore-externals | grep -v "^X"

Propchange: incubator/isis/trunk/svn-st.sh
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/isis/trunk/svn-st.sh
------------------------------------------------------------------------------
    svn:executable = *

Propchange: incubator/isis/trunk/svn-up.sh
------------------------------------------------------------------------------
    svn:executable = *

Modified: incubator/isis/trunk/viewer/bdd/concordion/src/main/java/org/apache/isis/viewer/bdd/concordion/AbstractIsisConcordionTest.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/bdd/concordion/src/main/java/org/apache/isis/viewer/bdd/concordion/AbstractIsisConcordionTest.java?rev=1035570&r1=1035569&r2=1035570&view=diff
==============================================================================
--- incubator/isis/trunk/viewer/bdd/concordion/src/main/java/org/apache/isis/viewer/bdd/concordion/AbstractIsisConcordionTest.java (original)
+++ incubator/isis/trunk/viewer/bdd/concordion/src/main/java/org/apache/isis/viewer/bdd/concordion/AbstractIsisConcordionTest.java Tue Nov 16 10:10:42 2010
@@ -12,8 +12,6 @@ import java.util.Date;
 import java.util.List;
 
 import org.apache.isis.core.commons.io.IoUtils;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.config.ConfigurationBuilder;
 import org.apache.isis.runtime.system.DeploymentType;
 import org.apache.isis.viewer.bdd.common.Story;
 import org.apache.isis.viewer.bdd.common.StoryValueException;
@@ -50,6 +48,10 @@ public class AbstractIsisConcordionTest 
         return storyThreadLocal.get();
     }
 
+    // ////////////////////////////////////////////////////////////////////////
+    // @Test
+    // ////////////////////////////////////////////////////////////////////////
+
     @Test
     public void runStory() throws Throwable {
         Concordion concordion = createConcordion();
@@ -88,6 +90,10 @@ public class AbstractIsisConcordionTest 
         return name.replace('.', File.separatorChar);
     }
 
+    // ////////////////////////////////////////////////////////////////////////
+    // Hooks
+    // ////////////////////////////////////////////////////////////////////////
+
     /**
      * Optional hook method to specify the directory to which the processed HTML should be copied.
      * 
@@ -146,16 +152,9 @@ public class AbstractIsisConcordionTest 
         return builder.build();
     }
 
-    @SuppressWarnings("unused")
-    private ConfigurationBuilder configurationBuilder;
-
-    public String getConfigDirectory() {
-        return getStory().getConfigDirectory();
-    }
-
-    public DeploymentType getDeploymentType() {
-        return getStory().getDeploymentType();
-    }
+    // ////////////////////////////////////////////////////////////////////////
+    // bootstrapIsis / shutdownIsis
+    // ////////////////////////////////////////////////////////////////////////
 
     /**
      * For calling within a <tt>#setUp()</tt> method.
@@ -177,25 +176,13 @@ public class AbstractIsisConcordionTest 
         return true; // any runtime exception will propagate
     }
 
-    public void aliasAs(String alias, ObjectAdapter adapter) {
-        getStory().getAliasRegistry().aliasAs(alias, adapter);
-    }
-
-    public String aliasPrefixedAs(String prefix, ObjectAdapter adapter) {
-        return getStory().getAliasRegistry().aliasPrefixedAs(prefix, adapter);
-    }
-
-    public void aliasServiceAs(String alias, String serviceClassName) throws StoryValueException {
-        getStory().getAliasRegistry().aliasService(alias, serviceClassName);
+    public void shutdownIsis() {
+        getStory().shutdownIsis();
     }
 
-    public String getAlias(ObjectAdapter adapter) {
-        return getStory().getAliasRegistry().getAlias(adapter);
-    }
-
-    public ObjectAdapter getAliased(String alias) {
-        return getStory().getAliasRegistry().getAliased(alias);
-    }
+    // ////////////////////////////////////////////////////////////////////////
+    // logon as / switch user
+    // ////////////////////////////////////////////////////////////////////////
 
     public boolean logonAs(String userName) {
         getStory().logonAsOrSwitchUserTo(userName);
@@ -216,23 +203,19 @@ public class AbstractIsisConcordionTest 
         logonAsWithRoles(userName, roleListStr);
     }
 
-    public boolean dateIs(String dateAndTimeStr) throws StoryValueException {
-        return dateAndTimeIsNow(dateAndTimeStr);
-    }
+    // ////////////////////////////////////////////////////////////////////////
+    // date is / time is
+    // ////////////////////////////////////////////////////////////////////////
 
-    public boolean dateIsNow(String dateAndTimeStr) throws StoryValueException {
-        return dateAndTimeIsNow(dateAndTimeStr);
+    public boolean dateIs(String dateAndTimeStr) throws StoryValueException {
+        return dateAndTimeIs(dateAndTimeStr);
     }
 
     public boolean timeIs(String dateAndTimeStr) throws StoryValueException {
-        return dateAndTimeIsNow(dateAndTimeStr);
-    }
-
-    public boolean timeIsNow(String dateAndTimeStr) throws StoryValueException {
-        return dateAndTimeIsNow(dateAndTimeStr);
+        return dateAndTimeIs(dateAndTimeStr);
     }
 
-    protected boolean dateAndTimeIsNow(String dateAndTimeStr) throws StoryValueException {
+    private boolean dateAndTimeIs(String dateAndTimeStr) throws StoryValueException {
         getStory().dateAndTimeIs(asDateAndTime(dateAndTimeStr));
         return true;
     }
@@ -246,22 +229,26 @@ public class AbstractIsisConcordionTest 
         }
     }
 
-    public boolean aliasService(String alias, String className) {
-        return aliasServices(className, alias);
+    // ////////////////////////////////////////////////////////////////////////
+    // alias service
+    // ////////////////////////////////////////////////////////////////////////
+
+    public boolean aliasService(String aliasAs, String className) {
+        return aliasServices(aliasAs, className);
     }
 
-    public boolean aliasServices(String alias, String className) {
+    public boolean aliasServices(String aliasAs, String className) {
         try {
-            getStory().getAliasRegistry().aliasService(alias, className);
+            getStory().getAliasRegistry().aliasService(aliasAs, className);
             return true;
         } catch (StoryValueException e) {
             return false;
         }
     }
 
-    public void shutdownNakedObjects() {
-        getStory().shutdownIsis();
-    }
+    // ////////////////////////////////////////////////////////////////////////
+    // setup object
+    // ////////////////////////////////////////////////////////////////////////
 
     public String setUpObject(String className, String alias, String arg0) {
         return setUpObjectsVarargs(className, alias, arg0);
@@ -329,6 +316,10 @@ public class AbstractIsisConcordionTest 
         }
     }
 
+    // ////////////////////////////////////////////////////////////////////////
+    // using isis viewer
+    // ////////////////////////////////////////////////////////////////////////
+
     private UsingIsisViewerForConcordion usingIsisViewer;
 
     public String usingIsisViewer(String onObject, String aliasResultAs, String perform, String usingMember) {
@@ -419,6 +410,10 @@ public class AbstractIsisConcordionTest 
         }
     }
 
+    // ////////////////////////////////////////////////////////////////////////
+    // alias items in list
+    // ////////////////////////////////////////////////////////////////////////
+
     private AliasItemsInListForConcordion aliasItemsInList;
 
     public String aliasItemsInList(String listAlias, String title, String aliasAs) {
@@ -443,6 +438,10 @@ public class AbstractIsisConcordionTest 
         return !executingTable();
     }
 
+    // ////////////////////////////////////////////////////////////////////////
+    // run viewer
+    // ////////////////////////////////////////////////////////////////////////
+
     public void runViewer() {
         getStory().runViewer();
     }

Modified: incubator/isis/trunk/viewer/bdd/src/docbkx/guide/isis-bdd-viewer.xml
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/bdd/src/docbkx/guide/isis-bdd-viewer.xml?rev=1035570&r1=1035569&r2=1035570&view=diff
==============================================================================
--- incubator/isis/trunk/viewer/bdd/src/docbkx/guide/isis-bdd-viewer.xml (original)
+++ incubator/isis/trunk/viewer/bdd/src/docbkx/guide/isis-bdd-viewer.xml Tue Nov 16 10:10:42 2010
@@ -635,6 +635,9 @@
               </para>
             </listitem>
           </itemizedlist>
+
+          <para>Whichever is used, they both delegate to the common
+          <methodname>Story#bootstrapIsis(...)</methodname> method.</para>
         </sect3>
 
         <sect3>
@@ -643,31 +646,27 @@
           <para>The <classname>BootstrapIsisConfiguredFromInMode</classname>
           fixture is used to bootstrap Isis. It takes the form:</para>
 
-          <table>
-            <title>Bootstrap Isis</title>
-
+          <informaltable>
             <tgroup cols="4">
+              <colspec colwidth="3*" />
+
               <tbody>
                 <row>
-                  <entry><classname>BootstrapIsisConfiguredFrom</classname></entry>
+                  <entry><classname>Bootstrap Isis Configured
+                  From</classname></entry>
 
-                  <entry><emphasis>configDirectory</emphasis></entry>
+                  <entry><emphasis>config Directory</emphasis></entry>
 
-                  <entry><methodname>InMode</methodname></entry>
+                  <entry><methodname>In Mode</methodname></entry>
 
-                  <entry><emphasis>deploymentType</emphasis></entry>
+                  <entry><emphasis>deployment Type</emphasis></entry>
                 </row>
               </tbody>
             </tgroup>
-          </table>
-
-          <para></para>
-
-          <para></para>
-
-          <para></para>
+          </informaltable>
 
-          <para></para>
+          <para>This delegates to the common
+          <methodname>Story#bootstrapIsis(...)</methodname> method.</para>
         </sect3>
       </sect2>
     </sect1>
@@ -698,61 +697,6 @@
 
           <tbody>
             <row>
-              <entry><classname>Story#dateAndTimeIs(java.util.Date)</classname><para>Sets
-              the clock to a specific date and time.</para><para>This installs
-              the <classname>FixtureClock</classname> as the implementation of
-              the <classname>Clock</classname> singleton (in the applib). If
-              this fixture is not called, then the default system clock is
-              used, which gets the time from the host computer. The
-              Story#debugClock () method (<xref linkend="sec.Debugging" />)
-              can be used to verify the clock state.</para></entry>
-
-              <entry><classname>#dateIs(String
-              dateAndTimeStr)</classname><para><methodname>#dateIsNow(String
-              dateAndTimeStr)</methodname></para><para><methodname>#timeIs(String
-              dateAndTimeStr)</methodname></para><para><methodname>#timeIsNow(String
-              dateAndTimeStr)</methodname></para><para>Intended to be called
-              from the <acronym>XHTML</acronym>, as part of the "given".
-              Parsed in format 'dd MMM yyyy hh:mm'</para></entry>
-
-              <entry><para><methodname>|DateIs|dateAndTimeStr|</methodname></para><para><methodname>|DateIsNow|dateAndTimeStr|</methodname></para><para><methodname>|TimeIs|dateAndTimeStr|</methodname></para><para><methodname>|TimeIsNow|dateAndTimeStr|</methodname></para><para>Typically
-              called early on in the test, as part of the "given". Parsed in
-              format 'dd MMM yyyy hh:mm'</para></entry>
-            </row>
-
-            <row>
-              <entry><methodname>Story#logonAsOrSwitchUserTo(String
-              userName)</methodname><para>Logs on / switch user to as a
-              specific
-              user.</para><para><methodname>Story#logonAsOrSwitchUserTo(String
-              userName, List&lt;String&gt;
-              roleNames)</methodname></para><para>Logs on to a specific user,
-              with specified roles. Part of the initialization for a
-              particular story's setup, and typically referenced in the test
-              suite or story's own setup page.</para><para>Also used for
-              switching the current user within a story, eg to check a
-              workflow between different users.</para></entry>
-
-              <entry><methodname>#logonAs(String
-              userName)</methodname><para><methodname>#logonAs(String
-              userName, String roleListStr)</methodname></para><para>Intended
-              to be called from the <acronym>XHTML</acronym>, as part of the
-              "given". The role list, if specified, should be
-              comma-separated.</para><methodname>#switchUserTo(String
-              userName)</methodname><para><methodname>#switchUserTo(String
-              userName, String roleListStr)</methodname></para><para>Switch
-              the currently logged-on user to another user, optionally with
-              specified roles.</para></entry>
-
-              <entry><para><methodname>|LogonAs|userName|</methodname></para><para><methodname>|LogonAs|userName|WithRoles|roleList|</methodname></para><para>Typically
-              called early on in the test, as part of the "given". The role
-              list, if specified, should be
-              comma-separated.</para><para><methodname>|SwitchUserTo|userName|</methodname></para><para><methodname>|SwitchUserTo|userName|WithRoles|roleList|</methodname></para><para>Switch
-              the currently logged-on user to another user, optionally with
-              specified roles.</para></entry>
-            </row>
-
-            <row>
               <entry><methodname>Story#getAliasRegistry()</methodname><para>and</para><para><methodname>AliasRegistry#aliasService(String
               aliasAs, String
               serviceClassName)</methodname></para><para>Specifies an alias to
@@ -791,51 +735,267 @@
         </tgroup>
       </table>
 
-      <sect2>
-        <title>Setting Date and Time</title>
+      <sect2 id="sec.LogonAsSwitchUserTo">
+        <title>Logging On / Switching User</title>
 
-        <para></para>
+        <para>Used to specify the currently logged-on user. Should always be
+        called near the top of the story, as part of the "given". Can also be
+        used for switching the current user later on in the story, eg to check
+        a workflow between different users.</para>
 
         <sect3>
           <title>Common</title>
 
-          <para></para>
+          <para>The common library provides two overloaded methods, depending
+          on whether the roles for the user need to be specified or
+          not:</para>
+
+          <itemizedlist>
+            <listitem>
+              <para><methodname>Story#logonAsOrSwitchUserTo(String
+              userName)</methodname></para>
+
+              <para>Logs on / switch user to as a specific user.</para>
+            </listitem>
+
+            <listitem>
+              <para><methodname>Story#logonAsOrSwitchUserTo(String userName,
+              List&lt;String&gt; roleNames)</methodname></para>
+
+              <para>Logs on to a specific user, with specified roles. Part of
+              the initialization for a particular story's setup, and typically
+              referenced in the test suite or story's own setup page.</para>
+            </listitem>
+          </itemizedlist>
+
+          <para>The username and roles are not validated against.</para>
         </sect3>
 
         <sect3>
           <title>Concordion</title>
 
-          <para></para>
+          <para>The Concordion integration provides two sets of overloaded
+          methods:</para>
+
+          <itemizedlist>
+            <listitem>
+              <para><methodname>#logonAs(String userName)</methodname> and
+              <methodname>#logonAs(String userName, String
+              roleListStr)</methodname></para>
+
+              <para>Intended to be called in the initial setup, as part of the
+              story's "given".</para>
+            </listitem>
+
+            <listitem>
+              <para><methodname>#switchUserTo(String userName)</methodname>
+              and <methodname>#switchUserTo(String userName, String
+              roleListStr)</methodname></para>
+
+              <para>(Optional); intended to be called later on in the story,
+              eg, to test workflow.</para>
+            </listitem>
+          </itemizedlist>
+
+          <para>Each of these is intended to be called from the
+          <acronym>XHTML</acronym>. The role list, if specified, should be
+          comma-separated (any white space will be ignored).</para>
         </sect3>
 
         <sect3>
           <title>FitNesse</title>
 
-          <para></para>
+          <para>The FitNesse integration provides two sets of overloaded
+          fixtures:</para>
+
+          <informaltable>
+            <tgroup cols="2">
+              <colspec />
+
+              <tbody>
+                <row>
+                  <entry><classname>Logon As</classname></entry>
+
+                  <entry><emphasis>user name</emphasis></entry>
+                </row>
+              </tbody>
+            </tgroup>
+          </informaltable>
+
+          <informaltable>
+            <tgroup cols="4">
+              <colspec />
+
+              <tbody>
+                <row>
+                  <entry><classname>Logon As</classname></entry>
+
+                  <entry><emphasis>user name</emphasis></entry>
+
+                  <entry><classname>With Roles</classname></entry>
+
+                  <entry><emphasis>role list</emphasis></entry>
+                </row>
+              </tbody>
+            </tgroup>
+          </informaltable>
+
+          <para>Intended to be called in the initial setup, as part of the
+          story's "given".</para>
+
+          <informaltable>
+            <tgroup cols="2">
+              <colspec />
+
+              <tbody>
+                <row>
+                  <entry><classname>Switch User To</classname></entry>
+
+                  <entry><emphasis>user name</emphasis></entry>
+                </row>
+              </tbody>
+            </tgroup>
+          </informaltable>
+
+          <informaltable>
+            <tgroup cols="4">
+              <colspec />
+
+              <tbody>
+                <row>
+                  <entry><classname>Switch User To</classname></entry>
+
+                  <entry><emphasis>user name</emphasis></entry>
+
+                  <entry><classname>With Roles</classname></entry>
+
+                  <entry><emphasis>role list</emphasis></entry>
+                </row>
+              </tbody>
+            </tgroup>
+          </informaltable>
+
+          <para>Optional; intended to be called later on in the story, eg, to
+          test workflow.</para>
+
+          <para>The role list, if specified, should be comma-separated (any
+          white space will be ignored).</para>
         </sect3>
       </sect2>
 
-      <sect2 id="sec.LogonAsSwitchUserTo">
-        <title>Logging On / Switching User</title>
+      <sect2>
+        <title>Setting Date and Time</title>
 
-        <para></para>
+        <para>Sets the story's clock to a specific date and time. Stories that
+        deal with domain objects that use the clock (eg for the defaulting of
+        a date/time property) will typically need to call this fixture.</para>
+
+        <para>Typically called within the "given", though may be called many
+        times throughout the story.</para>
 
         <sect3>
           <title>Common</title>
 
-          <para></para>
+          <para><methodname>Story#dateAndTimeIs(java.util.Date)</methodname></para>
+
+          <para>This fixture installs the <classname>FixtureClock</classname>
+          as the implementation of the <classname>Clock</classname> singleton
+          (in the applib). Every call to the <classname>Clock</classname> will
+          return the same date/time until the method is called again.</para>
+
+          <para>If this fixture is not called, then the default system clock
+          is used, which gets the time from the host computer. The
+          <methodname>Story#debugClock()</methodname> method (<xref
+          linkend="sec.DebugClock" />) can be used to verify the clock
+          state.</para>
         </sect3>
 
         <sect3>
           <title>Concordion</title>
 
-          <para></para>
+          <para>The Concordion integration provides a number of overloaded
+          methods, all designed to be called from the XHTML:</para>
+
+          <itemizedlist>
+            <listitem>
+              <para><methodname>#dateIs(String
+              dateAndTimeStr)</methodname></para>
+            </listitem>
+
+            <listitem>
+              <para><methodname>#timeIs(String
+              dateAndTimeStr)</methodname></para>
+            </listitem>
+          </itemizedlist>
+
+          <para>The overloaded forms are just for convenience. The date/time
+          provided is parsed against the format 'dd MMM yyyy hh:mm'</para>
         </sect3>
 
         <sect3>
           <title>FitNesse</title>
 
-          <para></para>
+          <para>The FitNesse integration provides four versions (overloaded
+          only so reads well in the page):</para>
+
+          <informaltable>
+            <tgroup cols="2">
+              <colspec />
+
+              <tbody>
+                <row>
+                  <entry><classname>yDate Is</classname></entry>
+
+                  <entry><emphasis>date and time</emphasis></entry>
+                </row>
+              </tbody>
+            </tgroup>
+          </informaltable>
+
+          <informaltable>
+            <tgroup cols="2">
+              <colspec />
+
+              <tbody>
+                <row>
+                  <entry><classname>Date Is Now</classname></entry>
+
+                  <entry><emphasis>date and time</emphasis></entry>
+                </row>
+              </tbody>
+            </tgroup>
+          </informaltable>
+
+          <informaltable>
+            <tgroup cols="2">
+              <colspec />
+
+              <tbody>
+                <row>
+                  <entry><classname>Time Is</classname></entry>
+
+                  <entry><emphasis>date and time</emphasis></entry>
+                </row>
+              </tbody>
+            </tgroup>
+          </informaltable>
+
+          <informaltable>
+            <tgroup cols="2">
+              <colspec />
+
+              <tbody>
+                <row>
+                  <entry><classname>Time Is Now</classname></entry>
+
+                  <entry><emphasis>date and time</emphasis></entry>
+                </row>
+              </tbody>
+            </tgroup>
+          </informaltable>
+
+          <para>In each case the date/time provided is parsed against the
+          format 'dd MMM yyyy hh:mm'</para>
         </sect3>
       </sect2>
 
@@ -1174,7 +1334,7 @@
       </sect2>
 
       <sect2 id="sec.DebugObjectStore">
-        <title>Debugging the Clock</title>
+        <title>Debugging the Object Store</title>
 
         <para>Dumps the contents of the object store. Useful for debugging
         setup (through SetupObjects, <xref linkend="sec.SetUpObjects" />, and