diff options
-rw-r--r-- | WebContent/license.html | 2 | ||||
-rw-r--r-- | build.properties | 2 | ||||
-rw-r--r-- | client/src/com/vaadin/client/ApplicationConnection.java | 18 | ||||
-rw-r--r-- | client/src/com/vaadin/client/VTooltip.java | 14 | ||||
-rw-r--r-- | server/src/com/vaadin/server/VaadinServlet.java | 36 | ||||
-rw-r--r-- | shared/ivy.xml | 4 | ||||
-rw-r--r-- | uitest/src/com/vaadin/tests/push/PushConfigurationStreamingTest.java | 22 | ||||
-rw-r--r-- | uitest/src/com/vaadin/tests/push/ReconnectTest.java | 26 | ||||
-rw-r--r-- | uitest/src/com/vaadin/tests/tb3/AbstractTB3Test.java | 30 | ||||
-rw-r--r-- | uitest/src/com/vaadin/tests/tooltip/TooltipAndJavascript.java | 48 | ||||
-rw-r--r-- | uitest/src/com/vaadin/tests/tooltip/TooltipAndJavascriptTest.java | 54 | ||||
-rw-r--r-- | uitest/src/com/vaadin/tests/tooltip/tooltipandjavascript.js | 1 |
12 files changed, 170 insertions, 87 deletions
diff --git a/WebContent/license.html b/WebContent/license.html index d0bcbdd94d..f714e4d64d 100644 --- a/WebContent/license.html +++ b/WebContent/license.html @@ -99,7 +99,7 @@ <!-- In vaadin-shared-deps --> <tr> <td>JSON</td> - <td><a href="licenses/apache-license-version-2-0.txt">Apache License, Version 2.0</a></td> + <td><a href="licenses/the-json-license.txt">The JSON License</a></td> </tr> <!-- Used by vaadin-server --> diff --git a/build.properties b/build.properties index 074fdac09d..a7871ad1ef 100644 --- a/build.properties +++ b/build.properties @@ -6,5 +6,5 @@ vaadin.url=http://vaadin.com vaadin.java.version=1.6 vaadin.version=0.0.0.unversioned-development-build vaadin.sass.version=0.9.7 -gwt.version=2.6.0.vaadin2 +gwt.version=2.6.0.vaadin3 commons-io.version=2.4 diff --git a/client/src/com/vaadin/client/ApplicationConnection.java b/client/src/com/vaadin/client/ApplicationConnection.java index c39beffd87..94fa3c3c01 100644 --- a/client/src/com/vaadin/client/ApplicationConnection.java +++ b/client/src/com/vaadin/client/ApplicationConnection.java @@ -66,6 +66,7 @@ import com.google.gwt.user.client.Window.ClosingHandler; import com.google.gwt.user.client.ui.HasWidgets; import com.google.gwt.user.client.ui.Widget; import com.vaadin.client.ApplicationConfiguration.ErrorMessage; +import com.vaadin.client.ApplicationConnection.ApplicationStoppedEvent; import com.vaadin.client.ResourceLoader.ResourceLoadEvent; import com.vaadin.client.ResourceLoader.ResourceLoadListener; import com.vaadin.client.communication.HasJavaScriptConnectorHelper; @@ -471,6 +472,8 @@ public class ApplicationConnection implements HasHandlers { private Heartbeat heartbeat = GWT.create(Heartbeat.class); + private boolean tooltipInitialized = false; + public static class MultiStepDuration extends Duration { private int previousStep = elapsedMillis(); @@ -580,10 +583,19 @@ public class ApplicationConnection implements HasHandlers { // initial UIDL provided in DOM, continue as if returned by request handleJSONText(jsonText, -1); + } - // Tooltip can't be created earlier because the necessary fields are - // not setup to add it in the correct place in the DOM - getVTooltip().showAssistive(new TooltipInfo(" ")); + // Tooltip can't be created earlier because the + // necessary fields are not setup to add it in the + // correct place in the DOM + if (!tooltipInitialized) { + tooltipInitialized = true; + ApplicationConfiguration.runWhenDependenciesLoaded(new Command() { + @Override + public void execute() { + getVTooltip().initializeAssistiveTooltips(); + } + }); } } diff --git a/client/src/com/vaadin/client/VTooltip.java b/client/src/com/vaadin/client/VTooltip.java index d1a2c395f7..b1315a0d8b 100644 --- a/client/src/com/vaadin/client/VTooltip.java +++ b/client/src/com/vaadin/client/VTooltip.java @@ -108,6 +108,20 @@ public class VTooltip extends VWindowOverlay { showTooltip(); } + /** + * Initialize the tooltip overlay for assistive devices. + * + * @param info + * with the content of the tooltip + */ + public void initializeAssistiveTooltips() { + updatePosition(null, true); + setTooltipText(new TooltipInfo(" ")); + showTooltip(); + hideTooltip(); + description.getParentElement().getStyle().clearWidth(); + } + private void setTooltipText(TooltipInfo info) { if (info.getErrorMessage() != null && !info.getErrorMessage().isEmpty()) { em.setVisible(true); diff --git a/server/src/com/vaadin/server/VaadinServlet.java b/server/src/com/vaadin/server/VaadinServlet.java index 81c3f374ea..12e7c28cd8 100644 --- a/server/src/com/vaadin/server/VaadinServlet.java +++ b/server/src/com/vaadin/server/VaadinServlet.java @@ -547,42 +547,6 @@ public class VaadinServlet extends HttpServlet implements Constants { return DEFAULT_THEME_NAME; } - private void handleServiceSecurityException(VaadinServletRequest request, - VaadinServletResponse response) throws IOException, - ServletException { - - try { - /* - * We might have a UI, but we don't want to leak any information in - * this case so just use the info provided in the request. - */ - SystemMessages ci = getService().getSystemMessages( - request.getLocale(), request); - if (ServletPortletHelper.isUIDLRequest(request)) { - // send uidl redirect - getService().writeStringResponse( - response, - JsonConstants.JSON_CONTENT_TYPE, - VaadinService.createCriticalNotificationJSON( - ci.getCommunicationErrorCaption(), - ci.getCommunicationErrorMessage(), - INVALID_SECURITY_KEY_MSG, - ci.getCommunicationErrorURL())); - } else if (ServletPortletHelper.isHeartbeatRequest(request)) { - response.sendError(HttpServletResponse.SC_FORBIDDEN, - "Forbidden"); - } else { - // 'plain' http req - e.g. browser reload; - // just go ahead redirect the browser - response.sendRedirect(ci.getCommunicationErrorURL()); - } - } catch (SystemMessageException ee) { - throw new ServletException(ee); - } - - log("Invalid security key received from " + request.getRemoteHost()); - } - /** * Check if this is a request for a static resource and, if it is, serve the * resource to the client. diff --git a/shared/ivy.xml b/shared/ivy.xml index 3dfe1a51c2..2dac7adbc2 100644 --- a/shared/ivy.xml +++ b/shared/ivy.xml @@ -27,8 +27,8 @@ conf="build,ide,test->default" /> <dependency org="com.vaadin.external.google" name="guava" rev="16.0.1.vaadin1" conf="build,ide,test->default" /> - <dependency org="com.vaadin.external.google" name="android-json" - rev="0.0.20131108.vaadin1" conf="build,ide,test->default" /> + <dependency org="com.vaadin.external.json" name="json" + rev="0.0.20080701" conf="build,ide,test->default" /> <dependency org="junit" name="junit" rev="4.11" conf="test,ide -> default" /> diff --git a/uitest/src/com/vaadin/tests/push/PushConfigurationStreamingTest.java b/uitest/src/com/vaadin/tests/push/PushConfigurationStreamingTest.java index 8dc960c9ac..0861e618a2 100644 --- a/uitest/src/com/vaadin/tests/push/PushConfigurationStreamingTest.java +++ b/uitest/src/com/vaadin/tests/push/PushConfigurationStreamingTest.java @@ -27,33 +27,19 @@ import org.openqa.selenium.support.ui.Select; public class PushConfigurationStreamingTest extends PushConfigurationTest { - @Override - public List<DesiredCapabilities> getBrowsersToTest() { - List<DesiredCapabilities> browsers = super.getBrowsersToTest(); - - browsers.remove(Browser.IE8.getDesiredCapabilities()); - - return browsers; - } - @Test public void testStreaming() throws InterruptedException { openDebugLogTab(); new Select(getTransportSelect()).selectByVisibleText("STREAMING"); - new Select(getPushModeSelect()).selectByVisibleText("AUTOMATIC"); - assertThat(getStatusText(), containsString("fallbackTransport: long-polling")); assertThat(getStatusText(), containsString("transport: streaming")); - waitForServerCounterToUpdate(); + clearDebugMessages(); + new Select(getPushModeSelect()).selectByVisibleText("AUTOMATIC"); - // Use debug console to verify we used the correct transport type - assertThat( - driver.getPageSource(), - not(containsString("Push connection established using websocket"))); - assertThat(driver.getPageSource(), - containsString("Push connection established using streaming")); + waitForDebugMessage("Push connection established using streaming", 10); + waitForServerCounterToUpdate(); } } diff --git a/uitest/src/com/vaadin/tests/push/ReconnectTest.java b/uitest/src/com/vaadin/tests/push/ReconnectTest.java index 5ad2e7a127..6a632f2667 100644 --- a/uitest/src/com/vaadin/tests/push/ReconnectTest.java +++ b/uitest/src/com/vaadin/tests/push/ReconnectTest.java @@ -83,32 +83,6 @@ public abstract class ReconnectTest extends MultiBrowserTestWithProxy { waitForDebugMessage("Reopening push connection"); } - private void clearDebugMessages() { - driver.findElement( - By.xpath("//button[@class='v-debugwindow-button' and @title='Clear log']")) - .click(); - } - - private boolean hasDebugMessage(String message) { - return getDebugMessage(message) != null; - } - - private WebElement getDebugMessage(String message) { - return driver.findElement(By.xpath(String.format( - "//span[@class='v-debugwindow-message' and text()='%s']", - message))); - } - - private void waitForDebugMessage(final String expectedMessage) { - waitUntil(new ExpectedCondition<Boolean>() { - - @Override - public Boolean apply(WebDriver input) { - return hasDebugMessage(expectedMessage); - } - }, 30); - } - private void connectAndVerifyConnectionEstablished() throws JSchException { connectProxy(); waitUntilServerCounterChanges(); diff --git a/uitest/src/com/vaadin/tests/tb3/AbstractTB3Test.java b/uitest/src/com/vaadin/tests/tb3/AbstractTB3Test.java index 14be226de6..e5cceca6b8 100644 --- a/uitest/src/com/vaadin/tests/tb3/AbstractTB3Test.java +++ b/uitest/src/com/vaadin/tests/tb3/AbstractTB3Test.java @@ -165,6 +165,36 @@ public abstract class AbstractTB3Test extends TestBenchTestCase { return ((Locatable) element.getWrappedElement()).getCoordinates(); } + private boolean hasDebugMessage(String message) { + return getDebugMessage(message) != null; + } + + private WebElement getDebugMessage(String message) { + return driver.findElement(By.xpath(String.format( + "//span[@class='v-debugwindow-message' and text()='%s']", + message))); + } + + protected void waitForDebugMessage(final String expectedMessage) { + waitForDebugMessage(expectedMessage, 30); + } + + protected void waitForDebugMessage(final String expectedMessage, int timeout) { + waitUntil(new ExpectedCondition<Boolean>() { + + @Override + public Boolean apply(WebDriver input) { + return hasDebugMessage(expectedMessage); + } + }, timeout); + } + + protected void clearDebugMessages() { + driver.findElement( + By.xpath("//button[@class='v-debugwindow-button' and @title='Clear log']")) + .click(); + } + @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) public @interface RunLocally { diff --git a/uitest/src/com/vaadin/tests/tooltip/TooltipAndJavascript.java b/uitest/src/com/vaadin/tests/tooltip/TooltipAndJavascript.java new file mode 100644 index 0000000000..2ada6e819a --- /dev/null +++ b/uitest/src/com/vaadin/tests/tooltip/TooltipAndJavascript.java @@ -0,0 +1,48 @@ +/* + * 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.tooltip; + +import com.vaadin.annotations.JavaScript; +import com.vaadin.server.VaadinRequest; +import com.vaadin.tests.components.AbstractTestUI; +import com.vaadin.ui.Button; + +public class TooltipAndJavascript extends AbstractTestUI { + + @JavaScript("tooltipandjavascript.js") + public static class MyButton extends Button { + + } + + @Override + protected void setup(VaadinRequest request) { + MyButton b = new MyButton(); + b.setCaption("Hover for tooltip"); + b.setDescription("Tooltip for the button"); + addComponent(b); + } + + @Override + protected String getTestDescription() { + return "Hover the button for a tooltip. It should be styled correctly"; + } + + @Override + protected Integer getTicketNumber() { + return 14028; + } + +} diff --git a/uitest/src/com/vaadin/tests/tooltip/TooltipAndJavascriptTest.java b/uitest/src/com/vaadin/tests/tooltip/TooltipAndJavascriptTest.java new file mode 100644 index 0000000000..cc9309ac2c --- /dev/null +++ b/uitest/src/com/vaadin/tests/tooltip/TooltipAndJavascriptTest.java @@ -0,0 +1,54 @@ +/* + * 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.tooltip; + +import org.junit.Assert; +import org.junit.Test; +import org.openqa.selenium.By; +import org.openqa.selenium.JavascriptExecutor; +import org.openqa.selenium.WebElement; + +import com.vaadin.testbench.elements.ButtonElement; +import com.vaadin.tests.tb3.MultiBrowserTest; + +public class TooltipAndJavascriptTest extends MultiBrowserTest { + + @Test + public void ensureTooltipInOverlay() throws InterruptedException { + openTestURL(); + $(ButtonElement.class).first().showTooltip(); + WebElement tooltip = findElement(By + .cssSelector(".v-overlay-container .v-tooltip")); + WebElement overlayContainer = getParent(tooltip); + Assert.assertTrue("v-overlay-container did not receive theme", + hasClass(overlayContainer, "reindeer")); + } + + private boolean hasClass(WebElement element, String classname) { + String[] classes = element.getAttribute("class").split(" "); + for (String classString : classes) { + if (classname.equals(classString)) { + return true; + } + } + return false; + } + + private WebElement getParent(WebElement element) { + return (WebElement) ((JavascriptExecutor) getDriver()).executeScript( + "return arguments[0].parentNode;", element); + } +} diff --git a/uitest/src/com/vaadin/tests/tooltip/tooltipandjavascript.js b/uitest/src/com/vaadin/tests/tooltip/tooltipandjavascript.js new file mode 100644 index 0000000000..f6aea090ba --- /dev/null +++ b/uitest/src/com/vaadin/tests/tooltip/tooltipandjavascript.js @@ -0,0 +1 @@ +window.console.log("tooltipandjavascript.js executing")
\ No newline at end of file |