Skip to content

Commit d78f43e

Browse files
committed
WIP
1 parent 58aad0b commit d78f43e

File tree

6 files changed

+51
-65
lines changed

6 files changed

+51
-65
lines changed

java/src/main/java/io/cucumber/query/Lineage.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,12 @@
1414
import static java.util.Objects.requireNonNull;
1515

1616
/**
17-
* A structure containing all ancestors of a given element.
17+
* A structure containing all ancestors of a given
18+
* {@linkplain GherkinDocument GherkinDocument element} or
19+
* {@link io.cucumber.messages.types.Pickle}.
1820
* <p>
19-
* This works without any ordering because Gherkins document
20-
* structure is simple enough to hard code.
2121
*
22-
* @see LineageCollector
22+
* @see LineageReducer
2323
*/
2424
class Lineage {
2525

java/src/main/java/io/cucumber/query/LineageCollector.java

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,9 @@
99
import io.cucumber.messages.types.TableRow;
1010

1111
/**
12-
* Visit the members of {@link Lineage} of a gherkin document element or
13-
* {@link Pickle} and collect these into a single result.
14-
* <p>
15-
* Because we are using messages we can not express the hierarchy of elements in
16-
* a {@link GherkinDocument} programmatically as a tree of nodes. But we can
17-
* still express the operations that would be typically done with a tree as
18-
* operations on that elements lineage.
12+
* Collect the {@link Lineage} of a
13+
* {@linkplain io.cucumber.messages.types.GherkinDocument GherkinDocument element}
14+
* or {@link Pickle} and reduce it to a single result.
1915
*
2016
* @param <T> the type reduced to.
2117
*/

java/src/main/java/io/cucumber/query/LineageReducer.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,19 @@
77
import static java.util.Objects.requireNonNull;
88

99
/**
10-
* S
10+
* Visit the {@link Lineage} of a {@linkplain io.cucumber.messages.types.GherkinDocument GherkinDocument element}
11+
* or {@link Pickle} and reduce it.
12+
* <p>
13+
* Because we are using messages we can not express the hierarchy of elements in
14+
* a {@link io.cucumber.messages.types.GherkinDocument} programmatically as a
15+
* tree of nodes. But we can still express the operations that would be typically
16+
* done this way as an operation on the lineage of those messages.
1117
*
12-
* @param <T>
18+
* @param <T> the type reduced to.
1319
*/
1420
interface LineageReducer<T> {
1521

16-
static <T> LineageReducer<T> descending(Supplier<? extends LineageCollector<T>> collector){
22+
static <T> LineageReducer<T> descending(Supplier<? extends LineageCollector<T>> collector) {
1723
return new LineageReducerDescending<>(collector);
1824
}
1925

java/src/main/java/io/cucumber/query/NamingReducer.java renamed to java/src/main/java/io/cucumber/query/NamingCollector.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
import static io.cucumber.query.NamingStrategy.FeatureName.INCLUDE;
1919
import static io.cucumber.query.NamingStrategy.Strategy.SHORT;
2020

21-
class NamingReducer implements LineageCollector<String> {
21+
class NamingCollector implements LineageCollector<String> {
2222

2323
private final Deque<String> parts = new ArrayDeque<>();
2424
private final CharSequence delimiter = " - ";
@@ -30,11 +30,11 @@ class NamingReducer implements LineageCollector<String> {
3030
private boolean isExample;
3131
private int examplesIndex;
3232

33-
static Supplier<NamingReducer> of(Strategy strategy, FeatureName featureName, ExampleName exampleName) {
34-
return () -> new NamingReducer(strategy, featureName, exampleName);
33+
static Supplier<NamingCollector> of(Strategy strategy, FeatureName featureName, ExampleName exampleName) {
34+
return () -> new NamingCollector(strategy, featureName, exampleName);
3535
}
3636

37-
private NamingReducer(Strategy strategy, FeatureName featureName, ExampleName exampleName) {
37+
private NamingCollector(Strategy strategy, FeatureName featureName, ExampleName exampleName) {
3838
this.strategy = strategy;
3939
this.featureName = featureName;
4040
this.exampleName = exampleName;

java/src/main/java/io/cucumber/query/NamingStrategy.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
import io.cucumber.messages.types.GherkinDocument;
44
import io.cucumber.messages.types.Pickle;
55

6-
import java.util.function.Supplier;
7-
6+
import static io.cucumber.query.LineageReducer.descending;
7+
import static io.cucumber.query.NamingCollector.of;
88
import static io.cucumber.query.NamingStrategy.ExampleName.NUMBER_AND_PICKLE_IF_PARAMETERIZED;
99
import static io.cucumber.query.NamingStrategy.FeatureName.INCLUDE;
1010
import static java.util.Objects.requireNonNull;
@@ -134,8 +134,7 @@ public Builder featureName(FeatureName featureName) {
134134
}
135135

136136
public NamingStrategy build() {
137-
LineageReducer<String> reducer = LineageReducer.descending(NamingReducer.of(strategy, featureName, exampleName));
138-
return new Adaptor(reducer);
137+
return new Adaptor(descending(of(strategy, featureName, exampleName)));
139138
}
140139
}
141140

java/src/main/java/io/cucumber/query/Query.java

Lines changed: 28 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -147,117 +147,102 @@ public Optional<TestStepResult> findMostSevereTestStepResulBy(TestCaseStarted te
147147
public String findNameOf(GherkinDocument element, NamingStrategy namingStrategy) {
148148
requireNonNull(element);
149149
requireNonNull(namingStrategy);
150-
return findLineageBy(element)
151-
.map(namingStrategy::reduce)
150+
return reduceLinageOf(element, namingStrategy)
152151
.orElseThrow(createElementWasNotPartOfThisQueryObject());
153152
}
154153

155154
public String findNameOf(Feature element, NamingStrategy namingStrategy) {
156155
requireNonNull(element);
157156
requireNonNull(namingStrategy);
158-
return findLineageBy(element)
159-
.map(namingStrategy::reduce)
157+
return reduceLinageOf(element, namingStrategy)
160158
.orElseThrow(createElementWasNotPartOfThisQueryObject());
161159
}
162160

163161
public String findNameOf(Rule element, NamingStrategy namingStrategy) {
164162
requireNonNull(element);
165163
requireNonNull(namingStrategy);
166-
return findLineageBy(element)
167-
.map(namingStrategy::reduce)
164+
return reduceLinageOf(element, namingStrategy)
168165
.orElseThrow(createElementWasNotPartOfThisQueryObject());
169166
}
170167

171168
public String findNameOf(Scenario element, NamingStrategy namingStrategy) {
172169
requireNonNull(element);
173170
requireNonNull(namingStrategy);
174-
return findLineageBy(element)
175-
.map(namingStrategy::reduce)
171+
return reduceLinageOf(element, namingStrategy)
176172
.orElseThrow(createElementWasNotPartOfThisQueryObject());
177173
}
178174

179175
public String findNameOf(Examples element, NamingStrategy namingStrategy) {
180176
requireNonNull(element);
181177
requireNonNull(namingStrategy);
182-
return findLineageBy(element)
183-
.map(namingStrategy::reduce)
178+
return reduceLinageOf(element, namingStrategy)
184179
.orElseThrow(createElementWasNotPartOfThisQueryObject());
185180
}
186181

187182
public String findNameOf(TableRow element, NamingStrategy namingStrategy) {
188183
requireNonNull(element);
189184
requireNonNull(namingStrategy);
190-
return findLineageBy(element)
191-
.map(namingStrategy::reduce)
185+
return reduceLinageOf(element, namingStrategy)
192186
.orElseThrow(createElementWasNotPartOfThisQueryObject());
193187
}
194188

195189
public Optional<String> findNameOf(Pickle element, NamingStrategy namingStrategy) {
196190
requireNonNull(element);
197191
requireNonNull(namingStrategy);
198-
return findLineageBy(element)
199-
.map(lineage -> namingStrategy.reduce(lineage, element));
192+
return reduceLinageOf(element, namingStrategy);
200193
}
201194

202195
private static Supplier<IllegalArgumentException> createElementWasNotPartOfThisQueryObject() {
203196
return () -> new IllegalArgumentException("Element was not part of this query object");
204197
}
205198

206-
<T> Optional<T> reduceLinageOf(GherkinDocument element, Supplier<LineageCollector<T>> reducerSupplier) {
199+
<T> Optional<T> reduceLinageOf(GherkinDocument element, LineageReducer<T> reducer) {
207200
requireNonNull(element);
208-
requireNonNull(reducerSupplier);
209-
LineageReducerDescending<T> strategy = new LineageReducerDescending<>(reducerSupplier);
201+
requireNonNull(reducer);
210202
return findLineageBy(element)
211-
.map(strategy::reduce);
203+
.map(reducer::reduce);
212204
}
213205

214-
<T> Optional<T> reduceLinageOf(Feature element, Supplier<LineageCollector<T>> reducerSupplier) {
206+
<T> Optional<T> reduceLinageOf(Feature element, LineageReducer<T> reducer) {
215207
requireNonNull(element);
216-
requireNonNull(reducerSupplier);
217-
LineageReducerDescending<T> strategy = new LineageReducerDescending<>(reducerSupplier);
208+
requireNonNull(reducer);
218209
return findLineageBy(element)
219-
.map(strategy::reduce);
210+
.map(reducer::reduce);
220211
}
221212

222-
223-
<T> Optional<T> reduceLinageOf(Rule element, Supplier<LineageCollector<T>> reducerSupplier) {
213+
<T> Optional<T> reduceLinageOf(Rule element, LineageReducer<T> reducer) {
224214
requireNonNull(element);
225-
requireNonNull(reducerSupplier);
226-
LineageReducerDescending<T> strategy = new LineageReducerDescending<>(reducerSupplier);
215+
requireNonNull(reducer);
227216
return findLineageBy(element)
228-
.map(strategy::reduce);
217+
.map(reducer::reduce);
229218
}
230219

231-
<T> Optional<T> reduceLinageOf(Scenario element, Supplier<LineageCollector<T>> reducerSupplier) {
220+
<T> Optional<T> reduceLinageOf(Scenario element, LineageReducer<T> reducer) {
232221
requireNonNull(element);
233-
requireNonNull(reducerSupplier);
234-
LineageReducerDescending<T> strategy = new LineageReducerDescending<>(reducerSupplier);
222+
requireNonNull(reducer);
235223
return findLineageBy(element)
236-
.map(strategy::reduce);
224+
.map(reducer::reduce);
237225
}
238226

239-
<T> Optional<T> reduceLinageOf(Examples element, Supplier<LineageCollector<T>> reducerSupplier) {
227+
<T> Optional<T> reduceLinageOf(Examples element, LineageReducer<T> reducer) {
240228
requireNonNull(element);
241-
requireNonNull(reducerSupplier);
242-
LineageReducerDescending<T> strategy = new LineageReducerDescending<>(reducerSupplier);
229+
requireNonNull(reducer);
243230
return findLineageBy(element)
244-
.map(strategy::reduce);
231+
.map(reducer::reduce);
245232
}
246233

247-
<T> Optional<T> reduceLinageOf(TableRow element, Supplier<LineageCollector<T>> reducerSupplier) {
234+
<T> Optional<T> reduceLinageOf(TableRow element, LineageReducer<T> reducer) {
248235
requireNonNull(element);
249-
requireNonNull(reducerSupplier);
250-
LineageReducerDescending<T> strategy = new LineageReducerDescending<>(reducerSupplier);
236+
requireNonNull(reducer);
251237
return findLineageBy(element)
252-
.map(strategy::reduce);
238+
.map(reducer::reduce);
253239
}
254240

255-
<T> Optional<T> reduceLinageOf(Pickle element, Supplier<LineageCollector<T>> reducerSupplier) {
241+
<T> Optional<T> reduceLinageOf(Pickle element, LineageReducer<T> reducer) {
256242
requireNonNull(element);
257-
requireNonNull(reducerSupplier);
258-
LineageReducerDescending<T> strategy = new LineageReducerDescending<>(reducerSupplier);
243+
requireNonNull(reducer);
259244
return findLineageBy(element)
260-
.map(lineage -> strategy.reduce(lineage, element));
245+
.map(lineage -> reducer.reduce(lineage, element));
261246
}
262247

263248
public Optional<Pickle> findPickleBy(TestCaseStarted testCaseStarted) {

0 commit comments

Comments
 (0)