Author: dmorozov
Date: 2008-11-17 11:15:17 -0500 (Mon, 17 Nov 2008)
New Revision: 11192
Added:
trunk/sandbox/samples/queue-sample/src/main/webapp/pages/events.xhtml
Modified:
trunk/sandbox/samples/queue-sample/src/main/java/org/richfaces/Bean.java
trunk/sandbox/samples/queue-sample/src/main/webapp/templates/navigation.xhtml
trunk/sandbox/ui/queue/src/main/config/component/queue.xml
trunk/sandbox/ui/queue/src/main/java/org/richfaces/component/UIQueue.java
trunk/sandbox/ui/queue/src/main/java/org/richfaces/renderkit/html/QueueRenderer.java
trunk/sandbox/ui/queue/src/main/java/org/richfaces/renderkit/html/scripts/QueueScriptResourceRenderer.java
trunk/sandbox/ui/queue/src/test/java/org/richfaces/AbstractQueueComponentTest.java
trunk/sandbox/ui/queue/src/test/java/org/richfaces/ScriptTest.java
trunk/sandbox/ui/queue/src/test/resources/org/richfaces/simulation.js
Log:
https://jira.jboss.org/jira/browse/RF-4899
Modified: trunk/sandbox/samples/queue-sample/src/main/java/org/richfaces/Bean.java
===================================================================
--- trunk/sandbox/samples/queue-sample/src/main/java/org/richfaces/Bean.java 2008-11-17
16:13:42 UTC (rev 11191)
+++ trunk/sandbox/samples/queue-sample/src/main/java/org/richfaces/Bean.java 2008-11-17
16:15:17 UTC (rev 11192)
@@ -23,17 +23,12 @@
import java.util.Map;
-import javax.faces.component.UIComponent;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import org.ajax4jsf.event.AjaxEvent;
import org.ajax4jsf.event.AjaxListener;
-import org.ajax4jsf.javascript.JSFunction;
-import org.ajax4jsf.javascript.JSReference;
-import org.ajax4jsf.javascript.ScriptString;
-import org.ajax4jsf.taglib.html.jsp.AjaxFunction;
/**
* @author $Autor$
Added: trunk/sandbox/samples/queue-sample/src/main/webapp/pages/events.xhtml
===================================================================
--- trunk/sandbox/samples/queue-sample/src/main/webapp/pages/events.xhtml
(rev 0)
+++ trunk/sandbox/samples/queue-sample/src/main/webapp/pages/events.xhtml 2008-11-17
16:15:17 UTC (rev 11192)
@@ -0,0 +1,34 @@
+<html
+
xmlns:h="http://java.sun.com/jsf/html"
+
xmlns:f="http://java.sun.com/jsf/core"
+
xmlns:ui="http://java.sun.com/jsf/facelets"
+
xmlns:a4j="http://richfaces.org/a4j"
+
xmlns:q="http://labs.jboss.com/jbossrichfaces/ui/ui/queue">
+ <head>
+ <title>Events check page</title>
+ </head>
+ <body>
+ <f:view>
+ <ui:include src="/templates/navigation.xhtml" />
+
+ <a4j:status startText="...running..." startStyle="color: green"
/>
+
+ <q:queue name="queue" oncomplete="alert('queue -
oncomplete')" onbeforedomupdate="alert('queue -
onbeforedomupdate')" />
+
+ <h:form>
+ <h:panelGrid columns="1">
+ Components in queue
+ <a4j:commandLink value="No component handlers"
eventsQueue="queue"/>
+ <a4j:commandLink value="Oncomplete component client handler"
eventsQueue="queue" onbeforedomupdate="request.options.oncomplete =
function(){alert('component - oncomplete')}" />
+ <a4j:commandLink value="Both component handlers"
eventsQueue="queue" oncomplete="alert('component -
oncomplete')" onbeforedomupdate="alert('component -
onbeforedomupdate')" />
+ </h:panelGrid>
+ <h:panelGrid columns="1">
+ Components without queue
+ <a4j:commandLink value="No component handlers" />
+ <a4j:commandLink value="Oncomplete component client handler"
onbeforedomupdate="request.options.oncomplete = function(){alert('component -
oncomplete')}" />
+ <a4j:commandLink value="Both component handlers"
oncomplete="alert('component - oncomplete')"
onbeforedomupdate="alert('component - onbeforedomupdate')" />
+ </h:panelGrid>
+ </h:form>
+ </f:view>
+ </body>
+</html>
Modified: trunk/sandbox/samples/queue-sample/src/main/webapp/templates/navigation.xhtml
===================================================================
---
trunk/sandbox/samples/queue-sample/src/main/webapp/templates/navigation.xhtml 2008-11-17
16:13:42 UTC (rev 11191)
+++
trunk/sandbox/samples/queue-sample/src/main/webapp/templates/navigation.xhtml 2008-11-17
16:15:17 UTC (rev 11192)
@@ -13,6 +13,8 @@
<h:outputLink value="view-queue.jsf">View global
queue</h:outputLink>
<h:outputText value=" " />
<h:outputLink value="sized-queue.jsf">Size exceed
behaviors</h:outputLink>
+ <h:outputText value=" " />
+ <h:outputLink value="events.jsf">Events handling</h:outputLink>
<br />
</ui:composition>
Modified: trunk/sandbox/ui/queue/src/main/config/component/queue.xml
===================================================================
--- trunk/sandbox/ui/queue/src/main/config/component/queue.xml 2008-11-17 16:13:42 UTC
(rev 11191)
+++ trunk/sandbox/ui/queue/src/main/config/component/queue.xml 2008-11-17 16:15:17 UTC
(rev 11192)
@@ -54,6 +54,10 @@
<name>timeout</name>
<classname>java.lang.Integer</classname>
</property>
+ <property>
+ <name>disabled</name>
+ <classname>boolean</classname>
+ </property>
<property>
<name>onsubmit</name>
Modified: trunk/sandbox/ui/queue/src/main/java/org/richfaces/component/UIQueue.java
===================================================================
--- trunk/sandbox/ui/queue/src/main/java/org/richfaces/component/UIQueue.java 2008-11-17
16:13:42 UTC (rev 11191)
+++ trunk/sandbox/ui/queue/src/main/java/org/richfaces/component/UIQueue.java 2008-11-17
16:15:17 UTC (rev 11192)
@@ -42,6 +42,18 @@
public abstract String getName();
public abstract void setName(String name);
+ public abstract String getOnsubmit();
+ public abstract void setOnsubmit(String onsubmit);
+
+ public abstract String getOncomplete();
+ public abstract void setOncomplete(String oncomplete);
+
+ public abstract String getOnbeforedomupdate();
+ public abstract void setOnbeforedomupdate(String Onbeforedomupdate);
+
+ public abstract boolean isDisabled();
+ public abstract void setDisabled(boolean disabled);
+
@Override
public String getFamily() {
return COMPONENT_FAMILY;
Modified:
trunk/sandbox/ui/queue/src/main/java/org/richfaces/renderkit/html/QueueRenderer.java
===================================================================
---
trunk/sandbox/ui/queue/src/main/java/org/richfaces/renderkit/html/QueueRenderer.java 2008-11-17
16:13:42 UTC (rev 11191)
+++
trunk/sandbox/ui/queue/src/main/java/org/richfaces/renderkit/html/QueueRenderer.java 2008-11-17
16:15:17 UTC (rev 11192)
@@ -29,6 +29,7 @@
import org.ajax4jsf.javascript.AjaxScript;
import org.ajax4jsf.javascript.JSFunctionDefinition;
+import org.ajax4jsf.renderkit.AjaxRendererUtils;
import org.ajax4jsf.renderkit.HeaderResourcesRendererBase;
import org.ajax4jsf.resource.InternetResource;
import org.richfaces.component.UIQueue;
@@ -40,6 +41,12 @@
*/
public class QueueRenderer extends HeaderResourcesRendererBase {
+ private static final String QUEUE_ONSUBMIT_ATTRIBUTE = "queueonsubmit";
+
+ private static final String QUEUE_ONBEFOREDOMUPDATE_ATTRIBUTE =
"queueonbeforedomupdate";
+
+ private static final String QUEUE_ONCOMPLETE_ATTRIBUTE = "queueoncomplete";
+
private static final String[] QUEUE_ATTRIBUTES = new String[] {
"enabled",
"size",
@@ -59,12 +66,6 @@
"limitToList"
};
- private static final String[] REQUEST_FUNCTION_ATTRIBUTES = new String[] {
- "onsubmit",
- "oncomplete",
- "onbeforedomupdate",
- };
-
private volatile InternetResource[] scripts;
@Override
@@ -130,14 +131,24 @@
}
}
- for (String attributeName : REQUEST_FUNCTION_ATTRIBUTES) {
- Object value = attributes.get(attributeName);
- if (isNotEmpty(value)) {
- //TODO nick - apply proper functions signature
- data.addRequestAttribute(attributeName, new
JSFunctionDefinition("event").addToBody(value));
- }
+ String oncomplete = queue.getOncomplete();
+ if (oncomplete != null) {
+ data.addRequestAttribute(QUEUE_ONCOMPLETE_ATTRIBUTE,
AjaxRendererUtils.buildAjaxOncomplete(oncomplete));
}
+
+ String onBeforeDomUpdate = queue.getOnbeforedomupdate();
+ if (onBeforeDomUpdate != null) {
+ data.addRequestAttribute(QUEUE_ONBEFOREDOMUPDATE_ATTRIBUTE,
AjaxRendererUtils.buildAjaxOnBeforeDomUpdate(onBeforeDomUpdate));
+ }
+ String onsubmit = queue.getOnsubmit();
+ if (onsubmit != null) {
+ JSFunctionDefinition onsubmitFunction = new JSFunctionDefinition();
+ onsubmitFunction.addToBody(onsubmit);
+
+ data.addRequestAttribute(QUEUE_ONSUBMIT_ATTRIBUTE, onsubmitFunction);
+ }
+
return data;
}
@@ -153,8 +164,9 @@
super.encodeEnd(context, component);
UIQueue queue = (UIQueue) component;
-
- QueueRegistry.registerQueue(context, queue.getClientName(context),
- createRendererData(context, queue));
+ if (!queue.isDisabled()) {
+ QueueRegistry.registerQueue(context, queue.getClientName(context),
+ createRendererData(context, queue));
+ }
}
}
Modified:
trunk/sandbox/ui/queue/src/main/java/org/richfaces/renderkit/html/scripts/QueueScriptResourceRenderer.java
===================================================================
---
trunk/sandbox/ui/queue/src/main/java/org/richfaces/renderkit/html/scripts/QueueScriptResourceRenderer.java 2008-11-17
16:13:42 UTC (rev 11191)
+++
trunk/sandbox/ui/queue/src/main/java/org/richfaces/renderkit/html/scripts/QueueScriptResourceRenderer.java 2008-11-17
16:15:17 UTC (rev 11192)
@@ -27,6 +27,7 @@
import java.util.Map;
import java.util.Map.Entry;
+import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;
@@ -35,6 +36,7 @@
import org.ajax4jsf.renderkit.RendererUtils.HTML;
import org.ajax4jsf.resource.BaseResourceRenderer;
import org.ajax4jsf.resource.InternetResource;
+import org.richfaces.component.UIQueue;
import org.richfaces.renderkit.html.QueueRegistry;
import org.richfaces.renderkit.html.QueueRendererData;
@@ -44,22 +46,66 @@
*/
public class QueueScriptResourceRenderer extends BaseResourceRenderer {
+ private void encodeQueue(ResponseWriter writer, String queueName, QueueRendererData
queueData)
+ throws IOException {
+
+ Map<String, Object> queueAttributes = null;
+ Map<String, Object> requestAttributes = null;
+
+ if (queueData != null) {
+ queueAttributes = queueData.getQueueAttributes();
+ requestAttributes = queueData.getRequestAttributes();
+ }
+
+ writer.writeText("A4J.AJAX.EventQueue.addQueue(", null);
+ writer.writeText(
+ new JSObject("A4J.AJAX.EventQueue",
+ queueName,
+ queueAttributes,
+ requestAttributes
+ ).toScript(), null);
+ writer.writeText(");", null);
+ }
+
+ @Override
+ protected void customEncode(InternetResource resource,
+ FacesContext context, Object data) throws IOException {
+ super.customEncode(resource, context, data);
+
+ ResponseWriter writer = context.getResponseWriter();
+
+ Map<String, QueueRendererData> queues =
QueueRegistry.getRegisteredQueues(context);
+
+ ExternalContext externalContext = context.getExternalContext();
+ if
(Boolean.valueOf(externalContext.getInitParameter("org.richfaces.queue.global.enabled")))
{
+ String encodedGlobalQueueName =
externalContext.encodeNamespace(UIQueue.GLOBAL_QUEUE_NAME);
+
+ if (queues == null || !queues.containsKey(encodedGlobalQueueName)) {
+ encodeQueue(writer, encodedGlobalQueueName, null);
+ }
+ }
+
+ if (queues != null && !queues.isEmpty()) {
+ for (Entry<String, QueueRendererData> entry : queues.entrySet()) {
+ encodeQueue(writer, entry.getKey(), entry.getValue());
+ }
+ }
+ }
+
protected void doEncode(InternetResource resource, FacesContext context,
Object data, Map<String, Object> attributes) throws IOException {
AjaxContext ajaxContext = AjaxContext.getCurrentInstance(context);
+ //TODO nick - what if ajax request?
if (!ajaxContext.isAjaxRequest(context)) {
- Map<String, Object> requestMap = context.getExternalContext().getRequestMap();
+ ExternalContext externalContext = context.getExternalContext();
+ Map<String, Object> requestMap = externalContext.getRequestMap();
String resourceKey = resource.getKey();
if (requestMap.get(resourceKey) == null) {
requestMap.put(resourceKey, Boolean.TRUE);
- Map<String, QueueRendererData> queues =
QueueRegistry.getRegisteredQueues(context);
-
- if (queues != null && !queues.isEmpty()) {
- super.encode(resource, context, queues, attributes);
- }
+ super.encode(resource, context, data, attributes);
}
}
}
@@ -79,32 +125,10 @@
}
@Override
- public void encodeEnd(InternetResource resource,
- FacesContext context, Object data) throws IOException {
-
- ResponseWriter writer = context.getResponseWriter();
- Map<String, QueueRendererData> queues = (Map<String, QueueRendererData>)
data;
-
- for (Entry<String, QueueRendererData> entry : queues.entrySet()) {
- String queueName = entry.getKey();
- QueueRendererData rendererData = entry.getValue();
-
- writer.writeText("A4J.AJAX.EventQueue.addQueue(", null);
- writer.writeText(
- new JSObject("A4J.AJAX.EventQueue",
- queueName,
- rendererData.getQueueAttributes(),
- rendererData.getRequestAttributes()
- ).toScript(), null);
- writer.writeText(");", null);
- }
-
- super.encodeEnd(resource, context, data);
- }
-
- @Override
protected String[][] getCommonAttrs() {
- return new String[][]{{HTML.TYPE_ATTR, getContentType()}};
+ return new String[][] {
+ {HTML.TYPE_ATTR, getContentType()},
+ };
}
@Override
Modified:
trunk/sandbox/ui/queue/src/test/java/org/richfaces/AbstractQueueComponentTest.java
===================================================================
---
trunk/sandbox/ui/queue/src/test/java/org/richfaces/AbstractQueueComponentTest.java 2008-11-17
16:13:42 UTC (rev 11191)
+++
trunk/sandbox/ui/queue/src/test/java/org/richfaces/AbstractQueueComponentTest.java 2008-11-17
16:15:17 UTC (rev 11192)
@@ -25,6 +25,7 @@
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -42,6 +43,7 @@
import org.ajax4jsf.component.html.HtmlLoadScript;
import org.ajax4jsf.javascript.JSFunction;
import org.ajax4jsf.javascript.JSReference;
+import org.ajax4jsf.javascript.ScriptUtils;
import org.ajax4jsf.renderkit.AjaxRendererUtils;
import org.ajax4jsf.renderkit.UserResourceRenderer2;
import org.ajax4jsf.renderkit.RendererUtils.HTML;
@@ -57,6 +59,7 @@
import com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine;
import com.sun.facelets.Facelet;
import com.sun.facelets.FaceletFactory;
+import com.sun.facelets.compiler.Compiler;
import com.sun.facelets.compiler.SAXCompiler;
import com.sun.facelets.impl.DefaultFaceletFactory;
import com.sun.facelets.impl.ResourceResolver;
@@ -65,10 +68,12 @@
* @author Nick Belaevski
* @since 3.3.0
*/
-public abstract class AbstractQueueComponentTest extends AbstractAjax4JsfTestCase
implements ResourceResolver {
+public abstract class AbstractQueueComponentTest extends AbstractAjax4JsfTestCase {
private static final String COMPONENT_TYPE =
AjaxSubmitFunctionComponent.class.getName();
+ private static final String AJAX_SUBMIT = "ajaxSubmit";
+
public final static class AjaxSubmitFunctionComponent extends UIComponentBase {
@Override
@@ -95,14 +100,15 @@
options.put("data", new JSReference("data"));
options.put("requestTime", new JSReference("parameters.requestTime ||
1000"));
options.put("timeout", new JSReference("parameters.timeout"));
- options.put("eventsQueue", new JSReference("parameters.eventsQueue ||
'testQueue'"));
+ options.put("eventsQueue", new
JSReference("parameters.eventsQueue"));
+ options.put("implicitEventsQueue", new
JSReference("parameters.implicitEventsQueue"));
ajaxFunction.addParameter(options);
ResponseWriter responseWriter = facesContext.getResponseWriter();
responseWriter.startElement(HTML.SCRIPT_ELEM, component);
responseWriter.writeAttribute(HTML.TYPE_ATTR, "text/javascript", null);
- responseWriter.writeText("var ajaxSubmit = function(data, parameters) {" +
ajaxFunction.toScript() + "};", null);
+ responseWriter.writeText("var " + AJAX_SUBMIT + " = function(data,
parameters) {" + ajaxFunction.toScript() + "};", null);
responseWriter.endElement(HTML.SCRIPT_ELEM);
}
@@ -126,10 +132,6 @@
super(name);
}
- public URL resolveUrl(String path) {
- return
Thread.currentThread().getContextClassLoader().getResource("org/richfaces" +
path);
- }
-
@Override
public void setUp() throws Exception {
super.setUp();
@@ -190,10 +192,54 @@
}
}
+ protected static final class ParametersBuilder {
+ private Map<String, Object> parameters;
+
+ private ParametersBuilder() {
+ this.parameters = new HashMap<String, Object>();
+ }
+
+ private ParametersBuilder(Map<String, Object> parameters) {
+ this.parameters = new HashMap<String, Object>(parameters);
+ }
+
+ private ParametersBuilder put(String key, Object value) {
+ this.parameters.put(key, value);
+ return this;
+ }
+
+ private String getParamatersString() {
+ return ScriptUtils.toScript(parameters);
+ }
+
+ public ParametersBuilder requestDelay(double value) {
+ return new ParametersBuilder(this.parameters).put("requestDelay", value);
+ }
+ public ParametersBuilder requestId(Object id) {
+ return new ParametersBuilder(this.parameters).put("requestId", id);
+ }
+ public ParametersBuilder requestTime(double value) {
+ return new ParametersBuilder(this.parameters).put("requestTime", value);
+ }
+ public ParametersBuilder timeout(double value) {
+ return new ParametersBuilder(this.parameters).put("timeout", value);
+ }
+ public ParametersBuilder eventsQueue(String name) {
+ return new ParametersBuilder(this.parameters).put("eventsQueue", name);
+ }
+ public ParametersBuilder implicitEventsQueue(String name) {
+ return new ParametersBuilder(this.parameters).put("implicitEventsQueue",
name);
+ }
+ }
+
+ protected ParametersBuilder createAjaxParameters() {
+ return new ParametersBuilder();
+ }
+
protected static final class TestsResult {
private List<RequestData> dataList = new ArrayList<RequestData>();
- private Number currentTime;
+ private double currentTime;
public void addData(RequestData data) {
this.dataList.add(data);
@@ -203,11 +249,11 @@
return dataList;
}
- public void setCurrentTime(Number number) {
+ public void setCurrentTime(double number) {
this.currentTime = number;
}
- public Number getCurrentTime() {
+ public double getCurrentTime() {
return currentTime;
}
@@ -231,13 +277,13 @@
protected static final class RequestData {
private boolean timedOut;
- private Number startTime;
+ private double startTime;
- private Number endTime;
+ private double endTime;
private String data;
- public RequestData(String data, Number startTime, Number endTime,
+ public RequestData(String data, double startTime, double endTime,
boolean timedOut) {
super();
this.data = data;
@@ -250,11 +296,11 @@
return timedOut;
}
- public Number getStartTime() {
+ public double getStartTime() {
return startTime;
}
- public Number getEndTime() {
+ public double getEndTime() {
return endTime;
}
@@ -276,10 +322,9 @@
builder.append("endTime: ");
builder.append(endTime);
- builder.append(", ");
if (isTimedOut()) {
- builder.append("timeout: ");
+ builder.append(", timeout: ");
builder.append(true);
}
@@ -287,17 +332,46 @@
}
};
+ protected void assertRequestData(RequestData requestData, String data,
+ double startTime, double endTime, boolean timedOut) {
+
+ assertEquals("Data check failed for " + requestData, data,
requestData.getData());
+ assertEquals("Start time check failed for " + requestData, startTime,
requestData.getStartTime());
+ assertEquals("End time check failed for " + requestData, endTime,
requestData.getEndTime());
+ assertEquals("Timeout check failed for " + requestData, timedOut,
requestData.isTimedOut());
+
+ }
+
protected void ajax(String data, String parameters) {
scriptCommands.add(new AjaxCommand(data, parameters));
}
+ protected void ajax(String data, ParametersBuilder builder) {
+ scriptCommands.add(new AjaxCommand(data, builder.getParamatersString()));
+ }
+
protected void delay(int delayValue) {
scriptCommands.add(new DelayCommand(delayValue));
}
+ protected String getRootContextPath() {
+ return this.getClass().getPackage().getName().replace('.', '/');
+ }
+
+ protected ResourceResolver createResourceResolver() {
+ return new ResourceResolver() {
+
+ public URL resolveUrl(String path) {
+ return
Thread.currentThread().getContextClassLoader().getResource(getRootContextPath() + path);
+ }
+
+ };
+ }
+
+ private static final Compiler compiler = new SAXCompiler();
+
protected void buildView(String viewId) throws IOException {
- com.sun.facelets.compiler.Compiler c = new SAXCompiler();
- FaceletFactory factory = new DefaultFaceletFactory(c, this);
+ FaceletFactory factory = new DefaultFaceletFactory(compiler,
createResourceResolver());
FaceletFactory.setInstance(factory);
FaceletFactory f = FaceletFactory.getInstance();
@@ -310,7 +384,9 @@
@Override
protected HtmlPage renderView() throws Exception {
- StringBuilder builder = new StringBuilder("<script
type='text/javascript'>do { with (simulationContext) {");
+ StringBuilder builder = new StringBuilder("<script
type='text/javascript'>" +
+ "window.simulationContext = new SimulationContext(" + AJAX_SUBMIT +
");" +
+ "do { with (simulationContext) {");
for (ScriptCommand command : scriptCommands) {
command.append(builder);
}
@@ -336,8 +412,8 @@
NativeObject object = (NativeObject) array.get(i, array);
String data = (String) object.get("data", object);
- Number startTime = (Number) object.get("startTime", object);
- Number endTime = (Number) object.get("endTime", object);
+ Double startTime = (Double) object.get("startTime", object);
+ Double endTime = (Double) object.get("endTime", object);
Object timedOut = object.get("timedOut", object);
boolean timedOutBoolean = timedOut instanceof Boolean && (Boolean) timedOut;
@@ -346,7 +422,7 @@
}
scriptResult = page.executeJavaScript("Timer.currentTime");
- result.setCurrentTime((Number) scriptResult.getJavaScriptResult());
+ result.setCurrentTime((Double) scriptResult.getJavaScriptResult());
return result;
}
Modified: trunk/sandbox/ui/queue/src/test/java/org/richfaces/ScriptTest.java
===================================================================
--- trunk/sandbox/ui/queue/src/test/java/org/richfaces/ScriptTest.java 2008-11-17 16:13:42
UTC (rev 11191)
+++ trunk/sandbox/ui/queue/src/test/java/org/richfaces/ScriptTest.java 2008-11-17 16:15:17
UTC (rev 11192)
@@ -22,6 +22,8 @@
package org.richfaces;
+import java.util.List;
+
import com.gargoylesoftware.htmlunit.html.HtmlPage;
/**
@@ -30,17 +32,60 @@
*/
public class ScriptTest extends AbstractQueueComponentTest {
+ private static final String QUEUE_NAME = "testQueue";
+
public ScriptTest(String name) {
super(name);
}
- public void testScript() throws Exception {
+ @Override
+ public void setUp() throws Exception {
+ super.setUp();
+
buildView("/script.xhtml");
+ }
+
+ @Override
+ public void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+ public void testSimpleAjax() throws Exception {
+ delay(50);
+ ajax("a", createAjaxParameters().requestTime(100));
+ ajax("b", createAjaxParameters().requestTime(150));
+ TestsResult result = getTestsResult(renderView());
+ List<RequestData> dataList = result.getDataList();
+ assertEquals(2, dataList.size());
+ assertRequestData(dataList.get(0), "a", 50, 150, false);
+ assertRequestData(dataList.get(1), "b", 50, 200, false);
+
+ assertEquals(200d, result.getCurrentTime());
+ }
+
+ public void testSimpleQueuedAjax() throws Exception {
+ delay(50);
+ ParametersBuilder queueParameters =
createAjaxParameters().requestTime(500).eventsQueue(QUEUE_NAME);
+ ajax("a", queueParameters.requestId(0));
+ delay(200);
+ ajax("b", queueParameters.requestId(1));
+
+ TestsResult result = getTestsResult(renderView());
+ List<RequestData> dataList = result.getDataList();
+ assertEquals(2, dataList.size());
+ assertRequestData(dataList.get(0), "a", 50, 550, false);
+ assertRequestData(dataList.get(1), "b", 550, 1050, false);
+
+ assertEquals(1050d, result.getCurrentTime());
+ }
+
+ public void testScript() throws Exception {
delay(500);
- ajax("a", "{requestDelay: 1000, requestId: '12', requestTime:
1500}");
+ ajax("a", "{requestDelay: 100, requestId: '12', requestTime:
100, eventsQueue: 'q'}");
delay(4100);
- ajax("b", "{requestDelay: 4100, requestId: '12', requestTime:
101, timeout: 10}");
+ ajax("b", "{requestDelay: 4400, requestId: '12', requestTime:
101, timeout: 10, eventsQueue: 'q'}");
+ ajax("c", "{requestDelay: 0, requestId: '123', requestTime: 1,
timeout: 10, eventsQueue: 'q'}");
HtmlPage page = this.renderView();
@@ -48,4 +93,27 @@
System.out.println(getTestsResult(page));
}
+
+ public void testImplicitQueue() throws Exception {
+ ParametersBuilder parameters = createAjaxParameters().
+ requestDelay(100).
+ implicitEventsQueue("myqueue").
+ requestTime(10);
+
+ ajax("a", parameters);
+ delay(10);
+ ajax("b", parameters);
+ delay(10);
+ ajax("c", parameters.requestDelay(50));
+
+ TestsResult result = getTestsResult(this.renderView());
+ List<RequestData> dataList = result.getDataList();
+ assertEquals(1, dataList.size());
+
+ RequestData requestData = dataList.get(0);
+ assertRequestData(requestData, "c", 70, 80, false);
+
+ assertEquals(80d, result.getCurrentTime());
+
+ }
}
Modified: trunk/sandbox/ui/queue/src/test/resources/org/richfaces/simulation.js
===================================================================
--- trunk/sandbox/ui/queue/src/test/resources/org/richfaces/simulation.js 2008-11-17
16:13:42 UTC (rev 11191)
+++ trunk/sandbox/ui/queue/src/test/resources/org/richfaces/simulation.js 2008-11-17
16:15:17 UTC (rev 11192)
@@ -65,26 +65,28 @@
Timer.removeEventFromTimer(timerId);
}
-window.simulationContext = {
+var SimulationContext = function(submitFunction) {
+ this.results = new Array();
+ this.time = 0;
- results: new Array(),
-
- delay: 0,
-
- wait: function(delay) {
- this.delay += delay;
- },
-
- ajax: function() {
- var args = arguments;
- ajaxSubmit(args[0], args[1]);
-
- Timer.addEventToTimer(function() {
- ajaxSubmit(args[0], args[1]);
- }, this.delay);
- }
- };
+ this.submitFunction = submitFunction;
+};
+SimulationContext.prototype.wait = function(delay) {
+ this.time += delay;
+};
+
+SimulationContext.prototype.ajax = function() {
+ var args = arguments;
+ var _this = this;
+
+ Timer.addEventToTimer(function() {
+ _this.submitFunction(args[0], args[1]);
+ }, this.time);
+};
+
+window.simulationContext = undefined;
+
A4J.AJAX.SubmitQuery = function(query, options) {
var request = {};