Skip to content

Commit fa7cf38

Browse files
committed
Predictable iteration order for keys in DataTable.asMap(). Closes #764.
1 parent 68df43c commit fa7cf38

File tree

2 files changed

+4
-5
lines changed

2 files changed

+4
-5
lines changed

History.md

+1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
## [1.2.0-SNAPSHOT (Git master)](https://github.com/cucumber/cucumber-jvm/compare/v1.1.8...master) (Not released)
22

3+
* [Core] `DataTable.asMap()` returns a `LinkedHashMap`, ensuring key iteration order is the same as in the gherkin table ([#764](https://github.com/cucumber/cucumber-jvm/issues/764) Aslak Hellesøy).
34
* [Core] Spring dirty cukes test fix ([#708](https://github.com/cucumber/cucumber-jvm/pull/708) Mykola Gurov)
45
* [Core] Improve error message for multiple formatters using STDOUT ([#744](https://github.com/cucumber/cucumber-jvm/pull/744) Björn Rasmusson)
56
* [Core] Better error messages when loading features from rerun file ([#749](https://github.com/cucumber/cucumber-jvm/pull/749) Björn Rasmusson)

core/src/main/java/cucumber/runtime/table/TableConverter.java

+3-5
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,6 @@
77
import cucumber.deps.com.thoughtworks.xstream.io.HierarchicalStreamReader;
88
import cucumber.runtime.CucumberException;
99
import cucumber.runtime.ParameterInfo;
10-
import cucumber.runtime.table.CamelCaseStringConverter;
11-
import cucumber.runtime.table.StringConverter;
1210
import cucumber.runtime.xstream.CellWriter;
1311
import cucumber.runtime.xstream.ComplexTypeWriter;
1412
import cucumber.runtime.xstream.ListOfComplexTypeReader;
@@ -22,7 +20,7 @@
2220
import java.lang.reflect.Type;
2321
import java.util.ArrayList;
2422
import java.util.Collections;
25-
import java.util.HashMap;
23+
import java.util.LinkedHashMap;
2624
import java.util.List;
2725
import java.util.Map;
2826

@@ -175,7 +173,7 @@ public <K, V> Map<K, V> toMap(DataTable dataTable, Type keyType, Type valueType)
175173
throw new CucumberException(String.format("Can't convert DataTable to Map<%s,%s>", keyType, valueType));
176174
}
177175

178-
Map<K, V> result = new HashMap<K, V>();
176+
Map<K, V> result = new LinkedHashMap<K, V>();
179177
for (List<String> row : dataTable.raw()) {
180178
if (row.size() != 2) {
181179
throw new CucumberException("A DataTable can only be converted to a Map when there are 2 columns");
@@ -208,7 +206,7 @@ public <K, V> List<Map<K, V>> toMaps(DataTable dataTable, Type keyType, Type val
208206
}
209207
List<List<String>> valueRows = dataTable.cells(1);
210208
for (List<String> valueRow : valueRows) {
211-
Map<K, V> map = new HashMap<K, V>();
209+
Map<K, V> map = new LinkedHashMap<K, V>();
212210
int i = 0;
213211
for (String cell : valueRow) {
214212
map.put(keys.get(i), (V) valueConverter.fromString(cell));

0 commit comments

Comments
 (0)