]> source.dussan.org Git - vaadin-framework.git/commitdiff
Default id should get overridden only if id has been specifically set 66/466/3
authorAnna Koskinen <anna@vaadin.com>
Fri, 7 Dec 2012 13:16:55 +0000 (15:16 +0200)
committerAnna Koskinen <anna@vaadin.com>
Fri, 7 Dec 2012 13:16:55 +0000 (15:16 +0200)
(#10179).

Change-Id: I102ca64648a88e70e88d9c546e8ea49de47451fb

WebContent/VAADIN/themes/tests-tickets/styles.css
client/src/com/vaadin/client/ui/AbstractComponentConnector.java
uitest/src/com/vaadin/tests/components/ui/IdOverrideTest.html [new file with mode: 0644]
uitest/src/com/vaadin/tests/components/ui/IdOverrideTest.java [new file with mode: 0644]
uitest/src/com/vaadin/tests/widgetset/client/IdTestLabelConnector.java [new file with mode: 0644]
uitest/src/com/vaadin/tests/widgetset/client/VIdTestLabel.java [new file with mode: 0644]
uitest/src/com/vaadin/tests/widgetset/server/IdTestLabel.java [new file with mode: 0644]

index 2bd6536e492685b5cbe15ec587caadce8e24878b..c1dd89d6b877fa05f20996989f899b6f215b130b 100644 (file)
        border-left: 10px solid blue;
 }
 
+/*****************************************************************************/
+/* Ticket 10179
+/*****************************************************************************/
+#default10179 {
+       color:red;
+}
+
+#set10179 {
+       color:blue;
+}
 
 /*****************************************************************************/
 /* The reference screenshots all have a white background                                        */
index 16b5adef81cac8676b158c7be93d8a6d588c7164..d11be76a809651b3d3995205365433110dfbf4f7 100644 (file)
@@ -17,6 +17,7 @@ package com.vaadin.client.ui;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Set;
 
 import com.google.gwt.dom.client.Element;
 import com.google.gwt.user.client.ui.Focusable;
@@ -53,6 +54,8 @@ public abstract class AbstractComponentConnector extends AbstractConnector
     private String lastKnownWidth = "";
     private String lastKnownHeight = "";
 
+    private boolean initialStateEvent = true;
+
     /**
      * The style names from getState().getStyles() which are currently applied
      * to the widget.
@@ -123,11 +126,13 @@ public abstract class AbstractComponentConnector extends AbstractConnector
     public void onStateChanged(StateChangeEvent stateChangeEvent) {
         ConnectorMap paintableMap = ConnectorMap.get(getConnection());
 
-        if (getState().id != null) {
-            getWidget().getElement().setId(getState().id);
-        } else {
-            getWidget().getElement().removeAttribute("id");
-
+        Set<String> changedProperties = stateChangeEvent.getChangedProperties();
+        if (changedProperties.contains("id")) {
+            if (getState().id != null) {
+                getWidget().getElement().setId(getState().id);
+            } else if (!initialStateEvent) {
+                getWidget().getElement().removeAttribute("id");
+            }
         }
 
         /*
@@ -164,6 +169,8 @@ public abstract class AbstractComponentConnector extends AbstractConnector
          */
 
         updateComponentSize();
+
+        initialStateEvent = false;
     }
 
     @Override
