cucumber to json

by Elvis de Freitas

HTML

<fieldset>
  <legend>entrada cucumber</legend>
  <textarea id="entradaCucumber"></textarea>
</fieldset>
<fieldset>
  <legend>saida json</legend>
  <textarea id="saidaJson" readonly></textarea>
</fieldset>
<br />
<button>converter</button>

CSS

textarea {
  width: 100%;
  height: 50px;
}
#saidaCucumber{
  height: 200px;
}

JavaScript

$("button").click(function() {
	log(true);
  console.debug('starting.....');
  var result = JSON.stringify(cucumber2Json($("#entradaCucumber").val()), null, '  ');
  console.debug('conterted!');
  log(result);
});

function cucumber2Json(cucumber){
	var lines = cucumber.split(/[\n\r]+/), keys, result = [];
  if(lines.length){
  	keys = cucumberHeader2JsonKeys(lines[0]);
    if(lines.length > 1){
    	lines.shift();
      lines.forEach(function(line){
      	result.push(cucumberBody2JsonKeys(keys, line));
      });
    }
  }
  return result;
}
function cucumberHeader2JsonKeys(cucumberHeader){
	var keys = pipeline2Array(cucumberHeader);
  console.debug('converted keys: ', keys);
  return keys;
}
function cucumberBody2JsonKeys(keys, line){
	var lineValues = pipeline2Array(line), o = {};
  lineValues.forEach(function(value, i){
  	o[keys[i]] = value;
  });
  console.debug('converted body:', o);
  return o;
}

function pipeline2Array(line){
	var array = line.split(/ *\| */);
  array.shift();
  array.pop();
  return array;
}

function log(text) {
  var out = $("#saidaJson");
  out.val(out.val() + text);
  if(text === true){out.val('');}
}