[richfaces-svn-commits] JBoss Rich Faces SVN: r18833 - in modules/tests/metamer/trunk: ftest-source/src/main/java/org/richfaces/tests/metamer/ftest/a4jStatus and 1 other directories.

richfaces-svn-commits at lists.jboss.org richfaces-svn-commits at lists.jboss.org
Thu Aug 19 19:24:47 EDT 2010


Author: lfryc at redhat.com
Date: 2010-08-19 19:24:46 -0400 (Thu, 19 Aug 2010)
New Revision: 18833

Added:
   modules/tests/metamer/trunk/ftest-source/src/main/java/org/richfaces/tests/metamer/ftest/a4jStatus/TestReferencedUsage.java
Modified:
   modules/tests/metamer/trunk/application/src/main/webapp/components/a4jStatus/referencedUsage.xhtml
   modules/tests/metamer/trunk/ftest-source/src/main/java/org/richfaces/tests/metamer/ftest/a4jStatus/AbstracStatusTest.java
   modules/tests/metamer/trunk/ftest-source/src/main/resources/org/richfaces/tests/metamer/ftest/a4jStatus/status-halt.js
Log:
a4j:status - added tests for referenced usage (RFPL-735)

Modified: modules/tests/metamer/trunk/application/src/main/webapp/components/a4jStatus/referencedUsage.xhtml
===================================================================
--- modules/tests/metamer/trunk/application/src/main/webapp/components/a4jStatus/referencedUsage.xhtml	2010-08-19 23:23:34 UTC (rev 18832)
+++ modules/tests/metamer/trunk/application/src/main/webapp/components/a4jStatus/referencedUsage.xhtml	2010-08-19 23:24:46 UTC (rev 18833)
@@ -46,7 +46,7 @@
             <h:panelGrid columns="2">
 
                 <h:commandButton id="button1" value="Named status 1" onclick="statusFunction1(); return false;" />
-                <a4j:status name="status1">
+                <a4j:status id="status1" name="status1">
                 <f:facet name="start">
                     <h:outputText id="status1TextStart" style="font-size: large; color: red;" value="START" />
                 </f:facet>
@@ -61,7 +61,7 @@
             </a4j:status>
 
                 <h:commandButton id="button2" value="Named status 2" onclick="statusFunction2(); return false;" />
-                <a4j:status name="status2">
+                <a4j:status id="status2" name="status2">
                     <f:facet name="start">
                         <h:outputText id="status2TextStart" style="font-size: large; color: red;" value="START" />
                     </f:facet>

