Skip to content

Commit 648d613

Browse files
authored
use feature file paths for cucumberjvm package name (via allure-framework#358)
1 parent 3ff0cce commit 648d613

3 files changed

Lines changed: 57 additions & 36 deletions

File tree

allure-cucumber4-jvm/src/main/java/io/qameta/allure/cucumber4jvm/LabelBuilder.java

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,17 +24,25 @@
2424
import org.slf4j.Logger;
2525
import org.slf4j.LoggerFactory;
2626

27+
import java.nio.file.Path;
28+
import java.nio.file.Paths;
2729
import java.util.ArrayList;
2830
import java.util.Arrays;
2931
import java.util.Deque;
3032
import java.util.List;
3133
import java.util.Objects;
3234
import java.util.regex.Pattern;
35+
import java.util.stream.Collectors;
36+
import java.util.stream.Stream;
37+
import java.util.stream.StreamSupport;
3338

39+
import static io.qameta.allure.util.ResultsUtils.createFeatureLabel;
3440
import static io.qameta.allure.util.ResultsUtils.createFrameworkLabel;
3541
import static io.qameta.allure.util.ResultsUtils.createHostLabel;
42+
import static io.qameta.allure.util.ResultsUtils.createLabel;
3643
import static io.qameta.allure.util.ResultsUtils.createLanguageLabel;
3744
import static io.qameta.allure.util.ResultsUtils.createPackageLabel;
45+
import static io.qameta.allure.util.ResultsUtils.createStoryLabel;
3846
import static io.qameta.allure.util.ResultsUtils.createSuiteLabel;
3947
import static io.qameta.allure.util.ResultsUtils.createTestClassLabel;
4048
import static io.qameta.allure.util.ResultsUtils.createThreadLabel;
@@ -58,9 +66,6 @@ class LabelBuilder {
5866
LabelBuilder(final Feature feature, final TestCase scenario, final Deque<PickleTag> tags) {
5967
final TagParser tagParser = new TagParser(feature, scenario);
6068

61-
getScenarioLabels().add(ResultsUtils.createFeatureLabel(feature.getName()));
62-
getScenarioLabels().add(ResultsUtils.createStoryLabel(scenario.getName()));
63-
6469
while (tags.peek() != null) {
6570
final PickleTag tag = tags.remove();
6671

@@ -108,14 +113,20 @@ class LabelBuilder {
108113
}
109114
}
110115

116+
final String featureName = feature.getName();
117+
final String uri = scenario.getUri();
118+
111119
getScenarioLabels().addAll(Arrays.asList(
112120
createHostLabel(),
113121
createThreadLabel(),
114-
createPackageLabel(feature.getName()),
115-
createSuiteLabel(feature.getName()),
122+
createFeatureLabel(featureName),
123+
createStoryLabel(scenario.getName()),
124+
createPackageLabel(featurePackage(uri, featureName)),
125+
createSuiteLabel(featureName),
116126
createTestClassLabel(scenario.getName()),
117127
createFrameworkLabel("cucumber4jvm"),
118-
createLanguageLabel("java")
128+
createLanguageLabel("java"),
129+
createLabel("gherkin_uri", uri)
119130
));
120131
}
121132

@@ -150,4 +161,15 @@ private void tryHandleNamedLink(final String tagString) {
150161
}
151162
}
152163

164+
private String featurePackage(final String uri, final String featureName) {
165+
final Path parent = Paths.get(uri).getParent();
166+
if (Objects.nonNull(parent)) {
167+
final Stream<String> folders = StreamSupport.stream(parent.spliterator(), false)
168+
.map(Path::toString);
169+
final Stream<String> name = Stream.of(featureName);
170+
return Stream.concat(folders, name).collect(Collectors.joining("."));
171+
}
172+
return featureName;
173+
}
174+
153175
}

