Author: nbelaevski
Date: 2008-11-19 11:21:37 -0500 (Wed, 19 Nov 2008)
New Revision: 11238
Added:
trunk/sandbox/ui/queue/src/test/java/org/richfaces/AjaxFormQueuesTest.java
trunk/sandbox/ui/queue/src/test/java/org/richfaces/ImplicitQueuesTest.java
trunk/sandbox/ui/queue/src/test/java/org/richfaces/QueueDiscoveryTest.java
trunk/sandbox/ui/queue/src/test/resources/org/richfaces/ajax-form.xhtml
trunk/sandbox/ui/queue/src/test/resources/org/richfaces/disabled.xhtml
trunk/sandbox/ui/queue/src/test/resources/org/richfaces/discovery-base.xhtml
trunk/sandbox/ui/queue/src/test/resources/org/richfaces/global-both.xhtml
trunk/sandbox/ui/queue/src/test/resources/org/richfaces/global-form.xhtml
trunk/sandbox/ui/queue/src/test/resources/org/richfaces/global-view.xhtml
trunk/sandbox/ui/queue/src/test/resources/org/richfaces/implicit-global-queue.xhtml
trunk/sandbox/ui/queue/src/test/resources/org/richfaces/legacy.xhtml
Modified:
trunk/sandbox/samples/queue-sample/src/main/webapp/WEB-INF/web.xml
trunk/sandbox/samples/queue-sample/src/main/webapp/templates/index.xhtml
trunk/sandbox/ui/queue/pom.xml
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-4970
Modified: trunk/sandbox/samples/queue-sample/src/main/webapp/WEB-INF/web.xml
===================================================================
--- trunk/sandbox/samples/queue-sample/src/main/webapp/WEB-INF/web.xml 2008-11-19 16:12:10
UTC (rev 11237)
+++ trunk/sandbox/samples/queue-sample/src/main/webapp/WEB-INF/web.xml 2008-11-19 16:21:37
UTC (rev 11238)
@@ -18,6 +18,17 @@
<param-name>javax.faces.DEFAULT_SUFFIX</param-name>
<param-value>.xhtml</param-value>
</context-param>
+
+
+ <context-param>
+ <param-name>org.richfaces.LoadStyleStrategy</param-name>
+ <param-value>DEFAULT</param-value>
+ </context-param>
+ <!-- context-param>
+ <param-name>org.richfaces.LoadScriptStrategy</param-name>
+ <param-value>NONE</param-value>
+ </context-param -->
+
<!--
-->
<filter>
Modified: trunk/sandbox/samples/queue-sample/src/main/webapp/templates/index.xhtml
===================================================================
--- trunk/sandbox/samples/queue-sample/src/main/webapp/templates/index.xhtml 2008-11-19
16:12:10 UTC (rev 11237)
+++ trunk/sandbox/samples/queue-sample/src/main/webapp/templates/index.xhtml 2008-11-19
16:21:37 UTC (rev 11238)
@@ -6,6 +6,7 @@
xmlns:q="http://labs.jboss.com/jbossrichfaces/ui/ui/queue">
<ui:composition>
+ <!-- script
src="#{facesContext.externalContext.requestContextPath}/faces/a4j/g/3_3_0-SNAPSHOT/org/ajax4jsf/framework.pack.js"></script
-->
<h2><ui:insert name="title" /></h2>
<ui:insert name="viewQueue" />
@@ -82,9 +83,17 @@
requestDelay="#{bean.clientRequestDelay}"
actionListener="#{bean.processActionListener}"
action="#{bean.processAction}"
+ value="formQueue - ignoreDupResponses"
+ reRender="outputText"
+ eventsQueue="formQueue" ignoreDupResponses="true"/>
+
+ <a4j:commandButton id="commandButtonFormQueueIgnoreDupResponses"
+ requestDelay="#{bean.clientRequestDelay}"
+ actionListener="#{bean.processActionListener}"
+ action="#{bean.processAction}"
value="formQueue"
reRender="outputText"
- eventsQueue="formQueue"/>
+ eventsQueue="formQueue" ignoreDupResponses="true"/>
<a4j:poll id="poll"
interval="5000"
Modified: trunk/sandbox/ui/queue/pom.xml
===================================================================
--- trunk/sandbox/ui/queue/pom.xml 2008-11-19 16:12:10 UTC (rev 11237)
+++ trunk/sandbox/ui/queue/pom.xml 2008-11-19 16:21:37 UTC (rev 11238)
@@ -32,6 +32,16 @@
</library>
</configuration>
</plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <excludes>
+ <!-- TODO uncomment this -->
+ <exclude>**/ImplicitQueuesTest.java</exclude>
+ </excludes>
+ </configuration>
+ </plugin>
</plugins>
</build>
<dependencies>
@@ -52,4 +62,4 @@
<version>3.3.0-SNAPSHOT</version>
</dependency>
</dependencies>
-</project>
\ No newline at end of file
+</project>
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-19
16:12:10 UTC (rev 11237)
+++
trunk/sandbox/ui/queue/src/test/java/org/richfaces/AbstractQueueComponentTest.java 2008-11-19
16:21:37 UTC (rev 11238)
@@ -28,6 +28,8 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
import javax.faces.component.UIComponent;
import javax.faces.component.UIComponentBase;
@@ -50,11 +52,13 @@
import org.ajax4jsf.tests.AbstractAjax4JsfTestCase;
import org.mozilla.javascript.NativeArray;
import org.mozilla.javascript.NativeObject;
+import org.mozilla.javascript.Undefined;
import com.gargoylesoftware.htmlunit.AlertHandler;
import com.gargoylesoftware.htmlunit.Page;
+import com.gargoylesoftware.htmlunit.ScriptPreProcessor;
import com.gargoylesoftware.htmlunit.ScriptResult;
-import com.gargoylesoftware.htmlunit.WebClient;
+import com.gargoylesoftware.htmlunit.html.HtmlElement;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine;
import com.sun.facelets.Facelet;
@@ -74,6 +78,8 @@
private static final String AJAX_SUBMIT = "ajaxSubmit";
+ protected HtmlPage page;
+
public final static class AjaxSubmitFunctionComponent extends UIComponentBase {
@Override
@@ -112,20 +118,6 @@
responseWriter.endElement(HTML.SCRIPT_ELEM);
}
- @Override
- public void encodeBegin(FacesContext context, UIComponent component)
- throws IOException {
- }
-
- @Override
- public void encodeEnd(FacesContext context, UIComponent component)
- throws IOException {
- ResponseWriter responseWriter = context.getResponseWriter();
- responseWriter.startElement(HTML.SPAN_ELEM, component);
- responseWriter.writeAttribute(HTML.id_ATTRIBUTE, component.getClientId(context),
null);
- responseWriter.writeText("hi", null);
- responseWriter.endElement(HTML.SPAN_ELEM);
- }
}
public AbstractQueueComponentTest(String name) {
@@ -155,43 +147,10 @@
@Override
public void tearDown() throws Exception {
+ this.page = null;
super.tearDown();
}
- private List<ScriptCommand> scriptCommands = new
ArrayList<ScriptCommand>();
-
- private abstract interface ScriptCommand {
- public void append(StringBuilder builder);
- }
-
- private static final class DelayCommand implements ScriptCommand {
- private int delayValue;
-
- public DelayCommand(int value) {
- super();
- this.delayValue = value;
- }
-
- public void append(StringBuilder builder) {
- builder.append("wait(" + delayValue + ");");
- }
- }
-
- private static final class AjaxCommand implements ScriptCommand {
- private String data;
- private String parameters;
-
- public AjaxCommand(String data, String parameters) {
- super();
- this.data = data;
- this.parameters = parameters;
- }
-
- public void append(StringBuilder builder) {
- builder.append("ajax('" + data + "', " + parameters +
");");
- }
- }
-
protected static final class ParametersBuilder {
private Map<String, Object> parameters;
@@ -275,7 +234,7 @@
}
protected static final class RequestData {
- private boolean timedOut;
+ private boolean aborted;
private double startTime;
@@ -284,16 +243,16 @@
private String data;
public RequestData(String data, double startTime, double endTime,
- boolean timedOut) {
+ boolean aborted) {
super();
this.data = data;
this.startTime = startTime;
this.endTime = endTime;
- this.timedOut = timedOut;
+ this.aborted = aborted;
}
- public boolean isTimedOut() {
- return timedOut;
+ public boolean isAborted() {
+ return aborted;
}
public double getStartTime() {
@@ -323,8 +282,8 @@
builder.append("endTime: ");
builder.append(endTime);
- if (isTimedOut()) {
- builder.append(", timeout: ");
+ if (isAborted()) {
+ builder.append(", aborted: ");
builder.append(true);
}
@@ -333,25 +292,29 @@
};
protected void assertRequestData(RequestData requestData, String data,
- double startTime, double endTime, boolean timedOut) {
+ double startTime, double endTime, boolean aborted) {
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());
+ assertEquals("Aborted check failed for " + requestData, aborted,
requestData.isAborted());
}
protected void ajax(String data, String parameters) {
- scriptCommands.add(new AjaxCommand(data, parameters));
+ page.executeJavaScript("simulationContext.ajax('" + data + "',
" + parameters + ");");
}
protected void ajax(String data, ParametersBuilder builder) {
- scriptCommands.add(new AjaxCommand(data, builder.getParamatersString()));
+ ajax(data, builder.getParamatersString());
}
+ protected void executeAfterDelay(String expression) {
+ page.executeJavaScript("simulationContext.executeAfterDelay(function(){" +
expression + "});");
+ }
+
protected void delay(int delayValue) {
- scriptCommands.add(new DelayCommand(delayValue));
+ page.executeJavaScript("simulationContext.wait(" + delayValue +
");");
}
protected String getRootContextPath() {
@@ -382,15 +345,11 @@
at.apply(facesContext, root);
}
- @Override
- protected HtmlPage renderView() throws Exception {
- StringBuilder builder = new StringBuilder("<script
type='text/javascript'>" +
- "window.simulationContext = new SimulationContext(" + AJAX_SUBMIT +
");" +
- "do { with (simulationContext) {");
- for (ScriptCommand command : scriptCommands) {
- command.append(builder);
- }
- builder.append("}; Timer.execute(); } while
(!Timer.isEmpty());</script>");
+ protected void preRenderView() throws Exception {
+ StringBuilder builder = new StringBuilder("<script
type='text/javascript'>");
+ builder.append("window.simulationContext = new SimulationContext(");
+ builder.append(AJAX_SUBMIT);
+ builder.append(");</script>");
HtmlOutputText text = new HtmlOutputText();
text.setEscape(false);
@@ -398,27 +357,56 @@
List<UIComponent> childList = facesContext.getViewRoot().getChildren();
childList.add(childList.size(), text);
+ }
+
+ protected HtmlPage renderView(String viewId) throws Exception {
+ buildView(viewId);
+ preRenderView();
+ this.page = super.renderView();
+
+ return this.page;
+ }
+
+ @Override
+ protected HtmlPage renderView() throws Exception {
+ preRenderView();
+ this.page = super.renderView();
- return super.renderView();
+ return this.page;
}
- protected TestsResult getTestsResult(HtmlPage page) {
+ protected Object executeJavaScript(String expression) {
+ return page.executeJavaScript(expression).getJavaScriptResult();
+ }
+
+ protected void executeTimer() {
+ page.executeJavaScript("Timer.execute();");
+ }
+
+ protected TestsResult getTestsResult() {
TestsResult result = new TestsResult();
-
+
+ executeTimer();
ScriptResult scriptResult =
page.executeJavaScript("window.simulationContext.results");
NativeArray array = (NativeArray) scriptResult.getJavaScriptResult();
for (int i = 0; i < array.getLength(); i++) {
NativeObject object = (NativeObject) array.get(i, array);
- String data = (String) object.get("data", object);
+ String data = null;
+
+ Object dataObject = object.get("data", object);
+ if (!(dataObject instanceof Undefined)) {
+ data = (String) dataObject;
+ }
+
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;
+ Object aborted = object.get("aborted", object);
+ boolean abortedBoolean = aborted instanceof Boolean && (Boolean) aborted;
- result.addData(new RequestData(data, startTime, endTime, timedOutBoolean));
+ result.addData(new RequestData(data, startTime, endTime, abortedBoolean));
}
scriptResult = page.executeJavaScript("Timer.currentTime");
@@ -428,9 +416,11 @@
}
@Override
- protected WebClient createWebClient() {
- WebClient webClient = super.createWebClient();
+ protected void setupWebClient() {
+ super.setupWebClient();
webClient.setJavaScriptEngine(new JavaScriptEngine(webClient));
+ webClient.setScriptPreProcessor(new UnescapingScriptPreprocessor());
+ webClient.setThrowExceptionOnScriptError(true);
webClient.setAlertHandler(new AlertHandler() {
public void handleAlert(Page page, String message) {
@@ -438,8 +428,51 @@
}
});
+ }
+}
+
+class UnescapingScriptPreprocessor implements ScriptPreProcessor {
+
+ private static final Map<String, String> ENTITIES_MAP = new HashMap<String,
String>();
+
+ static {
+ ENTITIES_MAP.put("'", "\"");
+ ENTITIES_MAP.put(""", "'");
+ }
+
+ private static final Pattern ENTITIES_PATTERN;
+
+ static {
+ StringBuilder sb = new StringBuilder();
- return webClient;
+ for (String entity : ENTITIES_MAP.keySet()) {
+ if (sb.length() != 0) {
+ sb.append('|');
+ }
+
+ sb.append(Pattern.quote(entity));
+ }
+
+ ENTITIES_PATTERN = Pattern.compile("(" + sb.toString() + ")");
}
+ public String preProcess(HtmlPage htmlPage, String sourceCode,
+ String sourceName, HtmlElement htmlElement) {
+
+ if (sourceName != null && !sourceName.startsWith("http:/")) {
+ Matcher m = ENTITIES_PATTERN.matcher(sourceCode);
+ StringBuffer sb = new StringBuffer();
+ while (m.find()) {
+ String entity = m.group(1);
+ m.appendReplacement(sb, ENTITIES_MAP.get(entity));
+ }
+
+ m.appendTail(sb);
+
+ return sb.toString();
+ } else {
+ return sourceCode;
+ }
+
+ }
}
Added: trunk/sandbox/ui/queue/src/test/java/org/richfaces/AjaxFormQueuesTest.java
===================================================================
--- trunk/sandbox/ui/queue/src/test/java/org/richfaces/AjaxFormQueuesTest.java
(rev 0)
+++ trunk/sandbox/ui/queue/src/test/java/org/richfaces/AjaxFormQueuesTest.java 2008-11-19
16:21:37 UTC (rev 11238)
@@ -0,0 +1,66 @@
+/**
+ * License Agreement.
+ *
+ * Rich Faces - Natural Ajax for Java Server Faces (JSF)
+ *
+ * Copyright (C) 2007 Exadel, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+
+package org.richfaces;
+
+
+
+/**
+ * @author Nick Belaevski
+ * @since 3.3.0
+ *
+ */
+public class AjaxFormQueuesTest extends AbstractQueueComponentTest {
+
+ /**
+ * @param name
+ */
+ public AjaxFormQueuesTest(String name) {
+ super(name);
+ }
+
+ protected void checkForm(String formName) throws Exception {
+ renderView("/ajax-form.xhtml");
+ executeJavaScript("$('" + formName + ":link').click()");
+ executeTimer();
+
+ Object resultObject = executeJavaScript("window.testResults." + formName);
+
+ assertTrue(formName, resultObject instanceof Boolean && (Boolean)
resultObject);
+ }
+
+ public void testViewDefault() throws Exception {
+ checkForm("viewDefault");
+ }
+
+ public void testViewNamed() throws Exception {
+ checkForm("viewNamed");
+ }
+
+ public void testFormDefault() throws Exception {
+ checkForm("formDefault");
+ }
+
+ public void testFormNamed() throws Exception {
+ checkForm("formNamed");
+ }
+}
Added: trunk/sandbox/ui/queue/src/test/java/org/richfaces/ImplicitQueuesTest.java
===================================================================
--- trunk/sandbox/ui/queue/src/test/java/org/richfaces/ImplicitQueuesTest.java
(rev 0)
+++ trunk/sandbox/ui/queue/src/test/java/org/richfaces/ImplicitQueuesTest.java 2008-11-19
16:21:37 UTC (rev 11238)
@@ -0,0 +1,112 @@
+/**
+ * License Agreement.
+ *
+ * Rich Faces - Natural Ajax for Java Server Faces (JSF)
+ *
+ * Copyright (C) 2007 Exadel, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+package org.richfaces;
+
+import java.util.List;
+
+
+/**
+ * @author Nick Belaevski
+ * @since 3.3.0
+ *
+ */
+public class ImplicitQueuesTest extends AbstractQueueComponentTest {
+
+ /**
+ * @param name
+ */
+ public ImplicitQueuesTest(String name) {
+ super(name);
+ }
+
+ public void testImplicitGlobalQueueEnabled() throws Exception {
+ servletContext.addInitParameter("org.richfaces.queue.global.enabled",
"true");
+
+ renderView();
+
+ ajax("a", createAjaxParameters().requestTime(1000));
+ ajax("b", createAjaxParameters().requestTime(1000));
+
+ TestsResult result = getTestsResult();
+ assertEquals(2000d, result.getCurrentTime());
+ }
+
+ public void testImplicitGlobalQueueDefault() throws Exception {
+ renderView();
+
+ ajax("a", createAjaxParameters().requestTime(1000));
+ ajax("b", createAjaxParameters().requestTime(1000));
+
+ TestsResult result = getTestsResult();
+ assertEquals(1000d, result.getCurrentTime());
+ }
+
+ public void testLegacyQueuesRequestDelay() throws Exception {
+ renderView("/legacy.xhtml");
+
+ executeAfterDelay("$('form:buttonDelayed').click()");
+ delay(500);
+ executeAfterDelay("$('form:buttonDelayed').click()");
+ delay(250);
+ executeAfterDelay("$('form:buttonDelayed').click()");
+
+ TestsResult result = getTestsResult();
+ List<RequestData> dataList = result.getDataList();
+ assertEquals(1, dataList.size());
+
+ //request time set to 5000 in .xhtml file
+ RequestData data = dataList.get(0);
+ assertRequestData(data, null, 1750, 6750, false);
+
+ assertEquals(6750d, result.getCurrentTime());
+ }
+
+ public void testLegacyQueuesIgnoreDupResponces() throws Exception {
+ renderView("/legacy.xhtml");
+
+ executeAfterDelay("$('form:buttonIgnoreDupResponces').click()");
+ delay(500);
+
+ executeAfterDelay("$('form:buttonIgnoreDupResponces').click()");
+ delay(250);
+
+ executeAfterDelay("$('form:buttonIgnoreDupResponces').click()");
+
+ executeTimer();
+ TestsResult result = getTestsResult();
+ List<RequestData> dataList = result.getDataList();
+ assertEquals(3, dataList.size());
+
+ //request time set to 5000 in .xhtml file
+ assertRequestData(dataList.get(0), null, 0, 5000, false);
+ assertRequestData(dataList.get(1), null, 500, 5500, false);
+ assertRequestData(dataList.get(2), null, 750, 5750, false);
+
+ assertEquals(5750d, result.getCurrentTime());
+
+ Double requestsCompletedCounter = (Double) executeJavaScript("counter");
+ assertEquals(1d, requestsCompletedCounter);
+
+ Double requestsCompletionTime = (Double) executeJavaScript("time");
+ assertEquals(5750d, requestsCompletionTime);
+ }
+}
Added: trunk/sandbox/ui/queue/src/test/java/org/richfaces/QueueDiscoveryTest.java
===================================================================
--- trunk/sandbox/ui/queue/src/test/java/org/richfaces/QueueDiscoveryTest.java
(rev 0)
+++ trunk/sandbox/ui/queue/src/test/java/org/richfaces/QueueDiscoveryTest.java 2008-11-19
16:21:37 UTC (rev 11238)
@@ -0,0 +1,215 @@
+/**
+ * License Agreement.
+ *
+ * Rich Faces - Natural Ajax for Java Server Faces (JSF)
+ *
+ * Copyright (C) 2007 Exadel, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+package org.richfaces;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.mozilla.javascript.NativeArray;
+
+import com.gargoylesoftware.htmlunit.ScriptResult;
+import com.gargoylesoftware.htmlunit.html.HtmlPage;
+
+
+/**
+ * @author Nick Belaevski
+ * @since 3.3.0
+ *
+ */
+public class QueueDiscoveryTest extends AbstractQueueComponentTest {
+
+ /**
+ * @param name
+ */
+ public QueueDiscoveryTest(String name) {
+ super(name);
+ }
+
+ protected void assertListsEqual(List<String> list1, List<String> list2)
+ throws Exception {
+
+ System.out.println(list1);
+ System.out.println(list2);
+ System.out.println("xxx");
+ assertEquals(list1, list2);
+ }
+
+ protected List<String> getResults(HtmlPage page) {
+ List<String> result = new ArrayList<String>();
+
+ page.executeJavaScript("Timer.execute()");
+ ScriptResult scriptResult = page.executeJavaScript("window.testResult");
+ NativeArray array = (NativeArray) scriptResult.getJavaScriptResult();
+ for (int i = 0; i < array.getLength(); i++) {
+ result.add((String) array.get(i, array));
+ }
+
+ return result;
+ }
+
+ public void testGlobalViewQueue() throws Exception {
+ renderView("/global-view.xhtml");
+
+ List<String> list = new ArrayList<String>();
+ assertListsEqual(list, getResults(page));
+
+ list.add("button");
+ page.executeJavaScript("$('form:button').click()");
+ assertListsEqual(list, getResults(page));
+
+ list.add("implicitQueue");
+ page.executeJavaScript("$('form:implicitQueue').click()");
+ assertListsEqual(list, getResults(page));
+
+ list.add("alternativeQueueButton");
+ list.add("alt:alternativeQueueButton");
+ page.executeJavaScript("$('form:alternativeQueueButton').click()");
+ assertListsEqual(list, getResults(page));
+
+ list.add("function");
+ page.executeJavaScript("ajaxFunction()");
+ assertListsEqual(list, getResults(page));
+
+ list.add("implicitDelayedQueue");
+ page.executeJavaScript("$('form2:implicitDelayedQueue').click()");
+ assertListsEqual(list, getResults(page));
+ }
+
+ public void testGlobalFormQueue() throws Exception {
+ renderView("/global-form.xhtml");
+
+ List<String> list = new ArrayList<String>();
+ assertListsEqual(list, getResults(page));
+
+ list.add("alternativeQueueButton");
+ list.add("alt:alternativeQueueButton");
+ page.executeJavaScript("$('form2:alternativeQueueButton').click()");
+ assertListsEqual(list, getResults(page));
+
+ list.add("alternativeQueueButton");
+ page.executeJavaScript("$('form:alternativeQueueButton').click()");
+ assertListsEqual(list, getResults(page));
+
+ list.add("buttonFormQueue");
+ page.executeJavaScript("$('form:button').click()");
+ assertListsEqual(list, getResults(page));
+
+ list.add("implicitQueue");
+ page.executeJavaScript("$('form:implicitQueue').click()");
+ assertListsEqual(list, getResults(page));
+
+ list.add("alternativeQueue1Button");
+ list.add("alt1:alternativeQueue1Button");
+ page.executeJavaScript("$('form:alternativeQueue1Button').click()");
+ assertListsEqual(list, getResults(page));
+
+ list.add("buttonForm2Queue");
+ page.executeJavaScript("$('form2:button').click()");
+ assertListsEqual(list, getResults(page));
+
+ list.add("implicitDelayedQueue");
+ page.executeJavaScript("$('form2:implicitDelayedQueue').click()");
+ assertListsEqual(list, getResults(page));
+
+ list.add("ajaxFunction");
+ page.executeJavaScript("ajaxFunction()");
+ assertListsEqual(list, getResults(page));
+ }
+
+ public void testGlobalFormBoth() throws Exception {
+ renderView("/global-both.xhtml");
+
+ List<String> list = new ArrayList<String>();
+ assertListsEqual(list, getResults(page));
+
+ list.add("buttonFormQueue");
+ page.executeJavaScript("$('form:button').click()");
+ assertListsEqual(list, getResults(page));
+
+ list.add("implicitDelayedQueue");
+ page.executeJavaScript("$('form:implicitDelayedQueue').click()");
+ assertListsEqual(list, getResults(page));
+
+ list.add("implicitQueue");
+ page.executeJavaScript("$('form2:implicitQueue').click()");
+ assertListsEqual(list, getResults(page));
+
+ list.add("viewQueue:viewQueueButton");
+ page.executeJavaScript("$('form:viewQueueButton').click()");
+ assertListsEqual(list, getResults(page));
+
+ list.add("form2Button");
+ page.executeJavaScript("$('form2:button').click()");
+ assertListsEqual(list, getResults(page));
+
+ list.add("anotherImplicitQueue");
+ page.executeJavaScript("$('form3:anotherImplicitQueue').click()");
+ assertListsEqual(list, getResults(page));
+
+ list.add("form3Button");
+ page.executeJavaScript("$('form3:button').click()");
+ assertListsEqual(list, getResults(page));
+
+ list.add("functionFormQueue");
+ page.executeJavaScript("ajaxFunction()");
+ assertListsEqual(list, getResults(page));
+ }
+
+ public void testDisabled() throws Exception {
+ renderView("/disabled.xhtml");
+
+ List<String> list = new ArrayList<String>();
+ assertListsEqual(list, getResults(page));
+
+ list.add("button");
+ page.executeJavaScript("$('form:button').click()");
+ assertListsEqual(list, getResults(page));
+
+ list.add("formQueueButton");
+ page.executeJavaScript("$('form:formQueueButton').click()");
+ assertListsEqual(list, getResults(page));
+
+ list.add("button2");
+ list.add("form2-global:button2");
+ page.executeJavaScript("$('form2:button2').click()");
+ assertListsEqual(list, getResults(page));
+
+ list.add("formQueueButton2");
+ list.add("form2-queue:formQueueButton2");
+ page.executeJavaScript("$('form2:formQueueButton2').click()");
+ assertListsEqual(list, getResults(page));
+
+ list.add("global");
+ page.executeJavaScript("$('form3:global').click()");
+ assertListsEqual(list, getResults(page));
+
+ list.add("globalNamed");
+ page.executeJavaScript("$('form3:globalNamed').click()");
+ assertListsEqual(list, getResults(page));
+
+ list.add("globalNamedX");
+ list.add("viewNamedX:globalNamedX");
+ page.executeJavaScript("$('form3:globalNamedX').click()");
+ assertListsEqual(list, getResults(page));
+ }
+
+}
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-19 16:12:10
UTC (rev 11237)
+++ trunk/sandbox/ui/queue/src/test/java/org/richfaces/ScriptTest.java 2008-11-19 16:21:37
UTC (rev 11238)
@@ -24,38 +24,28 @@
import java.util.List;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-
/**
- * @author mikalaj
- *
+ * @author Denis Morozov
+ * @author Nick Belaevski
*/
public class ScriptTest extends AbstractQueueComponentTest {
private static final String QUEUE_NAME = "testQueue";
+ private static final String VIEW_NAME = "/script.xhtml";
+
public ScriptTest(String name) {
super(name);
}
- @Override
- public void setUp() throws Exception {
- super.setUp();
-
- buildView("/script.xhtml");
- }
-
- @Override
- public void tearDown() throws Exception {
- super.tearDown();
- }
-
public void testSimpleAjax() throws Exception {
+ renderView(VIEW_NAME);
+
delay(50);
ajax("a", createAjaxParameters().requestTime(100));
ajax("b", createAjaxParameters().requestTime(150));
- TestsResult result = getTestsResult(renderView());
+ TestsResult result = getTestsResult();
List<RequestData> dataList = result.getDataList();
assertEquals(2, dataList.size());
assertRequestData(dataList.get(0), "a", 50, 150, false);
@@ -65,13 +55,15 @@
}
public void testSimpleQueuedAjax() throws Exception {
+ renderView(VIEW_NAME);
+
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());
+ TestsResult result = getTestsResult();
List<RequestData> dataList = result.getDataList();
assertEquals(2, dataList.size());
assertRequestData(dataList.get(0), "a", 50, 550, false);
@@ -81,20 +73,20 @@
}
public void testScript() throws Exception {
+ renderView(VIEW_NAME);
+
delay(500);
ajax("a", "{requestDelay: 100, requestId: '12', requestTime:
100, eventsQueue: 'q'}");
delay(4100);
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();
- assertNotNull(page);
-
- System.out.println(getTestsResult(page));
+ System.out.println(getTestsResult());
}
public void testImplicitQueue() throws Exception {
+ renderView(VIEW_NAME);
+
ParametersBuilder parameters = createAjaxParameters().
requestDelay(100).
implicitEventsQueue("myqueue").
@@ -106,7 +98,7 @@
delay(10);
ajax("c", parameters.requestDelay(50));
- TestsResult result = getTestsResult(this.renderView());
+ TestsResult result = getTestsResult();
List<RequestData> dataList = result.getDataList();
assertEquals(1, dataList.size());
Added: trunk/sandbox/ui/queue/src/test/resources/org/richfaces/ajax-form.xhtml
===================================================================
--- trunk/sandbox/ui/queue/src/test/resources/org/richfaces/ajax-form.xhtml
(rev 0)
+++ trunk/sandbox/ui/queue/src/test/resources/org/richfaces/ajax-form.xhtml 2008-11-19
16:21:37 UTC (rev 11238)
@@ -0,0 +1,47 @@
+<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>a4j:form check page</title>
+ </head>
+ <body>
+ <f:view>
+ <script type="text/javascript">
+ function $(name) {
+ return document.getElementById(name);
+ }
+
+ window.testResults = {};
+ </script>
+
+ <a4j:status startText="...running..." startStyle="color: green"
/>
+
+ <q:queue oncomplete="window.testResults.viewDefault = true"/>
+
+ <a4j:form ajaxSubmit="true" id="viewDefault">
+ <h:commandButton value="view default queue" id="link" />
+ </a4j:form>
+
+ <q:queue oncomplete="window.testResults.viewNamed = true"
name="viewNamed" />
+
+ <a4j:form ajaxSubmit="true" eventsQueue="viewNamed"
id="viewNamed">
+ <h:commandButton value="view named queue" id="link" />
+ </a4j:form>
+
+ <a4j:form ajaxSubmit="true" id="formDefault">
+ <q:queue oncomplete="window.testResults.formDefault = true" />
+
+ <h:commandButton value="form default queue" id="link" />
+ </a4j:form>
+
+ <a4j:form ajaxSubmit="true" eventsQueue="formQueue"
id="formNamed">
+ <q:queue oncomplete="window.testResults.formNamed = true"
name="formQueue" />
+
+ <h:commandButton value="form named queue" id="link" />
+ </a4j:form>
+ </f:view>
+ </body>
+</html>
Added: trunk/sandbox/ui/queue/src/test/resources/org/richfaces/disabled.xhtml
===================================================================
--- trunk/sandbox/ui/queue/src/test/resources/org/richfaces/disabled.xhtml
(rev 0)
+++ trunk/sandbox/ui/queue/src/test/resources/org/richfaces/disabled.xhtml 2008-11-19
16:21:37 UTC (rev 11238)
@@ -0,0 +1,60 @@
+<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">
+ <body>
+ <f:view>
+ <ui:include src="discovery-base.xhtml" />
+
+ <h:form id="form">
+ <a4j:commandButton id="button"
oncomplete="addResult('button')">
+ <f:param name="data" value="button" />
+ </a4j:commandButton>
+ <a4j:commandButton id="formQueueButton"
oncomplete="addResult('formQueueButton')"
eventsQueue="form">
+ <f:param name="data" value="formQueueButton" />
+ </a4j:commandButton>
+
+ <q:queue oncomplete="addResult('disabled')"
disabled="true" />
+ <q:queue oncomplete="addResult('disabledForm')"
name="form" disabled="true" />
+ </h:form>
+
+ <h:form id="form2">
+ <a4j:commandButton id="button2"
oncomplete="addResult('button2')">
+ <f:param name="data" value="button2" />
+ </a4j:commandButton>
+ <a4j:commandButton id="formQueueButton2"
oncomplete="addResult('formQueueButton2')"
eventsQueue="form2">
+ <f:param name="data" value="formQueueButton2" />
+ </a4j:commandButton>
+
+ <q:queue oncomplete="addResult('disabledA')"
disabled="true" />
+ <q:queue oncomplete="addResult('form2-global:' +
request.options.parameters.data)" />
+ <q:queue oncomplete="addResult('disabledB')"
disabled="true" />
+
+ <q:queue oncomplete="addResult('disabledA1')"
disabled="true" name="form2" />
+ <q:queue oncomplete="addResult('form2-queue:' +
request.options.parameters.data)" name="form2"/>
+ <q:queue oncomplete="addResult('disabledB1')"
disabled="true" name="form2" />
+ </h:form>
+
+ <h:form id="form3">
+ <a4j:commandButton id="global"
oncomplete="addResult('global')">
+ <f:param name="data" value="global" />
+ </a4j:commandButton>
+ <a4j:commandButton id="globalNamed"
oncomplete="addResult('globalNamed')"
eventsQueue="viewNamed">
+ <f:param name="data" value="globalNamed" />
+ </a4j:commandButton>
+ <a4j:commandButton id="globalNamedX"
oncomplete="addResult('globalNamedX')"
eventsQueue="viewNamedX">
+ <f:param name="data" value="globalNamedX" />
+ </a4j:commandButton>
+ </h:form>
+
+ <q:queue oncomplete="addResult('disabled:' +
request.options.parameters.data)" disabled="true" />
+ <q:queue oncomplete="addResult('viewNamed:' +
request.options.parameters.data)" name="viewNamed"
disabled="true" />
+
+ <q:queue oncomplete="addResult('viewNamedXA:' +
request.options.parameters.data)" name="viewNamedX"
disabled="true" />
+ <q:queue oncomplete="addResult('viewNamedX:' +
request.options.parameters.data)" name="viewNamedX" />
+ <q:queue oncomplete="addResult('viewNamedXB:' +
request.options.parameters.data)" name="viewNamedX"
disabled="true" />
+ </f:view>
+ </body>
+</html>
Added: trunk/sandbox/ui/queue/src/test/resources/org/richfaces/discovery-base.xhtml
===================================================================
--- trunk/sandbox/ui/queue/src/test/resources/org/richfaces/discovery-base.xhtml
(rev 0)
+++
trunk/sandbox/ui/queue/src/test/resources/org/richfaces/discovery-base.xhtml 2008-11-19
16:21:37 UTC (rev 11238)
@@ -0,0 +1,23 @@
+<ui:composition
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">
+
+ <script type="text/javascript">
+ function $(id) {
+ return document.getElementById(id);
+ }
+
+ window.testResult = new Array();
+
+ function addResult(value) {
+ window.testResult.push(value);
+ }
+
+ function stub() {
+ }
+ </script>
+
+ <a4j:status startText="...running..." startStyle="color: green"
/>
+</ui:composition>
Added: trunk/sandbox/ui/queue/src/test/resources/org/richfaces/global-both.xhtml
===================================================================
--- trunk/sandbox/ui/queue/src/test/resources/org/richfaces/global-both.xhtml
(rev 0)
+++ trunk/sandbox/ui/queue/src/test/resources/org/richfaces/global-both.xhtml 2008-11-19
16:21:37 UTC (rev 11238)
@@ -0,0 +1,66 @@
+<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">
+ <body>
+ <f:view>
+ <ui:include src="discovery-base.xhtml" />
+
+ <q:queue oncomplete="addResult(request.options.parameters.data)"/>
+
+ <h:form id="form">
+ <q:queue oncomplete="addResult('buttonFormQueue')"/>
+
+ <a4j:commandButton id="button" oncomplete="stub()">
+ <f:param name="data" value="button" />
+ </a4j:commandButton>
+
+ <a4j:commandButton id="viewQueueButton" oncomplete="stub()"
eventsQueue="viewQueue">
+ <f:param name="data" value="viewQueueButton" />
+ </a4j:commandButton>
+
+ <a4j:commandButton id="implicitDelayedQueue"
requestDelay="500"
+ eventsQueue="implicitDelayedQueue"
oncomplete="addResult('implicitDelayedQueue')">
+ <f:param name="data" value="implicitDelayedQueue" />
+ </a4j:commandButton>
+ </h:form>
+
+ <h:form id="form2">
+ <a4j:commandButton id="formQueueButton"
eventsQueue="formQueue" requestDelay="1000"
oncomplete="stub()">
+ <f:param name="data" value="formQueueButton" />
+ </a4j:commandButton>
+
+ <q:queue oncomplete="addResult('formQueue:' +
request.options.parameters.data)" name="formQueue"/>
+
+ <a4j:commandButton id="button" requestDelay="1000"
oncomplete="stub()">
+ <f:param name="data" value="form2Button" />
+ </a4j:commandButton>
+
+ <a4j:commandButton id="implicitQueue"
eventsQueue="implicitQueue"
oncomplete="addResult('implicitQueue')">
+ <f:param name="data" value="implicitQueue" />
+ </a4j:commandButton>
+ </h:form>
+
+ <h:form id="form3">
+
+ <a4j:commandButton id="button">
+ <f:param name="data" value="form3Button" />
+ </a4j:commandButton>
+
+ <a4j:commandButton id="anotherImplicitQueue"
ignoreDupResponses="true" eventsQueue="anotherImplicitQueue"
oncomplete="addResult('anotherImplicitQueue')">
+ <f:param name="data" value="anotherImplicitQueue" />
+ </a4j:commandButton>
+ </h:form>
+
+ <h:form>
+ <q:queue oncomplete="addResult('functionFormQueue')"/>
+
+ <a4j:jsFunction name="ajaxFunction" />
+ </h:form>
+
+ <q:queue oncomplete="addResult('viewQueue:' +
request.options.parameters.data)" name="viewQueue"/>
+ </f:view>
+ </body>
+</html>
Added: trunk/sandbox/ui/queue/src/test/resources/org/richfaces/global-form.xhtml
===================================================================
--- trunk/sandbox/ui/queue/src/test/resources/org/richfaces/global-form.xhtml
(rev 0)
+++ trunk/sandbox/ui/queue/src/test/resources/org/richfaces/global-form.xhtml 2008-11-19
16:21:37 UTC (rev 11238)
@@ -0,0 +1,54 @@
+<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">
+ <body>
+ <f:view>
+ <ui:include src="discovery-base.xhtml" />
+
+ <h:form id="form">
+ <q:queue oncomplete="addResult('alt1:' +
request.options.parameters.data)" name="alternativeQueue1" />
+ <q:queue oncomplete="addResult('buttonFormQueue')"/>
+
+ <a4j:commandButton id="button" oncomplete="stub()">
+ <f:param name="data" value="button" />
+ </a4j:commandButton>
+
+ <a4j:commandButton id="implicitQueue"
eventsQueue="implicitQueue"
oncomplete="addResult('implicitQueue')">
+ <f:param name="data" value="implicitQueue" />
+ </a4j:commandButton>
+
+ <a4j:commandButton id="alternativeQueueButton"
eventsQueue="alternativeQueue"
oncomplete="addResult('alternativeQueueButton')">
+ <f:param name="data" value="alternativeQueueButton" />
+ </a4j:commandButton>
+
+ <a4j:commandButton id="alternativeQueue1Button"
eventsQueue="alternativeQueue1"
oncomplete="addResult('alternativeQueue1Button')">
+ <f:param name="data" value="alternativeQueue1Button" />
+ </a4j:commandButton>
+
+ </h:form>
+
+ <h:form>
+ <a4j:jsFunction name="ajaxFunction"
oncomplete="addResult('ajaxFunction')"/>
+ </h:form>
+
+
+ <h:form id="form2">
+ <a4j:commandButton id="button" requestDelay="1000"
oncomplete="stub()" />
+ <a4j:commandButton id="implicitDelayedQueue"
requestDelay="500"
+ eventsQueue="implicitDelayedQueue"
oncomplete="addResult('implicitDelayedQueue')">
+ <f:param name="data" value="implicitDelayedQueue" />
+ </a4j:commandButton>
+
+ <a4j:commandButton id="alternativeQueueButton"
eventsQueue="alternativeQueue"
oncomplete="addResult('alternativeQueueButton')">
+ <f:param name="data" value="alternativeQueueButton" />
+ </a4j:commandButton>
+
+ <q:queue oncomplete="addResult('buttonForm2Queue')"/>
+ <q:queue oncomplete="addResult('alt:' +
request.options.parameters.data)" name="alternativeQueue" />
+ </h:form>
+ </f:view>
+ </body>
+</html>
Added: trunk/sandbox/ui/queue/src/test/resources/org/richfaces/global-view.xhtml
===================================================================
--- trunk/sandbox/ui/queue/src/test/resources/org/richfaces/global-view.xhtml
(rev 0)
+++ trunk/sandbox/ui/queue/src/test/resources/org/richfaces/global-view.xhtml 2008-11-19
16:21:37 UTC (rev 11238)
@@ -0,0 +1,41 @@
+<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">
+ <body>
+ <f:view>
+ <ui:include src="discovery-base.xhtml" />
+
+ <h:form id="form">
+ <a4j:commandButton id="button" oncomplete="stub()"
requestDelay="100">
+ <f:param name="data" value="button" />
+ </a4j:commandButton>
+
+ <a4j:commandButton id="alternativeQueueButton"
eventsQueue="alternativeQueue"
oncomplete="addResult('alternativeQueueButton')">
+ <f:param name="data" value="alternativeQueueButton" />
+ </a4j:commandButton>
+
+ <a4j:commandButton id="implicitQueue"
eventsQueue="implicitQueue"
oncomplete="addResult('implicitQueue')">
+ <f:param name="data" value="implicitQueue" />
+ </a4j:commandButton>
+ </h:form>
+
+ <h:form id="form2">
+ <a4j:jsFunction name="ajaxFunction" oncomplete="stub()">
+ <f:param name="data" value="function" />
+ </a4j:jsFunction>
+
+ <a4j:commandButton id="implicitDelayedQueue"
requestDelay="500"
+ eventsQueue="implicitDelayedQueue"
oncomplete="addResult('implicitDelayedQueue')">
+ <f:param name="data" value="implicitDelayedQueue" />
+ </a4j:commandButton>
+ </h:form>
+
+ <q:queue oncomplete="addResult(request.options.parameters.data)"/>
+ <q:queue oncomplete="addResult('alt:' +
request.options.parameters.data)" name="alternativeQueue" />
+
+ </f:view>
+ </body>
+</html>
Added:
trunk/sandbox/ui/queue/src/test/resources/org/richfaces/implicit-global-queue.xhtml
===================================================================
--- trunk/sandbox/ui/queue/src/test/resources/org/richfaces/implicit-global-queue.xhtml
(rev 0)
+++
trunk/sandbox/ui/queue/src/test/resources/org/richfaces/implicit-global-queue.xhtml 2008-11-19
16:21:37 UTC (rev 11238)
@@ -0,0 +1,11 @@
+<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">
+ <body>
+ <f:view>
+ </f:view>
+ </body>
+</html>
Added: trunk/sandbox/ui/queue/src/test/resources/org/richfaces/legacy.xhtml
===================================================================
--- trunk/sandbox/ui/queue/src/test/resources/org/richfaces/legacy.xhtml
(rev 0)
+++ trunk/sandbox/ui/queue/src/test/resources/org/richfaces/legacy.xhtml 2008-11-19
16:21:37 UTC (rev 11238)
@@ -0,0 +1,25 @@
+<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">
+ <body>
+ <f:view>
+ <script type="text/javascript">
+ XMLHttpRequest.defaultRequestTime = 5000;
+
+ function $(id) {
+ return document.getElementById(id);
+ }
+
+ var counter = 0;
+ var time = 0;
+ </script>
+ <h:form id="form">
+ <a4j:commandButton id="buttonDelayed" requestDelay="1000"
/>
+ <a4j:commandButton id="buttonIgnoreDupResponces"
ignoreDupResponses="true" oncomplete="counter++;time =
Timer.currentTime;"/>
+ </h:form>
+ </f:view>
+ </body>
+</html>
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-19
16:12:10 UTC (rev 11237)
+++ trunk/sandbox/ui/queue/src/test/resources/org/richfaces/simulation.js 2008-11-19
16:21:37 UTC (rev 11238)
@@ -85,38 +85,89 @@
}, this.time);
};
+SimulationContext.prototype.executeAfterDelay = function(code) {
+ Timer.addEventToTimer(function() {
+ code();
+ }, this.time);
+};
+
window.simulationContext = undefined;
-A4J.AJAX.SubmitQuery = function(query, options) {
- var request = {};
+window.XMLHttpRequest = function() {
+ this.requestTime = XMLHttpRequest.requestTime || 0;
+ this.data = XMLHttpRequest.data;
+
+ this.responseText = null;
+ this.responseXML = null;
+
+ this.readyState = 0;
+}
- var length = window.simulationContext.results.push({data: options.data, startTime:
Timer.currentTime});
-
- var timer = Timer.addEventToTimer(function() {
- if (request.timeoutTimer) {
- Timer.removeEventFromTimer(request.timeoutTimer);
- }
+window.XMLHttpRequest.UNSENT = 0;
+window.XMLHttpRequest.OPENED = 1;
+window.XMLHttpRequest.HEADERS_RECEIVED = 2;
+window.XMLHttpRequest.LOADING = 3;
+window.XMLHttpRequest.DONE = 4;
+
+XMLHttpRequest.prototype.abort = function() {
+ if (this.timerId) {
+ clearTimeout(this.timerId);
+ }
+
+ window.simulationContext.results[this.requestId].endTime = Timer.currentTime;
+ window.simulationContext.results[this.requestId].aborted = true;
+};
+
+XMLHttpRequest.prototype.getAllResponseHeaders = function() {
+ return "";
+};
+XMLHttpRequest.prototype.getResponseHeader = function(name) {
+ if ("Ajax-Response" == name) {
+ return "true";
+ }
+ return "";
+};
+XMLHttpRequest.prototype.open = function(method, url, async, user, password) {
+ this.readyState = XMLHttpRequest.OPENED;
+};
+
+XMLHttpRequest.prototype.send = function(contentType) {
+ var length = window.simulationContext.results.push({data: this.data, startTime:
Timer.currentTime});
+ this.requestId = length - 1;
+
+ var _this = this;
+ this.timerId = setTimeout(function() {
+ _this.status = 200;
+ _this.statusText = "Success";
+ _this.readyState = window.XMLHttpRequest.DONE;
+ _this.responseText = "<?xml version='1.0'?><html />";
- if (request.queue) {
- request.queue.pop();
- }
+ var doc = new ActiveXObject("MSXML.DOMDocument");
+ doc.loadXML(_this.responseText);
+ _this.responseXML = doc;
+
+ window.simulationContext.results[_this.requestId].endTime = Timer.currentTime;
+ _this.onreadystatechange();
+ }, this.requestTime);
+};
- window.simulationContext.results[length - 1].endTime = Timer.currentTime;
+XMLHttpRequest.prototype.setRequestHeader = function(name, value) {
- }, options.requestTime);
-
- if (options.timeout) {
- request.timeoutTimer = Timer.addEventToTimer(function() {
- Timer.removeEventFromTimer(timer);
- if (request.queue) {
- request.queue.pop();
- }
-
- window.simulationContext.results[length - 1].timedOut = true;
- window.simulationContext.results[length - 1].endTime = Timer.currentTime;
- }, options.timeout);
+};
+
+var oldSubmitQuery = A4J.AJAX.SubmitQuery;
+
+A4J.AJAX.SubmitQuery = function(query, options) {
+ XMLHttpRequest.requestTime = options.requestTime || XMLHttpRequest.defaultRequestTime;
+ XMLHttpRequest.data = options.data;
+
+ try {
+ var req = oldSubmitQuery.apply(this, arguments);
+
+ return req;
+ } finally {
+ XMLHttpRequest.requestTime = undefined;
+ XMLHttpRequest.data = undefined;
}
+}
- return request;
-}
-