[prev in list] [next in list] [prev in thread] [next in thread]
List: struts-dev
Subject: [struts] branch master updated: introduce integration tests with minimum needed changes (#301)
From: yasserzamani () apache ! org
Date: 2018-12-31 15:51:53
Message-ID: 154627151392.21515.12912035000044546097 () gitbox ! apache ! org
[Download RAW message or body]
This is an automated email from the ASF dual-hosted git repository.
yasserzamani pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/struts.git
The following commit(s) were added to refs/heads/master by this push:
new fa90e01 introduce integration tests with minimum needed changes (#301)
fa90e01 is described below
commit fa90e01ba508990849f7fd94b9c5fb530084ecb8
Author: Yasser Zamani <yasser.zamani@live.com>
AuthorDate: Mon Dec 31 19:21:49 2018 +0330
introduce integration tests with minimum needed changes (#301)
* introduce integration tests with minimum needed changes
* report coverage for integration tests as well
References:
https://stackoverflow.com/a/41364462
http://www.mojohaus.org/cobertura-maven-plugin/usage.html#reports
* switch to JaCoCo as test coverage library
Cobertura latest release is old, 2015, has issues with java and an old weird \
issue with integration tests [1].
[1] https://github.com/cobertura/cobertura/issues/230
* Use HtmlUnit instead of JWebUnit
---
.travis.yml | 31 +++---
apps/showcase/pom.xml | 72 ++++++++++----
.../struts2/showcase/chat/DateConverter.java | 12 ++-
...on-submitFieldValidatorsExamples-validation.xml | 2 +-
apps/showcase/src/main/webapp/async/index.html | 1 +
.../struts2/showcase/ActionChainingTest.java | 23 +++--
.../struts2/showcase/ActionTagExampleTest.java | 20 +++-
.../it/org/apache/struts2/showcase/AsyncTest.java | 38 ++++++--
.../it/org/apache/struts2/showcase/CRUDTest.java | 35 +++++--
.../struts2/showcase/ComponentTagExampleTest.java | 26 ++++--
.../apache/struts2/showcase/ConversionTest.java | 104 ++++++++++++++-------
.../apache/struts2/showcase/ExecAndWaitTest.java | 37 ++++++--
.../apache/struts2/showcase/FileDownloadTest.java | 49 ++++++++--
.../struts2/showcase/FreeMarkerManagerTest.java | 45 ++++++---
.../it/org/apache/struts2/showcase/ITBaseTest.java | 30 ------
.../{staticcontent => }/StaticContentTest.java | 39 ++++----
.../apache/struts2/showcase/UITagExampleTest.java | 82 ++++++++++------
.../apache/struts2/showcase/ValidationTest.java | 55 +++++++----
core/pom.xml | 1 -
pom.xml | 51 ++++++++--
20 files changed, 507 insertions(+), 246 deletions(-)
diff --git a/.travis.yml b/.travis.yml
index ae39403..3d9332f 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -3,28 +3,29 @@ sudo: false
jdk:
- openjdk7
- - oraclejdk8
- oraclejdk9
- oraclejdk11
install: true
+
+env:
+global:
+ - secure: iI7IpfDtS+LUyS2yNuRCR3KelNyvBHuoMQ3gb1UNmR5SSL7jO/p3olQWrQROs28FJ+dpE3lHy \
IjoHrebKQGJHHAgTG2XWxn+G3fDsf+wSSFSLoDGj0o2SgGXooBbR2dccnNZHCyQaOyE2cIPWaOxrQZFE4No70LQB4mrP/gdkoc=
+matrix:
+ include:
+ - jdk: oraclejdk8
+ env: STRUTS_IT=true # do integration tests and coverage reports when jdk7,9 \
and 11 tests prospered +
script:
- - if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then
- ./mvnw test -DskipAssembly -B;
+ - if [ "$STRUTS_IT" == "true" ]; then
+ ./mvnw clean verify org.jacoco:jacoco-maven-plugin:report \
org.jacoco:jacoco-maven-plugin:report-integration \
org.eluder.coveralls:coveralls-maven-plugin:report -Ptravis-coveralls -DskipAssembly \
-B; else
- ./mvnw test -DskipAssembly -Dupdate-impact -B;
+ if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then
+ ./mvnw test -DskipAssembly -B;
+ else
+ ./mvnw test -DskipAssembly -Dupdate-impact -B;
+ fi;
fi;
-after_success:
- # TODO delete following if statement after fix of \
https://github.com/cobertura/cobertura/issues/271
- - if [ "$TRAVIS_JDK_VERSION" == "openjdk8" ] || [ "$TRAVIS_JDK_VERSION" == \
"oraclejdk8" ]; then
- mvn cobertura:cobertura org.eluder.coveralls:coveralls-maven-plugin:report \
-Ptravis-coveralls -DskipAssembly -B;
- else
- echo "Not reporting coverage for $TRAVIS_JDK_VERSION due to incompatibility or \
to save performance";
- fi;
-
-env:
- global:
- - secure: iI7IpfDtS+LUyS2yNuRCR3KelNyvBHuoMQ3gb1UNmR5SSL7jO/p3olQWrQROs28FJ+dpE3l \
HyIjoHrebKQGJHHAgTG2XWxn+G3fDsf+wSSFSLoDGj0o2SgGXooBbR2dccnNZHCyQaOyE2cIPWaOxrQZFE4No70LQB4mrP/gdkoc=
cache:
directories:
diff --git a/apps/showcase/pom.xml b/apps/showcase/pom.xml
index 894a80c..787d045 100644
--- a/apps/showcase/pom.xml
+++ b/apps/showcase/pom.xml
@@ -142,30 +142,23 @@
</dependency>
<dependency>
- <groupId>net.sourceforge.jwebunit</groupId>
- <artifactId>jwebunit-core</artifactId>
- <version>1.4.1</version>
- <scope>test</scope>
- </dependency>
-
- <dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
<version>3.1</version>
<scope>test</scope>
</dependency>
- <dependency>
- <groupId>net.sourceforge.jwebunit</groupId>
- <artifactId>jwebunit-htmlunit-plugin</artifactId>
- <version>1.4.1</version>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>net.sourceforge.htmlunit</groupId>
+ <artifactId>htmlunit</artifactId>
+ <version>2.33</version>
<scope>test</scope>
- <exclusions>
- <exclusion>
- <groupId>xom</groupId>
- <artifactId>xom</artifactId>
- </exclusion>
- </exclusions>
</dependency>
<!-- BeanValidation Example -->
@@ -189,6 +182,30 @@
<build>
<plugins>
<plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-failsafe-plugin</artifactId>
+ <version>2.22.1</version>
+ <configuration>
+ <includes>
+ <include>it.org.apache.struts2.showcase.*Test</include>
+ </includes>
+ </configuration>
+ <executions>
+ <execution>
+ <id>integration-test</id>
+ <goals>
+ <goal>integration-test</goal>
+ </goals>
+ </execution>
+ <execution>
+ <id>verify</id>
+ <goals>
+ <goal>verify</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>8.1.16.v20140903</version>
@@ -212,6 +229,27 @@
\
<descriptor>${basedir}/src/main/webapp/WEB-INF/web.xml</descriptor> </webAppConfig>
</configuration>
+ <executions>
+ <execution>
+ <id>start-jetty</id>
+ <phase>pre-integration-test</phase>
+ <goals>
+ <!-- stop any previous instance to free up the port -->
+ <goal>stop</goal>
+ <goal>run-forked</goal>
+ </goals>
+ <configuration>
+ <waitForChild>false</waitForChild>
+ </configuration>
+ </execution>
+ <execution>
+ <id>stop-jetty</id>
+ <phase>post-integration-test</phase>
+ <goals>
+ <goal>stop</goal>
+ </goals>
+ </execution>
+ </executions>
</plugin>
<plugin>
diff --git a/apps/showcase/src/main/java/org/apache/struts2/showcase/chat/DateConverter.java \
b/apps/showcase/src/main/java/org/apache/struts2/showcase/chat/DateConverter.java \
index 5debf9d..eb784b6 100644
--- a/apps/showcase/src/main/java/org/apache/struts2/showcase/chat/DateConverter.java
+++ b/apps/showcase/src/main/java/org/apache/struts2/showcase/chat/DateConverter.java
@@ -20,6 +20,8 @@
*/
package org.apache.struts2.showcase.chat;
+import com.opensymphony.xwork2.conversion.impl.XWorkConverter;
+import com.opensymphony.xwork2.inject.Inject;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;
import org.apache.struts2.util.StrutsTypeConverter;
@@ -33,6 +35,13 @@ public class DateConverter extends StrutsTypeConverter {
private static final Logger LOG = LogManager.getLogger(DateConverter.class);
+ private XWorkConverter fallbackConverter;
+
+ @Inject
+ public void setXWorkConverter(XWorkConverter fallbackConverter) {
+ this.fallbackConverter = fallbackConverter;
+ }
+
public Object convertFromString(Map context, String[] values, Class toClass) {
if (values.length > 0 && values[0] != null && values[0].trim().length() > 0) {
@@ -40,7 +49,8 @@ public class DateConverter extends StrutsTypeConverter {
try {
return sdf.parse(values[0]);
} catch (ParseException e) {
- LOG.error("error converting value [" + values[0] + "] to Date ", e);
+ LOG.warn("error converting value [" + values[0] + "] to Date. Trying fallback \
converter."); + return this.fallbackConverter.convertValue(context, values[0], \
toClass); }
}
return null;
diff --git a/apps/showcase/src/main/resources/org/apache/struts2/showcase/validation/FieldValidatorsExampleAction-submitFieldValidatorsExamples-validation.xml \
b/apps/showcase/src/main/resources/org/apache/struts2/showcase/validation/FieldValidatorsExampleAction-submitFieldValidatorsExamples-validation.xml
index e7ee3a5..5d23023 100644
--- a/apps/showcase/src/main/resources/org/apache/struts2/showcase/validation/FieldValidatorsExampleAction-submitFieldValidatorsExamples-validation.xml
+++ b/apps/showcase/src/main/resources/org/apache/struts2/showcase/validation/FieldValidatorsExampleAction-submitFieldValidatorsExamples-validation.xml
@@ -71,7 +71,7 @@
</field>
<field name="regexValidatorField">
<field-validator type="regex">
- <param name="regex"><![CDATA[ [^<>]+ ]]></param>
+ <param name="regex"><![CDATA[ .*\.txt ]]></param>
<message><![CDATA[ regexValidatorField must match a regexp (.*\.txt) if specified \
]]></message> </field-validator>
</field>
diff --git a/apps/showcase/src/main/webapp/async/index.html \
b/apps/showcase/src/main/webapp/async/index.html index 3726eb7..3d1d74b 100644
--- a/apps/showcase/src/main/webapp/async/index.html
+++ b/apps/showcase/src/main/webapp/async/index.html
@@ -26,6 +26,7 @@
this.lastIndex = 0;
this.sendMessage = function(message) {
$.ajax({
+ async: false,
url: "sendMessage",
data: {
message: message
diff --git a/apps/showcase/src/test/java/it/org/apache/struts2/showcase/ActionChainingTest.java \
b/apps/showcase/src/test/java/it/org/apache/struts2/showcase/ActionChainingTest.java \
index 8299be2..4889193 100644
--- a/apps/showcase/src/test/java/it/org/apache/struts2/showcase/ActionChainingTest.java
+++ b/apps/showcase/src/test/java/it/org/apache/struts2/showcase/ActionChainingTest.java
@@ -20,11 +20,22 @@
*/
package it.org.apache.struts2.showcase;
-public class ActionChainingTest extends ITBaseTest {
- public void test() {
- beginAt("/actionchaining/actionChain1!input");
- assertTextPresent("Action Chain 1 Property 1: Property Set In Action Chain \
1");
- assertTextPresent("Action Chain 2 Property 1: Property Set in Action Chain \
2");
- assertTextPresent("Action Chain 3 Property 1: Property set in Action Chain \
3"); +import org.junit.Assert;
+import org.junit.Test;
+
+import com.gargoylesoftware.htmlunit.WebClient;
+import com.gargoylesoftware.htmlunit.html.HtmlPage;
+
+public class ActionChainingTest {
+ @Test
+ public void test() throws Exception {
+ try (final WebClient webClient = new WebClient()) {
+ final HtmlPage page = webClient.getPage(ParameterUtils.getBaseUrl() + \
"/actionchaining/actionChain1!input"); +
+ final String pageAsText = page.asText();
+ Assert.assertTrue(pageAsText.contains("Action Chain 1 Property 1: \
Property Set In Action Chain 1")); + \
Assert.assertTrue(pageAsText.contains("Action Chain 2 Property 1: Property Set in \
Action Chain 2")); + Assert.assertTrue(pageAsText.contains("Action Chain 3 \
Property 1: Property set in Action Chain 3")); + }
}
}
diff --git a/apps/showcase/src/test/java/it/org/apache/struts2/showcase/ActionTagExampleTest.java \
b/apps/showcase/src/test/java/it/org/apache/struts2/showcase/ActionTagExampleTest.java
index 5379cfb..c2d2601 100644
--- a/apps/showcase/src/test/java/it/org/apache/struts2/showcase/ActionTagExampleTest.java
+++ b/apps/showcase/src/test/java/it/org/apache/struts2/showcase/ActionTagExampleTest.java
@@ -20,10 +20,20 @@
*/
package it.org.apache.struts2.showcase;
-public class ActionTagExampleTest extends ITBaseTest {
- public void test() {
- beginAt("/tags/ui/actionTagExample!input.action");
- assertTextPresent("This text is from the called class");
- }
+import org.junit.Assert;
+import org.junit.Test;
+
+import com.gargoylesoftware.htmlunit.WebClient;
+import com.gargoylesoftware.htmlunit.html.HtmlPage;
+public class ActionTagExampleTest {
+ @Test
+ public void test() throws Exception {
+ try (final WebClient webClient = new WebClient()) {
+ final HtmlPage page = webClient.getPage(ParameterUtils.getBaseUrl() + \
"/tags/ui/actionTagExample!input.action"); +
+ final String pageAsText = page.asText();
+ Assert.assertTrue(pageAsText.contains("This text is from the called \
class")); + }
+ }
}
diff --git a/apps/showcase/src/test/java/it/org/apache/struts2/showcase/AsyncTest.java \
b/apps/showcase/src/test/java/it/org/apache/struts2/showcase/AsyncTest.java index \
dc93ba5..d23064e 100644
--- a/apps/showcase/src/test/java/it/org/apache/struts2/showcase/AsyncTest.java
+++ b/apps/showcase/src/test/java/it/org/apache/struts2/showcase/AsyncTest.java
@@ -18,13 +18,35 @@
*/
package it.org.apache.struts2.showcase;
-public class AsyncTest extends ITBaseTest {
- public void testChatRoom() throws InterruptedException {
- beginAt("/async/index.html");
-
- setTextField("msg", "hello");
- submit();
- Thread.sleep(4000);
- assertTextInElement("msgs", "hello");
+import org.junit.Assert;
+import org.junit.Test;
+
+import com.gargoylesoftware.htmlunit.WebClient;
+import com.gargoylesoftware.htmlunit.html.DomElement;
+import com.gargoylesoftware.htmlunit.html.HtmlForm;
+import com.gargoylesoftware.htmlunit.html.HtmlPage;
+import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
+import com.gargoylesoftware.htmlunit.html.HtmlTextInput;
+
+public class AsyncTest {
+ @Test
+ public void testChatRoom() throws Exception {
+ try (final WebClient webClient = new WebClient()) {
+ final HtmlPage page = webClient.getPage(ParameterUtils.getBaseUrl() + \
"/async/index.html"); +
+ final HtmlForm form = page.getForms().get(0);
+
+ final HtmlTextInput textField = form.getInputByName("msg");
+ textField.type("hello");
+
+ final HtmlSubmitInput button = form.getInputByValue("Send");
+ final HtmlPage page2 = button.click();
+
+ Thread.sleep(4000);
+
+ final DomElement msgs = page2.getElementById("msgs");
+
+ Assert.assertEquals("hello", msgs.asText());
+ }
}
}
diff --git a/apps/showcase/src/test/java/it/org/apache/struts2/showcase/CRUDTest.java \
b/apps/showcase/src/test/java/it/org/apache/struts2/showcase/CRUDTest.java index \
880f4aa..37f185e 100644
--- a/apps/showcase/src/test/java/it/org/apache/struts2/showcase/CRUDTest.java
+++ b/apps/showcase/src/test/java/it/org/apache/struts2/showcase/CRUDTest.java
@@ -20,17 +20,34 @@
*/
package it.org.apache.struts2.showcase;
-public class CRUDTest extends ITBaseTest {
- public void testCreate() {
- beginAt("/skill/edit.action");
+import org.junit.Assert;
+import org.junit.Test;
- setTextField("currentSkill.name", "somename1");
- setTextField("currentSkill.description", "somedescription1");
+import com.gargoylesoftware.htmlunit.WebClient;
+import com.gargoylesoftware.htmlunit.html.HtmlForm;
+import com.gargoylesoftware.htmlunit.html.HtmlPage;
+import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
+import com.gargoylesoftware.htmlunit.html.HtmlTextInput;
- submit();
+public class CRUDTest {
+ @Test
+ public void testCreate() throws Exception {
+ try (final WebClient webClient = new WebClient()) {
+ final HtmlPage page = webClient.getPage(ParameterUtils.getBaseUrl() + \
"/skill/edit.action");
- beginAt("/skill/list.action");
- assertTextPresent("somename1");
- assertTextPresent("somedescription1");
+ final HtmlForm form = page.getForms().get(0);
+
+ final HtmlTextInput textField = \
form.getInputByName("currentSkill.name"); + textField.type("somename1");
+ final HtmlTextInput textField2 = \
form.getInputByName("currentSkill.description"); + \
textField2.type("somedescription1"); +
+ final HtmlSubmitInput button = form.getInputByValue("Save");
+ final HtmlPage page2 = button.click();
+ final String page2Text = page2.asText();
+
+ Assert.assertTrue(page2Text.contains("somename1"));
+ Assert.assertTrue(page2Text.contains("somedescription1"));
+ }
}
}
diff --git a/apps/showcase/src/test/java/it/org/apache/struts2/showcase/ComponentTagExampleTest.java \
b/apps/showcase/src/test/java/it/org/apache/struts2/showcase/ComponentTagExampleTest.java
index 9bf0523..d318824 100644
--- a/apps/showcase/src/test/java/it/org/apache/struts2/showcase/ComponentTagExampleTest.java
+++ b/apps/showcase/src/test/java/it/org/apache/struts2/showcase/ComponentTagExampleTest.java
@@ -20,12 +20,24 @@
*/
package it.org.apache.struts2.showcase;
-public class ComponentTagExampleTest extends ITBaseTest {
- public void test() {
- beginAt("/tags/ui/componentTagExample.jsp");
- assertTextPresent("Freemarker Custom Template - parameter 'paramName' - \
paramValue1");
- assertTextPresent("Freemarker Custom Template - parameter 'paramName' - \
paramValue4");
- assertTextPresent("JSP Custom Template - parameter 'paramName' - \
paramValue2");
- assertTextPresent("JSP Custom Template - parameter 'paramName' - \
paramValue3"); +import org.junit.Assert;
+import org.junit.Test;
+
+import com.gargoylesoftware.htmlunit.WebClient;
+import com.gargoylesoftware.htmlunit.html.HtmlPage;
+
+public class ComponentTagExampleTest {
+ @Test
+ public void test() throws Exception {
+ try (final WebClient webClient = new WebClient()) {
+ final HtmlPage page = webClient
+ .getPage(ParameterUtils.getBaseUrl() + \
"/tags/ui/componentTagExample.action"); +
+ final String pageAsText = page.asText();
+ Assert.assertTrue(pageAsText.contains("Freemarker Custom Template - \
parameter 'paramName' - paramValue1")); + \
Assert.assertTrue(pageAsText.contains("Freemarker Custom Template - parameter \
'paramName' - paramValue4")); + Assert.assertTrue(pageAsText.contains("JSP \
Custom Template - parameter 'paramName' - paramValue2")); + \
Assert.assertTrue(pageAsText.contains("JSP Custom Template - parameter 'paramName' - \
paramValue3")); + }
}
}
diff --git a/apps/showcase/src/test/java/it/org/apache/struts2/showcase/ConversionTest.java \
b/apps/showcase/src/test/java/it/org/apache/struts2/showcase/ConversionTest.java \
index b212646..ff6b0bd 100644
--- a/apps/showcase/src/test/java/it/org/apache/struts2/showcase/ConversionTest.java
+++ b/apps/showcase/src/test/java/it/org/apache/struts2/showcase/ConversionTest.java
@@ -20,48 +20,82 @@
*/
package it.org.apache.struts2.showcase;
-public class ConversionTest extends ITBaseTest {
- public void testList() {
- beginAt("/conversion/enterPersonsInfo.action");
- setTextField("persons[0].name", "name0");
- setTextField("persons[0].age", "0");
- setTextField("persons[1].name", "name1");
- setTextField("persons[1].age", "1");
- setTextField("persons[2].name", "name2");
- setTextField("persons[2].age", "2");
-
- submit();
-
- assertTextPresent("SET 0 Name: name0");
- assertTextPresent("SET 0 Age: 0");
- assertTextPresent("SET 1 Name: name1");
- assertTextPresent("SET 1 Age: 1");
- assertTextPresent("SET 2 Name: name2");
- assertTextPresent("SET 2 Age: 2");
+import org.junit.Assert;
+import org.junit.Test;
+
+import com.gargoylesoftware.htmlunit.WebClient;
+import com.gargoylesoftware.htmlunit.html.HtmlForm;
+import com.gargoylesoftware.htmlunit.html.HtmlPage;
+import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
+
+public class ConversionTest {
+ @Test
+ public void testList() throws Exception {
+ try (final WebClient webClient = new WebClient()) {
+ final HtmlPage page = webClient
+ .getPage(ParameterUtils.getBaseUrl() + \
"/conversion/enterPersonsInfo.action"); +
+ final HtmlForm form = page.getForms().get(0);
+
+ form.getInputByName("persons[0].name").type("name0");
+ form.getInputByName("persons[0].age").type("0");
+ form.getInputByName("persons[1].name").type("name1");
+ form.getInputByName("persons[1].age").type("1");
+ form.getInputByName("persons[2].name").type("name2");
+ form.getInputByName("persons[2].age").type("2");
+
+ final HtmlSubmitInput button = form.getInputByValue("Submit");
+ final HtmlPage page2 = button.click();
+ final String page2Text = page2.asText();
+
+ Assert.assertTrue(page2Text.contains("SET 0 Name: name0"));
+ Assert.assertTrue(page2Text.contains("SET 0 Age: 0"));
+ Assert.assertTrue(page2Text.contains("SET 1 Name: name1"));
+ Assert.assertTrue(page2Text.contains("SET 1 Age: 1"));
+ Assert.assertTrue(page2Text.contains("SET 2 Name: name2"));
+ Assert.assertTrue(page2Text.contains("SET 2 Age: 2"));
+ }
}
- public void testSet() {
- beginAt("/conversion/enterAddressesInfo.action");
- setTextField("addresses('id0').address", "address0");
- setTextField("addresses('id1').address", "address1");
- setTextField("addresses('id2').address", "address2");
+ @Test
+ public void testSet() throws Exception {
+ try (final WebClient webClient = new WebClient()) {
+ final HtmlPage page = webClient
+ .getPage(ParameterUtils.getBaseUrl() + \
"/conversion/enterAddressesInfo.action");
- submit();
+ final HtmlForm form = page.getForms().get(0);
- assertTextPresent("id0 -> address0");
- assertTextPresent("id1 -> address1");
- assertTextPresent("id2 -> address2");
+ form.getInputByName("addresses('id0').address").type("address0");
+ form.getInputByName("addresses('id1').address").type("address1");
+ form.getInputByName("addresses('id2').address").type("address2");
+
+ final HtmlSubmitInput button = form.getInputByValue("Submit");
+ final HtmlPage page2 = button.click();
+ final String page2Text = page2.asText();
+
+ Assert.assertTrue(page2Text.contains("id0 -> address0"));
+ Assert.assertTrue(page2Text.contains("id1 -> address1"));
+ Assert.assertTrue(page2Text.contains("id2 -> address2"));
+ }
}
- public void testEnum() {
- beginAt("/conversion/enterOperationEnumInfo.action");
- checkCheckbox("selectedOperations", "ADD");
- checkCheckbox("selectedOperations", "MINUS");
+ @Test
+ public void testEnum() throws Exception {
+ try (final WebClient webClient = new WebClient()) {
+ final HtmlPage page = webClient
+ .getPage(ParameterUtils.getBaseUrl() + \
"/conversion/enterOperationEnumInfo.action"); +
+ final HtmlForm form = page.getForms().get(0);
- submit();
+ form.getInputByValue("ADD").setChecked(true);
+ form.getInputByValue("MINUS").setChecked(true);
- assertTextPresent("ADD");
- assertTextPresent("MINUS");
+ final HtmlSubmitInput button = form.getInputByValue("Submit");
+ final HtmlPage page2 = button.click();
+ final String page2Text = page2.asText();
+
+ Assert.assertTrue(page2Text.contains("ADD"));
+ Assert.assertTrue(page2Text.contains("MINUS"));
+ }
}
}
-
diff --git a/apps/showcase/src/test/java/it/org/apache/struts2/showcase/ExecAndWaitTest.java \
b/apps/showcase/src/test/java/it/org/apache/struts2/showcase/ExecAndWaitTest.java \
index fce922b..445b340 100644
--- a/apps/showcase/src/test/java/it/org/apache/struts2/showcase/ExecAndWaitTest.java
+++ b/apps/showcase/src/test/java/it/org/apache/struts2/showcase/ExecAndWaitTest.java
@@ -20,16 +20,35 @@
*/
package it.org.apache.struts2.showcase;
-public class ExecAndWaitTest extends ITBaseTest {
- public void testNodelay() throws InterruptedException {
- beginAt("/wait/example1.jsp");
+import org.junit.Assert;
+import org.junit.Test;
- setTextField("time", "7000");
- submit();
- assertTextPresent("We are processing your request. Please wait.");
+import com.gargoylesoftware.htmlunit.WebClient;
+import com.gargoylesoftware.htmlunit.html.HtmlForm;
+import com.gargoylesoftware.htmlunit.html.HtmlPage;
+import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
+import com.gargoylesoftware.htmlunit.html.HtmlTextInput;
- //hit it again
- beginAt("/wait/longProcess1.action?time=1000");
- assertTextPresent("We are processing your request. Please wait.");
+public class ExecAndWaitTest {
+ @Test
+ public void testNodelay() throws Exception {
+ try (final WebClient webClient = new WebClient()) {
+ final HtmlPage page = webClient.getPage(ParameterUtils.getBaseUrl() + \
"/wait/example1.action"); +
+ final HtmlForm form = page.getForms().get(0);
+
+ final HtmlTextInput textField = form.getInputByName("time");
+ textField.type("7000");
+
+ final HtmlSubmitInput button = form.getInputByValue("submit");
+ final HtmlPage page2 = button.click();
+
+ Assert.assertTrue(page2.asText().contains("We are processing your \
request. Please wait.")); +
+ // hit it again
+ final HtmlPage page3 = webClient
+ .getPage(ParameterUtils.getBaseUrl() + \
"/wait/longProcess1.action?time=1000"); + \
Assert.assertTrue(page3.asText().contains("We are processing your request. Please \
wait.")); + }
}
}
diff --git a/apps/showcase/src/test/java/it/org/apache/struts2/showcase/FileDownloadTest.java \
b/apps/showcase/src/test/java/it/org/apache/struts2/showcase/FileDownloadTest.java \
index 1e7aa41..333bf42 100644
--- a/apps/showcase/src/test/java/it/org/apache/struts2/showcase/FileDownloadTest.java
+++ b/apps/showcase/src/test/java/it/org/apache/struts2/showcase/FileDownloadTest.java
@@ -20,21 +20,50 @@
*/
package it.org.apache.struts2.showcase;
+import java.io.IOException;
+import java.io.InputStream;
import java.net.URL;
-import java.net.MalformedURLException;
-public class FileDownloadTest extends ITBaseTest {
- public void testImage() throws InterruptedException, MalformedURLException {
- beginAt("/filedownload/download.action");
+import org.junit.Assert;
+import org.junit.Test;
- URL url = new \
URL("http://svn.apache.org/repos/asf/struts/struts2/trunk/apps/showcase/src/main/webapp/images/struts.gif");
- assertDownloadedFileEquals(url);
+import com.gargoylesoftware.htmlunit.Page;
+import com.gargoylesoftware.htmlunit.WebClient;
+
+public class FileDownloadTest {
+ @Test
+ public void testImage() throws Exception {
+ try (final WebClient webClient = new WebClient()) {
+ final Page page = webClient.getPage(ParameterUtils.getBaseUrl() + \
"/filedownload/download.action"); +
+ URL url = new URL(
+ \
"https://gitbox.apache.org/repos/asf?p=struts.git;a=blob_plain;f=apps/showcase/src/main/webapp/images/struts.gif;hb=HEAD");
+
+ Assert.assertTrue(areFilesEqual(url.openStream(), \
page.getWebResponse().getContentAsStream())); + }
}
- public void testZip() throws InterruptedException, MalformedURLException {
- beginAt("/filedownload/download2.action");
+ public void testZip() throws Exception {
+ try (final WebClient webClient = new WebClient()) {
+ final Page page = webClient.getPage(ParameterUtils.getBaseUrl() + \
"/filedownload/download2.action"); +
+ URL url = new URL(
+ \
"https://gitbox.apache.org/repos/asf?p=struts.git;a=blob_plain;f=apps/showcase/src/main/webapp/images/struts-gif.zip;hb=HEAD");
+
+ Assert.assertTrue(areFilesEqual(url.openStream(), \
page.getWebResponse().getContentAsStream())); + }
+ }
- URL url = new \
URL("http://svn.apache.org/repos/asf/struts/struts2/trunk/apps/showcase/src/main/webapp/images/struts-gif.zip");
- assertDownloadedFileEquals(url);
+ private boolean areFilesEqual(InputStream i1, InputStream i2) throws IOException \
{ + // read and compare bytes pair-wise
+ int b1, b2;
+ do {
+ b1 = i1.read();
+ b2 = i2.read();
+ } while (b1 == b2 && b1 != -1 && b2 != -1);
+ i1.close();
+ i2.close();
+ // true only if end of file is reached for both
+ return (b1 == -1) && (b2 == -1);
}
}
diff --git a/apps/showcase/src/test/java/it/org/apache/struts2/showcase/FreeMarkerManagerTest.java \
b/apps/showcase/src/test/java/it/org/apache/struts2/showcase/FreeMarkerManagerTest.java
index e0006a6..61c0ddd 100644
--- a/apps/showcase/src/test/java/it/org/apache/struts2/showcase/FreeMarkerManagerTest.java
+++ b/apps/showcase/src/test/java/it/org/apache/struts2/showcase/FreeMarkerManagerTest.java
@@ -20,25 +20,40 @@
*/
package it.org.apache.struts2.showcase;
-import java.net.MalformedURLException;
-import java.net.URL;
+import org.junit.Assert;
+import org.junit.Test;
-public class FreeMarkerManagerTest extends ITBaseTest {
- public void testCustomManager() {
- beginAt("/freemarker/customFreemarkerManagerDemo.action");
+import com.gargoylesoftware.htmlunit.WebClient;
+import com.gargoylesoftware.htmlunit.html.DomElement;
+import com.gargoylesoftware.htmlunit.html.HtmlPage;
- String date = getElementTextByXPath("//*[@id='todaysDate']");
- assertNotNull(date);
- assertTrue(date.length() > 0);
+public class FreeMarkerManagerTest {
+ @Test
+ public void testCustomManager() throws Exception {
+ try (final WebClient webClient = new WebClient()) {
+ final HtmlPage page = webClient
+ .getPage(ParameterUtils.getBaseUrl() + \
"/freemarker/customFreemarkerManagerDemo.action");
- String time = getElementTextByXPath("//*[@id='timeNow']");
- assertNotNull(time);
- assertTrue(time.length() > 0);
+ final DomElement date = page.getElementById("todaysDate");
+ Assert.assertNotNull(date);
+ Assert.assertTrue(date.asText().length() > 0);
+
+ final DomElement time = page.getElementById("timeNow");
+ Assert.assertNotNull(time);
+ Assert.assertTrue(time.asText().length() > 0);
+ }
}
- public void testTags() {
- beginAt("/freemarker/standardTags.action");
- assertElementPresent("test_name");
- assertElementPresent("test_");
+ @Test
+ public void testTags() throws Exception {
+ try (final WebClient webClient = new WebClient()) {
+ final HtmlPage page = webClient.getPage(ParameterUtils.getBaseUrl() + \
"/freemarker/standardTags.action"); +
+ final DomElement date = page.getElementById("test_name");
+ Assert.assertNotNull(date);
+
+ final DomElement time = page.getElementById("test");
+ Assert.assertNotNull(time);
+ }
}
}
diff --git a/apps/showcase/src/test/java/it/org/apache/struts2/showcase/ITBaseTest.java \
b/apps/showcase/src/test/java/it/org/apache/struts2/showcase/ITBaseTest.java deleted \
file mode 100644 index 0aa35f1..0000000
--- a/apps/showcase/src/test/java/it/org/apache/struts2/showcase/ITBaseTest.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * $Id$
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you 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 it.org.apache.struts2.showcase;
-
-import net.sourceforge.jwebunit.junit.WebTestCase;
-
-public abstract class ITBaseTest extends WebTestCase {
-
- public void setUp() throws Exception {
- getTestContext().setBaseUrl(ParameterUtils.getBaseUrl());
- }
-}
diff --git a/apps/showcase/src/test/java/it/org/apache/struts2/showcase/staticcontent/StaticContentTest.java \
b/apps/showcase/src/test/java/it/org/apache/struts2/showcase/StaticContentTest.java \
similarity index 55% rename from \
apps/showcase/src/test/java/it/org/apache/struts2/showcase/staticcontent/StaticContentTest.java
rename to apps/showcase/src/test/java/it/org/apache/struts2/showcase/StaticContentTest.java
index ca88fa9..8e274dd 100644
--- a/apps/showcase/src/test/java/it/org/apache/struts2/showcase/staticcontent/StaticContentTest.java
+++ b/apps/showcase/src/test/java/it/org/apache/struts2/showcase/StaticContentTest.java
@@ -16,31 +16,34 @@
* specific language governing permissions and limitations
* under the License.
*/
-package it.org.apache.struts2.showcase.staticcontent;
+package it.org.apache.struts2.showcase;
-import it.org.apache.struts2.showcase.ITBaseTest;
+import org.junit.Assert;
+import org.junit.Test;
-import java.io.IOException;
+import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException;
+import com.gargoylesoftware.htmlunit.WebClient;
-import net.sourceforge.jwebunit.exception.TestingEngineResponseException;
+public class StaticContentTest {
-public class StaticContentTest extends ITBaseTest {
-
- public void testInvalidRersources1() throws IOException {
- try {
- beginAt("/struts..");
- fail("Previous request should have failed");
- } catch (TestingEngineResponseException ex) {
- // ok
+ @Test
+ public void testInvalidRersources1() throws Exception {
+ try (final WebClient webClient = new WebClient()) {
+ try {
+ webClient.getPage(ParameterUtils.getBaseUrl() + "/struts..");
+ Assert.fail("Previous request should have failed");
+ } catch (FailingHttpStatusCodeException e) {
+ }
}
}
- public void testInvalidRersources2() throws IOException {
- try {
- beginAt("/struts/..%252f");
- fail("Previous request should have failed");
- } catch (TestingEngineResponseException ex) {
- // ok
+ public void testInvalidRersources2() throws Exception {
+ try (final WebClient webClient = new WebClient()) {
+ try {
+ webClient.getPage(ParameterUtils.getBaseUrl() + "/struts/..%252f");
+ Assert.fail("Previous request should have failed");
+ } catch (FailingHttpStatusCodeException e) {
+ }
}
}
diff --git a/apps/showcase/src/test/java/it/org/apache/struts2/showcase/UITagExampleTest.java \
b/apps/showcase/src/test/java/it/org/apache/struts2/showcase/UITagExampleTest.java \
index 0f50e81..03bf74e 100644
--- a/apps/showcase/src/test/java/it/org/apache/struts2/showcase/UITagExampleTest.java
+++ b/apps/showcase/src/test/java/it/org/apache/struts2/showcase/UITagExampleTest.java
@@ -20,36 +20,56 @@
*/
package it.org.apache.struts2.showcase;
-public class UITagExampleTest extends ITBaseTest {
- public void testInputForm() {
- setScriptingEnabled(false);
- beginAt("/tags/ui/example!input.action");
- assertFormPresent("exampleSubmit");
- // text box
- assertFormElementPresent("name");
- // textarea
- assertFormElementPresent("bio");
- // select
- assertFormElementPresent("favouriteColor");
- // checkbox list
- assertFormElementPresent("friends");
- // checkbox
- assertFormElementPresent("legalAge");
-
- // set fields
- setTextField("name", "name");
- setTextField("bio", "bio");
- selectOption("favouriteColor", "Red");
- checkCheckbox("friends", "Patrick");
- checkCheckbox("friends", "Jason");
- checkCheckbox("legalAge");
-
- submit();
-
- assertTextInElement("name", "name");
- assertTextInElement("bio", "bio");
- assertTextInElement("favouriteColor", "Red");
- assertTextInElement("friends", "[Patrick, Jason]");
- assertTextInElement("legalAge", "true");
+import org.junit.Assert;
+import org.junit.Test;
+
+import com.gargoylesoftware.htmlunit.WebClient;
+import com.gargoylesoftware.htmlunit.html.HtmlCheckBoxInput;
+import com.gargoylesoftware.htmlunit.html.HtmlForm;
+import com.gargoylesoftware.htmlunit.html.HtmlPage;
+import com.gargoylesoftware.htmlunit.html.HtmlSelect;
+import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
+import com.gargoylesoftware.htmlunit.html.HtmlTextArea;
+import com.gargoylesoftware.htmlunit.html.HtmlTextInput;
+
+public class UITagExampleTest {
+ @Test
+ public void testInputForm() throws Exception {
+ try (final WebClient webClient = new WebClient()) {
+ final HtmlPage page = webClient.getPage(ParameterUtils.getBaseUrl() + \
"/tags/ui/example!input.action"); +
+ final HtmlForm form = page.getFormByName("exampleSubmit");
+ Assert.assertNotNull(form);
+
+ final HtmlTextInput textField = form.getInputByName("name");
+ final HtmlTextArea textField2 = form.getTextAreaByName("bio");
+ final HtmlSelect textField3 = form.getSelectByName("favouriteColor");
+ final HtmlCheckBoxInput textField4 = form.getInputByValue("Patrick");
+ final HtmlCheckBoxInput textField41 = form.getInputByValue("Jason");
+ final HtmlCheckBoxInput textField5 = form.getInputByName("legalAge");
+
+ Assert.assertNotNull(textField);
+ Assert.assertNotNull(textField2);
+ Assert.assertNotNull(textField3);
+ Assert.assertNotNull(textField4);
+ Assert.assertNotNull(textField41);
+ Assert.assertNotNull(textField5);
+
+ textField.type("name");
+ textField2.type("bio");
+ textField3.setSelectedAttribute("Red", true);
+ textField4.setChecked(true);
+ textField41.setChecked(true);
+ textField5.setChecked(true);
+
+ final HtmlSubmitInput button = form.getInputByValue("Submit");
+ final HtmlPage page2 = button.click();
+
+ Assert.assertEquals("name", page2.getElementById("name").asText());
+ Assert.assertEquals("bio", page2.getElementById("bio").asText());
+ Assert.assertEquals("Red", \
page2.getElementById("favouriteColor").asText()); + \
Assert.assertEquals("[Patrick, Jason]", page2.getElementById("friends").asText()); + \
Assert.assertEquals("true", page2.getElementById("legalAge").asText()); + }
}
}
diff --git a/apps/showcase/src/test/java/it/org/apache/struts2/showcase/ValidationTest.java \
b/apps/showcase/src/test/java/it/org/apache/struts2/showcase/ValidationTest.java \
index 86a3fb2..3e7940a 100644
--- a/apps/showcase/src/test/java/it/org/apache/struts2/showcase/ValidationTest.java
+++ b/apps/showcase/src/test/java/it/org/apache/struts2/showcase/ValidationTest.java
@@ -20,27 +20,44 @@
*/
package it.org.apache.struts2.showcase;
-public class ValidationTest extends ITBaseTest {
- public void testFieldValidators() {
- beginAt("/validation/showFieldValidatorsExamples.action");
+import org.junit.Assert;
+import org.junit.Test;
- setTextField("integerValidatorField", "nonint");
- setTextField("dateValidatorField", "nondate");
- setTextField("emailValidatorField", "!@@#%");
- setTextField("urlValidatorField", "!@@#%");
- setTextField("stringLengthValidatorField", "a");
- setTextField("regexValidatorField", "abc");
- setTextField("fieldExpressionValidatorField", "abc");
+import com.gargoylesoftware.htmlunit.WebClient;
+import com.gargoylesoftware.htmlunit.html.HtmlForm;
+import com.gargoylesoftware.htmlunit.html.HtmlPage;
+import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
- submit();
+public class ValidationTest {
+ @Test
+ public void testFieldValidators() throws Exception {
+ try (final WebClient webClient = new WebClient()) {
+ final HtmlPage page = webClient
+ .getPage(ParameterUtils.getBaseUrl() + \
"/validation/showFieldValidatorsExamples.action");
- assertTextPresent("Invalid field value for field \"dateValidatorField\"");
- assertTextPresent("Invalid field value for field \
\"integerValidatorField\"");
- assertTextPresent("required and must be string");
- assertTextPresent("must be a valid email if supplied");
- assertTextPresent("must be a valid url if supplied ");
- assertTextPresent("must be a String of a specific greater than 1 less than 5 \
if specified ");
- assertTextPresent("regexValidatorField must match a regexp (.*\\.txt) if \
specified ");
- assertTextPresent("must be the same as the Required Validator Field if \
specified "); + final HtmlForm form = page.getForms().get(0);
+
+ form.getInputByName("integerValidatorField").type("nonint");
+ form.getInputByName("dateValidatorField").type("nondate");
+ form.getInputByName("emailValidatorField").type("!@@#%");
+ form.getInputByName("urlValidatorField").type("!@@#%");
+ form.getInputByName("stringLengthValidatorField").type("a");
+ form.getInputByName("regexValidatorField").type("abc");
+ form.getInputByName("fieldExpressionValidatorField").type("abc");
+
+ final HtmlSubmitInput button = form.getInputByValue("Submit");
+ final HtmlPage page2 = button.click();
+ final String page2Text = page2.asText();
+
+ Assert.assertTrue(page2Text.contains("Invalid field value for field \
\"dateValidatorField\"")); + Assert.assertTrue(page2Text.contains("Invalid \
field value for field \"integerValidatorField\"")); + \
Assert.assertTrue(page2Text.contains("required and must be string")); + \
Assert.assertTrue(page2Text.contains("must be a valid email if supplied")); + \
Assert.assertTrue(page2Text.contains("must be a valid url if supplied")); + \
Assert.assertTrue( + page2Text.contains("must be a String of a \
specific greater than 1 less than 5 if specified")); + \
Assert.assertTrue(page2Text.contains("regexValidatorField must match a regexp \
(.*\\.txt) if specified")); + Assert.assertTrue(page2Text.contains("must \
be the same as the Required Validator Field if specified")); + }
}
}
diff --git a/core/pom.xml b/core/pom.xml
index f5e0dac..f74a3fe 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -41,7 +41,6 @@
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
- <argLine>-Duser.language=en -Duser.region=US</argLine>
<properties>
<property>
<name>maven.testng.output.dir</name>
diff --git a/pom.xml b/pom.xml
index 15bce62..bdde241 100644
--- a/pom.xml
+++ b/pom.xml
@@ -191,17 +191,50 @@
<profile>
<id>travis-coveralls</id>
<build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <argLine>${argLine}</argLine>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-failsafe-plugin</artifactId>
+ <configuration>
+ <argLine>${argLine}</argLine>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.mortbay.jetty</groupId>
+ <artifactId>jetty-maven-plugin</artifactId>
+ <configuration>
+ <jvmArgs>${argLine}</jvmArgs>
+ </configuration>
+ </plugin>
+ </plugins>
+ </pluginManagement>
<plugins>
<plugin>
- <groupId>org.codehaus.mojo</groupId>
- <artifactId>cobertura-maven-plugin</artifactId>
- <version>2.7</version>
- <configuration>
- <format>xml</format>
- <maxmem>256m</maxmem>
- <!-- aggregated reports for multi-module projects -->
- <aggregate>true</aggregate>
- </configuration>
+ <groupId>org.jacoco</groupId>
+ <artifactId>jacoco-maven-plugin</artifactId>
+ <version>0.8.2</version>
+ <executions>
+ <execution>
+ <id>prepare-agent</id>
+ <goals>
+ <goal>prepare-agent</goal>
+ </goals>
+ </execution>
+ <execution>
+ <id>prepare-agent-integration</id>
+ <goals>
+ <goal>prepare-agent-integration</goal>
+ </goals>
+ </execution>
+ </executions>
</plugin>
<plugin>
<groupId>org.eluder.coveralls</groupId>
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic