]> source.dussan.org Git - archiva.git/blob
a817876ba10fec8187dc36fc234833b5829eed3b
[archiva.git] /
1 package org.apache.archiva.web.test.tools;
2 /*
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  */
20
21
22 import org.junit.runners.model.FrameworkMethod;
23 import org.junit.runners.model.MultipleFailureException;
24 import org.junit.runners.model.Statement;
25
26 import java.util.ArrayList;
27 import java.util.List;
28
29 /**
30  * @author Olivier Lamy
31  */
32 public class RunAfterSeleniumFailures
33     extends Statement
34 {
35
36     private final Statement next;
37
38     private final Object target;
39
40     private final List<FrameworkMethod> afterFailures;
41
42     public RunAfterSeleniumFailures( Statement next, List<FrameworkMethod> afterFailures, Object target )
43     {
44         this.next = next;
45         this.afterFailures = afterFailures;
46         this.target = target;
47     }
48
49     @Override
50     public void evaluate()
51         throws Throwable
52     {
53         List<Throwable> errors = new ArrayList<Throwable>();
54         errors.clear();
55         try
56         {
57             next.evaluate();
58         }
59         catch ( Throwable t )
60         {
61             errors.add( t );
62             for ( FrameworkMethod each : afterFailures )
63             {
64                 try
65                 {
66                     each.invokeExplosively( target, t );
67                 }
68                 catch ( Throwable t2 )
69                 {
70                     errors.add( t2 );
71                 }
72             }
73         }
74         if ( errors.isEmpty() )
75         {
76             return;
77         }
78         if ( errors.size() == 1 )
79         {
80             throw errors.get( 0 );
81         }
82         throw new MultipleFailureException( errors );
83     }
84
85 }