allure-cucumber4-jvm/src/test/java/io/qameta/allure/cucumber4jvm/AllureCucumber4JvmTest.java

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -23,21 +23,18 @@
2323
import cucumber.runtime.io.ResourceLoader;
2424
import cucumber.runtime.io.ResourceLoaderClassFinder;
2525
import cucumber.runtime.model.CucumberFeature;
26-
2726
import gherkin.AstBuilder;
2827
import gherkin.Parser;
2928
import gherkin.TokenMatcher;
3029
import gherkin.ast.GherkinDocument;
3130
import gherkin.events.PickleEvent;
3231
import gherkin.pickles.Compiler;
3332
import gherkin.pickles.Pickle;
34-
3533
import io.github.glytching.junit.extension.system.SystemProperty;
3634
import io.github.glytching.junit.extension.system.SystemPropertyExtension;
37-
3835
import io.qameta.allure.AllureLifecycle;
39-
import io.qameta.allure.Epic;
4036
import io.qameta.allure.model.Attachment;
37+
import io.qameta.allure.model.FixtureResult;
4138
import io.qameta.allure.model.Label;
4239
import io.qameta.allure.model.Link;
4340
import io.qameta.allure.model.Parameter;
@@ -46,12 +43,9 @@
4643
import io.qameta.allure.model.StatusDetails;
4744
import io.qameta.allure.model.StepResult;
4845
import io.qameta.allure.model.TestResult;
49-
import io.qameta.allure.model.FixtureResult;
5046
import io.qameta.allure.test.AllureFeatures;
5147
import io.qameta.allure.test.AllureResultsWriterStub;
52-
5348
import org.apache.commons.io.IOUtils;
54-
5549
import org.junit.jupiter.api.Test;
5650
import org.junit.jupiter.api.extension.ExtendWith;
5751

@@ -69,14 +63,16 @@
6963
import java.util.Map;
7064
import java.util.stream.Collectors;
7165

66+
import static io.qameta.allure.util.ResultsUtils.PACKAGE_LABEL_NAME;
67+
import static io.qameta.allure.util.ResultsUtils.SUITE_LABEL_NAME;
68+
import static io.qameta.allure.util.ResultsUtils.TEST_CLASS_LABEL_NAME;
7269
import static java.lang.Thread.currentThread;
7370
import static org.assertj.core.api.Assertions.assertThat;
7471
import static org.assertj.core.api.Assertions.tuple;
7572

7673
/**
7774
* @author charlie (Dmitry Baev).
7875
*/
79-
@Epic("CucumberJVM 4.0 integration")
8076
@SuppressWarnings("unchecked")
8177
class AllureCucumber4JvmTest {
8278

@@ -90,7 +86,6 @@ void shouldSetName() {
9086
assertThat(testResults)
9187
.extracting(TestResult::getName)
9288
.containsExactlyInAnyOrder("Add a to b");
93-
9489
}
9590

9691
@AllureFeatures.PassedTests
@@ -441,9 +436,9 @@ void shouldCommonLabels() {
441436
.flatExtracting(TestResult::getLabels)
442437
.extracting(Label::getName, Label::getValue)
443438
.contains(
444-
tuple("package", "Test Simple Scenarios"),
445-
tuple("suite", "Test Simple Scenarios"),
446-
tuple("testClass", "Add a to b")
439+
tuple(PACKAGE_LABEL_NAME, "features.Test Simple Scenarios"),
440+
tuple(SUITE_LABEL_NAME, "Test Simple Scenarios"),
441+
tuple(TEST_CLASS_LABEL_NAME, "Add a to b")
447442
);
448443
}
449444

@@ -639,7 +634,7 @@ void shouldDisplayHooksAsStages() {
639634
tuple("And b is 8", Status.PASSED),
640635
tuple("When I add a to b", Status.PASSED),
641636
tuple("Then result is 15", Status.PASSED)
642-
);
637+
);
643638

644639

645640
assertThat(writer.getTestResultContainers().get(0).getBefores())
@@ -678,7 +673,7 @@ void shouldDisplayHooksAsStages() {
678673
tuple("And b is 8", Status.PASSED),
679674
tuple("When I add a to b", Status.PASSED),
680675
tuple("Then result is 15", Status.PASSED)
681-
);
676+
);
682677

683678
assertThat(writer.getTestResultContainers().get(2).getAfters())
684679
.extracting(FixtureResult::getName, FixtureResult::getStatus)

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

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -110,71 +110,75 @@ public static Parameter createParameter(final String name, final Object value) {
110110
}
111111

