package cucumber.runtime.table;
import cucumber.api.DataTable;
import cucumber.runtime.ParameterInfo;
import cucumber.runtime.xstream.LocalizedXStreams;
import gherkin.formatter.model.Comment;
import gherkin.formatter.model.DataTableRow;
import gherkin.lexer.En;
import gherkin.lexer.Lexer;
import gherkin.lexer.Listener;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Locale;
public class TableParser {
private static final List<Comment> NO_COMMENTS = Collections.emptyList();
private TableParser() {
}
public static DataTable parse(String source, ParameterInfo parameterInfo) {
final List<DataTableRow> rows = new ArrayList<DataTableRow>();
Lexer l = new En(new Listener() {
@Override
public void comment(String comment, Integer line) {
throw new UnsupportedOperationException();
}
@Override
public void tag(String tag, Integer line) {
throw new UnsupportedOperationException();
}
@Override
public void feature(String keyword, String name, String description, Integer line) {
throw new UnsupportedOperationException();
}
@Override
public void background(String keyword, String name, String description, Integer line) {
throw new UnsupportedOperationException();
}
@Override
public void scenario(String keyword, String name, String description, Integer line) {
throw new UnsupportedOperationException();
}
@Override
public void scenarioOutline(String keyword, String name, String description, Integer line) {
throw new UnsupportedOperationException();
}
@Override
public void examples(String keyword, String name, String description, Integer line) {
throw new UnsupportedOperationException();
}
@Override
public void step(String keyword, String name, Integer line) {
throw new UnsupportedOperationException();
}
@Override
public void row(List<String> cells, Integer line) {
rows.add(new DataTableRow(NO_COMMENTS, cells, line));
}
@Override
public void docString(String contentType, String string, Integer line) {
throw new UnsupportedOperationException();
}
@Override
public void eof() {
}
});
l.scan(source);
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
return new DataTable(rows, new TableConverter(new LocalizedXStreams(classLoader).get(Locale.US), parameterInfo));
}
}