cvs commit: cocoon-2.1/src/webapp/samples/hello-world samples.xml
bdelacretaz2003/09/07 22:37:33 Modified:src/webapp/samples/hello-world samples.xml Log: added note about block samples Revision ChangesPath 1.11 +5 -1 cocoon-2.1/src/webapp/samples/hello-world/samples.xml Index: samples.xml === RCS file: /home/cvs/cocoon-2.1/src/webapp/samples/hello-world/samples.xml,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- samples.xml 7 Sep 2003 06:15:31 - 1.10 +++ samples.xml 8 Sep 2003 05:37:33 - 1.11 @@ -88,6 +88,10 @@ /group group name=Blocks Hello World! + note + These samples only work if the corresponding blocks are activated + at build time. + /note sample name=RTF href=../jfor/hello.rtf Hello from the jfor block in Rich Text Format. /sample
cvs commit: cocoon-2.1 blocks.properties
crossley2003/09/08 02:09:40 Modified:.blocks.properties Log: Fix speling. Submitted by: Antonio Gallardo agallardoATagsoftware.dnsalias.com Revision ChangesPath 1.29 +1 -1 cocoon-2.1/blocks.properties Index: blocks.properties === RCS file: /home/cvs/cocoon-2.1/blocks.properties,v retrieving revision 1.28 retrieving revision 1.29 diff -u -r1.28 -r1.29 --- blocks.properties 5 Sep 2003 15:31:36 - 1.28 +++ blocks.properties 8 Sep 2003 09:09:40 - 1.29 @@ -73,11 +73,11 @@ #exclude.block.linotype=true #exclude.block.mail=true #exclude.block.midi=true -#exclude.block.qdox=true #exclude.block.petstore=true #exclude.block.precept=true #exclude.block.proxy=true #exclude.block.portal=true +#exclude.block.qdox=true #exclude.block.scratchpad=true #exclude.block.slop=true #exclude.block.stx=true
cvs commit: cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/binding SimpleRepeaterJXPathBinding.java SimpleRepeaterJXPathBindingBuilder.java ContextJXPathBinding.java ValueJXPathBinding.java
sylvain 2003/09/08 08:33:27 Modified:src/blocks/woody/java/org/apache/cocoon/woody/binding ContextJXPathBinding.java ValueJXPathBinding.java Added: src/blocks/woody/java/org/apache/cocoon/woody/binding SimpleRepeaterJXPathBinding.java SimpleRepeaterJXPathBindingBuilder.java Log: - allow creation of non existent paths (i.e. new XML elements) - new simple binding for repeaters Revision ChangesPath 1.3 +19 -5 cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/binding/ContextJXPathBinding.java Index: ContextJXPathBinding.java === RCS file: /home/cvs/cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/binding/ContextJXPathBinding.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- ContextJXPathBinding.java 24 Jul 2003 12:39:17 - 1.2 +++ ContextJXPathBinding.java 8 Sep 2003 15:33:27 - 1.3 @@ -52,6 +52,7 @@ import org.apache.cocoon.woody.formmodel.Widget; import org.apache.commons.jxpath.JXPathContext; +import org.apache.commons.jxpath.Pointer; /** * ContextJXPathBinding provides an implementation of a [EMAIL PROTECTED] Binding} @@ -78,10 +79,17 @@ * context to the Woody-form. */ public void loadFormFromModel(Widget frmModel, JXPathContext jxpc) { -JXPathContext subContext = jxpc.getRelativeContext(jxpc.getPointer(this.xpath)); -super.loadFormFromModel(frmModel, subContext); -if (getLogger().isDebugEnabled()) -getLogger().debug(done loading + toString()); +Pointer ptr = jxpc.getPointer(this.xpath); +if (ptr.getNode() != null) { +JXPathContext subContext = jxpc.getRelativeContext(ptr); +super.loadFormFromModel(frmModel, subContext); +if (getLogger().isDebugEnabled()) +getLogger().debug(done loading + toString()); +} else { +if (getLogger().isDebugEnabled()) { +getLogger().debug(non-existent path: skipping + toString()); +} +} } /** @@ -89,7 +97,13 @@ * wrapped in a jxpath context. */ public void saveFormToModel(Widget frmModel, JXPathContext jxpc) throws BindingException { -JXPathContext subContext = jxpc.getRelativeContext(jxpc.getPointer(this.xpath)); +Pointer ptr = jxpc.getPointer(this.xpath); +if (ptr.getNode() == null) { +jxpc.createPath(this.xpath); +// Need to recreate the pointer after creating the path +ptr = jxpc.getPointer(this.xpath); +} +JXPathContext subContext = jxpc.getRelativeContext(ptr); super.saveFormToModel(frmModel, subContext); if (getLogger().isDebugEnabled()) getLogger().debug(done saving + toString()); 1.2 +1 -1 cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/binding/ValueJXPathBinding.java Index: ValueJXPathBinding.java === RCS file: /home/cvs/cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/binding/ValueJXPathBinding.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- ValueJXPathBinding.java 12 Aug 2003 12:54:45 - 1.1 +++ ValueJXPathBinding.java 8 Sep 2003 15:33:27 - 1.2 @@ -152,7 +152,7 @@ if ((value == null oldValue != null) || value != null !value.equals(oldValue)) { // first update the value itself -jxpc.setValue(this.xpath, value); +jxpc.createPathAndSetValue(this.xpath, value); // now perform any other bindings that need to be performed when the value is updated JXPathContext subContext = null; 1.1 cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/binding/SimpleRepeaterJXPathBinding.java Index: SimpleRepeaterJXPathBinding.java === /* The Apache Software License, Version 1.1 Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved. Redistribution and use in source and binary forms, with or without modifica- tion, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the
cvs commit: cocoon-2.1/src/java/org/apache/cocoon/components/treeprocessor/sitemap PipelineNode.java
bruno 2003/09/08 11:58:01 Modified:src/java/org/apache/cocoon/components/treeprocessor/sitemap PipelineNode.java Log: * Log errors handled by map:handl-errors to a separate log target. * Replaced tabs by spaces. Revision ChangesPath 1.9 +29 -25 cocoon-2.1/src/java/org/apache/cocoon/components/treeprocessor/sitemap/PipelineNode.java Index: PipelineNode.java === RCS file: /home/cvs/cocoon-2.1/src/java/org/apache/cocoon/components/treeprocessor/sitemap/PipelineNode.java,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- PipelineNode.java 10 Jul 2003 13:17:00 - 1.8 +++ PipelineNode.java 8 Sep 2003 18:58:01 - 1.9 @@ -75,8 +75,8 @@ * @version CVS $Id$ */ public class PipelineNode -extends AbstractParentProcessingNode -implements Composable, ParameterizableProcessingNode { +extends AbstractParentProcessingNode +implements Composable, ParameterizableProcessingNode { // TODO : handle a 'fail-hard' environment attribute // can be useful to stop off-line generation when there's an error @@ -86,11 +86,13 @@ private ProcessingNode error404; private ProcessingNode error500; - + private ErrorHandlerHelper errorHandlerHelper = new ErrorHandlerHelper(); - + private ComponentManager manager; +protected Logger handledErrorsLogger; + private boolean internalOnly = false; /** Is it the last pipeline in the enclosing pipelines ? */ @@ -118,11 +120,11 @@ errorHandlerHelper.compose(manager); } - public void enableLogging(Logger logger) - { - super.enableLogging(logger); - errorHandlerHelper.enableLogging(logger); - } +public void enableLogging(Logger logger) { +super.enableLogging(logger); +errorHandlerHelper.enableLogging(logger); +handledErrorsLogger = logger.getChildLogger(handled-errors); +} public void setChildren(ProcessingNode[] nodes) { this.children = nodes; @@ -149,8 +151,8 @@ } public final boolean invoke(Environment env, InvokeContext context) -throws Exception { - +throws Exception { + boolean externalRequest = env.isExternal(); // Always fail on external resquests if internal only. @@ -172,25 +174,27 @@ } catch (ConnectionResetException cre) { // Will be reported by CocoonServlet, rethrowing throw cre; - -} catch(Exception ex) { - + +} catch (Exception ex) { + if (!externalRequest) { // Propagate exception on internal requests throw ex; - + } else if (error404 != null ex instanceof ResourceNotFoundException) { - // Invoke 404-specific handler - return errorHandlerHelper.invokeErrorHandler(error404, ex, env); - - } else if (error500 != null) { +// Invoke 404-specific handler +handledErrorsLogger.error(ex.getMessage(), ex); +return errorHandlerHelper.invokeErrorHandler(error404, ex, env); + +} else if (error500 != null) { // Invoke global handler +handledErrorsLogger.error(ex.getMessage(), ex); return errorHandlerHelper.invokeErrorHandler(error500, ex, env); - - } else { - // No handler : propagate - throw ex; - } + +} else { +// No handler : propagate +throw ex; +} } } }
cvs commit: cocoon-2.1 blocks.properties
joerg 2003/09/08 13:49:11 Modified:.blocks.properties Log: being consequent with the alphabetical order :-) Revision ChangesPath 1.30 +1 -1 cocoon-2.1/blocks.properties Index: blocks.properties === RCS file: /home/cvs/cocoon-2.1/blocks.properties,v retrieving revision 1.29 retrieving revision 1.30 diff -u -r1.29 -r1.30 --- blocks.properties 8 Sep 2003 09:09:40 - 1.29 +++ blocks.properties 8 Sep 2003 20:49:11 - 1.30 @@ -74,9 +74,9 @@ #exclude.block.mail=true #exclude.block.midi=true #exclude.block.petstore=true +#exclude.block.portal=true #exclude.block.precept=true #exclude.block.proxy=true -#exclude.block.portal=true #exclude.block.qdox=true #exclude.block.scratchpad=true #exclude.block.slop=true
cvs commit: cocoon-2.1/src/blocks/slide/java/org/apache/cocoon/components/source/helpers SourceProperty.java
gcasper 2003/09/08 13:50:42 Modified:src/blocks/slide/java/org/apache/cocoon/components/source/helpers SourceProperty.java Log: Cleanup Revision ChangesPath 1.5 +1 -2 cocoon-2.1/src/blocks/slide/java/org/apache/cocoon/components/source/helpers/SourceProperty.java Index: SourceProperty.java === RCS file: /home/cvs/cocoon-2.1/src/blocks/slide/java/org/apache/cocoon/components/source/helpers/SourceProperty.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- SourceProperty.java 5 Sep 2003 07:31:44 - 1.4 +++ SourceProperty.java 8 Sep 2003 20:50:42 - 1.5 @@ -191,7 +191,6 @@ attrs.addAttribute(XMLNS_NS, NS_PREFIX, xmlns:+NS_PREFIX, NMTOKEN, namespace); -attrs.addAttribute(, foo, foo, NMTOKEN, bar); builder.startElement(namespace, name, D_PREFIX+name, attrs);
cvs commit: cocoon-2.1/tools/src blocks-build.xsl
joerg 2003/09/08 15:25:28 Modified:tools/src blocks-build.xsl Log: extracting variables from repeated evaluation of cocoon blocks formatting Revision ChangesPath 1.33 +505 -458 cocoon-2.1/tools/src/blocks-build.xsl Index: blocks-build.xsl === RCS file: /home/cvs/cocoon-2.1/tools/src/blocks-build.xsl,v retrieving revision 1.32 retrieving revision 1.33 diff -u -r1.32 -r1.33 --- blocks-build.xsl 4 Sep 2003 12:42:44 - 1.32 +++ blocks-build.xsl 8 Sep 2003 22:25:27 - 1.33 @@ -1,486 +1,533 @@ ?xml version=1.0? xsl:stylesheet version=1.0 xmlns:xsl=http://www.w3.org/1999/XSL/Transform; - xsl:output method=xml indent=yes / + xsl:output method=xml indent=yes/ - xsl:template match=/ - project default=compile basedir=. name=blocks - descriptionAutogenerated Ant build file that builds blocks./description - - path id=classpath -fileset dir={string('${lib.core}')} - include name=*.jar/ -/fileset -fileset dir={string('${lib.endorsed}')} - include name=*.jar/ -/fileset -!-- Currently, we have no JVM dependent libraries - fileset dir={string('${lib.core}/jvm${target.vm}')} - include name=*.jar/ - /fileset --- -fileset dir={string('${lib.optional}')} - include name=*.jar/ -/fileset -fileset dir={string('${build.blocks}')} - include name=*.jar/ -/fileset -path location={string('${build.mocks}')}/ -path location={string('${build.dest}')}/ - /path - - path id=test.classpath -fileset dir={string('${tools.lib}')} - include name=*.jar/ -/fileset - /path - - !-- Files, which should no compiled or otherwise processed -- - patternset id=unprocessed.sources -exclude name=**/*.java/ -exclude name=**/*.xconf/ -exclude name=**/*.xroles/ -exclude name=**/*.xmap/ -exclude name=**/*.xpipe/ -exclude name=**/*.xlog/ -exclude name=**/*.xweb/ -exclude name=**/package.html/ - /patternset - - target name=init - xsl:for-each select=module/project[contains(@name,'cocoon-block-')] - xsl:variable name=block-name select=substring-after(@name,'cocoon-block-') / - condition property=unless.exclude.block.{$block-name} - istrue value={string('${exclude.block.')}{$block-name}{string('}')}/ - /condition - /xsl:for-each - /target - - xsl:apply-templates select=module / - /project - /xsl:template - - xsl:template match=module - target name=compile -xsl:attribute name=dependsinitxsl:for-each select=project[contains(@name,'cocoon-block-')]xsl:text,/xsl:textxsl:value-of select=@name/-compile/xsl:for-each/xsl:attribute - /target - - target name=samples -xsl:attribute name=dependsinitxsl:text,/xsl:textpatch-samplesxsl:for-each select=project[contains(@name,'cocoon-block-')]xsl:text,/xsl:textxsl:value-of select=@name/-samples/xsl:for-each/xsl:attribute - /target - - target name=lib -xsl:attribute name=dependsinitxsl:for-each select=project[contains(@name,'cocoon-block-')]xsl:text,/xsl:textxsl:value-of select=@name/-lib/xsl:for-each/xsl:attribute - /target - - target name=tests -xsl:attribute name=dependsinitxsl:for-each select=project[contains(@name,'cocoon-block-')]xsl:text,/xsl:textxsl:value-of select=@name/-tests/xsl:for-each/xsl:attribute - /target + xsl:template match=/ +project default=compile basedir=. name=blocks + descriptionAutogenerated Ant build file that builds blocks./description + + path id=classpath +fileset dir={string('${lib.core}')} + include name=*.jar/ +/fileset +fileset dir={string('${lib.endorsed}')} + include name=*.jar/ +/fileset +!-- Currently, we have no JVM dependent libraries + fileset dir={string('${lib.core}/jvm${target.vm}')} + include name=*.jar/ + /fileset +-- +fileset dir={string('${lib.optional}')} + include name=*.jar/ +/fileset +fileset dir={string('${build.blocks}')} + include name=*.jar/ +/fileset +path location={string('${build.mocks}')}/ +path location={string('${build.dest}')}/ + /path + + path id=test.classpath +fileset
cvs commit: cocoon-2.1/src/blocks/scratchpad/java/org/apache/cocoon/components/flow/javascript/fom AO_FOM_JavaScriptInterpreter.java JavaScriptAspectWeaver.java
reinhard2003/09/08 15:56:34 Modified: src/blocks/scratchpad/java/org/apache/cocoon/components/flow/javascript/fom AO_FOM_JavaScriptInterpreter.java JavaScriptAspectWeaver.java Log: - add support for new interception events: * stopExecution() * continueExecution() -- they are called before/after a function that creates a continuation is called The interpreter is configured with a list of all functions that are known to create continuations (cocoon.sendPageAndWait(), woody.send()) - improved Javadocs - updated TODO list - rename of some methods and variables to be more consistent Revision ChangesPath 1.2 +43 -13 cocoon-2.1/src/blocks/scratchpad/java/org/apache/cocoon/components/flow/javascript/fom/AO_FOM_JavaScriptInterpreter.java Index: AO_FOM_JavaScriptInterpreter.java === RCS file: /home/cvs/cocoon-2.1/src/blocks/scratchpad/java/org/apache/cocoon/components/flow/javascript/fom/AO_FOM_JavaScriptInterpreter.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- AO_FOM_JavaScriptInterpreter.java 6 Sep 2003 13:23:30 - 1.1 +++ AO_FOM_JavaScriptInterpreter.java 8 Sep 2003 22:56:34 - 1.2 @@ -87,8 +87,21 @@ import org.mozilla.javascript.tools.shell.Global; /** - * Interface with the JavaScript interpreter. - * + * pInterface with the JavaScript interpreter./p + * pThis version of the JavaScript interpreter provides enhanced + *functionality and supports interception./p + * + * pChanges: + * ul + * liUse of the AO_FOM_Cocoon object encapsulating the Cocoon object. + * All references to the FOM_Cocoon object had to be changed. + * /li + * liAdditional configurations/li + * liadding the codeJavaScriptAspectWeaver/code to the SourceEntry + * object if interceptions are enabled/li + */ul + * /p + * * @author a href=mailto:[EMAIL PROTECTED]Ovidiu Predescu/a * @author a href=mailto:[EMAIL PROTECTED]Marcus Crafter/a * @author a href=mailto:[EMAIL PROTECTED]Christopher Oliver/a @@ -159,7 +172,7 @@ public Source getSource() { return source; } - +// (RPO) added/changed by interception layer private JavaScriptAspectWeaver aspectWeaver = null; public void setAspectWeaver( JavaScriptAspectWeaver aspectWeaver ) { @@ -178,6 +191,7 @@ } return script; } +// -- end } /** @@ -185,9 +199,10 @@ * */ Map compiledScripts = new HashMap(); - JSErrorReporter errorReporter; + boolean enableDebugger = false; + /** * JavaScript debugger: there's only one of these: it can debug multiple * threads executing JS code. @@ -217,9 +232,14 @@ return debugger; } -public void configure(Configuration config) -throws ConfigurationException -{ +// (RPO) added by interception layer +Configuration stopExecutionFunctionsConf = null; +boolean copyResultScript = false; +// --end + +public void configure(Configuration config) +throws ConfigurationException { + super.configure(config); String loadOnStartup @@ -234,8 +254,14 @@ enableDebugger = true; } -isInterceptionEnabled = config.getChild( enable-interception ).getValueAsBoolean( true ); - +// (RPO) added by interception layer +isInterceptionEnabled = +config.getChild( enable-interception ).getValueAsBoolean( true ); +stopExecutionFunctionsConf = +config.getChild( cont-creating-functions ); +copyResultScript = + config.getChild( copy-result-script ).getValueAsBoolean( false ); +// --end } public void initialize() @@ -458,13 +484,16 @@ entry = new ScriptSourceEntry(src); compiledScripts.put(sourceURI, entry); } +// (RPO) added/changed by interception layer // add interception support if( isInterceptionEnabled ) { JavaScriptAspectWeaver aspectWeaver = new JavaScriptAspectWeaver(); aspectWeaver.setEnvironment( environment ); aspectWeaver.enableLogging( this.getLogger() ); +aspectWeaver.setStopExecutionFunctionsConf( this.stopExecutionFunctionsConf ); entry.setAspectWeaver( aspectWeaver ); -} +} +//
cvs commit: cocoon-2.1/src/blocks/scratchpad/conf intercepted-flow.xconf
reinhard2003/09/08 15:57:13 Modified:src/blocks/scratchpad/conf intercepted-flow.xconf Log: - The interpreter is configured with a list of all functions that are known to create continuations (cocoon.sendPageAndWait(), woody.send()) Revision ChangesPath 1.2 +14 -3 cocoon-2.1/src/blocks/scratchpad/conf/intercepted-flow.xconf Index: intercepted-flow.xconf === RCS file: /home/cvs/cocoon-2.1/src/blocks/scratchpad/conf/intercepted-flow.xconf,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- intercepted-flow.xconf6 Sep 2003 13:23:30 - 1.1 +++ intercepted-flow.xconf8 Sep 2003 22:57:13 - 1.2 @@ -6,9 +6,20 @@ component-instance class=org.apache.cocoon.components.flow.javascript.fom.AO_FOM_JavaScriptInterpreter name=intercepted-javascript load-on-startupresource://org/apache/cocoon/components/flow/javascript/fom/ao_fom_system.js/load-on-startup reload-scriptstrue/reload-scripts - enable-interceptiontrue/enable-interception check-time40/check-time - !-- debuggerenabled/debugger -- !-- JavaScript Debugger support -- -/component-instance + !-- debuggerenabled/debugger -- !-- JavaScript Debugger support -- + + !-- * interception support * -- +!-- on/off switch -- +enable-interceptiontrue/enable-interception +!-- list of all functions that stop flow execution -- +cont-creating-functions + functioncocoon.sendPageAndWait()/function + functionwoody.send()/function +/cont-creating-functions +!-- the result script is copied in the same directory as the basescript + if the file protocol is used to resolve the script -- +copy-result-scripttrue/copy-result-script +/component-instance /xconf
cvs commit: cocoon-2.1/src/blocks/scratchpad/samples/intercepted-flow aspects1.js aspects2.js basescript.js
reinhard2003/09/08 15:58:29 Modified:src/blocks/scratchpad/samples/intercepted-flow aspects1.js aspects2.js basescript.js Log: - added calls of cocoon.sendPageAndWait() and woody.send() - added interception definitions for stopExecution() and continueExecution() Revision ChangesPath 1.2 +9 -0 cocoon-2.1/src/blocks/scratchpad/samples/intercepted-flow/aspects1.js Index: aspects1.js === RCS file: /home/cvs/cocoon-2.1/src/blocks/scratchpad/samples/intercepted-flow/aspects1.js,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- aspects1.js 6 Sep 2003 13:45:49 - 1.1 +++ aspects1.js 8 Sep 2003 22:58:29 - 1.2 @@ -5,4 +5,13 @@ after(): { cocoon.log.info( after:call* ); } +} + +function testSendPageAndWait() { +continueExecution(): { +cocoon.log.info( continueExecution:testSendPageAndWait ); +} +stopExecution(): { +cocoon.log.info( stopExecution:testSendPageAndWait ); +} } 1.2 +3 -1 cocoon-2.1/src/blocks/scratchpad/samples/intercepted-flow/aspects2.js Index: aspects2.js === RCS file: /home/cvs/cocoon-2.1/src/blocks/scratchpad/samples/intercepted-flow/aspects2.js,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- aspects2.js 6 Sep 2003 13:45:49 - 1.1 +++ aspects2.js 8 Sep 2003 22:58:29 - 1.2 @@ -2,5 +2,7 @@ before(): { cocoon.log.info( before:interception* ); } - +stopExecution(): { +cocoon.log.info( stopExecution:interception* ); +} } 1.2 +8 -1 cocoon-2.1/src/blocks/scratchpad/samples/intercepted-flow/basescript.js Index: basescript.js === RCS file: /home/cvs/cocoon-2.1/src/blocks/scratchpad/samples/intercepted-flow/basescript.js,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- basescript.js 6 Sep 2003 13:45:49 - 1.1 +++ basescript.js 8 Sep 2003 22:58:29 - 1.2 @@ -11,4 +11,11 @@ function callAnotherFunction() { cocoon.log.error ( callAnotherFunction() - baseScript ); -} \ No newline at end of file +} + +function testSendPageAndWait() { + woody.send( bla ); + cocoon.sendPageAndWait(xxx,{}); + cocoon.sendPageAndWait(yyy,{}); + cocoon.sendPageAndWait( zzz, {} ); +}