Author: uli Date: Fri Dec 16 14:16:37 2011 New Revision: 1215139 URL: http://svn.apache.org/viewvc?rev=1215139&view=rev Log: TAP5-1794 - Allow for configuring Selenium-based integration tests using an annotation
As an example, convert ActivationRequestParameterTests to use the new annotation. Added: tapestry/tapestry5/trunk/tapestry-test/src/main/java/org/apache/tapestry5/test/TapestryTestConfiguration.java Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/app1/ActivationRequestParameterTests.groovy tapestry/tapestry5/trunk/tapestry-test/src/main/java/org/apache/tapestry5/test/SeleniumTestCase.java Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/app1/ActivationRequestParameterTests.groovy URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/app1/ActivationRequestParameterTests.groovy?rev=1215139&r1=1215138&r2=1215139&view=diff ============================================================================== --- tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/app1/ActivationRequestParameterTests.groovy (original) +++ tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/app1/ActivationRequestParameterTests.groovy Fri Dec 16 14:16:37 2011 @@ -17,7 +17,9 @@ package org.apache.tapestry5.integration import org.apache.tapestry5.integration.TapestryCoreTestCase import org.testng.annotations.Test +import org.apache.tapestry5.test.TapestryTestConfiguration +@TapestryTestConfiguration(webAppFolder = "src/test/app1") class ActivationRequestParameterTests extends TapestryCoreTestCase { @Test Modified: tapestry/tapestry5/trunk/tapestry-test/src/main/java/org/apache/tapestry5/test/SeleniumTestCase.java URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-test/src/main/java/org/apache/tapestry5/test/SeleniumTestCase.java?rev=1215139&r1=1215138&r2=1215139&view=diff ============================================================================== --- tapestry/tapestry5/trunk/tapestry-test/src/main/java/org/apache/tapestry5/test/SeleniumTestCase.java (original) +++ tapestry/tapestry5/trunk/tapestry-test/src/main/java/org/apache/tapestry5/test/SeleniumTestCase.java Fri Dec 16 14:16:37 2011 @@ -156,13 +156,24 @@ public abstract class SeleniumTestCase e // Map<String, String> testParameters = xmlTest.getParameters(); - String webAppFolder = getParameter(xmlTest, TapestryTestConstants.WEB_APP_FOLDER_PARAMETER, "src/main/webapp"); - String container = getParameter(xmlTest, TapestryTestConstants.SERVLET_CONTAINER_PARAMETER, JETTY_7); - String contextPath = getParameter(xmlTest, TapestryTestConstants.CONTEXT_PATH_PARAMETER, ""); - int port = Integer.parseInt(getParameter(xmlTest, TapestryTestConstants.PORT_PARAMETER, "9090")); - int sslPort = Integer.parseInt(getParameter(xmlTest, TapestryTestConstants.SSL_PORT_PARAMETER, "8443")); + TapestryTestConfiguration annotation = this.getClass().getAnnotation(TapestryTestConfiguration.class); + if(annotation == null) + { + @TapestryTestConfiguration final class defaults{}; + annotation = defaults.class.getAnnotation(TapestryTestConfiguration.class); + } + + String webAppFolder = getParameter(xmlTest, TapestryTestConstants.WEB_APP_FOLDER_PARAMETER, + annotation.webAppFolder()); + String container = getParameter(xmlTest, TapestryTestConstants.SERVLET_CONTAINER_PARAMETER, + annotation.container()); + String contextPath = getParameter(xmlTest, TapestryTestConstants.CONTEXT_PATH_PARAMETER, + annotation.contextPath()); + int port = Integer.parseInt(getParameter(xmlTest, TapestryTestConstants.PORT_PARAMETER, annotation.port())); + int sslPort = Integer.parseInt(getParameter(xmlTest, TapestryTestConstants.SSL_PORT_PARAMETER, + annotation.sslPort())); String browserStartCommand = getParameter(xmlTest, TapestryTestConstants.BROWSER_START_COMMAND_PARAMETER, - "*firefox"); + annotation.browserStartCommand()); final Runnable stopWebServer = launchWebServer(container, webAppFolder, contextPath, port, sslPort); Added: tapestry/tapestry5/trunk/tapestry-test/src/main/java/org/apache/tapestry5/test/TapestryTestConfiguration.java URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-test/src/main/java/org/apache/tapestry5/test/TapestryTestConfiguration.java?rev=1215139&view=auto ============================================================================== --- tapestry/tapestry5/trunk/tapestry-test/src/main/java/org/apache/tapestry5/test/TapestryTestConfiguration.java (added) +++ tapestry/tapestry5/trunk/tapestry-test/src/main/java/org/apache/tapestry5/test/TapestryTestConfiguration.java Fri Dec 16 14:16:37 2011 @@ -0,0 +1,65 @@ +// Copyright 2011 The Apache Software Foundation +// +// 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 org.apache.tapestry5.test; + +import org.apache.tapestry5.test.SeleniumTestCase; + +import java.lang.annotation.*; + +/** + * To be used on Selenium-based integration tests that extend {@link SeleniumTestCase} as an alternative to using a + * TestNG XML configuration file. Using the XML file, it's intricate to run <em>individual</em> test classes or + * methods using IDEA's or Eclipse's TestNG integration. + * + * <b>Parameters coming from a TestNG XML configuration file take precedence over those supplied with the annotation.</b> + * + * Configures the container to be started for the tests and the browser to be used. + */ +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface TapestryTestConfiguration +{ + /** + * The folder for the web application root relative to the working directory. Defaults to "src/main/webapp". + */ + String webAppFolder() default "src/main/webapp"; + + /** + * Which container to use. Can be one of {@link SeleniumTestCase.JETTY_7} or {@link SeleniumTestCase.TOMCAT_6}. + * Defaults to {@link SeleniumTestCase.JETTY_7}. + */ + String container() default SeleniumTestCase.JETTY_7; + + /** + * The context path to make the application available under. Defaults to "", i.e. the context root. + */ + String contextPath() default ""; + + /** + * The port to listen on for HTTP requests. Defaults to "9090". + */ + String port() default "9090"; + + /** + * The port to listen on fot HTTPS requests. Defaults to "8443". + */ + String sslPort() default "8443"; + + /** + * The browser start command to use with Selenium. Defaults to "*firefox". + */ + String browserStartCommand() default "*firefox"; +}