forked from biblelamp/JavaExercises
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathHW7Lesson.java
More file actions
122 lines (105 loc) · 3.42 KB
/
HW7Lesson.java
File metadata and controls
122 lines (105 loc) · 3.42 KB
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
/**
* Java. Level 3. Lesson 7. Homework
*
* @author Sergey Iryupin
* @version Jul 30, 2018
* @link https://github.com/biblelamp
*/
import java.lang.annotation.Target;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
public class HW7Lesson {
public static void main(String[] args) {
TestingClass.start(TestingClass.class);
}
}
class TestingClass {
public static void start(Class cls) {
performTests(cls);
}
private static void performTests(Class cls) throws RuntimeException {
TestingClass testingObj = null;
try {
testingObj = (TestingClass)cls.newInstance();
} catch (Exception e) {
e.printStackTrace();
return;
}
Method beforeMethod = null;
Method afterMethod = null;
Method[] methods = cls.getMethods();
List<MethodWithPriority> testingMethods = new ArrayList<>();
for (Method method : methods)
if (method.getAnnotation(BeforeSuite.class) != null) {
if (beforeMethod != null)
throw new RuntimeException("The method with the @BeforeSuite annotation should be one");
beforeMethod = method;
} else if (method.getAnnotation(AfterSuite.class) != null) {
if (afterMethod != null)
throw new RuntimeException("The method with the @AfterSuite annotation should be one");
afterMethod = method;
} else if (method.getAnnotation(Test.class) != null){
Test annotationTst = method.getAnnotation(Test.class);
testingMethods.add(new MethodWithPriority(method, annotationTst.value()));
}
testingMethods.sort(
Comparator.comparing(MethodWithPriority::getPriority));
try {
if (beforeMethod != null)
beforeMethod.invoke(testingObj);
for (MethodWithPriority methodWP : testingMethods)
methodWP.method.invoke(testingObj);
if (afterMethod != null)
afterMethod.invoke(testingObj);
} catch (Exception e){
e.printStackTrace();
}
}
@Test(value = 5)
public void Test5() {
System.out.println("Performed Test №5");
}
@Test(value = 3)
public void Test2(){
System.out.println("Performed Test №2");
}
@Test(value = 1)
public void Test1(){
System.out.println("Performed Test №1");
}
@BeforeSuite
public void BeforeAll(){
System.out.println("This method is performed before all");
}
@AfterSuite
public void AfterAll() {
System.out.println("This method is performed after all");
}
}
class MethodWithPriority {
public Method method;
public Integer priority;
public MethodWithPriority(Method method, int priority) {
this.method = method;
this.priority = priority;
}
public Integer getPriority() {
return priority;
}
}
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@interface BeforeSuite {}
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@interface AfterSuite {}
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@interface Test {
int value();
}