Modified: modules/tests/metamer/trunk/ftest-source/src/main/java/org/richfaces/tests/metamer/ftest/a4jStatus/AbstracStatusTest.java
===================================================================
--- modules/tests/metamer/trunk/ftest-source/src/main/java/org/richfaces/tests/metamer/ftest/a4jStatus/AbstracStatusTest.java	2010-08-19 23:23:34 UTC (rev 18832)
+++ modules/tests/metamer/trunk/ftest-source/src/main/java/org/richfaces/tests/metamer/ftest/a4jStatus/AbstracStatusTest.java	2010-08-19 23:24:46 UTC (rev 18833)
@@ -64,11 +64,11 @@
     }
 
     void waitForHalt() {
-        selenium.waitForCondition(js("selenium.browserbot.getCurrentWindow().Metamer.halt == true"));
+        selenium.waitForCondition(js("selenium.browserbot.getCurrentWindow().Metamer.waitForHalt()"));
     }
 
     void unhalt() {
-        selenium.getEval(js("selenium.browserbot.getCurrentWindow().Metamer.halt = false"));
+        selenium.getEval(js("selenium.browserbot.getCurrentWindow().Metamer.unhalt()"));
     }
 
     void enableHalt() {

Added: modules/tests/metamer/trunk/ftest-source/src/main/java/org/richfaces/tests/metamer/ftest/a4jStatus/TestReferencedUsage.java
===================================================================
--- modules/tests/metamer/trunk/ftest-source/src/main/java/org/richfaces/tests/metamer/ftest/a4jStatus/TestReferencedUsage.java	                        (rev 0)
+++ modules/tests/metamer/trunk/ftest-source/src/main/java/org/richfaces/tests/metamer/ftest/a4jStatus/TestReferencedUsage.java	2010-08-19 23:24:46 UTC (rev 18833)
@@ -0,0 +1,135 @@
+/*******************************************************************************
+ * JBoss, Home of Professional Open Source
+ * Copyright 2010, Red Hat, Inc. and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software 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 software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ *******************************************************************************/
+package org.richfaces.tests.metamer.ftest.a4jStatus;
+
+import static org.jboss.test.selenium.utils.URLUtils.buildUrl;
+import static org.testng.Assert.assertEquals;
+
+import java.net.URL;
+
+import org.jboss.test.selenium.locator.JQueryLocator;
+import org.jboss.test.selenium.waiting.retrievers.TextRetriever;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+/**
+ * @author <a href="mailto:lfryc at redhat.com">Lukas Fryc</a>
+ * @version $Revision$
+ */
+public class TestReferencedUsage extends AbstracStatusTest {
+
+    JQueryLocator status1 = pjq("span[id$=status1]");
+    JQueryLocator status2 = pjq("span[id$=status2]");
+
+    TextRetriever retrieveStatus1 = retrieveText.locator(status1);
+    TextRetriever retrieveStatus2 = retrieveText.locator(status2);
+
+    @Override
+    public URL getTestUrl() {
+        return buildUrl(contextPath, "faces/components/a4jStatus/referencedUsage.xhtml");
+    }
+
+    @BeforeMethod
+    public void installStatusExtensions() {
+        super.installStatusExtensions();
+    }
+
+    @Test
+    public void testClickBothButtonsInSequence() {
+        enableHalt();
+        selenium.click(button1);
+        waitForHalt();
+        assertEquals(retrieveStatus1.retrieve(), "START");
+        assertEquals(retrieveStatus2.retrieve(), "STOP");
+        unhalt();
+        waitAjax.waitForChange("START", retrieveStatus1);
+        selenium.click(button2);
+        waitForHalt();
+        assertEquals(retrieveStatus1.retrieve(), "STOP");
+        assertEquals(retrieveStatus2.retrieve(), "START");
+        unhalt();
+        waitAjax.waitForChange("START", retrieveStatus2);
+        assertEquals(retrieveStatus1.retrieve(), "STOP");
+        assertEquals(retrieveStatus2.retrieve(), "STOP");
+        disableHalt();
+    }
+
+    @Test
+    public void testClickBothButtonsImmediately() {
+        enableHalt();
+        selenium.click(button1);
+        selenium.click(button2);
+        waitForHalt();
+        assertEquals(retrieveStatus1.retrieve(), "START");
+        assertEquals(retrieveStatus2.retrieve(), "STOP");
+        unhalt();
+        waitForHalt();
+        assertEquals(retrieveStatus1.retrieve(), "STOP");
+        assertEquals(retrieveStatus2.retrieve(), "START");
+        unhalt();
+        waitAjax.waitForChange("START", retrieveStatus2);
+        assertEquals(retrieveStatus1.retrieve(), "STOP");
+        assertEquals(retrieveStatus2.retrieve(), "STOP");
+        disableHalt();
+    }
+
+    @Test
+    public void testClickFirstButtonThenSecondButtonThenAgainFirstButtonImmediately() {
+        enableHalt();
+        selenium.click(button1);
+        selenium.click(button2);
+        selenium.click(button1);
+        waitForHalt();
+        assertEquals(retrieveStatus1.retrieve(), "START");
+        assertEquals(retrieveStatus2.retrieve(), "STOP");
+        unhalt();
+        waitForHalt();
+        assertEquals(retrieveStatus1.retrieve(), "START");
+        assertEquals(retrieveStatus2.retrieve(), "STOP");
+        unhalt();
+        waitAjax.waitForChange("START", retrieveStatus1);
+        assertEquals(retrieveStatus1.retrieve(), "STOP");
+        assertEquals(retrieveStatus2.retrieve(), "STOP");
+        disableHalt();
+    }
+
+    @Test
+    public void testDoubleClick() {
+        enableHalt();
+        selenium.click(button1);
+        selenium.click(button2);
+        selenium.click(button1);
+        waitForHalt();
+        assertEquals(retrieveStatus1.retrieve(), "START");
+        assertEquals(retrieveStatus2.retrieve(), "STOP");
+        unhalt();
+        waitForHalt();
+        assertEquals(retrieveStatus1.retrieve(), "START");
+        assertEquals(retrieveStatus2.retrieve(), "STOP");
+        unhalt();
+        waitAjax.waitForChange("START", retrieveStatus1);
+        assertEquals(retrieveStatus1.retrieve(), "STOP");
+        assertEquals(retrieveStatus2.retrieve(), "STOP");
+        disableHalt();
+    }
+
+}

Modified: modules/tests/metamer/trunk/ftest-source/src/main/resources/org/richfaces/tests/metamer/ftest/a4jStatus/status-halt.js
===================================================================
--- modules/tests/metamer/trunk/ftest-source/src/main/resources/org/richfaces/tests/metamer/ftest/a4jStatus/status-halt.js	2010-08-19 23:23:34 UTC (rev 18832)
+++ modules/tests/metamer/trunk/ftest-source/src/main/resources/org/richfaces/tests/metamer/ftest/a4jStatus/status-halt.js	2010-08-19 23:24:46 UTC (rev 18833)
@@ -20,31 +20,55 @@
  * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
  */
 var Metamer = {
+	halts : new Array(),
+	sequenceId : 0,
+	haltIterator : 0,
 	haltEnabled : false,
-	halt : false,
-	callback : null,
-	object : null,
-	content : null,
-	wait : function() {
-		if (Metamer.haltEnabled && Metamer.halt) {
-			setTimeout("Metamer.wait()", 100);
+	passes : 0,
+	wait : function(metamerHalt) {
+		Metamer.halts.push(metamerHalt);
+		Metamer._wait(metamerHalt.id);
+	},
+	_wait : function(id) {
+		var metamerHalt = Metamer.halts[id];
+		if (metamerHalt.halt) {
+			setTimeout("Metamer._wait(" + id + ")", 100);
 		} else {
-			Metamer.halt = false;
-			Metamer.callback();
+			metamerHalt.callback(metamerHalt.xhr, metamerHalt.content);
 		}
+	},
+	unhalt : function() {
+		var metamerHalt = Metamer.halts[Metamer.haltIterator];
+		Metamer.haltIterator += 1;
+		metamerHalt.halt = false;
+	},
+	isHalted : function() {
+		return Metamer.sequenceId > Metamer.haltIterator;
+	},
+	waitForHalt : function() {
+		return Metamer.sequenceId == 1 + Metamer.haltIterator;
 	}
 };
 
+var MetamerHalt = function(xhr, content, callback) {
+	this.halt = true;
+	this.xhr = xhr;
+	this.content = content;
+	this.callback = callback;
+	this.id = Metamer.sequenceId++;
+}
+
 Metamer.XHRWrapperInjection = {
 	send : RichFacesSelenium.XHRWrapper.prototype.send
 };
 
 RichFacesSelenium.XHRWrapper.prototype.send = function(content) {
-	Metamer.halt = true;
-	Metamer.object = this;
-	Metamer.content = content;
-	Metamer.callback = function() {
-		Metamer.XHRWrapperInjection.send.call(Metamer.object, Metamer.content);
-	};
-	Metamer.wait();
+	if (Metamer.haltEnabled) {
+		var metamerHalt = new MetamerHalt(this, content, function(xhr, content1) {
+			Metamer.XHRWrapperInjection.send.call(xhr, content1);
+		});
+		Metamer.wait(metamerHalt);
+	} else {
+		Metamer.XHRWrapperInjection.send.call(this, content);
+	}
 };
\ No newline at end of file



More information about the richfaces-svn-commits mailing list