]> source.dussan.org Git - vaadin-framework.git/commitdiff
selenium locator now works with subwindows
authorMatti Tahvonen <matti.tahvonen@itmill.com>
Wed, 6 May 2009 13:11:00 +0000 (13:11 +0000)
committerMatti Tahvonen <matti.tahvonen@itmill.com>
Wed, 6 May 2009 13:11:00 +0000 (13:11 +0000)
svn changeset:7639/svn branch:6.0

src/com/itmill/toolkit/terminal/gwt/client/ComponentLocator.java
src/com/itmill/toolkit/terminal/gwt/client/ui/IView.java

index c4f44c944009df7c0aaf66ca05df3fa46163ee03..fee12345aaac553bc1097c7997c6d80c474212d2 100644 (file)
@@ -1,5 +1,6 @@
 package com.itmill.toolkit.terminal.gwt.client;
 
+import java.util.ArrayList;
 import java.util.Iterator;
 
 import com.google.gwt.user.client.DOM;
@@ -7,6 +8,7 @@ import com.google.gwt.user.client.Element;
 import com.google.gwt.user.client.ui.HasWidgets;
 import com.google.gwt.user.client.ui.Widget;
 import com.itmill.toolkit.terminal.gwt.client.ui.IView;
+import com.itmill.toolkit.terminal.gwt.client.ui.IWindow;
 import com.itmill.toolkit.terminal.gwt.client.ui.SubPartAware;
 
 /**
@@ -217,6 +219,12 @@ public class ComponentLocator {
 
         if (w instanceof IView) {
             return "";
+        } else if (w instanceof IWindow) {
+            IWindow win = (IWindow) w;
+            ArrayList<IWindow> subWindowList = client.getView()
+                    .getSubWindowList();
+            int indexOfSubWindow = subWindowList.indexOf(win);
+            return PARENTCHILD_SEPARATOR + "IWindow[" + indexOfSubWindow + "]";
         }
 
         Widget parent = w.getParent();
@@ -225,7 +233,7 @@ public class ComponentLocator {
 
         String simpleName = Util.getSimpleName(w);
 
-        Iterator i = ((HasWidgets) parent).iterator();
+        Iterator<Widget> i = ((HasWidgets) parent).iterator();
         int pos = 0;
         while (i.hasNext()) {
             Object child = i.next();
@@ -262,12 +270,16 @@ public class ComponentLocator {
             } else if (w instanceof HasWidgets) {
                 HasWidgets parent = (HasWidgets) w;
 
-                String simpleName = Util.getSimpleName(parent);
+                String[] split = part.split("\\[");
 
-                Iterator i = parent.iterator();
+                Iterator<? extends Widget> i;
+                if (split[0].equals("IWindow")) {
+                    i = client.getView().getSubWindowList().iterator();
+                } else {
+                    i = parent.iterator();
+                }
 
                 boolean ok = false;
-                String[] split = part.split("\\[");
                 int pos = Integer.parseInt(split[1].substring(0, split[1]
                         .length() - 1));
                 // ApplicationConnection.getConsole().log(
@@ -275,7 +287,7 @@ public class ComponentLocator {
                 while (i.hasNext()) {
                     // ApplicationConnection.getConsole().log("- child found");
 
-                    Widget child = (Widget) i.next();
+                    Widget child = i.next();
                     String simpleName2 = Util.getSimpleName(child);
 
                     if (split[0].equals(simpleName2)) {
index 0c22da4a1ef231ad9cea6fc9d7d2a1903ab3bd05..b30a1eb8afe09c87e5eb728442e94e7468bad10e 100644 (file)
@@ -4,8 +4,10 @@
 
 package com.itmill.toolkit.terminal.gwt.client.ui;
 
+import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.Iterator;
+import java.util.LinkedHashSet;
 import java.util.Set;
 
 import com.google.gwt.dom.client.DivElement;
@@ -44,7 +46,7 @@ public class IView extends SimplePanel implements Container,
 
     private Paintable layout;
 
-    private final HashSet subWindows = new HashSet();
+    private final LinkedHashSet<IWindow> subWindows = new LinkedHashSet<IWindow>();
 
     private String id;
 
@@ -231,7 +233,8 @@ public class IView extends SimplePanel implements Container,
         layout.updateFromUIDL(childUidl, client);
 
         // Update subwindows
-        final HashSet removedSubWindows = new HashSet(subWindows);
+        final HashSet<IWindow> removedSubWindows = new HashSet<IWindow>(
+                subWindows);
 
         // Open new windows
         while ((childUidl = uidl.getChildUIDL(childIndex++)) != null) {
@@ -240,7 +243,7 @@ public class IView extends SimplePanel implements Container,
                 if (subWindows.contains(w)) {
                     removedSubWindows.remove(w);
                 } else {
-                    subWindows.add(w);
+                    subWindows.add((IWindow) w);
                 }
                 w.updateFromUIDL(childUidl, client);
             } else if ("actions".equals(childUidl.getTag())) {
@@ -282,8 +285,9 @@ public class IView extends SimplePanel implements Container,
         }
 
         // Close old windows
-        for (final Iterator rem = removedSubWindows.iterator(); rem.hasNext();) {
-            final IWindow w = (IWindow) rem.next();
+        for (final Iterator<IWindow> rem = removedSubWindows.iterator(); rem
+                .hasNext();) {
+            final IWindow w = rem.next();
             client.unregisterPaintable(w);
             subWindows.remove(w);
             w.hide();
@@ -551,7 +555,21 @@ public class IView extends SimplePanel implements Container,
     }
 
     public void updateCaption(Paintable component, UIDL uidl) {
-        // TODO Auto-generated method stub
+        // NOP Subwindows never draw caption for their first child (layout)
+    }
+
+    /**
+     * Return an iterator for current subwindows. This method is meant for
+     * testing purposes only.
+     * 
+     * @return
+     */
+    public ArrayList<IWindow> getSubWindowList() {
+        ArrayList<IWindow> windows = new ArrayList<IWindow>(subWindows.size());
+        for (IWindow widget : subWindows) {
+            windows.add(widget);
+        }
+        return windows;
     }
 
 }