Author: andrei_exadel
Date: 2008-07-11 10:39:21 -0400 (Fri, 11 Jul 2008)
New Revision: 9531
Added:
trunk/test-applications/seleniumTest/src/main/java/org/ajax4jsf/bean/ListShuttleBean.java
trunk/test-applications/seleniumTest/src/main/java/org/ajax4jsf/model/ListShuttleConverter.java
trunk/test-applications/seleniumTest/src/main/java/org/ajax4jsf/model/ListShuttleItem.java
trunk/test-applications/seleniumTest/src/main/webapp/pages/listShuttle/
trunk/test-applications/seleniumTest/src/main/webapp/pages/listShuttle/listShuttleTest.xhtml
trunk/test-applications/seleniumTest/src/test/java/org/richfaces/testng/ListShuttleTest.java
Modified:
trunk/test-applications/seleniumTest/src/main/java/org/ajax4jsf/bean/IndexBean.java
trunk/test-applications/seleniumTest/src/main/webapp/WEB-INF/faces-config.xml
Log:
List shuttle Test
Modified:
trunk/test-applications/seleniumTest/src/main/java/org/ajax4jsf/bean/IndexBean.java
===================================================================
---
trunk/test-applications/seleniumTest/src/main/java/org/ajax4jsf/bean/IndexBean.java 2008-07-11
13:54:52 UTC (rev 9530)
+++
trunk/test-applications/seleniumTest/src/main/java/org/ajax4jsf/bean/IndexBean.java 2008-07-11
14:39:21 UTC (rev 9531)
@@ -82,6 +82,8 @@
list.add(new ComponentItem("<a4j:jsFunction>",
"jsFunction/jsFunctionTest.xhtml"));
list.add(new ComponentItem("<rich:spacer>",
"spacer/spacerTest.xhtml"));
list.add(new ComponentItem("<a4j:loadBundle>",
"loadBundle/loadBundle.xhtml"));
+ list.add(new ComponentItem("<rich:toolTip>",
"toolTip/toolTip.xhtml"));
+ list.add(new ComponentItem("<rich:listShuttle>",
"listShuttle/listShuttleTest.xhtml"));
sortList();
Added:
trunk/test-applications/seleniumTest/src/main/java/org/ajax4jsf/bean/ListShuttleBean.java
===================================================================
---
trunk/test-applications/seleniumTest/src/main/java/org/ajax4jsf/bean/ListShuttleBean.java
(rev 0)
+++
trunk/test-applications/seleniumTest/src/main/java/org/ajax4jsf/bean/ListShuttleBean.java 2008-07-11
14:39:21 UTC (rev 9531)
@@ -0,0 +1,44 @@
+package org.ajax4jsf.bean;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.faces.event.ActionEvent;
+
+import org.ajax4jsf.model.ListShuttleItem;
+
+public class ListShuttleBean {
+ private List<ListShuttleItem> items = null;
+ private List<ListShuttleItem> freeItems = null;
+ public ListShuttleBean() {
+ init();
+ }
+
+ private void init() {
+ items = new ArrayList<ListShuttleItem>();
+ freeItems = new ArrayList<ListShuttleItem>();
+ for (int i = 0; i < 5; i++) {
+ ListShuttleItem item = new ListShuttleItem(i + 1, "Item" + (i + 1));
+ freeItems.add(item);
+ }
+ }
+
+ public void reset(ActionEvent event) {
+ init();
+ }
+
+ public List<ListShuttleItem> getItems() {
+ return items;
+ }
+ public void setItems(List<ListShuttleItem> items) {
+ this.items = items;
+ }
+
+ public List<ListShuttleItem> getFreeItems() {
+ return freeItems;
+ }
+
+ public void setFreeItems(List<ListShuttleItem> freeItems) {
+ this.freeItems = freeItems;
+ }
+}
Added:
trunk/test-applications/seleniumTest/src/main/java/org/ajax4jsf/model/ListShuttleConverter.java
===================================================================
---
trunk/test-applications/seleniumTest/src/main/java/org/ajax4jsf/model/ListShuttleConverter.java
(rev 0)
+++
trunk/test-applications/seleniumTest/src/main/java/org/ajax4jsf/model/ListShuttleConverter.java 2008-07-11
14:39:21 UTC (rev 9531)
@@ -0,0 +1,23 @@
+package org.ajax4jsf.model;
+
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+
+public class ListShuttleConverter implements javax.faces.convert.Converter{
+
+ public Object getAsObject(FacesContext context, UIComponent component,
+ String value) {
+
+ int index = value.indexOf(':');
+ return new ListShuttleItem(Integer.valueOf(value.substring(0, index)),
value.substring(index + 1));
+ }
+
+ public String getAsString(FacesContext context, UIComponent component,
+ Object value) {
+ ListShuttleItem optionItem = (ListShuttleItem) value;
+ return optionItem.getNumder() + ":" + optionItem.getName();
+
+ }
+
+
+}
\ No newline at end of file
Added:
trunk/test-applications/seleniumTest/src/main/java/org/ajax4jsf/model/ListShuttleItem.java
===================================================================
---
trunk/test-applications/seleniumTest/src/main/java/org/ajax4jsf/model/ListShuttleItem.java
(rev 0)
+++
trunk/test-applications/seleniumTest/src/main/java/org/ajax4jsf/model/ListShuttleItem.java 2008-07-11
14:39:21 UTC (rev 9531)
@@ -0,0 +1,79 @@
+package org.ajax4jsf.model;
+
+import java.io.Serializable;
+
+public class ListShuttleItem implements Serializable {
+
+ private static final long serialVersionUID = -7540977992693127759L;
+
+ private Integer numder;
+
+ private String name;
+
+ public ListShuttleItem() {
+
+ }
+
+ public ListShuttleItem(Integer i, String name) {
+ this.numder = i;
+ this.name = name;
+ }
+
+ /**
+ * @return the numder
+ */
+ public Integer getNumder() {
+ return numder;
+ }
+
+ /**
+ * @param numder the numder to set
+ */
+ public void setNumder(Integer numder) {
+ this.numder = numder;
+ }
+
+ /**
+ * @return the name
+ */
+ public String getName() {
+ return name;
+ }
+
+ /**
+ * @param name the name to set
+ */
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ /* (non-Javadoc)
+ * @see java.lang.Object#equals(java.lang.Object)
+ */
+ @Override
+ public boolean equals(Object obj) {
+ if (obj == null) {
+ return false;
+ }
+ if (!(obj instanceof ListShuttleItem)) {
+ return false;
+ }
+ ListShuttleItem o = (ListShuttleItem)obj;
+ if (!o.name.equals(name) || !o.numder.equals(numder)) {
+ return false;
+ }
+ return true;
+ }
+
+ /* (non-Javadoc)
+ * @see java.lang.Object#hashCode()
+ */
+ @Override
+ public int hashCode() {
+ return name.hashCode() + numder;
+ }
+
+
+
+
+}
Modified: trunk/test-applications/seleniumTest/src/main/webapp/WEB-INF/faces-config.xml
===================================================================
---
trunk/test-applications/seleniumTest/src/main/webapp/WEB-INF/faces-config.xml 2008-07-11
13:54:52 UTC (rev 9530)
+++
trunk/test-applications/seleniumTest/src/main/webapp/WEB-INF/faces-config.xml 2008-07-11
14:39:21 UTC (rev 9531)
@@ -5,13 +5,21 @@
<faces-config>
- <application>
+ <application>
+ <locale-config>
+ <default-locale>en_US</default-locale>
+ </locale-config>
<view-handler>com.sun.facelets.FaceletViewHandler</view-handler>
<message-bundle>
org.ajax4jsf.message.resources
- </message-bundle>
+ </message-bundle>
</application>
+ <converter>
+ <converter-id>listShuttleconverter</converter-id>
+
<converter-class>org.ajax4jsf.model.ListShuttleConverter</converter-class>
+ </converter>
+
<managed-bean>
<managed-bean-name>configurator</managed-bean-name>
<managed-bean-class>org.ajax4jsf.bean.Configurator</managed-bean-class>
@@ -183,6 +191,11 @@
<managed-bean-class>org.ajax4jsf.bean.LoadBundleTestBean</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
+ <managed-bean>
+ <managed-bean-name>listShuttle</managed-bean-name>
+
<managed-bean-class>org.ajax4jsf.bean.ListShuttleBean</managed-bean-class>
+ <managed-bean-scope>session</managed-bean-scope>
+ </managed-bean>
<navigation-rule>
<from-view-id>/pages/ajaxInclude/step1.xhtml</from-view-id>
<navigation-case>
Added:
trunk/test-applications/seleniumTest/src/main/webapp/pages/listShuttle/listShuttleTest.xhtml
===================================================================
---
trunk/test-applications/seleniumTest/src/main/webapp/pages/listShuttle/listShuttleTest.xhtml
(rev 0)
+++
trunk/test-applications/seleniumTest/src/main/webapp/pages/listShuttle/listShuttleTest.xhtml 2008-07-11
14:39:21 UTC (rev 9531)
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html
xmlns="http://www.w3.org/1999/xhtml"
+
xmlns:a4j="http://richfaces.org/a4j"
+
xmlns:rich="http://richfaces.org/rich"
+
xmlns:h="http://java.sun.com/jsf/html"
+
xmlns:f="http://java.sun.com/jsf/core"
+
xmlns:ui="http://java.sun.com/jsf/facelets">
+
+<ui:composition template="#{templateBean.template}">
+ <ui:define name="style">
+
+ </ui:define>
+ <ui:define name="component">
+ <a4j:outputPanel>
+ <h:messages></h:messages>
+ </a4j:outputPanel>
+ <h:form id="_form">
+ <rich:listShuttle id="ls"
sourceValue="#{listShuttle.freeItems}"
+ targetValue="#{listShuttle.items}" var="items"
listHeight="300"
+ listWidth="300" sourceCaptionLabel="Available Items"
+ targetCaptionLabel="Currently Active Items"
+ converter="listShuttleconverter">
+ <rich:column width="18">
+ <h:outputLink value="#">
+ <h:outputText
value="#{items.numder}"></h:outputText>
+ </h:outputLink>
+ </rich:column>
+ <rich:column>
+ <h:outputText
value="#{items.name}"></h:outputText>
+ </rich:column>
+ </rich:listShuttle>
+ <a4j:commandLink id="reset" value="Reset"
actionListener="#{listShuttle.reset}"
reRender="ls"></a4j:commandLink><br/>
+ <a4j:commandLink id="submit" value="Submit"
reRender="ls"></a4j:commandLink>
+ </h:form>
+ </ui:define>
+</ui:composition>
+</html>
\ No newline at end of file
Added:
trunk/test-applications/seleniumTest/src/test/java/org/richfaces/testng/ListShuttleTest.java
===================================================================
---
trunk/test-applications/seleniumTest/src/test/java/org/richfaces/testng/ListShuttleTest.java
(rev 0)
+++
trunk/test-applications/seleniumTest/src/test/java/org/richfaces/testng/ListShuttleTest.java 2008-07-11
14:39:21 UTC (rev 9531)
@@ -0,0 +1,207 @@
+/**
+ *
+ */
+package org.richfaces.testng;
+
+import org.ajax4jsf.template.Template;
+import org.richfaces.SeleniumTestBase;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+/**
+ * @author Andrey Markavstov
+ *
+ */
+public class ListShuttleTest extends SeleniumTestBase {
+
+ String parentId;
+ String availebleListId;
+ String targetListId;
+ String copyAllId;
+ String copyId;
+ String removeId;
+ String removeAllId;
+ String firstId;
+ String upId;
+ String downId;
+ String lastId ;
+ String submitId;
+ String resetId;
+
+
+ @Test(dataProvider = "templates")
+ public void testListShuttleComponent(Template template) {
+ _testListShuttleComponent(template);
+ }
+
+ private void init() {
+ parentId = getParentId() + "_form:";
+ availebleListId = parentId + "lstbody";
+ targetListId = parentId + "lstlTbody";
+ copyAllId = parentId + "lscopyAll";
+ copyId = parentId + "lscopy";
+ removeId = parentId + "lsremove";
+ removeAllId = parentId + "lsremoveAll";
+ firstId = parentId + "lsfirst";
+ upId = parentId + "lsup";
+ downId = parentId + "lsdown";
+ lastId = parentId + "lslast";
+ submitId = parentId + "submit";
+ resetId = parentId + "reset";
+
+ }
+
+
+ private void _testListShuttleComponent(Template template) {
+ renderPage(template);
+ init();
+ reset();
+
+ // Check count
+ _assertTableRowsCount(availebleListId, 5);
+ _assertTableRowsCount(targetListId, 0);
+
+ // Copy all and check count
+ clickById(copyAllId);
+ _assertTableRowsCount(availebleListId, 0);
+ _assertTableRowsCount(targetListId, 5);
+
+ // Remove all and check count
+ clickById(removeAllId);
+ _assertTableRowsCount(availebleListId, 5);
+ _assertTableRowsCount(targetListId, 0);
+
+ try {
+ // Copy 1st & 2nd item
+ _doItemAction(parentId + "ls:0", copyId, "Copy");
+ _doItemAction(parentId + "ls:1", copyId, "Copy");
+ _doItemAction(parentId + "ls:2", copyId, "Copy");
+
+ // Check count
+ _assertTableRowsCount(availebleListId, 2);
+ _assertTableRowsCount(targetListId, 3);
+ }catch (Exception e) {
+ Assert.fail("Copy does nto work. cause: " + e);
+ }
+
+ // Check posting to server
+ _checkDataPost2Server(2,3);
+
+ // Check ordering
+ _checkItemText("1Item1", targetListId, 0);
+ _checkItemText("2Item2", targetListId, 1);
+ _checkItemText("3Item3", targetListId, 2);
+
+ // Move the first to to the last
+ _doItemAction(parentId + "ls:t0", downId, "Down");
+ _checkItemText("2Item2", targetListId, 0);
+ _checkItemText("1Item1", targetListId, 1);
+ _checkItemText("3Item3", targetListId, 2);
+
+
+ _doItemAction(parentId + "ls:t0", lastId, "Last");
+ _checkItemText("2Item2", targetListId, 0);
+ _checkItemText("3Item3", targetListId, 1);
+ _checkItemText("1Item1", targetListId, 2);
+
+ _doItemAction(parentId + "ls:t2", firstId, "first");
+ _checkItemText("3Item3", targetListId, 0);
+ _checkItemText("2Item2", targetListId, 1);
+ _checkItemText("1Item1", targetListId, 2);
+
+ _doItemAction(parentId + "ls:t0", upId, "Up");
+ _checkItemText("3Item3", targetListId, 0);
+ _checkItemText("1Item1", targetListId, 1);
+ _checkItemText("2Item2", targetListId, 2);
+
+ _doItemAction(parentId + "ls:t1", removeId, "Remove");
+ _assertTableRowsCount(targetListId, 2);
+ _checkItemText("3Item3", targetListId, 0);
+ _checkItemText("1Item1", targetListId, 1);
+
+
+ }
+
+
+
+ private void reset() {
+ clickAjaxCommandAndWait(resetId);
+ }
+
+ private void _assertTableRowsCount(String tbId, int rows) {
+ writeStatus("Check items count for list id : " + tbId);
+ StringBuffer b = new StringBuffer("$('");
+ b.append(tbId);
+ b.append("').rows.length");
+ String l = runScript(b.toString());
+ int r;
+ try {
+ r = Integer.parseInt(l);
+ if (r != rows) {
+ writeStatus("List shuttle test failed. Incorrect list item count in table id:
" + tbId, true);
+ Assert.fail("List shuttle test failed. Incorrect list item count in table id:
" + tbId);
+ }
+ }catch (Exception e) {
+ writeStatus("List shuttle test failed. cause: " + e.getMessage(), true);
+ Assert.fail("List shuttle test failed. cause: " + e);
+ }
+ }
+
+ private void _doItemAction(String itemId, String actionId, String actionName) {
+ writeStatus(actionName + " the item id: " + itemId);
+ _selectItem(itemId);
+ clickById(actionId);
+ }
+
+ private void _checkDataPost2Server(int availableCount, int targetCount) {
+ writeStatus("Rerender form. List items should be changed.");
+ clickAjaxCommandAndWait(submitId);
+
+ try {
+ _assertTableRowsCount(availebleListId, availableCount);
+ _assertTableRowsCount(targetListId, targetCount);
+ } catch (Exception e) {
+ writeStatus("Data was post to server incorrectly. List data before rerendering
does not match after", true);
+ Assert.fail("Data was post to server incorrectly. List data before rerendering
does not match after. Cause: " + e);
+ }
+ }
+
+ private void _selectItem(String itemId) {
+ writeStatus("Select item id: " + itemId);
+ try {
+ clickById(itemId);
+ }catch (Exception e) {
+ writeStatus("Selection item id: " + itemId + " failed.");
+ Assert.fail("List shuttle test failed. No item was found. Item id: " +
itemId);
+ }
+ }
+
+ private void _checkItemText(String text, String listId, int i) {
+ StringBuffer b = new StringBuffer("$('");
+ b.append(listId);
+ b.append("').rows[");
+ b.append(i);
+ b.append("].id");
+
+ String id = null;
+ try {
+ id = runScript(b.toString());
+ AssertTextEquals(id, text, "Invalid item's text");
+ }catch (Exception e) {
+ writeStatus("Invalid item text. Item id: " + id);
+ Assert.fail("List shuttle test failed. Item id: " + id);
+ }
+ }
+
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.richfaces.SeleniumTestBase#getTestUrl()
+ */
+ @Override
+ public String getTestUrl() {
+ return "pages/listShuttle/listShuttleTest.xhtml";
+ }
+
+}