Skip to content

Commit 9575313

Browse files
committed
[Core] Upgrade dependencies
Upgrades cucumber-expressions and datatable to the most recent version
1 parent 64ce7ed commit 9575313

File tree

12 files changed

+72
-113
lines changed

12 files changed

+72
-113
lines changed

CHANGELOG.md

+10-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,16 @@ Please see [CONTRIBUTING.md](https://github.com/cucumber/cucumber/blob/master/CO
2929
* [Core] Use feature file language to parse numbers in the type registry
3030
- Unless explicitly set using the `TypeRegistryConfigurer`
3131
* [Core] Use Java Time API in Events ([#1620](https://github.com/cucumber/cucumber-jvm/pull/1620) Yatharth Zutshi)
32-
32+
* [Core] Upgrade `cucumber-expressions` to 8.0.0
33+
- Simplify heuristics to distinguish between Cucumber Expressions and Regular Expressions ([#cucumber/515](https://github.com/cucumber/cucumber/issues/515), [#cucumber/581](https://github.com/cucumber/cucumber/pull/581), [#1581](https://github.com/cucumber/cucumber-jvm/issues/1581) M.P.Korstanje)
34+
- Improve decimal number parsing ([#cucumber/600](https://github.com/cucumber/cucumber/issues/600), [#cucumber/605](https://github.com/cucumber/cucumber/pull/605), [#cucumber/669](https://github.com/cucumber/cucumber/issues/669), [#cucumber/672](https://github.com/cucumber/cucumber/pull/672), [#cucumber/675](https://github.com/cucumber/cucumber/pull/675), [#cucumber/677](https://github.com/cucumber/cucumber/pull/677) Aslak Hellesøy, Vincent Psarga, Luke Hill, M.P. Korstanje )
35+
- Recognize look around as a non-capturing regex group ([#cucumber/481](https://github.com/cucumber/cucumber/issues/576), [#cucumber/593](https://github.com/cucumber/cucumber/pull/593) Luke Hill)
36+
- Prefer type from method over type from ParameterType ([#cucumber/658](https://github.com/cucumber/cucumber/pull/658) [#cucumber/659](https://github.com/cucumber/cucumber/pull/659) M.P. Korstanje)
37+
* [Core] Upgrade `datatable` to 2.0.0
38+
- Empty cells are `null` values in `DataTable` ([1617](https://github.com/cucumber/cucumber-jvm/issues/1617) M.P. Korstanje)
39+
- Improve handling of tables without header ([#cucumber/540](https://github.com/cucumber/cucumber/pull/540) M.P. Korstanje)
40+
- Remove DataTableType convenience methods ([1643](https://github.com/cucumber/cucumber-jvm/issues/1643) M.P. Korstanje)
41+
3342
### Deprecated
3443
* [Core] Deprecate `timeout` ([#1506](https://github.com/cucumber/cucumber-jvm/issues/1506), [#1694](https://github.com/cucumber/cucumber-jvm/issues/1694) M.P. Korstanje)
3544
- Prefer using library based solutions

core/src/test/java/io/cucumber/core/runner/CoreStepDefinitionTest.java

+1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import static org.hamcrest.core.Is.is;
2626
import static org.hamcrest.core.IsEqual.equalTo;
2727
import static org.junit.jupiter.api.Assertions.assertAll;
28+
import static org.junit.jupiter.api.Assertions.assertEquals;
2829
import static org.mockito.Mockito.mock;
2930

3031
public class CoreStepDefinitionTest {

core/src/test/java/io/cucumber/core/runner/StepDefinitionMatchTest.java

+6-13
Original file line numberDiff line numberDiff line change
@@ -185,23 +185,16 @@ public ItemQuantity transform(String s) throws Throwable {
185185
public void throws_could_not_convert_exception_for_singleton_table_dimension_mismatch() {
186186
PickleTable table = new PickleTable(
187187
asList(
188-
new PickleRow(asList(new PickleCell(mock(PickleLocation.class), "A"), new PickleCell(mock(PickleLocation.class), "B"))),
189-
new PickleRow(asList(new PickleCell(mock(PickleLocation.class), "C"), new PickleCell(mock(PickleLocation.class), "D")))
188+
new PickleRow(singletonList(new PickleCell(mock(PickleLocation.class), "A"))),
189+
new PickleRow(singletonList(new PickleCell(mock(PickleLocation.class), "B"))),
190+
new PickleRow(singletonList(new PickleCell(mock(PickleLocation.class), "C"))),
191+
new PickleRow(singletonList(new PickleCell(mock(PickleLocation.class), "D")))
190192
)
191193
);
192194

193-
typeRegistry.defineDataTableType(new DataTableType(
194-
ItemQuantity.class,
195-
new TableCellTransformer<ItemQuantity>() {
196-
@Override
197-
public ItemQuantity transform(String s) {
198-
return new ItemQuantity(s);
199-
}
200-
}
201-
202-
));
195+
typeRegistry.defineDataTableType(new DataTableType(ItemQuantity.class, ItemQuantity::new ));
203196

204-
PickleStep step = new PickleStep("I have some cukes in my belly", singletonList((gherkin.pickles.Argument) table), asList(mock(PickleLocation.class)));
197+
PickleStep step = new PickleStep("I have some cukes in my belly", singletonList(table), singletonList(mock(PickleLocation.class)));
205198
StepDefinition stepDefinition = new StubStepDefinition("I have some cukes in my belly", ItemQuantity.class);
206199
CoreStepDefinition coreStepDefinition = new CoreStepDefinition(stepDefinition, typeRegistry);
207200
List<Argument> arguments = coreStepDefinition.matchedArguments(step);

core/src/test/java/io/cucumber/core/stepexpression/StepExpressionFactoryTest.java

+36-21
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,11 @@
22

33
import io.cucumber.datatable.DataTable;
44
import io.cucumber.datatable.DataTableType;
5+
import io.cucumber.datatable.TableCellByTypeTransformer;
6+
import io.cucumber.datatable.TableEntryByTypeTransformer;
57
import io.cucumber.datatable.TableEntryTransformer;
68
import io.cucumber.datatable.TableTransformer;
9+
import io.cucumber.datatable.dependency.com.fasterxml.jackson.databind.ObjectMapper;
710
import org.junit.jupiter.api.Test;
811

912
import java.lang.reflect.Method;
@@ -16,15 +19,16 @@
1619
import static org.hamcrest.MatcherAssert.assertThat;
1720
import static org.hamcrest.core.Is.is;
1821
import static org.hamcrest.core.IsEqual.equalTo;
22+
import static org.hamcrest.core.IsNull.nullValue;
1923

2024
public class StepExpressionFactoryTest {
2125

2226
private static final TypeResolver UNKNOWN_TYPE = () -> Object.class;
2327

2428
static class Ingredient {
25-
String name;
26-
Integer amount;
27-
String unit;
29+
public String name;
30+
public Integer amount;
31+
public String unit;
2832

2933
Ingredient() {
3034
}
@@ -37,27 +41,20 @@ static class Ingredient {
3741

3842
private TableEntryTransformer<Ingredient> listBeanMapper(final TypeRegistry registry) {
3943
//Just pretend this is a bean mapper.
40-
return new TableEntryTransformer<Ingredient>() {
41-
42-
@Override
43-
public Ingredient transform(Map<String, String> tableRow) {
44-
Ingredient bean = new Ingredient();
45-
bean.amount = Integer.valueOf(tableRow.get("amount"));
46-
bean.name = tableRow.get("name");
47-
bean.unit = tableRow.get("unit");
48-
return bean;
49-
}
44+
return tableRow -> {
45+
Ingredient bean = new Ingredient();
46+
bean.amount = Integer.valueOf(tableRow.get("amount"));
47+
bean.name = tableRow.get("name");
48+
bean.unit = tableRow.get("unit");
49+
return bean;
5050
};
5151
}
5252

5353

5454
private TableTransformer<Ingredient> beanMapper(final TypeRegistry registry) {
55-
return new TableTransformer<Ingredient>() {
56-
@Override
57-
public Ingredient transform(DataTable table) throws Throwable {
58-
Map<String, String> tableRow = table.transpose().asMaps().get(0);
59-
return listBeanMapper(registry).transform(tableRow);
60-
}
55+
return table -> {
56+
Map<String, String> tableRow = table.transpose().asMaps().get(0);
57+
return listBeanMapper(registry).transform(tableRow);
6158
};
6259
}
6360

@@ -96,7 +93,7 @@ public void table_expression_with_list_type_creates_list_of_ingredients_from_tab
9693

9794
List<Ingredient> ingredients = (List<Ingredient>) match.get(0).getValue();
9895
Ingredient ingredient = ingredients.get(0);
99-
assertThat(ingredient.name, is(equalTo("chocolate")));
96+
assertThat(ingredient.amount, is(equalTo(2)));
10097
}
10198

10299
@Test
@@ -107,13 +104,31 @@ public void unknown_target_type_does_no_transform_data_table() {
107104
}
108105

109106
@Test
110-
public void unknown_target_type_does_no_transform_doc_string() {
107+
public void unknown_target_type_does_not_transform_doc_string() {
111108
String docString = "A rather long and boring string of documentation";
112109
StepExpression expression = new StepExpressionFactory(registry).createExpression("Given some stuff:", UNKNOWN_TYPE);
113110
List<Argument> match = expression.match("Given some stuff:", docString);
114111
assertThat(match.get(0).getValue(), is(equalTo(docString)));
115112
}
116113

114+
@Test
115+
public void empty_table_cells_are_presented_as_null_to_transformer() {
116+
registry.setDefaultDataTableEntryTransformer(new TableEntryByTypeTransformer() {
117+
@Override
118+
public <T> T transform(Map<String, String> map, Class<T> aClass, TableCellByTypeTransformer tableCellByTypeTransformer) {
119+
return new ObjectMapper().convertValue(map, aClass);
120+
}
121+
});
122+
123+
StepExpression expression = new StepExpressionFactory(registry).createExpression("Given some stuff:", getTypeFromStepDefinition());
124+
List<List<String>> table = asList(asList("name", "amount", "unit"), asList("chocolate", null, "tbsp"));
125+
List<Argument> match = expression.match("Given some stuff:", table);
126+
127+
List<Ingredient> ingredients = (List<Ingredient>) match.get(0).getValue();
128+
Ingredient ingredient = ingredients.get(0);
129+
assertThat(ingredient.name, is(equalTo("chocolate")));
130+
131+
}
117132

118133
private Type getTypeFromStepDefinition() {
119134
for (Method method : this.getClass().getMethods()) {

core/src/test/java/io/cucumber/core/stepexpression/TableParser.java

-40
This file was deleted.

core/src/test/java/io/cucumber/core/stepexpression/TypeRegistryTest.java

+7-13
Original file line numberDiff line numberDiff line change
@@ -1,57 +1,51 @@
11
package io.cucumber.core.stepexpression;
22

3+
import io.cucumber.cucumberexpressions.Expression;
4+
import io.cucumber.cucumberexpressions.ExpressionFactory;
35
import io.cucumber.cucumberexpressions.ParameterByTypeTransformer;
46
import io.cucumber.cucumberexpressions.ParameterType;
5-
import io.cucumber.cucumberexpressions.Transformer;
67
import io.cucumber.datatable.DataTable;
78
import io.cucumber.datatable.DataTableType;
89
import io.cucumber.datatable.TableCellByTypeTransformer;
910
import io.cucumber.datatable.TableEntryByTypeTransformer;
10-
import io.cucumber.datatable.TableTransformer;
1111
import org.junit.jupiter.api.Test;
1212

13-
import java.lang.reflect.Type;
1413
import java.util.Date;
1514
import java.util.Map;
15+
import java.util.regex.Pattern;
1616

1717
import static java.util.Locale.ENGLISH;
1818
import static org.hamcrest.MatcherAssert.assertThat;
1919
import static org.hamcrest.core.Is.is;
20-
import static org.hamcrest.core.IsEqual.equalTo;
2120

2221
public class TypeRegistryTest {
2322

2423
private final TypeRegistry registry = new TypeRegistry(ENGLISH);
24+
private final ExpressionFactory expressionFactory = new ExpressionFactory(registry.parameterTypeRegistry());
2525

2626
@Test
2727
public void should_define_parameter_type() {
2828
ParameterType<Object> expected = new ParameterType<>(
2929
"example",
3030
".*",
3131
Object.class,
32-
new Transformer<Object>() {
33-
@Override
34-
public Object transform(String s) {
35-
return null;
36-
}
37-
}
32+
(String s) -> null
3833
);
3934
registry.defineParameterType(expected);
40-
assertThat(registry.parameterTypeRegistry().lookupByTypeName("example"), is(equalTo(expected)));
35+
Expression expresion = expressionFactory.createExpression("{example}");
36+
assertThat(expresion.getRegexp().pattern(), is("^(.*)$"));
4137
}
4238

4339
@Test
4440
public void should_define_data_table_parameter_type() {
4541
DataTableType expected = new DataTableType(Date.class, (DataTable dataTable) -> null);
4642
registry.defineDataTableType(expected);
47-
assertThat(registry.dataTableTypeRegistry().lookupTableTypeByType(Date.class), is(equalTo(expected)));
4843
}
4944

5045
@Test
5146
public void should_set_default_parameter_transformer() {
5247
ParameterByTypeTransformer expected = (fromValue, toValueType) -> null;
5348
registry.setDefaultParameterTransformer(expected);
54-
assertThat(registry.parameterTypeRegistry().getDefaultParameterTransformer(), is(equalTo(expected)));
5549
}
5650

5751
@Test

examples/java-calculator-testng/src/test/java/io/cucumber/examples/testng/RpnCalculatorStepdefs.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public void adding(int arg1, int arg2) {
2727
calc.push("+");
2828
}
2929

30-
@Given("I press (.+)")
30+
@Given("^I press (.+)$")
3131
public void I_press(String what) {
3232
calc.push(what);
3333
}

examples/java-calculator/src/test/java/io/cucumber/examples/java/RpnCalculatorStepdefs.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public void adding(int arg1, int arg2) {
2626
calc.push("+");
2727
}
2828

29-
@Given("I press (.+)")
29+
@Given("^I press (.+)$")
3030
public void I_press(String what) {
3131
calc.push(what);
3232
}

examples/java8-calculator/src/test/java/io/cucumber/examples/java8/RpnCalculatorStepdefs.java

+2-5
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,9 @@ public RpnCalculatorStepdefs() {
2323
});
2424

2525

26-
Given("I press (.+)", (String what) -> calc.push(what));
27-
28-
Then("the result is {double}", (Integer expected) -> assertEquals(expected, calc.value()));
29-
30-
Then("the result is {int}", (Integer expected) -> assertEquals(expected.doubleValue(), calc.value()));
26+
Given("^I press (.+)$", (String what) -> calc.push(what));
3127

28+
Then("the result is {double}", (Double expected) -> assertEquals(expected, calc.value()));
3229

3330
Before("not @foo", (Scenario scenario) -> {
3431
scenario.write("Runs before scenarios *not* tagged with @foo");

java/src/test/java/io/cucumber/java/JavaParameterTypeDefinitionTest.java

+6-5
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@
22

33
import io.cucumber.core.backend.Lookup;
44
import io.cucumber.cucumberexpressions.Argument;
5-
import io.cucumber.cucumberexpressions.CucumberExpression;
65
import io.cucumber.cucumberexpressions.CucumberExpressionException;
6+
import io.cucumber.cucumberexpressions.Expression;
7+
import io.cucumber.cucumberexpressions.ExpressionFactory;
78
import io.cucumber.cucumberexpressions.ParameterTypeRegistry;
89
import org.junit.jupiter.api.Test;
910

@@ -33,7 +34,7 @@ public void can_define_parameter_type_converters_with_one_capture_group() throws
3334
Method method = JavaParameterTypeDefinitionTest.class.getMethod("convert_one_capture_group_to_string", String.class);
3435
JavaParameterTypeDefinition definition = new JavaParameterTypeDefinition("", "(.*)", method, false, false, lookup);
3536
registry.defineParameterType(definition.parameterType());
36-
CucumberExpression cucumberExpression = new CucumberExpression("{convert_one_capture_group_to_string}", registry);
37+
Expression cucumberExpression = new ExpressionFactory(registry).createExpression("{convert_one_capture_group_to_string}");
3738
List<Argument<?>> test = cucumberExpression.match("test");
3839
assertThat(test.get(0).getValue(), equalTo("convert_one_capture_group_to_string"));
3940
}
@@ -47,7 +48,7 @@ public void can_define_parameter_type_converters_with_two_capture_groups() throw
4748
Method method = JavaParameterTypeDefinitionTest.class.getMethod("convert_two_capture_group_to_string", String.class, String.class);
4849
JavaParameterTypeDefinition definition = new JavaParameterTypeDefinition("", "([^ ]*) ([^ ]*)", method, false, false, lookup);
4950
registry.defineParameterType(definition.parameterType());
50-
CucumberExpression cucumberExpression = new CucumberExpression("{convert_two_capture_group_to_string}", registry);
51+
Expression cucumberExpression = new ExpressionFactory(registry).createExpression("{convert_two_capture_group_to_string}");
5152
List<Argument<?>> test = cucumberExpression.match("test test");
5253
assertThat(test.get(0).getValue(), equalTo("convert_two_capture_group_to_string"));
5354
}
@@ -61,7 +62,7 @@ public void can_define_parameter_type_converters_with_var_args() throws NoSuchMe
6162
Method method = JavaParameterTypeDefinitionTest.class.getMethod("convert_varargs_capture_group_to_string", String[].class);
6263
JavaParameterTypeDefinition definition = new JavaParameterTypeDefinition("", "([^ ]*) ([^ ]*)", method, false, false, lookup);
6364
registry.defineParameterType(definition.parameterType());
64-
CucumberExpression cucumberExpression = new CucumberExpression("{convert_varargs_capture_group_to_string}", registry);
65+
Expression cucumberExpression = new ExpressionFactory(registry).createExpression("{convert_varargs_capture_group_to_string}");
6566
List<Argument<?>> test = cucumberExpression.match("test test");
6667
assertThat(test.get(0).getValue(), equalTo("convert_varargs_capture_group_to_string"));
6768
}
@@ -75,7 +76,7 @@ public void arguments_must_match_captured_groups() throws NoSuchMethodException
7576
Method method = JavaParameterTypeDefinitionTest.class.getMethod("convert_two_capture_group_to_string", String.class, String.class);
7677
JavaParameterTypeDefinition definition = new JavaParameterTypeDefinition("", ".*", method, false, false, lookup);
7778
registry.defineParameterType(definition.parameterType());
78-
CucumberExpression cucumberExpression = new CucumberExpression("{convert_two_capture_group_to_string}", registry);
79+
Expression cucumberExpression = new ExpressionFactory(registry).createExpression("{convert_two_capture_group_to_string}");
7980
List<Argument<?>> test = cucumberExpression.match("test");
8081
assertThrows(CucumberExpressionException.class, () -> test.get(0).getValue());
8182
}

java/src/test/java/io/cucumber/java/JavaSnippetTest.java

-11
Original file line numberDiff line numberDiff line change
@@ -123,17 +123,6 @@ public void generatesCopyPasteReadySnippetWhenStepHasIntegersInsideStringParamet
123123
assertThat(expected, snippetFor("the DI system receives a message saying \"{ dataIngestion: { feeds: [ feed: { merchantId: 666, feedId: 1, feedFileLocation: feed.csv } ] }\""), is(equalTo(expected)));
124124
}
125125

126-
@Test
127-
public void generatesSnippetWithDollarSigns() {
128-
String expected = "" +
129-
"@Given(\"I have ${int}\")\n" +
130-
"public void i_have_$(Integer int1) {\n" +
131-
" // Write code here that turns the phrase above into concrete actions\n" +
132-
" throw new io.cucumber.java.PendingException();\n" +
133-
"}\n";
134-
assertThat(snippetFor("I have $5"), is(equalTo(expected)));
135-
}
136-
137126
@Test
138127
public void generatesSnippetWithQuestionMarks() {
139128
String expected = "" +

pom.xml

+2-2
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,8 @@
4343
<apiguardian-api.version>1.1.0</apiguardian-api.version>
4444
<!--Dependencies -->
4545
<gherkin.version>5.1.0</gherkin.version>
46-
<cucumber-expressions.version>7.0.2</cucumber-expressions.version>
47-
<datatable.version>1.1.14</datatable.version>
46+
<cucumber-expressions.version>8.0.0</cucumber-expressions.version>
47+
<datatable.version>2.0.0</datatable.version>
4848
<tag-expressions.version>2.0.2</tag-expressions.version>
4949

5050
<!--Test Dependencies-->

0 commit comments

Comments
 (0)