|
9 | 9 | import java.io.OutputStreamWriter; |
10 | 10 | import java.nio.charset.StandardCharsets; |
11 | 11 |
|
| 12 | +import static io.cucumber.query.NamingStrategy.ExampleName.NUMBER_AND_PICKLE_IF_PARAMETERIZED; |
12 | 13 | import static io.cucumber.query.NamingStrategy.FeatureName.EXCLUDE; |
13 | 14 | import static io.cucumber.query.NamingStrategy.Strategy.LONG; |
14 | 15 | import static java.util.Objects.requireNonNull; |
|
22 | 23 | */ |
23 | 24 | public final class MessagesToJunitXmlWriter implements AutoCloseable { |
24 | 25 |
|
| 26 | + private static final String DEFAULT_TEST_SUITE_NAME = "Cucumber"; |
25 | 27 | private final OutputStreamWriter out; |
26 | 28 | private final XmlReportData data; |
27 | 29 | private boolean streamClosed = false; |
28 | 30 |
|
29 | 31 | public MessagesToJunitXmlWriter(OutputStream out) { |
30 | | - this(NamingStrategy.ExampleName.NUMBER_AND_PICKLE_IF_PARAMETERIZED, out); |
| 32 | + this("Cucumber", null, createNamingStrategy(NUMBER_AND_PICKLE_IF_PARAMETERIZED), out); |
31 | 33 | } |
32 | 34 |
|
| 35 | + @Deprecated |
33 | 36 | public MessagesToJunitXmlWriter(NamingStrategy.ExampleName exampleNameStrategy, OutputStream out) { |
34 | | - this(createNamingStrategy(requireNonNull(exampleNameStrategy), LONG, EXCLUDE), out); |
| 37 | + this("Cucumber", null, createNamingStrategy(requireNonNull(exampleNameStrategy)), out); |
35 | 38 | } |
36 | 39 |
|
37 | | - public MessagesToJunitXmlWriter(NamingStrategy.ExampleName exampleNameStrategy, NamingStrategy.Strategy strategy, OutputStream out) { |
38 | | - this(createNamingStrategy(requireNonNull(exampleNameStrategy), requireNonNull(strategy), EXCLUDE), out); |
| 40 | + public static Builder builder() { |
| 41 | + return new Builder(); |
39 | 42 | } |
40 | 43 |
|
41 | | - public MessagesToJunitXmlWriter(NamingStrategy.ExampleName exampleNameStrategy, NamingStrategy.Strategy strategy, NamingStrategy.FeatureName featureNameStrategy, OutputStream out) { |
42 | | - this(createNamingStrategy(requireNonNull(exampleNameStrategy), requireNonNull(strategy), requireNonNull(featureNameStrategy)), out); |
| 44 | + public static class Builder { |
| 45 | + |
| 46 | + private String testSuiteName = DEFAULT_TEST_SUITE_NAME; |
| 47 | + private String testClassName; |
| 48 | + private NamingStrategy testNamingStrategy = NamingStrategy.strategy(LONG) |
| 49 | + .featureName(EXCLUDE) |
| 50 | + .exampleName(NUMBER_AND_PICKLE_IF_PARAMETERIZED) |
| 51 | + .build(); |
| 52 | + |
| 53 | + private Builder() { |
| 54 | + |
| 55 | + } |
| 56 | + |
| 57 | + /** |
| 58 | + * Sets the value for the {@code <testsuite name="..." .../>} attribute. Defaults to {@value DEFAULT_TEST_SUITE_NAME}. |
| 59 | + */ |
| 60 | + public Builder testSuiteName(String testSuiteName) { |
| 61 | + this.testSuiteName = requireNonNull(testSuiteName); |
| 62 | + return this; |
| 63 | + } |
| 64 | + |
| 65 | + /** |
| 66 | + * Sets the value for the {@code <testcase classname="..." .../>} attribute. Defaults to the name of the |
| 67 | + * feature file. |
| 68 | + */ |
| 69 | + public Builder testClassName(String testClassName) { |
| 70 | + this.testClassName = testClassName; |
| 71 | + return this; |
| 72 | + } |
| 73 | + |
| 74 | + /** |
| 75 | + * Set the naming strategy used for the {@code <testcase name="...".../> attribute}. Defaults to the |
| 76 | + * {@link NamingStrategy.Strategy#LONG} strategy with {@link NamingStrategy.FeatureName#EXCLUDE} and |
| 77 | + * {@link NamingStrategy.ExampleName#NUMBER_AND_PICKLE_IF_PARAMETERIZED}. |
| 78 | + */ |
| 79 | + public Builder namingStrategy(NamingStrategy namingStrategy) { |
| 80 | + this.testNamingStrategy = requireNonNull(namingStrategy); |
| 81 | + return this; |
| 82 | + } |
| 83 | + |
| 84 | + public MessagesToJunitXmlWriter build(OutputStream out) { |
| 85 | + return new MessagesToJunitXmlWriter(testSuiteName, testClassName, testNamingStrategy, requireNonNull(out)); |
| 86 | + } |
43 | 87 | } |
44 | 88 |
|
45 | | - private static NamingStrategy createNamingStrategy(NamingStrategy.ExampleName exampleName, NamingStrategy.Strategy strategy, NamingStrategy.FeatureName featureName) { |
46 | | - return NamingStrategy.strategy(strategy).featureName(featureName).exampleName(exampleName).build(); |
| 89 | + private static NamingStrategy createNamingStrategy(NamingStrategy.ExampleName exampleName) { |
| 90 | + return NamingStrategy.strategy(NamingStrategy.Strategy.LONG).featureName(NamingStrategy.FeatureName.EXCLUDE).exampleName(exampleName).build(); |
47 | 91 | } |
48 | 92 |
|
49 | | - private MessagesToJunitXmlWriter(NamingStrategy namingStrategy, OutputStream out) { |
50 | | - this.data = new XmlReportData(namingStrategy); |
| 93 | + private MessagesToJunitXmlWriter(String testSuiteName, String testClassName, NamingStrategy testNamingStrategy, OutputStream out) { |
| 94 | + this.data = new XmlReportData(testSuiteName, testClassName, testNamingStrategy); |
51 | 95 | this.out = new OutputStreamWriter( |
52 | 96 | requireNonNull(out), |
53 | 97 | StandardCharsets.UTF_8 |
|
0 commit comments