]> source.dussan.org Git - archiva.git/commitdiff
use a rule to execute test and being able to capture screenshots
authorOlivier Lamy <olamy@apache.org>
Fri, 2 Mar 2012 18:38:16 +0000 (18:38 +0000)
committerOlivier Lamy <olamy@apache.org>
Fri, 2 Mar 2012 18:38:16 +0000 (18:38 +0000)
git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@1296372 13f79535-47bb-0310-9956-ffa450edef68

archiva-modules/archiva-web/archiva-webapp-test-js/src/test/java/org/apache/archiva/web/test/LoginTest.java
archiva-modules/archiva-web/archiva-webapp-test-js/src/test/java/org/apache/archiva/web/test/parent/AbstractArchivaTest.java
archiva-modules/archiva-web/archiva-webapp-test-js/src/test/java/org/apache/archiva/web/test/parent/AbstractSeleniumTest.java
archiva-modules/archiva-web/archiva-webapp-test-js/src/test/java/org/apache/archiva/web/test/tools/ArchivaSeleniumRunner.java
archiva-modules/archiva-web/archiva-webapp-test-js/src/test/java/org/apache/archiva/web/test/tools/ScreenshotCaptureRule.java [new file with mode: 0644]

index 0c888e03c3f73dcb424ab3c8098b34aecf63e8df..33b9223c133ea4305a05043c752c6c117ceb0222 100644 (file)
@@ -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" );
 
     }
 
index 27b0514667af802dec67f84a9d9e62e1559167af..b06bcb25649126e8b7fa93fdf192e0361f079bc5 100644 (file)
@@ -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;
index eabe6e879eb130e11cf611ab96af01c5604e34a2..d4811606d78eb356cd882a5ea1f751c13fe0fe5c 100644 (file)
@@ -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;
index e3d81bbe653917d302aa2e908692beb580453232..a11b2d8addbbda86e4c4c21b7a7f91830aad2c66 100644 (file)
@@ -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 (file)
index 0000000..c96bc2c
--- /dev/null
@@ -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.
+    }
+}