From 6d7eb19f39bf764421d0ef0521dfd2996e97d6ee Mon Sep 17 00:00:00 2001 From: Olivier Lamy Date: Fri, 2 Mar 2012 18:38:16 +0000 Subject: [PATCH] use a rule to execute test and being able to capture screenshots git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@1296372 13f79535-47bb-0310-9956-ffa450edef68 --- .../apache/archiva/web/test/LoginTest.java | 2 +- .../web/test/parent/AbstractArchivaTest.java | 8 ++- .../web/test/parent/AbstractSeleniumTest.java | 18 +++-- .../web/test/tools/ArchivaSeleniumRunner.java | 6 +- .../web/test/tools/ScreenshotCaptureRule.java | 68 +++++++++++++++++++ 5 files changed, 86 insertions(+), 16 deletions(-) create mode 100644 archiva-modules/archiva-web/archiva-webapp-test-js/src/test/java/org/apache/archiva/web/test/tools/ScreenshotCaptureRule.java diff --git a/archiva-modules/archiva-web/archiva-webapp-test-js/src/test/java/org/apache/archiva/web/test/LoginTest.java b/archiva-modules/archiva-web/archiva-webapp-test-js/src/test/java/org/apache/archiva/web/test/LoginTest.java index 0c888e03c..33b9223c1 100644 --- a/archiva-modules/archiva-web/archiva-webapp-test-js/src/test/java/org/apache/archiva/web/test/LoginTest.java +++ b/archiva-modules/archiva-web/archiva-webapp-test-js/src/test/java/org/apache/archiva/web/test/LoginTest.java @@ -40,7 +40,7 @@ public class LoginTest goToLoginPage(); setFieldValue( "user-login-form-username", "badUsername" ); clickLinkWithLocator( "modal-login-ok", true ); - assertTextPresent( "This field is required." ); + assertTextPresent( "This field is required.f" ); } diff --git a/archiva-modules/archiva-web/archiva-webapp-test-js/src/test/java/org/apache/archiva/web/test/parent/AbstractArchivaTest.java b/archiva-modules/archiva-web/archiva-webapp-test-js/src/test/java/org/apache/archiva/web/test/parent/AbstractArchivaTest.java index 27b051466..b06bcb256 100644 --- a/archiva-modules/archiva-web/archiva-webapp-test-js/src/test/java/org/apache/archiva/web/test/parent/AbstractArchivaTest.java +++ b/archiva-modules/archiva-web/archiva-webapp-test-js/src/test/java/org/apache/archiva/web/test/parent/AbstractArchivaTest.java @@ -1,8 +1,9 @@ package org.apache.archiva.web.test.parent; -import org.apache.archiva.web.test.tools.ArchivaSeleniumRunner; -import org.junit.Before; +import org.apache.archiva.web.test.tools.ScreenshotCaptureRule; +import org.junit.Rule; import org.junit.runner.RunWith; +import org.junit.runners.BlockJUnit4ClassRunner; import java.io.File; import java.io.IOException; @@ -26,10 +27,11 @@ import java.io.IOException; * under the License. */ -@RunWith( ArchivaSeleniumRunner.class ) +@RunWith( BlockJUnit4ClassRunner.class ) public abstract class AbstractArchivaTest extends AbstractSeleniumTest { + protected String username; protected String fullname; diff --git a/archiva-modules/archiva-web/archiva-webapp-test-js/src/test/java/org/apache/archiva/web/test/parent/AbstractSeleniumTest.java b/archiva-modules/archiva-web/archiva-webapp-test-js/src/test/java/org/apache/archiva/web/test/parent/AbstractSeleniumTest.java index eabe6e879..d4811606d 100644 --- a/archiva-modules/archiva-web/archiva-webapp-test-js/src/test/java/org/apache/archiva/web/test/parent/AbstractSeleniumTest.java +++ b/archiva-modules/archiva-web/archiva-webapp-test-js/src/test/java/org/apache/archiva/web/test/parent/AbstractSeleniumTest.java @@ -22,9 +22,9 @@ package org.apache.archiva.web.test.parent; import com.thoughtworks.selenium.DefaultSelenium; import com.thoughtworks.selenium.Selenium; import org.apache.archiva.web.test.tools.AfterSeleniumFailure; -import org.junit.After; +import org.apache.archiva.web.test.tools.ScreenshotCaptureRule; import org.junit.Assert; -import org.junit.Before; +import org.junit.Rule; import java.io.File; import java.text.SimpleDateFormat; @@ -43,6 +43,10 @@ import java.util.Properties; public abstract class AbstractSeleniumTest { + + @Rule + public ScreenshotCaptureRule screenshotCaptureRule = new ScreenshotCaptureRule(); + public String browser = System.getProperty( "browser" ); public String baseUrl = System.getProperty( "baseUrl" ); @@ -57,22 +61,20 @@ public abstract class AbstractSeleniumTest public Properties p; - @Before public void open() throws Exception { p = new Properties(); p.load( this.getClass().getClassLoader().getResourceAsStream( "test.properties" ) ); open( baseUrl, browser, seleniumHost, seleniumPort, maxWaitTimeInMs ); + screenshotCaptureRule.selenium = selenium; assertAdminCreated(); } /** * Close selenium session. */ - @After public void close() - throws Exception { if ( getSelenium() != null ) { @@ -645,27 +647,23 @@ public abstract class AbstractSeleniumTest } @AfterSeleniumFailure - public void captureScreenShotOnFailure( Throwable failure ) + public void captureScreenShotOnFailure( Throwable failure, String methodName, String className ) { SimpleDateFormat sdf = new SimpleDateFormat( "yyyy.MM.dd-HH_mm_ss" ); String time = sdf.format( new Date() ); File targetPath = new File( "target", "screenshots" ); - String cName = this.getClass().getName(); - String methodName = ""; int lineNumber = 0; for ( StackTraceElement stackTrace : failure.getStackTrace() ) { if ( stackTrace.getClassName().equals( this.getClass().getName() ) ) { - methodName = stackTrace.getMethodName(); lineNumber = stackTrace.getLineNumber(); break; } } - String className = cName.substring( cName.lastIndexOf( '.' ) + 1 ); targetPath.mkdirs(); Selenium selenium = getSelenium(); String fileBaseName = methodName + "_" + className + ".java_" + lineNumber + "-" + time; diff --git a/archiva-modules/archiva-web/archiva-webapp-test-js/src/test/java/org/apache/archiva/web/test/tools/ArchivaSeleniumRunner.java b/archiva-modules/archiva-web/archiva-webapp-test-js/src/test/java/org/apache/archiva/web/test/tools/ArchivaSeleniumRunner.java index e3d81bbe6..a11b2d8ad 100644 --- a/archiva-modules/archiva-web/archiva-webapp-test-js/src/test/java/org/apache/archiva/web/test/tools/ArchivaSeleniumRunner.java +++ b/archiva-modules/archiva-web/archiva-webapp-test-js/src/test/java/org/apache/archiva/web/test/tools/ArchivaSeleniumRunner.java @@ -42,9 +42,11 @@ public class ArchivaSeleniumRunner super( clazz ); } + + /* - * FIXME move that to a Rule. - */ + * FIXME move that to a Rule. + */ @Override protected Statement withAfters( FrameworkMethod method, Object target, Statement statement ) { diff --git a/archiva-modules/archiva-web/archiva-webapp-test-js/src/test/java/org/apache/archiva/web/test/tools/ScreenshotCaptureRule.java b/archiva-modules/archiva-web/archiva-webapp-test-js/src/test/java/org/apache/archiva/web/test/tools/ScreenshotCaptureRule.java new file mode 100644 index 000000000..c96bc2ca8 --- /dev/null +++ b/archiva-modules/archiva-web/archiva-webapp-test-js/src/test/java/org/apache/archiva/web/test/tools/ScreenshotCaptureRule.java @@ -0,0 +1,68 @@ +package org.apache.archiva.web.test.tools; +/* + * 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. + */ + +import com.thoughtworks.selenium.Selenium; +import org.apache.archiva.web.test.parent.AbstractSeleniumTest; +import org.junit.rules.MethodRule; +import org.junit.runner.Description; +import org.junit.runners.model.FrameworkMethod; +import org.junit.runners.model.Statement; + +/** + * @author Olivier Lamy + */ +public class ScreenshotCaptureRule + implements MethodRule //TestRule +{ + + public Selenium selenium; + + public Statement apply( Statement base, FrameworkMethod method, Object target ) + { + try + { + ( (AbstractSeleniumTest) target ).open(); + method.getMethod().invoke( target ); + } + catch ( Throwable e ) + { + ( (AbstractSeleniumTest) target ).captureScreenShotOnFailure( e, method.getMethod().getName(), + target.getClass().getName() ); + } + finally + { + ( (AbstractSeleniumTest) target ).close(); + } + return new Statement() + { + @Override + public void evaluate() + throws Throwable + { + // no op + } + }; + } + + public Statement apply( Statement base, Description description ) + { + return base; //To change body of implemented methods use File | Settings | File Templates. + } +} -- 2.39.5