Skip to content

Commit 5cb4290

Browse files
authored
add more tests for step aspects (fixes allure-framework#123, via allure-framework#268)
1 parent 04b39ef commit 5cb4290

9 files changed

Lines changed: 489 additions & 219 deletions

File tree

allure-java-commons/src/main/java/io/qameta/allure/AllureUtils.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44

55
/**
66
* @author charlie (Dmitry Baev).
7+
* @deprecated scheduled to remove in 3.0.
78
*/
9+
@Deprecated
810
public final class AllureUtils {
911

1012
private AllureUtils() {

allure-java-commons/src/main/java/io/qameta/allure/FileSystemResultsWriter.java

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,7 @@
1212
import java.nio.file.Files;
1313
import java.nio.file.Path;
1414
import java.util.Objects;
15-
16-
import static io.qameta.allure.AllureUtils.generateTestResultContainerName;
17-
import static io.qameta.allure.AllureUtils.generateTestResultName;
15+
import java.util.UUID;
1816

1917
/**
2018
* @author charlie (Dmitry Baev).
@@ -76,4 +74,20 @@ private void createDirectories(final Path directory) {
7674
throw new AllureResultsWriteException("Could not create Allure results directory", e);
7775
}
7876
}
77+
78+
private String generateTestResultName() {
79+
return generateTestResultName(UUID.randomUUID().toString());
80+
}
81+
82+
private String generateTestResultName(final String uuid) {
83+
return uuid + AllureConstants.TEST_RESULT_FILE_SUFFIX;
84+
}
85+
86+
private String generateTestResultContainerName() {
87+
return generateTestResultContainerName(UUID.randomUUID().toString());
88+
}
89+
90+
private String generateTestResultContainerName(final String uuid) {
91+
return uuid + AllureConstants.TEST_RESULT_CONTAINER_FILE_SUFFIX;
92+
}
7993
}

allure-java-commons/src/main/java/io/qameta/allure/aspects/StepsAspects.java

Lines changed: 38 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,23 @@
33
import io.qameta.allure.Allure;
44
import io.qameta.allure.AllureLifecycle;
55
import io.qameta.allure.Step;
6+
import io.qameta.allure.model.Parameter;
67
import io.qameta.allure.model.Status;
78
import io.qameta.allure.model.StepResult;
8-
import org.aspectj.lang.ProceedingJoinPoint;
9-
import org.aspectj.lang.annotation.Around;
9+
import org.aspectj.lang.JoinPoint;
10+
import org.aspectj.lang.annotation.AfterReturning;
11+
import org.aspectj.lang.annotation.AfterThrowing;
1012
import org.aspectj.lang.annotation.Aspect;
13+
import org.aspectj.lang.annotation.Before;
14+
import org.aspectj.lang.annotation.Pointcut;
1115
import org.aspectj.lang.reflect.MethodSignature;
1216

17+
import java.util.List;
1318
import java.util.Objects;
14-
import java.util.Optional;
1519
import java.util.UUID;
1620

21+
import static io.qameta.allure.util.AspectUtils.getName;
1722
import static io.qameta.allure.util.AspectUtils.getParameters;
18-
import static io.qameta.allure.util.AspectUtils.getParametersMap;
19-
import static io.qameta.allure.util.NamingUtils.processNameTemplate;
2023
import static io.qameta.allure.util.ResultsUtils.getStatus;
2124
import static io.qameta.allure.util.ResultsUtils.getStatusDetails;
2225

@@ -30,34 +33,44 @@ public class StepsAspects {
3033

3134
private static AllureLifecycle lifecycle;
3235

33-
@SuppressWarnings("PMD.UnnecessaryLocalBeforeReturn")
34-
@Around("@annotation(io.qameta.allure.Step) && execution(* *(..))")
35-
public Object step(final ProceedingJoinPoint joinPoint) throws Throwable {
36+
@Pointcut("@annotation(io.qameta.allure.Step)")
37+
public void withStepAnnotation() {
38+
//pointcut body, should be empty
39+
}
40+
41+
@Pointcut("execution(* *(..))")
42+
public void anyMethod() {
43+
//pointcut body, should be empty
44+
}
45+
46+
@Before("anyMethod() && withStepAnnotation()")
47+
public void stepStart(final JoinPoint joinPoint) {
3648
final MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
3749
final Step step = methodSignature.getMethod().getAnnotation(Step.class);
3850

3951
final String uuid = UUID.randomUUID().toString();
40-
final String name = Optional.of(step.value())
41-
.filter(v -> !v.isEmpty())
42-
.map(value -> processNameTemplate(value, getParametersMap(methodSignature, joinPoint.getArgs())))
43-
.orElse(methodSignature.getName());
52+
final String name = getName(step.value(), methodSignature, joinPoint.getArgs());
53+
final List<Parameter> parameters = getParameters(methodSignature, joinPoint.getArgs());
4454

4555
final StepResult result = new StepResult()
4656
.setName(name)
47-
.setParameters(getParameters(methodSignature, joinPoint.getArgs()));
57+
.setParameters(parameters);
58+
4859
getLifecycle().startStep(uuid, result);
49-
try {
50-
final Object proceed = joinPoint.proceed();
51-
getLifecycle().updateStep(uuid, s -> s.setStatus(Status.PASSED));
52-
return proceed;
53-
} catch (Throwable e) {
54-
getLifecycle().updateStep(uuid, s -> s
55-
.setStatus(getStatus(e).orElse(Status.BROKEN))
56-
.setStatusDetails(getStatusDetails(e).orElse(null)));
57-
throw e;
58-
} finally {
59-
getLifecycle().stopStep(uuid);
60-
}
60+
}
61+
62+
@AfterThrowing(pointcut = "anyMethod() && withStepAnnotation()", throwing = "e")
63+
public void stepFailed(final Throwable e) {
64+
getLifecycle().updateStep(s -> s
65+
.setStatus(getStatus(e).orElse(Status.BROKEN))
66+
.setStatusDetails(getStatusDetails(e).orElse(null)));
67+
getLifecycle().stopStep();
68+
}
69+
70+
@AfterReturning(pointcut = "anyMethod() && withStepAnnotation()")
71+
public void stepStop() {
72+
getLifecycle().updateStep(s -> s.setStatus(Status.PASSED));
73+
getLifecycle().stopStep();
6174
}
6275

6376
/**

allure-java-commons/src/main/java/io/qameta/allure/util/AspectUtils.java

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,15 @@
77

88
import java.util.Arrays;
99
import java.util.HashMap;
10+
import java.util.List;
1011
import java.util.Map;
1112
import java.util.Objects;
13+
import java.util.Optional;
14+
import java.util.stream.Collectors;
1215
import java.util.stream.IntStream;
1316

17+
import static io.qameta.allure.util.NamingUtils.processNameTemplate;
18+
1419
/**
1520
* @author charlie (Dmitry Baev).
1621
*/
@@ -22,12 +27,13 @@ private AspectUtils() {
2227
throw new IllegalStateException("Do not instance");
2328
}
2429

25-
public static Parameter[] getParameters(final MethodSignature signature, final Object... args) {
26-
return IntStream.range(0, args.length).mapToObj(index -> {
27-
final String name = signature.getParameterNames()[index];
28-
final String value = objectToString(args[index]);
29-
return new Parameter().setName(name).setValue(value);
30-
}).toArray(Parameter[]::new);
30+
public static String getName(final String nameTemplate,
31+
final MethodSignature methodSignature,
32+
final Object... args) {
33+
return Optional.of(nameTemplate)
34+
.filter(v -> !v.isEmpty())
35+
.map(value -> processNameTemplate(value, getParametersMap(methodSignature, args)))
36+
.orElseGet(methodSignature::getName);
3137
}
3238

3339
public static Map<String, Object> getParametersMap(final MethodSignature signature, final Object... args) {
@@ -41,6 +47,14 @@ public static Map<String, Object> getParametersMap(final MethodSignature signatu
4147
return params;
4248
}
4349

50+
public static List<Parameter> getParameters(final MethodSignature signature, final Object... args) {
51+
return IntStream.range(0, args.length).mapToObj(index -> {
52+
final String name = signature.getParameterNames()[index];
53+
final String value = objectToString(args[index]);
54+
return new Parameter().setName(name).setValue(value);
55+
}).collect(Collectors.toList());
56+
}
57+
4458
public static String objectToString(final Object object) {
4559
try {
4660
if (Objects.nonNull(object) && (object instanceof Object[])) {

allure-java-commons/src/main/java/io/qameta/allure/util/NamingUtils.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import org.slf4j.Logger;
44
import org.slf4j.LoggerFactory;
55

6-
import java.util.Arrays;
76
import java.util.Map;
87
import java.util.Objects;
98
import java.util.Optional;
@@ -15,6 +14,7 @@
1514
import java.util.stream.Stream;
1615
import java.util.stream.StreamSupport;
1716

17+
import static io.qameta.allure.util.AspectUtils.objectToString;
1818
import static org.joor.Reflect.on;
1919

2020
/**
@@ -77,9 +77,6 @@ private static String extractProperties(final Object object, final String[] part
7777
final Object child = on(object).get(parts[index]);
7878
return extractProperties(child, parts, index + 1);
7979
}
80-
if (object instanceof Object[]) {
81-
return Arrays.toString((Object[]) object);
82-
}
83-
return String.valueOf(object);
80+
return objectToString(object);
8481
}
8582
}

allure-java-commons/src/test/java/io/qameta/allure/AllureUtilsTest.java

Lines changed: 0 additions & 29 deletions
This file was deleted.

allure-java-commons/src/test/java/io/qameta/allure/StepsTest.java

Lines changed: 0 additions & 151 deletions
This file was deleted.

0 commit comments

Comments
 (0)