Skip to content

Commit 16f4f04

Browse files
authored
add support for array parameters (fixes allure-framework#128, via allure-framework#276)
1 parent 0fadfe3 commit 16f4f04

7 files changed

Lines changed: 123 additions & 10 deletions

File tree

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

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,10 +55,34 @@ public static List<Parameter> getParameters(final MethodSignature signature, fin
5555
}).collect(Collectors.toList());
5656
}
5757

58+
@SuppressWarnings({
59+
"CyclomaticComplexity",
60+
"ReturnCount",
61+
"PMD.NcssCount",
62+
"PMD.CyclomaticComplexity"
63+
})
5864
public static String objectToString(final Object object) {
5965
try {
60-
if (Objects.nonNull(object) && (object instanceof Object[])) {
61-
return Arrays.toString((Object[]) object);
66+
if (Objects.nonNull(object) && object.getClass().isArray()) {
67+
if (object instanceof Object[]) {
68+
return Arrays.toString((Object[]) object);
69+
} else if (object instanceof long[]) {
70+
return Arrays.toString((long[]) object);
71+
} else if (object instanceof short[]) {
72+
return Arrays.toString((short[]) object);
73+
} else if (object instanceof int[]) {
74+
return Arrays.toString((int[]) object);
75+
} else if (object instanceof char[]) {
76+
return Arrays.toString((char[]) object);
77+
} else if (object instanceof double[]) {
78+
return Arrays.toString((double[]) object);
79+
} else if (object instanceof float[]) {
80+
return Arrays.toString((float[]) object);
81+
} else if (object instanceof boolean[]) {
82+
return Arrays.toString((boolean[]) object);
83+
} else if (object instanceof byte[]) {
84+
return Arrays.toString((byte[]) object);
85+
}
6286
}
6387
return Objects.toString(object);
6488
} catch (Exception e) {

allure-testng/src/main/java/io/qameta/allure/testng/AllureTestNg.java

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import io.qameta.allure.model.StatusDetails;
1919
import io.qameta.allure.model.TestResult;
2020
import io.qameta.allure.model.TestResultContainer;
21+
import io.qameta.allure.util.AspectUtils;
2122
import io.qameta.allure.util.ResultsUtils;
2223
import org.testng.IAttributes;
2324
import org.testng.IClass;
@@ -640,21 +641,14 @@ private List<Parameter> getParameters(final ITestResult testResult) {
640641
.map(java.lang.reflect.Parameter::getName)
641642
.toArray(String[]::new);
642643
final String[] parameterValues = Stream.of(testResult.getParameters())
643-
.map(this::convertParameterValueToString)
644+
.map(AspectUtils::objectToString)
644645
.toArray(String[]::new);
645646
final Stream<Parameter> methodParameters = range(0, min(parameterNames.length, parameterValues.length))
646647
.mapToObj(i -> new Parameter().setName(parameterNames[i]).setValue(parameterValues[i]));
647648
return Stream.concat(tagsParameters, methodParameters)
648649
.collect(Collectors.toList());
649650
}
650651

651-
private String convertParameterValueToString(final Object parameter) {
652-
if (Objects.nonNull(parameter) && parameter.getClass().isArray()) {
653-
return Arrays.toString((Object[]) parameter);
654-
}
655-
return Objects.toString(parameter);
656-
}
657-
658652
private String getMethodName(final ITestNGMethod method) {
659653
return firstNonEmpty(
660654
method.getDescription(),

allure-testng/src/test/java/io/qameta/allure/testng/AllureTestNgTest.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1036,6 +1036,38 @@ public void shouldDisplayDisabledTests() {
10361036

10371037
}
10381038

1039+
@SuppressWarnings("unchecked")
1040+
@Feature("Parameters")
1041+
@Issue("129")
1042+
@Test
1043+
public void shouldNotFailForNullParameters() {
1044+
final AllureResults results = runTestNgSuites("suites/gh-129.xml");
1045+
1046+
assertThat(results.getTestResults())
1047+
.flatExtracting(TestResult::getParameters)
1048+
.extracting(Parameter::getName, Parameter::getValue)
1049+
.containsExactly(
1050+
tuple("arg0", "null")
1051+
);
1052+
}
1053+
1054+
@SuppressWarnings("unchecked")
1055+
@Feature("Parameters")
1056+
@Issue("128")
1057+
@Test
1058+
public void shouldProcessArrayParameters() {
1059+
final AllureResults results = runTestNgSuites("suites/gh-128.xml");
1060+
1061+
assertThat(results.getTestResults())
1062+
.flatExtracting(TestResult::getParameters)
1063+
.extracting(Parameter::getName, Parameter::getValue)
1064+
.containsExactly(
1065+
tuple("arg0", "a"),
1066+
tuple("arg1", "false"),
1067+
tuple("arg2", "[1, 2, 3]")
1068+
);
1069+
}
1070+
10391071
private AllureResults runTestNgSuites(final String... suites) {
10401072
final Consumer<TestNG> emptyConfigurer = testNg -> {
10411073
};
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package io.qameta.allure.testng.samples;
2+
3+
import org.testng.annotations.DataProvider;
4+
import org.testng.annotations.Test;
5+
6+
/**
7+
* @author charlie (Dmitry Baev).
8+
*/
9+
public class DataProviderWithArray {
10+
11+
@DataProvider(name = "someProvider")
12+
public static Object[][] someProvider() {
13+
return new Object[][]{
14+
new Object[]{"a", false, new int[]{1, 2, 3}}
15+
};
16+
}
17+
18+
@Test(dataProvider = "someProvider")
19+
public void someTest(final String first, final boolean second, final int[] third) {
20+
}
21+
22+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package io.qameta.allure.testng.samples;
2+
3+
import org.testng.annotations.DataProvider;
4+
import org.testng.annotations.Test;
5+
6+
/**
7+
* @author charlie (Dmitry Baev).
8+
*/
9+
public class NullParamTest {
10+
11+
@DataProvider(name = "someProvider")
12+
public static Object[][] someProvider() {
13+
return new Object[][]{
14+
new Object[]{null}
15+
};
16+
}
17+
18+
@Test(dataProvider = "someProvider")
19+
public void someTest(final String param) {
20+
}
21+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
3+
4+
<suite name="Github Issues">
5+
<test name="gh-128">
6+
<classes>
7+
<class name="io.qameta.allure.testng.samples.DataProviderWithArray"/>
8+
</classes>
9+
</test>
10+
</suite>
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
3+
4+
<suite name="Github Issues">
5+
<test name="gh-129">
6+
<classes>
7+
<class name="io.qameta.allure.testng.samples.NullParamTest"/>
8+
</classes>
9+
</test>
10+
</suite>

0 commit comments

Comments
 (0)