formatExampleTable method

String formatExampleTable(
  1. BddConfig config
)

Here we have something like: { (number;123), (password;ABC) } { (number;456), (password;XYZ) }

Implementation

String formatExampleTable(BddConfig config) {
  //
  Map<String, int> sizes = {};
  for (Set<val> row in rows) {
    //
    for (val value in row) {
      int? maxValue1 = sizes[value.name];
      int maxValue2 = max(value.name.length, value.toString(config).length);
      int maxValue =
          (maxValue1 == null) ? maxValue2 : max(maxValue1, maxValue2);

      sizes[value.name] = maxValue;
    }
  }

  var spaces = config.spaces;
  var space = config.space;
  var endOfLineChar = config.endOfLineChar;
  var tableDivider = config.tableDivider;

  String rightAlignPadding = spaces +
      spaces +
      spaces +
      ((config.rightAlignKeywords) ? config.padChar * 4 : '');

  String header = rightAlignPadding +
      '$tableDivider$space' +
      rows.first.map((val) {
        int length = sizes[val.name] ?? 50;
        return val.name.padRight(length, space);
      }).join('$space$tableDivider$space') +
      '$space$tableDivider';

  List<String> rowsStr = rows.map((row) {
    return rightAlignPadding +
        '$tableDivider$space' +
        row.map((val) {
          int length = sizes[val.name] ?? 50;
          return val.toString(config).padRight(length, space);
        }).join('$space$tableDivider$space') +
        '$space$tableDivider';
  }).toList();

  var result = '$header$endOfLineChar'
      '${rowsStr.join(endOfLineChar)}';

  return result;
}