diff --git a/uitest/src/com/vaadin/tests/components/ui/IdOverrideTest.html b/uitest/src/com/vaadin/tests/components/ui/IdOverrideTest.html
new file mode 100644 (file)
index 0000000..3a38712
--- /dev/null
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://localhost:8888/run/com.vaadin.tests.components.ui.IdOverrideTest?restartApplication" />
+<title>IdOverrideTest</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">IdOverrideTest</td></tr>
+</thead><tbody>
+<tr>
+       <td>open</td>
+       <td>/run/com.vaadin.tests.components.ui.IdOverrideTest?restartApplication</td>
+       <td></td>
+</tr>
+<!-- Ensure the default components are present with correct ids -->
+<tr>
+       <td>assertElementPresent</td>
+       <td>default10179</td>
+       <td></td>
+</tr>
+<tr>
+       <td>assertElementPresent</td>
+       <td>set10179</td>
+       <td></td>
+</tr>
+<!-- Remove id from the middle component -->
+<tr>
+       <td>click</td>
+       <td>vaadin=runcomvaadintestscomponentsuiIdOverrideTest::PID_Stoggle/domChild[0]/domChild[0]</td>
+       <td></td>
+</tr>
+<tr>
+       <td>assertElementPresent</td>
+       <td>default10179</td>
+       <td></td>
+</tr>
+<tr>
+       <td>assertElementNotPresent</td>
+       <td>set10179</td>
+       <td></td>
+</tr>
+<!-- Re-add id to the middle component -->
+<tr>
+       <td>click</td>
+       <td>vaadin=runcomvaadintestscomponentsuiIdOverrideTest::PID_Stoggle/domChild[0]/domChild[0]</td>
+       <td></td>
+</tr>
+<tr>
+       <td>assertElementPresent</td>
+       <td>default10179</td>
+       <td></td>
+</tr>
+<tr>
+       <td>assertElementPresent</td>
+       <td>set10179</td>
+       <td></td>
+</tr>
+</tbody></table>
+</body>
+</html>
\ No newline at end of file
diff --git a/uitest/src/com/vaadin/tests/components/ui/IdOverrideTest.java b/uitest/src/com/vaadin/tests/components/ui/IdOverrideTest.java
new file mode 100644 (file)
index 0000000..eeadc89
--- /dev/null
@@ -0,0 +1,73 @@
+package com.vaadin.tests.components.ui;
+
+import com.vaadin.annotations.Theme;
+import com.vaadin.annotations.Widgetset;
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.shared.ui.MarginInfo;
+import com.vaadin.tests.components.AbstractTestUI;
+import com.vaadin.tests.widgetset.TestingWidgetSet;
+import com.vaadin.tests.widgetset.server.IdTestLabel;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.Label;
+
+@Widgetset(TestingWidgetSet.NAME)
+@Theme("tests-tickets")
+public class IdOverrideTest extends AbstractTestUI {
+
+    @Override
+    protected String getTestDescription() {
+        return "Id shouldn't get overridden unless specifically re-set.<br>"
+                + "First two are custom labels with a default id, third is an ordinary label for comparison.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 10179;
+    }
+
+    @Override
+    protected void setup(VaadinRequest request) {
+        getLayout().setSpacing(true);
+        getLayout().setMargin(new MarginInfo(true, false, false, false));
+
+        final IdTestLabel idTestLabel = new IdTestLabel("default id");
+        idTestLabel.setSizeUndefined();
+        addComponent(idTestLabel);
+
+        final IdTestLabel idTestLabelWithId = new IdTestLabel("set id");
+        idTestLabelWithId.setSizeUndefined();
+        idTestLabelWithId.setId("set10179");
+        idTestLabelWithId.setImmediate(true);
+        addComponent(idTestLabelWithId);
+
+        final Label label = new Label("no id");
+        label.setSizeUndefined();
+        addComponent(label);
+
+        Button button = new Button();
+        button.setCaption("Toggle");
+        button.addClickListener(new ClickListener() {
+
+            @Override
+            public void buttonClick(ClickEvent event) {
+                if (idTestLabelWithId.getId() == null) {
+                    idTestLabelWithId.setId("set10179");
+                    idTestLabelWithId.setValue("set id");
+                    idTestLabel.setValue("default id");
+                    label.setValue("no id");
+                } else {
+                    idTestLabelWithId.setId(null);
+                    idTestLabelWithId.setValue("removed id");
+                    idTestLabel.setValue("still default id");
+                    label.setValue("still no id");
+                }
+            }
+        });
+        button.setId("toggle");
+        button.setImmediate(true);
+        addComponent(button);
+    }
+
+}
diff --git a/uitest/src/com/vaadin/tests/widgetset/client/IdTestLabelConnector.java b/uitest/src/com/vaadin/tests/widgetset/client/IdTestLabelConnector.java
new file mode 100644 (file)
index 0000000..5683ef0
--- /dev/null
@@ -0,0 +1,18 @@
+package com.vaadin.tests.widgetset.client;
+
+import com.vaadin.client.ui.label.LabelConnector;
+import com.vaadin.shared.ui.Connect;
+
+/**
+ * Connects server-side <code>IdTestLabel</code> component to client-side
+ * {@link VIdTestLabel} component (#10179).
+ * 
+ */
+@Connect(com.vaadin.tests.widgetset.server.IdTestLabel.class)
+public class IdTestLabelConnector extends LabelConnector {
+
+    @Override
+    public VIdTestLabel getWidget() {
+        return (VIdTestLabel) super.getWidget();
+    }
+}
diff --git a/uitest/src/com/vaadin/tests/widgetset/client/VIdTestLabel.java b/uitest/src/com/vaadin/tests/widgetset/client/VIdTestLabel.java
new file mode 100644 (file)
index 0000000..52610e2
--- /dev/null
@@ -0,0 +1,15 @@
+package com.vaadin.tests.widgetset.client;
+
+import com.vaadin.client.ui.VLabel;
+
+/**
+ * Client-side implementation for IdTestLabel (#10179).
+ * 
+ */
+public class VIdTestLabel extends VLabel {
+
+    public VIdTestLabel() {
+        super();
+        getElement().setId("default10179");
+    }
+}
diff --git a/uitest/src/com/vaadin/tests/widgetset/server/IdTestLabel.java b/uitest/src/com/vaadin/tests/widgetset/server/IdTestLabel.java
new file mode 100644 (file)
index 0000000..c505151
--- /dev/null
@@ -0,0 +1,16 @@
+package com.vaadin.tests.widgetset.server;
+
+import com.vaadin.ui.Label;
+
+/**
+ * Label that has a default id <code>default10179</code> for the use of
+ * IdOverrideTest (#10179).
+ * 
+ */
+public class IdTestLabel extends Label {
+
+    public IdTestLabel(String caption) {
+        super(caption);
+    }
+
+}