Skip to content

Commit 28067ce

Browse files
committed
Annotation based matcher for test class evaluation
- Adds dependency extractor for grabbing the simple names of class level annotations - Adds new test cases Resolves #198 {minor} Signed-off-by: Esta Nagy <[email protected]>
1 parent a7d0121 commit 28067ce

File tree

2 files changed

+90
-0
lines changed

2 files changed

+90
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package com.github.nagyesta.abortmission.core.extractor.impl;
2+
3+
import com.github.nagyesta.abortmission.core.extractor.DependencyNameExtractor;
4+
5+
import java.util.Arrays;
6+
import java.util.Optional;
7+
import java.util.Set;
8+
import java.util.TreeSet;
9+
import java.util.stream.Collectors;
10+
11+
public class AnnotationSimpleNameDependencyExtractor implements DependencyNameExtractor {
12+
13+
@Override
14+
public Optional<Set<String>> apply(final Object o) {
15+
if (!(o instanceof Class<?>)) {
16+
return Optional.empty();
17+
}
18+
19+
final Class<?> testClass = (Class<?>) o;
20+
final Set<String> dependencies = Arrays.stream(testClass.getAnnotations())
21+
.map(annotation -> annotation.annotationType().getSimpleName()).collect(Collectors.toSet());
22+
return wrapWithOptional(new TreeSet<>(dependencies));
23+
}
24+
25+
private static Optional<Set<String>> wrapWithOptional(final Set<String> dependencies) {
26+
final Optional<Set<String>> result;
27+
if (dependencies.isEmpty()) {
28+
result = Optional.empty();
29+
} else {
30+
result = Optional.of(dependencies);
31+
}
32+
return result;
33+
}
34+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package com.github.nagyesta.abortmission.core.extractor.impl;
2+
3+
import com.github.nagyesta.abortmission.core.annotation.LaunchSequence;
4+
import com.github.nagyesta.abortmission.core.outline.MissionOutline;
5+
import org.junit.jupiter.api.Assertions;
6+
import org.junit.jupiter.api.DisplayName;
7+
import org.junit.jupiter.api.Test;
8+
9+
import java.util.Collections;
10+
import java.util.List;
11+
import java.util.Optional;
12+
import java.util.Set;
13+
14+
@DisplayName("AnnotationSimpleNameDependencyExtractorTest")
15+
@LaunchSequence(MissionOutline.class)
16+
class AnnotationSimpleNameDependencyExtractorTest {
17+
18+
@Test
19+
void testExtractValuesFromAnnotationShouldReturnSetOfAnnotationNamesWhenCalledWithAnnotatedClass() {
20+
//given
21+
final AnnotationSimpleNameDependencyExtractor underTest = new AnnotationSimpleNameDependencyExtractor();
22+
23+
//when
24+
final Optional<Set<String>> actual = underTest.apply(this.getClass());
25+
26+
//then
27+
Assertions.assertIterableEquals(List.of("DisplayName", "LaunchSequence"), actual.orElse(Collections.emptySet()));
28+
}
29+
30+
@Test
31+
void testExtractValuesFromAnnotationShouldReturnEmptyWhenCalledWithNotAnnotatedClass() {
32+
//given
33+
final AnnotationSimpleNameDependencyExtractor underTest = new AnnotationSimpleNameDependencyExtractor();
34+
35+
//when
36+
final Optional<Set<String>> actual = underTest.apply(NotAnnotated.class);
37+
38+
//then
39+
Assertions.assertTrue(actual.isEmpty());
40+
}
41+
42+
@Test
43+
void testExtractValuesFromAnnotationShouldReturnEmptyWhenCalledWithNonClassObject() {
44+
//given
45+
final AnnotationSimpleNameDependencyExtractor underTest = new AnnotationSimpleNameDependencyExtractor();
46+
47+
//when
48+
final Optional<Set<String>> actual = underTest.apply(this);
49+
50+
//then
51+
Assertions.assertTrue(actual.isEmpty());
52+
}
53+
54+
private static class NotAnnotated {
55+
}
56+
}

0 commit comments

Comments
 (0)