Skip to content

Commit d2e70fc

Browse files
authored
JBEHAVE-1603 Preserve parsing of separators from table files (jbehave#81)
1 parent 4443513 commit d2e70fc

File tree

3 files changed

+44
-1
lines changed

3 files changed

+44
-1
lines changed

jbehave-core/src/main/java/org/jbehave/core/model/ExamplesTableFactory.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
import java.util.Deque;
66

7+
import org.apache.commons.lang3.StringUtils;
78
import org.jbehave.core.configuration.Configuration;
89
import org.jbehave.core.configuration.Keywords;
910
import org.jbehave.core.i18n.LocalizedKeywords;
@@ -104,9 +105,19 @@ public ExamplesTable createExamplesTable(String input) {
104105
loadedTable = TableTransformersExecutor.applyTransformers(tableTransformers,
105106
tablePropertiesQueue.getTable(), tableParsers, target, tableTransformerMonitor);
106107
tablePropertiesQueue = tableParsers.parseProperties(loadedTable);
107-
target = tablePropertiesQueue.getProperties();
108+
TableProperties parsedProperties = tablePropertiesQueue.getProperties().getFirst();
109+
if (StringUtils.isEmpty(parsedProperties.getPropertiesAsString())) {
110+
TableProperties newProperties = new TableProperties("", keywords, parameterConverters);
111+
newProperties.overrideSeparatorsFrom(target.peekLast());
112+
target.clear();
113+
target.addFirst(newProperties);
114+
} else {
115+
target = tablePropertiesQueue.getProperties();
116+
}
108117
}
109118
properties.descendingIterator().forEachRemaining(target::addFirst);
119+
120+
tablePropertiesQueue = new TablePropertiesQueue(tablePropertiesQueue.getTable(), target);
110121
}
111122

112123
return new ExamplesTable(tablePropertiesQueue, parameterConverters, parameterControls, tableParsers,

jbehave-core/src/test/java/org/jbehave/core/model/ExamplesTableFactoryBehaviour.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
11
package org.jbehave.core.model;
22

3+
import static java.util.Arrays.asList;
34
import static org.hamcrest.MatcherAssert.assertThat;
45
import static org.hamcrest.Matchers.equalTo;
56
import static org.junit.jupiter.api.Assertions.assertEquals;
67
import static org.junit.jupiter.api.Assertions.assertThrows;
78
import static org.mockito.Mockito.mock;
89
import static org.mockito.Mockito.when;
910

11+
import java.util.ArrayList;
12+
import java.util.List;
13+
import java.util.Map;
14+
1015
import org.jbehave.core.io.LoadFromClasspath;
1116
import org.jbehave.core.io.ResourceLoader;
1217
import org.junit.jupiter.api.Test;
@@ -167,4 +172,25 @@ void shouldFailIfExamplesTableParsingSeparatorsArePlacesOutsideOfExternalTableTh
167172
+ "external table they belong to:%n{%s=!}\ndata.table", separator);
168173
assertEquals(message, thrown.getMessage());
169174
}
175+
176+
@Test
177+
void shouldLoadTableFromPathAndPreserveSeparators() {
178+
// Given
179+
ExamplesTableFactory factory = new ExamplesTableFactory(new LoadFromClasspath(), new TableTransformers());
180+
181+
// When
182+
ExamplesTable table = factory.createExamplesTable("data.table");
183+
184+
// Then
185+
assertThat(table.getHeaders(), equalTo(asList("symbol", "threshold", "price", "status")));
186+
List<Map<String, String>> rows = table.getRows();
187+
assertThat(rows.size(), equalTo(3));
188+
ensureRowContentIs(rows, 0, asList("STK1", "15.0", "5.0", "OFF"));
189+
ensureRowContentIs(rows, 1, asList("STK1", "15.0", "10.0", "OFF"));
190+
ensureRowContentIs(rows, 2, asList("STK1", "15.0", "16.0", "ON"));
191+
}
192+
193+
private void ensureRowContentIs(List<Map<String, String>> rows, int row, List<String> expected) {
194+
assertThat(new ArrayList<>(rows.get(row).values()), equalTo(expected));
195+
}
170196
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{transformer=REPLACING, replacing=11.0, replacement=10.0, headerSeparator=!, valueSeparator=!}
2+
{transformer=FROM_LANDSCAPE, headerSeparator=!, valueSeparator=!}
3+
!symbol !STK1!STK1!STK1!
4+
!threshold!15.0!15.0!15.0!
5+
!price !5.0 !11.0!16.0!
6+
!status !OFF !OFF !ON !

0 commit comments

Comments
 (0)