/
RunBeforeClasses.java
83 lines (77 loc) · 2.48 KB
/
RunBeforeClasses.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
/*******************************************************************************
* Copyright (c) 2017 Red Hat, Inc and others.
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Red Hat, Inc - initial API and implementation
*******************************************************************************/
package org.eclipse.reddeer.junit.internal.runner.statement;
import java.util.List;
import org.eclipse.reddeer.junit.internal.requirement.Requirements;
import org.eclipse.reddeer.junit.screenshot.ScreenshotCapturer;
import org.junit.BeforeClass;
import org.junit.runners.model.FrameworkMethod;
import org.junit.runners.model.Statement;
import org.junit.runners.model.TestClass;
/**
* Statement which runs before a test class. Upon failure a screenshot is
* captured.
*
* @author mlabuda@redhat.com
* @author ljelinko
* @author Andrej Podhradsky (apodhrad@redhat.com)
*
*/
public class RunBeforeClasses extends AbstractStatementWithScreenshot {
private final List<FrameworkMethod> beforeClasses;
private Requirements requirements;
/**
* Instantiates a new RunBeforeClasses. All requirements with runBeforeClass()
* will be evaluated before methods annotated by @BeforeClass.
*
* @param configId
* configuration id
* @param next
* next statement
* @param testClass
* test class
* @param requirements
* requirements
*/
public RunBeforeClasses(String configId, Statement next, TestClass testClass, Requirements requirements) {
super(configId, next, testClass, null, null);
this.beforeClasses = testClass.getAnnotatedMethods(BeforeClass.class);
this.requirements = requirements;
}
/*
* (non-Javadoc)
*
* @see org.junit.runners.model.Statement#evaluate()
*/
@Override
public void evaluate() throws Throwable {
FrameworkMethod before = null;
try {
requirements.runBeforeClass();
for (FrameworkMethod bfr : beforeClasses) {
before = bfr;
before.invokeExplosively(target);
}
} catch (Throwable throwable) {
if (ScreenshotCapturer.shouldCaptureScreenshotOnException(throwable)) {
if (isClassLevel()) {
frameworkMethod = before;
createScreenshot("BeforeClass");
} else {
createScreenshot("BeforeClass_" + before.getName());
}
}
throw throwable;
}
nextStatement.evaluate();
}
}