Skip to content

Commit 276a842

Browse files
authored
handle npe in tostring methods (fixes allure-framework#191, via allure-framework#259)
1 parent e912cf6 commit 276a842

5 files changed

Lines changed: 60 additions & 7 deletions

File tree

allure-java-commons/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ dependencies {
1010
compile("org.slf4j:slf4j-api")
1111
compile(project(":allure-model"))
1212
testCompile("io.github.benas:random-beans")
13+
testCompile("io.github.glytching:junit-extensions")
1314
testCompile("org.assertj:assertj-core")
1415
testCompile("org.junit-pioneer:junit-pioneer")
1516
testCompile("org.junit.jupiter:junit-jupiter-api")

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

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import io.qameta.allure.model.Parameter;
44
import org.aspectj.lang.reflect.MethodSignature;
5+
import org.slf4j.Logger;
6+
import org.slf4j.LoggerFactory;
57

68
import java.util.Arrays;
79
import java.util.HashMap;
@@ -14,6 +16,8 @@
1416
*/
1517
public final class AspectUtils {
1618

19+
private static final Logger LOGGER = LoggerFactory.getLogger(AspectUtils.class);
20+
1721
private AspectUtils() {
1822
throw new IllegalStateException("Do not instance");
1923
}
@@ -37,10 +41,16 @@ public static Map<String, Object> getParametersMap(final MethodSignature signatu
3741
return params;
3842
}
3943

44+
@SuppressWarnings("ReturnCount")
4045
public static String objectToString(final Object object) {
41-
if (Objects.nonNull(object) && (object instanceof Object[])) {
42-
return Arrays.toString((Object[]) object);
46+
try {
47+
if (Objects.nonNull(object) && (object instanceof Object[])) {
48+
return Arrays.toString((Object[]) object);
49+
}
50+
return Objects.toString(object);
51+
} catch (Exception e) {
52+
LOGGER.error("Could not convert object to string", e);
53+
return "<NPE>";
4354
}
44-
return Objects.toString(object);
4555
}
4656
}

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

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
package io.qameta.allure;
22

3+
import io.github.glytching.junit.extension.system.SystemProperty;
4+
import io.github.glytching.junit.extension.system.SystemPropertyExtension;
35
import io.qameta.allure.util.ResultsUtils;
46
import org.junit.jupiter.api.Test;
7+
import org.junit.jupiter.api.extension.ExtendWith;
58
import org.junit.jupiter.params.ParameterizedTest;
69
import org.junit.jupiter.params.provider.Arguments;
710
import org.junit.jupiter.params.provider.MethodSource;
@@ -21,6 +24,7 @@
2124
/**
2225
* @author charlie (Dmitry Baev).
2326
*/
27+
@ExtendWith(SystemPropertyExtension.class)
2428
class ResultsUtilsTest {
2529

2630
@Test
@@ -68,16 +72,18 @@ public String type() {
6872
.hasFieldOrPropertyWithValue("type", "d_from_annotation");
6973
}
7074

75+
@SystemProperty(name = "allure.link.issue.pattern", value = "https://example.org/issue/{}")
7176
@Test
7277
void shouldCreateIssueLink() {
7378
io.qameta.allure.model.Link actual = createIssueLink("issue_link");
7479
assertThat(actual)
7580
.isNotNull()
7681
.hasFieldOrPropertyWithValue("name", "issue_link")
77-
.hasFieldOrPropertyWithValue("url", null)
82+
.hasFieldOrPropertyWithValue("url", "https://example.org/issue/issue_link")
7883
.hasFieldOrPropertyWithValue("type", ISSUE_LINK_TYPE);
7984
}
8085

86+
@SystemProperty(name = "allure.link.issue.pattern", value = "https://example.org/issue/{}")
8187
@Test
8288
void shouldCreateIssueLinkFromAnnotation() {
8389
io.qameta.allure.model.Link actual = createLink(new Issue() {
@@ -94,20 +100,22 @@ public String value() {
94100
assertThat(actual)
95101
.isNotNull()
96102
.hasFieldOrPropertyWithValue("name", "issue_link_from_annotation")
97-
.hasFieldOrPropertyWithValue("url", null)
103+
.hasFieldOrPropertyWithValue("url", "https://example.org/issue/issue_link_from_annotation")
98104
.hasFieldOrPropertyWithValue("type", ISSUE_LINK_TYPE);
99105
}
100106

107+
@SystemProperty(name = "allure.link.tms.pattern", value = "https://example.org/tms/{}")
101108
@Test
102109
void shouldCreateTmsLink() {
103110
io.qameta.allure.model.Link actual = createTmsLink("tms_link");
104111
assertThat(actual)
105112
.isNotNull()
106113
.hasFieldOrPropertyWithValue("name", "tms_link")
107-
.hasFieldOrPropertyWithValue("url", null)
114+
.hasFieldOrPropertyWithValue("url", "https://example.org/tms/tms_link")
108115
.hasFieldOrPropertyWithValue("type", TMS_LINK_TYPE);
109116
}
110117

118+
@SystemProperty(name = "allure.link.tms.pattern", value = "https://example.org/tms/{}")
111119
@Test
112120
void shouldCreateTmsLinkFromAnnotation() {
113121
io.qameta.allure.model.Link actual = createLink(new TmsLink() {
@@ -124,7 +132,7 @@ public String value() {
124132
assertThat(actual)
125133
.isNotNull()
126134
.hasFieldOrPropertyWithValue("name", "tms_link_from_annotation")
127-
.hasFieldOrPropertyWithValue("url", null)
135+
.hasFieldOrPropertyWithValue("url", "https://example.org/tms/tms_link_from_annotation")
128136
.hasFieldOrPropertyWithValue("type", TMS_LINK_TYPE);
129137
}
130138

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package io.qameta.allure.util;
2+
3+
import io.qameta.allure.Issue;
4+
import org.junit.jupiter.api.Test;
5+
6+
import static org.assertj.core.api.Assertions.assertThat;
7+
8+
/**
9+
* @author charlie (Dmitry Baev).
10+
*/
11+
class AspectUtilsTest {
12+
13+
@Issue("191")
14+
@Test
15+
void shouldProcessToStringNpe() {
16+
final MyNpeClass myNpeClass = new MyNpeClass();
17+
final String string = AspectUtils.objectToString(myNpeClass);
18+
assertThat(string)
19+
.isEqualTo("<NPE>");
20+
}
21+
22+
public class MyNpeClass {
23+
24+
Integer value = null;
25+
26+
@Override
27+
public String toString() {
28+
return value.toString();
29+
}
30+
}
31+
32+
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
allure.results.directory=build/allure-results
2+
allure.link.issue.pattern=https://github.com/allure-framework/allure-java/issues/{}

0 commit comments

Comments
 (0)