Skip to content

Commit 7c7ce4d

Browse files
authored
fix cucumber4-jvm package label generation (fixes allure-framework#405, via allure-framework#406)
1 parent b75425f commit 7c7ce4d

2 files changed

Lines changed: 34 additions & 16 deletions

File tree

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

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

27+
import java.io.File;
2728
import java.net.URI;
28-
import java.nio.file.Path;
29-
import java.nio.file.Paths;
3029
import java.util.ArrayList;
3130
import java.util.Arrays;
3231
import java.util.Deque;
3332
import java.util.List;
3433
import java.util.Objects;
34+
import java.util.Optional;
3535
import java.util.regex.Pattern;
3636
import java.util.stream.Collectors;
3737
import java.util.stream.Stream;
38-
import java.util.stream.StreamSupport;
3938

4039
import static io.qameta.allure.util.ResultsUtils.createFeatureLabel;
4140
import static io.qameta.allure.util.ResultsUtils.createFrameworkLabel;
4241
import static io.qameta.allure.util.ResultsUtils.createHostLabel;
4342
import static io.qameta.allure.util.ResultsUtils.createLabel;
4443
import static io.qameta.allure.util.ResultsUtils.createLanguageLabel;
45-
import static io.qameta.allure.util.ResultsUtils.createPackageLabel;
4644
import static io.qameta.allure.util.ResultsUtils.createStoryLabel;
4745
import static io.qameta.allure.util.ResultsUtils.createSuiteLabel;
4846
import static io.qameta.allure.util.ResultsUtils.createTestClassLabel;
@@ -122,13 +120,16 @@ class LabelBuilder {
122120
createThreadLabel(),
123121
createFeatureLabel(featureName),
124122
createStoryLabel(scenario.getName()),
125-
createPackageLabel(featurePackage(uri, featureName)),
126123
createSuiteLabel(featureName),
127124
createTestClassLabel(scenario.getName()),
128125
createFrameworkLabel("cucumber4jvm"),
129126
createLanguageLabel("java"),
130127
createLabel("gherkin_uri", uri)
131128
));
129+
130+
featurePackage(uri, featureName)
131+
.map(ResultsUtils::createPackageLabel)
132+
.ifPresent(getScenarioLabels()::add);
132133
}
133134

134135
public List<Label> getScenarioLabels() {
@@ -162,15 +163,32 @@ private void tryHandleNamedLink(final String tagString) {
162163
}
163164
}
164165

165-
private String featurePackage(final String uri, final String featureName) {
166-
final Path parent = Paths.get(URI.create(uri).getSchemeSpecificPart()).getParent();
167-
if (Objects.nonNull(parent)) {
168-
final Stream<String> folders = StreamSupport.stream(parent.spliterator(), false)
169-
.map(Path::toString);
170-
final Stream<String> name = Stream.of(featureName);
171-
return Stream.concat(folders, name).collect(Collectors.joining("."));
166+
private Optional<String> featurePackage(final String uriString, final String featureName) {
167+
final Optional<URI> maybeUri = safeUri(uriString);
168+
if (!maybeUri.isPresent()) {
169+
return Optional.empty();
170+
}
171+
URI uri = maybeUri.get();
172+
173+
if (!uri.isOpaque()) {
174+
final URI work = new File("").toURI();
175+
uri = work.relativize(uri);
172176
}
173-
return featureName;
177+
final String schemeSpecificPart = uri.normalize().getSchemeSpecificPart();
178+
final Stream<String> folders = Stream.of(schemeSpecificPart.replaceAll("\\.", "_").split("/"));
179+
final Stream<String> name = Stream.of(featureName);
180+
return Optional.of(Stream.concat(folders, name)
181+
.filter(Objects::nonNull)
182+
.filter(s -> !s.isEmpty())
183+
.collect(Collectors.joining(".")));
174184
}
175185

186+
private static Optional<URI> safeUri(final String uri) {
187+
try {
188+
return Optional.of(URI.create(uri));
189+
} catch (Exception e) {
190+
LOGGER.debug("could not parse feature uri {}", uri, e);
191+
}
192+
return Optional.empty();
193+
}
176194
}

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -438,7 +438,7 @@ void shouldAddBddLabels() {
438438

439439
@AllureFeatures.Timeline
440440
@Test
441-
void shouldThreadHostLabels() {
441+
void shouldAddThreadHostLabels() {
442442
final AllureResultsWriterStub writer = new AllureResultsWriterStub();
443443
runFeature(writer, "features/tags.feature");
444444

@@ -452,7 +452,7 @@ void shouldThreadHostLabels() {
452452

453453
@AllureFeatures.MarkerAnnotations
454454
@Test
455-
void shouldCommonLabels() {
455+
void shouldAddCommonLabels() {
456456
final AllureResultsWriterStub writer = new AllureResultsWriterStub();
457457
runFeature(writer, "features/tags.feature");
458458

@@ -462,7 +462,7 @@ void shouldCommonLabels() {
462462
.flatExtracting(TestResult::getLabels)
463463
.extracting(Label::getName, Label::getValue)
464464
.contains(
465-
tuple(PACKAGE_LABEL_NAME, "features.Test Simple Scenarios"),
465+
tuple(PACKAGE_LABEL_NAME, "features.tags_feature.Test Simple Scenarios"),
466466
tuple(SUITE_LABEL_NAME, "Test Simple Scenarios"),
467467
tuple(TEST_CLASS_LABEL_NAME, "Add a to b")
468468
);

0 commit comments

Comments
 (0)