diff options
author | Jonatan Kronqvist <jonatan@vaadin.com> | 2014-05-09 08:18:21 +0300 |
---|---|---|
committer | Jonatan Kronqvist <jonatan@vaadin.com> | 2014-05-09 08:21:48 +0300 |
commit | 7af883e7e74bc2193bcc0ddeff9ec47c945f7b16 (patch) | |
tree | e68fc9ed45df547ce9cbe5f4f70df576d5cda53b | |
parent | f0d79d8959343dd19c71f8b69ffd7809a9138327 (diff) | |
parent | 9b3df561fe930f1d4903eeec525c663dc8288a33 (diff) | |
download | vaadin-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
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)); + + } +} |