aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJonatan Kronqvist <jonatan@vaadin.com>2014-05-09 08:18:21 +0300
committerJonatan Kronqvist <jonatan@vaadin.com>2014-05-09 08:21:48 +0300
commit7af883e7e74bc2193bcc0ddeff9ec47c945f7b16 (patch)
treee68fc9ed45df547ce9cbe5f4f70df576d5cda53b
parentf0d79d8959343dd19c71f8b69ffd7809a9138327 (diff)
parent9b3df561fe930f1d4903eeec525c663dc8288a33 (diff)
downloadvaadin-framework-7af883e7e74bc2193bcc0ddeff9ec47c945f7b16.tar.gz
vaadin-framework-7af883e7e74bc2193bcc0ddeff9ec47c945f7b16.zip
Merge branch 'master' into 7.2
* 9b3df56 - (origin/master, origin/HEAD, master) Actually close push connection in disconnect() (#13716) * f21c108 - Fix improper merge of 3d0ff32b from 7.1 to master (#13620) * 3184af5 - Convert the ComboBoxClosePopupRetainText test to TB4 to avoid false failures. * b136dd5 - Convert the AccordionClipsContent test to TB4 to avoid false failures. * 50ea89e - Update Atmosphere client. (#13727) * 78981f1 - Fix occasionally misplaced error indicators in Buttons (#13723) * 8fb9121 - Fix misleading message. Close does not always mean reconnect * 3d42856 - Removed irrelevant readme file Change-Id: I1c871160a47da3e720f2b7d06c5ab3601a17d053
-rw-r--r--client/src/com/vaadin/client/communication/AtmospherePushConnection.java2
-rw-r--r--client/src/com/vaadin/client/ui/button/ButtonConnector.java3
-rw-r--r--push/ivy.xml2
-rw-r--r--server/src/com/vaadin/server/communication/AtmospherePushConnection.java6
-rw-r--r--server/src/com/vaadin/server/communication/PushHandler.java47
-rw-r--r--shared/tests/src/readme.txt1
-rw-r--r--uitest/src/com/vaadin/tests/components/accordion/AccordionClipsContent.html57
-rw-r--r--uitest/src/com/vaadin/tests/components/accordion/AccordionClipsContentTest.java57
-rw-r--r--uitest/src/com/vaadin/tests/components/combobox/ComboBoxClosePopupRetainText.html80
-rw-r--r--uitest/src/com/vaadin/tests/components/combobox/ComboBoxClosePopupRetainTextTest.java60
-rw-r--r--uitest/src/com/vaadin/tests/push/PushWithPreserveOnRefresh.java48
-rw-r--r--uitest/src/com/vaadin/tests/push/PushWithPreserveOnRefreshTest.java38
12 files changed, 218 insertions, 183 deletions
diff --git a/client/src/com/vaadin/client/communication/AtmospherePushConnection.java b/client/src/com/vaadin/client/communication/AtmospherePushConnection.java
index f70f879b3a..48e17cde05 100644
--- a/client/src/com/vaadin/client/communication/AtmospherePushConnection.java
+++ b/client/src/com/vaadin/client/communication/AtmospherePushConnection.java
@@ -340,7 +340,7 @@ public class AtmospherePushConnection implements PushConnection {
}
protected void onClose(AtmosphereResponse response) {
- VConsole.log("Push connection closed, awaiting reconnection");
+ VConsole.log("Push connection closed");
state = State.CONNECT_PENDING;
}
diff --git a/client/src/com/vaadin/client/ui/button/ButtonConnector.java b/client/src/com/vaadin/client/ui/button/ButtonConnector.java
index eb5a3476f6..4220c3f5d1 100644
--- a/client/src/com/vaadin/client/ui/button/ButtonConnector.java
+++ b/client/src/com/vaadin/client/ui/button/ButtonConnector.java
@@ -66,8 +66,7 @@ public class ButtonConnector extends AbstractComponentConnector implements
getWidget().errorIndicatorElement
.setClassName("v-errorindicator");
}
- getWidget().wrapper.insertBefore(getWidget().errorIndicatorElement,
- getWidget().captionElement);
+ getWidget().wrapper.insertFirst(getWidget().errorIndicatorElement);
} else if (getWidget().errorIndicatorElement != null) {
getWidget().wrapper.removeChild(getWidget().errorIndicatorElement);
diff --git a/push/ivy.xml b/push/ivy.xml
index 2d13cc9964..a9c47841bd 100644
--- a/push/ivy.xml
+++ b/push/ivy.xml
@@ -3,7 +3,7 @@
<!-- Keep the version number in sync with build.xml -->
<!ENTITY atmosphere.runtime.version "2.1.2.vaadin2">
- <!ENTITY atmosphere.js.version "2.1.5.vaadin2">
+ <!ENTITY atmosphere.js.version "2.1.5.vaadin3">
]>
<ivy-module version="2.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
diff --git a/server/src/com/vaadin/server/communication/AtmospherePushConnection.java b/server/src/com/vaadin/server/communication/AtmospherePushConnection.java
index 4727720f4b..3eae848adc 100644
--- a/server/src/com/vaadin/server/communication/AtmospherePushConnection.java
+++ b/server/src/com/vaadin/server/communication/AtmospherePushConnection.java
@@ -287,6 +287,12 @@ public class AtmospherePushConnection implements PushConnection {
outgoingMessage = null;
}
+ try {
+ resource.close();
+ } catch (IOException e) {
+ getLogger()
+ .log(Level.INFO, "Error when closing push connection", e);
+ }
resource = null;
state = State.DISCONNECTED;
}
diff --git a/server/src/com/vaadin/server/communication/PushHandler.java b/server/src/com/vaadin/server/communication/PushHandler.java
index c6126f9d21..983ada3279 100644
--- a/server/src/com/vaadin/server/communication/PushHandler.java
+++ b/server/src/com/vaadin/server/communication/PushHandler.java
@@ -186,46 +186,6 @@ public class PushHandler extends AtmosphereResourceEventListenerAdapter {
}
};
- /**
- * Callback used when a connection is closed, either deliberately or because
- * an error occurred.
- */
- private final PushEventCallback disconnectCallback = new PushEventCallback() {
- @Override
- public void run(AtmosphereResource resource, UI ui) throws IOException {
- PushMode pushMode = ui.getPushConfiguration().getPushMode();
- AtmospherePushConnection connection = getConnectionForUI(ui);
-
- String id = resource.uuid();
-
- if (connection == null) {
- getLogger()
- .log(Level.WARNING,
- "Could not find push connection to close: {0} with transport {1}",
- new Object[] { id, resource.transport() });
- } else {
- if (!pushMode.isEnabled()) {
- /*
- * The client is expected to close the connection after push
- * mode has been set to disabled.
- */
- getLogger().log(Level.FINER,
- "Connection closed for resource {0}", id);
- } else {
- /*
- * Unexpected cancel, e.g. if the user closes the browser
- * tab.
- */
- getLogger()
- .log(Level.FINER,
- "Connection unexpectedly closed for resource {0} with transport {1}",
- new Object[] { id, resource.transport() });
- }
- connection.disconnect();
- }
- }
- };
-
private VaadinServletService service;
public PushHandler(VaadinServletService service) {
@@ -428,7 +388,12 @@ public class PushHandler extends AtmosphereResourceEventListenerAdapter {
"Connection unexpectedly closed for resource {0} with transport {1}",
new Object[] { id, resource.transport() });
}
- ui.setPushConnection(null);
+ if (pushConnection.isConnected()) {
+ // disconnect() assumes the push connection is connected but
+ // this method can currently be called more than once during
+ // disconnect, depending on the situation
+ pushConnection.disconnect();
+ }
}
} catch (final Exception e) {
diff --git a/shared/tests/src/readme.txt b/shared/tests/src/readme.txt
deleted file mode 100644
index 0cffbcdcbb..0000000000
--- a/shared/tests/src/readme.txt
+++ /dev/null
@@ -1 +0,0 @@
-Add tests here. A dummy so that Git creates the directory structure
diff --git a/uitest/src/com/vaadin/tests/components/accordion/AccordionClipsContent.html b/uitest/src/com/vaadin/tests/components/accordion/AccordionClipsContent.html
deleted file mode 100644
index 30414094c8..0000000000
--- a/uitest/src/com/vaadin/tests/components/accordion/AccordionClipsContent.html
+++ /dev/null
@@ -1,57 +0,0 @@
-<?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://arturwin.office.itmill.com:8888/" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-<tr>
- <td>open</td>
- <td>/run/AccordionTest?restartApplication</td>
- <td></td>
-</tr>
-<tr>
- <td>mouseClick</td>
- <td>vaadin=runAccordionTest::PID_Smenu#item0</td>
- <td>45,2</td>
-</tr>
-<tr>
- <td>mouseClick</td>
- <td>vaadin=runAccordionTest::Root/VOverlay[0]/VMenuBar[0]#item3</td>
- <td>136,8</td>
-</tr>
-<tr>
- <td>mouseClick</td>
- <td>vaadin=runAccordionTest::Root/VOverlay[1]/VMenuBar[0]#item0</td>
- <td>65,4</td>
-</tr>
-<tr>
- <td>mouseClick</td>
- <td>vaadin=runAccordionTest::Root/VOverlay[2]/VMenuBar[0]#item1</td>
- <td>86,2</td>
-</tr>
-<tr>
- <td>mouseClick</td>
- <td>vaadin=runAccordionTest::Root/VOverlay[3]/VMenuBar[0]#item0</td>
- <td>48,0</td>
-</tr>
-<tr>
- <td>mouseClick</td>
- <td>vaadin=runAccordionTest::PID_StestComponent/VAccordion$StackItem[0]/VNativeButton[0]</td>
- <td>63,11</td>
-</tr>
-<tr>
- <td>screenCapture</td>
- <td></td>
- <td>button-clicked</td>
-</tr>
-
-</tbody></table>
-</body>
-</html>
diff --git a/uitest/src/com/vaadin/tests/components/accordion/AccordionClipsContentTest.java b/uitest/src/com/vaadin/tests/components/accordion/AccordionClipsContentTest.java
new file mode 100644
index 0000000000..b4f830d106
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/accordion/AccordionClipsContentTest.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2000-2014 Vaadin Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.vaadin.tests.components.accordion;
+
+import org.junit.Test;
+
+import com.vaadin.testbench.elements.NativeButtonElement;
+import com.vaadin.tests.tb3.MultiBrowserTest;
+
+public class AccordionClipsContentTest extends MultiBrowserTest {
+ @Override
+ protected Class<?> getUIClass() {
+ return AccordionTest.class;
+ }
+
+ @Test
+ public void testAccordionClipsContent() throws Exception {
+ openTestURL();
+
+ /*
+ * MenuBarElement doesn't have any API, so this part is ugly until
+ * #13364 is fixed
+ */
+
+ // Component
+ vaadinElement("PID_Smenu#item0").click();
+ // Component container features
+ clickAt("Root/VOverlay[0]/VMenuBar[0]#item3", 136, 8);
+ // Add component
+ clickAt("Root/VOverlay[1]/VMenuBar[0]#item0", 65, 4);
+ // NativeButton
+ clickAt("Root/VOverlay[2]/VMenuBar[0]#item1", 86, 2);
+ // autoxauto
+ vaadinElement("Root/VOverlay[3]/VMenuBar[0]#item0").click();
+
+ $(NativeButtonElement.class).first().click();
+
+ compareScreen("button-clicked");
+ }
+
+ private void clickAt(String vaadinLocator, int x, int y) {
+ testBenchElement(vaadinElement(vaadinLocator)).click(x, y);
+ }
+}
diff --git a/uitest/src/com/vaadin/tests/components/combobox/ComboBoxClosePopupRetainText.html b/uitest/src/com/vaadin/tests/components/combobox/ComboBoxClosePopupRetainText.html
deleted file mode 100644
index 9248938b28..0000000000
--- a/uitest/src/com/vaadin/tests/components/combobox/ComboBoxClosePopupRetainText.html
+++ /dev/null
@@ -1,80 +0,0 @@
-<?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="" />
-<title></title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3"></td></tr>
-</thead><tbody>
-<tr>
- <td>open</td>
- <td>/run/com.vaadin.tests.components.combobox.ComboBoxes2?restartApplication</td>
- <td></td>
-</tr>
-<tr>
- <td>mouseClick</td>
- <td>vaadin=runcomvaadintestscomponentscomboboxComboBoxes2::PID_StestComponent/domChild[0]</td>
- <td>47,8</td>
-</tr>
-<tr>
- <td>type</td>
- <td>vaadin=runcomvaadintestscomponentscomboboxComboBoxes2::PID_StestComponent/domChild[0]</td>
- <td>I</td>
-</tr>
-<!--Open popup-->
-<tr>
- <td>mouseClick</td>
- <td>vaadin=runcomvaadintestscomponentscomboboxComboBoxes2::PID_StestComponent/domChild[1]</td>
- <td>14,10</td>
-</tr>
-<!--Close poup-->
-<tr>
- <td>mouseClick</td>
- <td>vaadin=runcomvaadintestscomponentscomboboxComboBoxes2::PID_StestComponent/domChild[1]</td>
- <td>14,10</td>
-</tr>
-<tr>
- <td>assertValue</td>
- <td>vaadin=runcomvaadintestscomponentscomboboxComboBoxes2::PID_StestComponent/domChild[0]</td>
- <td>I</td>
-</tr>
-<!--Select a value-->
-<tr>
- <td>open</td>
- <td>/run/com.vaadin.tests.components.combobox.ComboBoxes2?restartApplication</td>
- <td></td>
-</tr>
-<tr>
- <td>mouseClick</td>
- <td>vaadin=runcomvaadintestscomponentscomboboxComboBoxes2::PID_StestComponent/domChild[1]</td>
- <td>14,10</td>
-</tr>
-<tr>
- <td>mouseClick</td>
- <td>vaadin=runcomvaadintestscomponentscomboboxComboBoxes2::Root/VFilterSelect$SuggestionPopup[0]/VFilterSelect$SuggestionMenu[0]#item2</td>
- <td>47,9</td>
-</tr>
-<tr>
- <td>type</td>
- <td>vaadin=runcomvaadintestscomponentscomboboxComboBoxes2::PID_StestComponent/domChild[0]</td>
- <td>I</td>
-</tr>
-<tr>
- <td>mouseClick</td>
- <td>vaadin=runcomvaadintestscomponentscomboboxComboBoxes2::PID_StestComponent/domChild[1]</td>
- <td>14,10</td>
-</tr>
-<!--Entered value should remain in the text field even though the popup is opened-->
-<tr>
- <td>assertValue</td>
- <td>vaadin=runcomvaadintestscomponentscomboboxComboBoxes2::PID_StestComponent/domChild[0]</td>
- <td>I</td>
-</tr>
-</tbody></table>
-</body>
-</html>
diff --git a/uitest/src/com/vaadin/tests/components/combobox/ComboBoxClosePopupRetainTextTest.java b/uitest/src/com/vaadin/tests/components/combobox/ComboBoxClosePopupRetainTextTest.java
new file mode 100644
index 0000000000..a5efb44ec8
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/combobox/ComboBoxClosePopupRetainTextTest.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright 2000-2014 Vaadin Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.vaadin.tests.components.combobox;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+import org.openqa.selenium.WebElement;
+
+import com.vaadin.testbench.By;
+import com.vaadin.testbench.elements.ComboBoxElement;
+import com.vaadin.tests.tb3.MultiBrowserTest;
+
+public class ComboBoxClosePopupRetainTextTest extends MultiBrowserTest {
+ @Override
+ protected Class<?> getUIClass() {
+ return ComboBoxes2.class;
+ }
+
+ @Test
+ public void testClosePopupRetainText() throws Exception {
+ openTestURL();
+
+ ComboBoxElement cb = $(ComboBoxElement.class).first();
+ WebElement textbox = cb.findElement(By.vaadin("#textbox"));
+ textbox.sendKeys("I");
+ cb.openPopup();
+ cb.openPopup(); // openPopup() actually toggles
+ // The entered value should remain
+ assertEquals("I", textbox.getAttribute("value"));
+ }
+
+ @Test
+ public void testClosePopupRetainText_selectingAValue() throws Exception {
+ openTestURL();
+ ComboBoxElement cb = $(ComboBoxElement.class).first();
+ cb.selectByText("Item 3");
+ WebElement textbox = cb.findElement(By.vaadin("#textbox"));
+ textbox.clear();
+ textbox.sendKeys("I");
+ cb.openPopup();
+ // Entered value should remain in the text field even though the popup
+ // is opened
+ assertEquals("I", textbox.getAttribute("value"));
+
+ }
+}
diff --git a/uitest/src/com/vaadin/tests/push/PushWithPreserveOnRefresh.java b/uitest/src/com/vaadin/tests/push/PushWithPreserveOnRefresh.java
new file mode 100644
index 0000000000..8834a05069
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/push/PushWithPreserveOnRefresh.java
@@ -0,0 +1,48 @@
+package com.vaadin.tests.push;
+
+import com.vaadin.annotations.PreserveOnRefresh;
+import com.vaadin.annotations.Push;
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.tests.components.AbstractTestUI;
+import com.vaadin.tests.util.Log;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.Label;
+
+@PreserveOnRefresh
+@Push
+public class PushWithPreserveOnRefresh extends AbstractTestUI {
+
+ private Log log = new Log(5);
+ private int times = 0;
+
+ @Override
+ protected void setup(VaadinRequest request) {
+ // Internal parameter sent by vaadinBootstrap.js,
+ addComponent(new Label("window.name: " + request.getParameter("v-wn")));
+ addComponent(new Label("UI id: " + getUIId()));
+ addComponent(log);
+
+ Button b = new Button("click me");
+ b.addClickListener(new ClickListener() {
+
+ @Override
+ public void buttonClick(ClickEvent event) {
+ log.log("Button has been clicked " + (++times) + " times");
+ }
+ });
+
+ addComponent(b);
+ }
+
+ @Override
+ protected String getTestDescription() {
+ return "Refreshing the browser window should preserve the state and push should continue to work";
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return Integer.valueOf(13620);
+ }
+}
diff --git a/uitest/src/com/vaadin/tests/push/PushWithPreserveOnRefreshTest.java b/uitest/src/com/vaadin/tests/push/PushWithPreserveOnRefreshTest.java
new file mode 100644
index 0000000000..3c532b2e55
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/push/PushWithPreserveOnRefreshTest.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2000-2014 Vaadin Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.vaadin.tests.push;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import com.vaadin.testbench.elements.ButtonElement;
+import com.vaadin.tests.tb3.MultiBrowserTest;
+
+public class PushWithPreserveOnRefreshTest extends MultiBrowserTest {
+
+ @Test
+ public void ensurePushWorksAfterRefresh() {
+ openTestURL();
+ $(ButtonElement.class).first().click();
+ $(ButtonElement.class).first().click();
+ Assert.assertEquals("2. Button has been clicked 2 times", getLogRow(0));
+ openTestURL();
+ Assert.assertEquals("2. Button has been clicked 2 times", getLogRow(0));
+ $(ButtonElement.class).first().click();
+ Assert.assertEquals("3. Button has been clicked 3 times", getLogRow(0));
+
+ }
+}