Browse Source

Merge branch 'master' into valo

Change-Id: Ifeb36e6c0acd156b7714f96f32ad7d4ff8416100
tags/7.3.0.beta1
Henri Sara 10 years ago
parent
commit
00594db377

+ 1
- 1
WebContent/license.html View File

@@ -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 -->

+ 1
- 1
build.properties View File

@@ -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

+ 15
- 3
client/src/com/vaadin/client/ApplicationConnection.java View File

@@ -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();
}
});
}
}


+ 14
- 0
client/src/com/vaadin/client/VTooltip.java View File

@@ -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);

+ 0
- 36
server/src/com/vaadin/server/VaadinServlet.java View File

@@ -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.

+ 2
- 2
shared/ivy.xml View File

@@ -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" />


+ 4
- 18
uitest/src/com/vaadin/tests/push/PushConfigurationStreamingTest.java View File

@@ -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();
}
}

+ 0
- 26
uitest/src/com/vaadin/tests/push/ReconnectTest.java View File

@@ -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();

+ 30
- 0
uitest/src/com/vaadin/tests/tb3/AbstractTB3Test.java View File

@@ -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 {

+ 48
- 0
uitest/src/com/vaadin/tests/tooltip/TooltipAndJavascript.java View File

@@ -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;
}

}

+ 54
- 0
uitest/src/com/vaadin/tests/tooltip/TooltipAndJavascriptTest.java View File

@@ -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);
}
}

+ 1
- 0
uitest/src/com/vaadin/tests/tooltip/tooltipandjavascript.js View File

@@ -0,0 +1 @@
window.console.log("tooltipandjavascript.js executing")

Loading…
Cancel
Save