112112
public static Label createSuiteLabel(final String suite) {
113-
return new Label().setName(SUITE_LABEL_NAME).setValue(suite);
113+
return createLabel(SUITE_LABEL_NAME, suite);
114114
}
115115

116116
public static Label createParentSuiteLabel(final String suite) {
117-
return new Label().setName(PARENT_SUITE_LABEL_NAME).setValue(suite);
117+
return createLabel(PARENT_SUITE_LABEL_NAME, suite);
118118
}
119119

120120
public static Label createSubSuiteLabel(final String suite) {
121-
return new Label().setName(SUB_SUITE_LABEL_NAME).setValue(suite);
121+
return createLabel(SUB_SUITE_LABEL_NAME, suite);
122122
}
123123

124124
public static Label createTestMethodLabel(final String testMethod) {
125-
return new Label().setName(TEST_METHOD_LABEL_NAME).setValue(testMethod);
125+
return createLabel(TEST_METHOD_LABEL_NAME, testMethod);
126126
}
127127

128128
public static Label createTestClassLabel(final String testClass) {
129-
return new Label().setName(TEST_CLASS_LABEL_NAME).setValue(testClass);
129+
return createLabel(TEST_CLASS_LABEL_NAME, testClass);
130130
}
131131

132132
public static Label createPackageLabel(final String packageName) {
133-
return new Label().setName(PACKAGE_LABEL_NAME).setValue(packageName);
133+
return createLabel(PACKAGE_LABEL_NAME, packageName);
134134
}
135135

136136
public static Label createEpicLabel(final String epic) {
137-
return new Label().setName(EPIC_LABEL_NAME).setValue(epic);
137+
return createLabel(EPIC_LABEL_NAME, epic);
138138
}
139139

140140
public static Label createFeatureLabel(final String feature) {
141-
return new Label().setName(FEATURE_LABEL_NAME).setValue(feature);
141+
return createLabel(FEATURE_LABEL_NAME, feature);
142142
}
143143

144144
public static Label createStoryLabel(final String story) {
145-
return new Label().setName(STORY_LABEL_NAME).setValue(story);
145+
return createLabel(STORY_LABEL_NAME, story);
146146
}
147147

148148
public static Label createTagLabel(final String tag) {
149-
return new Label().setName(TAG_LABEL_NAME).setValue(tag);
149+
return createLabel(TAG_LABEL_NAME, tag);
150150
}
151151

152152
public static Label createOwnerLabel(final String owner) {
153-
return new Label().setName(OWNER_LABEL_NAME).setValue(owner);
153+
return createLabel(OWNER_LABEL_NAME, owner);
154154
}
155155

156156
public static Label createSeverityLabel(final SeverityLevel severity) {
157157
return createSeverityLabel(severity.value());
158158
}
159159

160160
public static Label createSeverityLabel(final String severity) {
161-
return new Label().setName(SEVERITY_LABEL_NAME).setValue(severity);
161+
return createLabel(SEVERITY_LABEL_NAME, severity);
162162
}
163163

164164
public static Label createHostLabel() {
165-
return new Label().setName(HOST_LABEL_NAME).setValue(getHostName());
165+
return createLabel(HOST_LABEL_NAME, getHostName());
166166
}
167167

168168
public static Label createThreadLabel() {
169-
return new Label().setName(THREAD_LABEL_NAME).setValue(getThreadName());
169+
return createLabel(THREAD_LABEL_NAME, getThreadName());
170170
}
171171

172172
public static Label createFrameworkLabel(final String framework) {
173-
return new Label().setName(FRAMEWORK_LABEL_NAME).setValue(framework);
173+
return createLabel(FRAMEWORK_LABEL_NAME, framework);
174174
}
175175

176176
public static Label createLanguageLabel(final String language) {
177-
return new Label().setName(LANGUAGE_LABEL_NAME).setValue(language);
177+
return createLabel(LANGUAGE_LABEL_NAME, language);
178+
}
179+
180+
public static Label createLabel(final String name, final String value) {
181+
return new Label().setName(LANGUAGE_LABEL_NAME).setValue(value);
178182
}
179183

180184
public static Label createLabel(final Owner owner) {

0 commit comments

Comments
 (0)