<vaadin.plugin.version>${vaadin.version}</vaadin.plugin.version>
<failOnMissingWebXml>false</failOnMissingWebXml>
<contextmenu.version>2.0-SNAPSHOT</contextmenu.version>
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<!-- Don't care about coding style for tests -->
<sonar.skip>true</sonar.skip>
</properties>
<module>vaadinservletconfiguration-widget-set</module>
<module>spring-boot</module>
<module>cdi</module>
+ <module>servlet-containers/jsp-integration</module>
<module>bean-api-validation</module>
<module>bean-impl-validation</module>
</modules>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>com.vaadin</groupId>
+ <artifactId>vaadin-test</artifactId>
+ <version>8.0-SNAPSHOT</version>
+ <relativePath>../..</relativePath>
+ </parent>
+ <artifactId>vaadin-test-jsp-integration</artifactId>
+ <name>vaadin-test-jsp-integration</name>
+ <packaging>war</packaging>
+
+ <dependencies>
+
+ <dependency>
+ <groupId>com.vaadin</groupId>
+ <artifactId>vaadin-client-compiled</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>com.vaadin</groupId>
+ <artifactId>vaadin-uitest-common</artifactId>
+ <version>${project.version}</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+
+</project>
--- /dev/null
+package com.vaadin.tests.integration;
+/*
+ * Copyright 2000-2017 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.
+ */
+
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.UI;
+
+public class AnotherTrivialUI extends UI {
+ @Override
+ protected void init(VaadinRequest request) {
+ setContent(new Label("Another Trivial UI"));
+ }
+
+}
--- /dev/null
+package com.vaadin.tests.integration;
+/*
+ * Copyright 2000-2017 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.
+ */
+
+import com.vaadin.annotations.VaadinServletConfiguration;
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.server.VaadinServlet;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.UI;
+
+public class TrivialUI extends UI {
+ @Override
+ protected void init(VaadinRequest request) {
+ setContent(new Label("Trivial UI"));
+ }
+
+}
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<web-app id="vaadin-uitest" version="3.0"
+ xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
+
+ <!-- THIS IS A DEVELOPMENT AND TESTING web.xml . -->
+
+ <display-name>Vaadin</display-name>
+ <description>Vaadin JSP Integration Test</description>
+
+ <context-param>
+ <param-name>productionMode</param-name>
+ <param-value>false</param-value>
+ </context-param>
+
+ <servlet>
+ <servlet-name>VaadinStaticFiles</servlet-name>
+ <servlet-class>com.vaadin.server.VaadinServlet</servlet-class>
+ <async-supported>false</async-supported>
+ </servlet>
+
+ <servlet>
+ <servlet-name>PrimaryUIServlet</servlet-name>
+ <servlet-class>com.vaadin.server.VaadinServlet</servlet-class>
+ <init-param>
+ <param-name>UI</param-name>
+ <param-value>com.vaadin.tests.integration.TrivialUI</param-value>
+ </init-param>
+ <async-supported>true</async-supported>
+ </servlet>
+
+ <servlet>
+ <servlet-name>SecondaryUIServlet</servlet-name>
+ <servlet-class>com.vaadin.server.VaadinServlet</servlet-class>
+ <init-param>
+ <param-name>UI</param-name>
+ <param-value>com.vaadin.tests.integration.AnotherTrivialUI</param-value>
+ </init-param>
+ <async-supported>true</async-supported>
+ </servlet>
+
+ <servlet-mapping>
+ <servlet-name>PrimaryUIServlet</servlet-name>
+ <url-pattern>/primaryui/*</url-pattern>
+ </servlet-mapping>
+
+ <servlet-mapping>
+ <servlet-name>SecondaryUIServlet</servlet-name>
+ <url-pattern>/secondaryui/*</url-pattern>
+ </servlet-mapping>
+
+ <servlet-mapping>
+ <servlet-name>VaadinStaticFiles</servlet-name>
+ <url-pattern>/VAADIN/*</url-pattern>
+ </servlet-mapping>
+
+</web-app>
--- /dev/null
+<!DOCTYPE>
+<%@page import="com.vaadin.ui.UI"%>
+<%@page import="com.vaadin.server.VaadinSession"%>
+<HTML>
+<HEAD>
+<TITLE>JSP integration</TITLE>
+<style>
+table {
+ background: #fff;
+}
+
+td {
+ border: 1px solid black;
+ padding: .5em;
+}
+</style>
+</HEAD>
+<BODY>
+ <table>
+ <tr>
+ <th align="left" colspan=4>Available UIs:</th>
+ </tr>
+ <tr>
+ <th>Service Name</th>
+ <th>CSRF token</th>
+ <th>UI id</th>
+ <th>UI type</th>
+ <th>Main content</th>
+ </tr>
+ <%
+ HttpSession httpSession = request.getSession(false);
+ for (VaadinSession vs : VaadinSession.getAllSessions(httpSession)) {
+ try {
+ vs.lock();
+ for (UI ui : vs.getUIs()) {
+ out.append("<tr class='uirow'>");
+ out.append("<td>" + vs.getService().getServiceName()
+ + "</td>");
+ out.append("<td>" + vs.getCsrfToken() + "</td>");
+ out.append("<td>" + ui.getUIId() + "</td>");
+ out.append("<td>" + ui.getClass().getName() + "</td>");
+ out.append("<td>" + ui.getContent().getClass().getName() + "</td>");
+ out.append("</tr>");
+
+ }
+ } finally {
+ vs.unlock();
+ }
+
+ }
+ %>
+ </table>
+</BODY>
+</HTML>
\ No newline at end of file
--- /dev/null
+package com.vaadin.tests.integration;
+/*
+ * Copyright 2000-2017 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.
+ */
+
+import com.vaadin.testbench.TestBenchTestCase;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.openqa.selenium.By;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.phantomjs.PhantomJSDriver;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
+
+public class JSPIntegrationIT extends TestBenchTestCase {
+
+ private static final String URL_PREFIX = "http://localhost:8080/";
+
+ private static final String primaryUIUrl = URL_PREFIX + "primaryui";
+ private static final String jspUrl = URL_PREFIX + "staticfiles/vaadinsessions.jsp";
+ private static final String secondaryUIUrl = URL_PREFIX + "secondaryui";
+
+ @Test
+ public void listVaadinSessions() {
+
+ assertUICount(0);
+
+ // Open a new UI
+ getDriver().navigate().to(primaryUIUrl);
+
+
+ assertUICount(1);
+ UIData firstUI = getUIs().get(0);
+
+ // Open a new UI
+ getDriver().navigate().to(primaryUIUrl);
+ UIData secondUI = getUIs().get(0);
+
+ // Should now have UI for the same service with different uiId
+ assertUICount(1);
+ assertNotEquals(firstUI.uiId, secondUI.uiId);
+ assertEquals(firstUI.serviceName, secondUI.serviceName);
+
+ getDriver().navigate().to(secondaryUIUrl);
+ // Should now have another services
+ List<UIData> twoUIs = getUIs();
+ assertEquals(2, twoUIs.size());
+ assertNotEquals(twoUIs.get(0).serviceName, twoUIs.get(1).serviceName);
+ }
+
+ private static class UIData {
+ private String serviceName;
+ private int uiId;
+ }
+
+ private List<UIData> getUIs() {
+ List<UIData> uis = new ArrayList<>();
+
+ getDriver().get(jspUrl);
+ List<WebElement> rows = getDriver()
+ .findElements(By.xpath("//tr[@class='uirow']"));
+ for (WebElement row : rows) {
+ UIData data = new UIData();
+ List<WebElement> tds = row.findElements(By.xpath("./td"));
+
+ data.serviceName = tds.get(0).getText();
+ data.uiId = Integer.parseInt(tds.get(2).getText());
+
+ uis.add(data);
+ }
+
+ return uis;
+ }
+
+ private void assertUICount(int i) {
+ assertEquals(i, getUIs().size());
+ }
+
+ @Before
+ public void setup() {
+ setDriver(new PhantomJSDriver());
+ }
+
+ @After
+ public void teardown() {
+ getDriver().quit();
+ }
+}
<url-pattern>/run-jsr356/*</url-pattern>
</servlet-mapping>
- <servlet-mapping>
- <servlet-name>IntegrationTest</servlet-name>
- <url-pattern>/integration/*</url-pattern>
- </servlet-mapping>
-
<servlet-mapping>
<servlet-name>CommErrorEmulator</servlet-name>
<url-pattern>/commerror/*</url-pattern>
+++ /dev/null
-<!DOCTYPE>
-<%@page import="com.vaadin.ui.UI"%>
-<%@page import="com.vaadin.server.VaadinSession"%>
-<HTML>
-<HEAD>
-<TITLE>JSP integration</TITLE>
-<style>
-table {
- background: #fff;
-}
-
-td {
- border: 1px solid black;
- padding: .5em;
-}
-</style>
-</HEAD>
-<BODY>
- <table>
- <tr>
- <th align="left" colspan=4>Available UIs:</th>
- </tr>
- <tr>
- <th>Service Name</th>
- <th>CSRF token</th>
- <th>UI id</th>
- <th>UI type</th>
- <th>Main content</th>
- </tr>
- <%
- HttpSession httpSession = request.getSession(false);
- for (VaadinSession vs : VaadinSession.getAllSessions(httpSession)) {
- try {
- vs.lock();
- for (UI ui : vs.getUIs()) {
- out.append("<tr class='uirow'>");
- out.append("<td>" + vs.getService().getServiceName()
- + "</td>");
- out.append("<td>" + vs.getCsrfToken() + "</td>");
- out.append("<td>" + ui.getUIId() + "</td>");
- out.append("<td>" + ui.getClass().getName() + "</td>");
- out.append("<td>" + ui.getContent().getClass().getName() + "</td>");
- out.append("</tr>");
-
- }
- } finally {
- vs.unlock();
- }
-
- }
- %>
- </table>
-</BODY>
-</HTML>
\ No newline at end of file
+++ /dev/null
-/*
- * Copyright 2000-2016 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.integration;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotEquals;
-
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import org.junit.Test;
-import org.openqa.selenium.By;
-import org.openqa.selenium.WebElement;
-
-import com.vaadin.tests.tb3.SingleBrowserTestPhantomJS2;
-
-public class JSPIntegrationTest extends SingleBrowserTestPhantomJS2 {
-
- final String appRunnerTestUrl = getBaseURL() + "/run/Buttons";
- final String jspUrl = getBaseURL() + "/statictestfiles/vaadinsessions.jsp";
- final String integrationUrl = getBaseURL() + "/integration";
-
- @Test
- public void listVaadinSessions() {
-
- assertUICount(0);
-
- // Open a new UI
- getDriver().get(integrationUrl);
- assertUICount(1);
-
- // Open a new UI
- getDriver().get(integrationUrl);
-
- // Should now have two UIs for the same service with different uiIds
- List<UIData> twoUIs = getUIs();
- assertEquals(2, twoUIs.size());
- assertNotEquals(twoUIs.get(0).uiId, twoUIs.get(1).uiId);
- assertEquals(twoUIs.get(0).serviceName, twoUIs.get(1).serviceName);
-
- getDriver().get(appRunnerTestUrl);
- // Should now have two services with 2 + 1 UIs
- List<UIData> threeUIs = getUIs();
- assertEquals(3, threeUIs.size());
- Set<String> serviceNames = new HashSet<>();
- Set<Integer> uiIds = new HashSet<>();
- for (UIData uiData : threeUIs) {
- serviceNames.add(uiData.serviceName);
- uiIds.add(uiData.uiId);
- }
- assertGreaterOrEqual(
- "There should be at least two unique service names",
- serviceNames.size(), 2);
- assertGreaterOrEqual("There should be at least two unique ui ids",
- uiIds.size(), 2);
- }
-
- private static class UIData {
- private String serviceName;
- private int uiId;
- }
-
- private List<UIData> getUIs() {
- List<UIData> uis = new ArrayList<>();
-
- getDriver().get(jspUrl);
- List<WebElement> rows = getDriver()
- .findElements(By.xpath("//tr[@class='uirow']"));
- for (WebElement row : rows) {
- UIData data = new UIData();
- List<WebElement> tds = row.findElements(By.xpath("./td"));
-
- data.serviceName = tds.get(0).getText();
- data.uiId = Integer.parseInt(tds.get(2).getText());
-
- uis.add(data);
- }
-
- return uis;
- }
-
- private void assertUICount(int i) {
- assertEquals(i, getUIs().size());
- }
-}