2 new commits in iDempiere:
https://bitbucket.org/idempiere/idempiere/commits/0a0c66f9a3d6/
Changeset: 0a0c66f9a3d6
Branch: development
User: hengsin
Date: 2013-03-22 08:55:04
Summary: IDEMPIERE-92 Implement Selenium testing framework. Added context click support. Improvement to AdempiereIdGenerator for better determination of _zk_locator. Modify LogEventInterceptor to help the writing of fitnesse selenium script.
Affected #: 5 files
diff -r 102a00c7d26f3765d7656ac29b6d2f184095ecc6 -r 0a0c66f9a3d637b3693358b6176bdd17401865ae org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/AdempiereIdGenerator.java
--- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/AdempiereIdGenerator.java
+++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/AdempiereIdGenerator.java
@@ -68,32 +68,41 @@
if (id == null || id.length() == 0) {
locatorBuilder.append("@").append(getWidgetName(comp.getWidgetClass()));
- }
-
- Component parent = comp.getParent();
- while(parent != null) {
- //only include id space owner to ease converting test case to use zk id selector instead of uuid
- if (parent instanceof IdSpace) {
- id = parent.getId();
- if (id != null && id.length() > 0) {
- if (id.indexOf(" ") > 0) {
- String widgetName = getWidgetName(parent.getWidgetClass());
- locatorBuilder.insert(0, "@"+widgetName+"[id=\'"+id+"\'] ");
+ Component parent = comp.getParent();
+ while(parent != null) {
+ String parentLocator = parent.getWidgetAttribute(ZK_LOCATOR_ATTRIBUTE);
+ if (parentLocator != null && parentLocator.trim().length() > 0) {
+ locatorBuilder.insert(0, parentLocator+ " ");
+ break;
+ }
+ parent = parent.getParent();
+ }
+ } else {
+ Component parent = comp.getParent();
+ while(parent != null) {
+ //only include id space owner to ease converting test case to use zk id selector instead of uuid
+ if (parent instanceof IdSpace) {
+ id = parent.getId();
+ if (id != null && id.length() > 0) {
+ if (id.indexOf(" ") > 0) {
+ String widgetName = getWidgetName(parent.getWidgetClass());
+ locatorBuilder.insert(0, "@"+widgetName+"[id=\'"+id+"\'] ");
+ } else {
+ locatorBuilder.insert(0, "$"+id+" ");
+ }
} else {
- locatorBuilder.insert(0, "$"+id+" ");
- }
- } else {
- String attribute = parent.getWidgetAttribute(AdempiereWebUI.WIDGET_INSTANCE_NAME);
- if (attribute != null && attribute.length() > 0) {
- String widgetName = getWidgetName(parent.getWidgetClass());
- id = widgetName+"0"+attribute;
- locatorBuilder.insert(0, "@"+widgetName+"["+AdempiereWebUI.WIDGET_INSTANCE_NAME+"=\'"+attribute+"\'] ");
- } else {
- locatorBuilder.insert(0, "@"+getWidgetName(parent.getWidgetClass())+" ");
+ String attribute = parent.getWidgetAttribute(AdempiereWebUI.WIDGET_INSTANCE_NAME);
+ if (attribute != null && attribute.length() > 0) {
+ String widgetName = getWidgetName(parent.getWidgetClass());
+ id = widgetName+"0"+attribute;
+ locatorBuilder.insert(0, "@"+widgetName+"["+AdempiereWebUI.WIDGET_INSTANCE_NAME+"=\'"+attribute+"\'] ");
+ } else {
+ locatorBuilder.insert(0, "@"+getWidgetName(parent.getWidgetClass())+" ");
+ }
}
}
+ parent = parent.getParent();
}
- parent = parent.getParent();
}
comp.setWidgetAttribute(ZK_LOCATOR_ATTRIBUTE, locatorBuilder.toString());
@@ -154,31 +163,40 @@
if (id == null || id.length() == 0) {
locatorBuilder.append("@").append(getWidgetName(comp.getWidgetClass()));
- }
-
- Component parent = comp.getParent();
- while(parent != null) {
- //only include id space owner to ease converting test case to use zk id selector instead of uuid
- if (parent instanceof IdSpace) {
- id = parent.getId();
- if (id != null && id.length() > 0) {
- if (id.indexOf(" ") > 0) {
- String widgetName = getWidgetName(parent.getWidgetClass());
- locatorBuilder.insert(0, "@"+widgetName+"[id=\'"+id+"\'] ");
+ Component parent = comp.getParent();
+ while(parent != null) {
+ String parentLocator = parent.getWidgetAttribute(ZK_LOCATOR_ATTRIBUTE);
+ if (parentLocator != null && parentLocator.trim().length() > 0) {
+ locatorBuilder.insert(0, parentLocator+ " ");
+ break;
+ }
+ parent = parent.getParent();
+ }
+ } else {
+ Component parent = comp.getParent();
+ while(parent != null) {
+ //only include id space owner to ease converting test case to use zk id selector instead of uuid
+ if (parent instanceof IdSpace) {
+ id = parent.getId();
+ if (id != null && id.length() > 0) {
+ if (id.indexOf(" ") > 0) {
+ String widgetName = getWidgetName(parent.getWidgetClass());
+ locatorBuilder.insert(0, "@"+widgetName+"[id=\'"+id+"\'] ");
+ } else {
+ locatorBuilder.insert(0, "$"+id+" ");
+ }
} else {
- locatorBuilder.insert(0, "$"+id+" ");
- }
- } else {
- String attribute = parent.getWidgetAttribute(AdempiereWebUI.WIDGET_INSTANCE_NAME);
- if (attribute != null && attribute.length() > 0) {
- String widgetName = getWidgetName(parent.getWidgetClass());
- locatorBuilder.insert(0, "@"+widgetName+"["+AdempiereWebUI.WIDGET_INSTANCE_NAME+"=\'"+attribute+"\'] ");
- } else {
- locatorBuilder.insert(0, "@"+getWidgetName(parent.getWidgetClass())+" ");
+ String attribute = parent.getWidgetAttribute(AdempiereWebUI.WIDGET_INSTANCE_NAME);
+ if (attribute != null && attribute.length() > 0) {
+ String widgetName = getWidgetName(parent.getWidgetClass());
+ locatorBuilder.insert(0, "@"+widgetName+"["+AdempiereWebUI.WIDGET_INSTANCE_NAME+"=\'"+attribute+"\'] ");
+ } else {
+ locatorBuilder.insert(0, "@"+getWidgetName(parent.getWidgetClass())+" ");
+ }
}
}
+ parent = parent.getParent();
}
- parent = parent.getParent();
}
comp.setWidgetAttribute(ZK_LOCATOR_ATTRIBUTE, locatorBuilder.toString());
diff -r 102a00c7d26f3765d7656ac29b6d2f184095ecc6 -r 0a0c66f9a3d637b3693358b6176bdd17401865ae org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/UiLifeCycleListener.java
--- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/UiLifeCycleListener.java
+++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/UiLifeCycleListener.java
@@ -35,6 +35,7 @@
*/
@Override
public void afterComponentAttached(Component comp, Page page) {
+ AdempiereIdGenerator.updateZkLocatorAttribute(comp);
}
/* (non-Javadoc)
@@ -49,10 +50,7 @@
*/
@Override
public void afterComponentMoved(Component parent, Component child, Component prevparent) {
- String locator = child.getWidgetAttribute(AdempiereIdGenerator.ZK_LOCATOR_ATTRIBUTE);
- if (locator != null) {
- AdempiereIdGenerator.updateZkLocatorAttribute(child);
- }
+ AdempiereIdGenerator.updateZkLocatorAttribute(child);
}
/* (non-Javadoc)
diff -r 102a00c7d26f3765d7656ac29b6d2f184095ecc6 -r 0a0c66f9a3d637b3693358b6176bdd17401865ae org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/ADTabpanel.java
--- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/ADTabpanel.java
+++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/ADTabpanel.java
@@ -571,6 +571,7 @@
if (popupMenu != null)
{
popupMenu.addMenuListener((ContextMenuListener)editor);
+ popupMenu.setId(field.getColumnName()+"-popup");
this.appendChild(popupMenu);
if (!field.isFieldOnly())
{
@@ -585,9 +586,7 @@
{
popupMenu.addContextElement((XulElement) editor.getComponent());
}
- }
-
- popupMenu.setId(field.getColumnName()+"-popup");
+ }
}
}
}
diff -r 102a00c7d26f3765d7656ac29b6d2f184095ecc6 -r 0a0c66f9a3d637b3693358b6176bdd17401865ae org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/util/LogEventInterceptor.java
--- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/util/LogEventInterceptor.java
+++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/util/LogEventInterceptor.java
@@ -34,8 +34,9 @@
* @see org.zkoss.zk.ui.util.EventInterceptor#beforeProcessEvent(org.zkoss.zk.ui.event.Event)
*/
@Override
- public Event beforeProcessEvent(Event event) {
- System.out.println("beforeProcessEvent, event="+event.getName()+",target="+event.getTarget());
+ public Event beforeProcessEvent(Event event) {
+ String locator = event.getTarget() != null ? event.getTarget().getWidgetAttribute("_zk_locator") : "";
+ System.out.println("beforeProcessEvent, event="+event.getName()+",target="+event.getTarget()+",locator="+locator);
return event;
}
diff -r 102a00c7d26f3765d7656ac29b6d2f184095ecc6 -r 0a0c66f9a3d637b3693358b6176bdd17401865ae org.idempiere.ui.zk.selenium/src/fitlibrary/zk/ZkFixture.java
--- a/org.idempiere.ui.zk.selenium/src/fitlibrary/zk/ZkFixture.java
+++ b/org.idempiere.ui.zk.selenium/src/fitlibrary/zk/ZkFixture.java
@@ -9,6 +9,7 @@
import org.idempiere.ui.zk.selenium.Zk;
import
org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
+import org.openqa.selenium.interactions.Actions;
import fitlibrary.annotation.SimpleAction;
import fitlibrary.spider.AbstractSpiderFixture;
@@ -219,6 +220,14 @@
return widget.eval(webDriver, command);
}
+ @SimpleAction(wiki = "|''<i>context click</i>''|zk locator|", tooltip = "Open context menu")
+ public void contextClick(String locator) {
+ Widget widget = new Widget(locator);
+ WebElement element = widget.findElement(webDriver);
+ Actions actions = new Actions(webDriver);
+ actions.contextClick(element).build().perform();
+ }
+
/**
* Causes the currently executing thread to sleep for the specified number
* of milliseconds, subject to the precision and accuracy of system timers
https://bitbucket.org/idempiere/idempiere/commits/3b60eee091ab/
Changeset: 3b60eee091ab
Branch: development
User: hengsin
Date: 2013-03-22 08:56:57
Summary: Merge 1c913e23f51a
Affected #: 4 files
diff -r 0a0c66f9a3d637b3693358b6176bdd17401865ae -r 3b60eee091ab6f5fa2424c6b4fb1cf0c4c478521 org.adempiere.base/src/org/adempiere/process/UUIDGenerator.java
--- a/org.adempiere.base/src/org/adempiere/process/UUIDGenerator.java
+++ b/org.adempiere.base/src/org/adempiere/process/UUIDGenerator.java
@@ -23,6 +23,7 @@
import java.util.Arrays;
import java.util.List;
import java.util.UUID;
+import java.util.logging.Level;
import org.adempiere.exceptions.DBException;
import org.compiere.model.MColumn;
@@ -48,6 +49,9 @@
private String tableName;
+ /** Logger */
+ private static CLogger log = CLogger.getCLogger(UUIDGenerator.class);
+
/**
* @see org.compiere.process.SvrProcess#prepare()
*/
@@ -94,7 +98,7 @@
String columnName = PO.getUUIDColumnName(cTableName);
int AD_Column_ID = DB.getSQLValue(null, "SELECT AD_Column_ID FROM AD_Column Where AD_Table_ID = ? AND ColumnName = ?", AD_Table_ID, columnName);
if (AD_Column_ID <= 0) {
- System.out.println("Adding UUID to " + cTableName);
+ if (log.isLoggable(Level.INFO))
log.info("Adding UUID to " + cTableName);
count++;
//create column
MColumn mColumn = new MColumn(getCtx(), 0, null);
@@ -142,6 +146,10 @@
} else {
compositeKeys = Arrays.asList(table.getKeyColumns());
}
+ if ((compositeKeys == null || compositeKeys.size() == 0) && keyColumn == null) {
+ log.warning("Cannot update orphan table " + table.getTableName() + " (not ID neither parents)");
+ return;
+ }
if (compositeKeys == null) {
sql.append(keyColumn);
} else {
diff -r 0a0c66f9a3d637b3693358b6176bdd17401865ae -r 3b60eee091ab6f5fa2424c6b4fb1cf0c4c478521 org.adempiere.base/src/org/compiere/print/PrintData.java
--- a/org.adempiere.base/src/org/compiere/print/PrintData.java
+++ b/org.adempiere.base/src/org/compiere/print/PrintData.java
@@ -291,7 +291,7 @@
*/
public int getRowIndex()
{
- return m_matrix.getRowCount();
+ return m_matrix.getRowIndex();
} // getRowIndex
/**
diff -r 0a0c66f9a3d637b3693358b6176bdd17401865ae -r 3b60eee091ab6f5fa2424c6b4fb1cf0c4c478521 org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/acct/WAcctViewer.java
--- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/acct/WAcctViewer.java
+++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/acct/WAcctViewer.java
@@ -54,6 +54,7 @@
import org.compiere.model.MAcctSchema;
import org.compiere.model.MAcctSchemaElement;
import org.compiere.model.MColumn;
+import org.compiere.model.MFactAcct;
import org.compiere.model.X_AD_CtxHelp;
import org.compiere.model.X_C_AcctSchema_Element;
import org.compiere.report.core.RModel;
@@ -95,13 +96,13 @@
public class WAcctViewer extends Window implements EventListener<Event>
{
+ /**
+ *
+ */
+ private static final long serialVersionUID = 3440375640756094077L;
+
private static final String TITLE = "Posting";
- /**
- *
- */
- private static final long serialVersionUID = -223185724918504685L;
-
private static final int PAGE_SIZE = 1000;
/** State Info */
@@ -522,6 +523,7 @@
resultCenter.appendChild(table);
table.setHflex("1");
table.setVflex("1");
+ table.addEventListener(Events.ON_DOUBLE_CLICK, this);
pagingPanel = new South();
resultPanel.appendChild(pagingPanel);
@@ -758,6 +760,9 @@
ListModelTable model = new ListModelTable(list);
table.setModel(model);
}
+ else if (Events.ON_DOUBLE_CLICK.equals(e.getName()) && source instanceof Listbox && source == table) {
+ actionZoomFactAcct();
+ }
} // onEvent
private void actionExport() {
@@ -1309,6 +1314,20 @@
}
//
+ private void actionZoomFactAcct() {
+ int selected = table.getSelectedIndex();
+ if(selected == -1) return;
+
+ int factAcctIdColumn = m_rmodel.getColumnIndex("Fact_Acct_ID");
+ ListModelTable model = (ListModelTable) table.getListModel();
+ Integer faint = (Integer) model.getDataAt(selected, factAcctIdColumn);
+ if (faint != null) {
+ int fact_acct_ID = faint.intValue();
+
+ AEnv.zoom(MFactAcct.Table_ID, fact_acct_ID);
+ }
+ }
+
@Override
public void onPageAttached(Page newpage, Page oldpage) {
super.onPageAttached(newpage, oldpage);
diff -r 0a0c66f9a3d637b3693358b6176bdd17401865ae -r 3b60eee091ab6f5fa2424c6b4fb1cf0c4c478521 org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/acct/WAcctViewerData.java
--- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/acct/WAcctViewerData.java
+++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/acct/WAcctViewerData.java
@@ -561,6 +561,7 @@
rm.addColumn(new RColumn(ctx, "AD_Table_ID", DisplayType.TableDir));
rm.addColumn(new RColumn(ctx, "Record_ID", DisplayType.ID));
+ rm.addColumn(new RColumn(ctx, "Fact_Acct_ID", DisplayType.ID));
if (displayDocumentInfo)
{
rm.addColumn(new RColumn(ctx, "Description", DisplayType.String));