mocha.setup('bdd');
window.assert = chai.assert;
window.PROTO_ROOT = '../../protos';

(function() {
  const OriginalReporter = mocha._reporter;

  const SauceReporter = function(runner) {
    const failedTests = [];

    runner.on('end', () => {
      window.mochaResults = runner.stats;
      window.mochaResults.reports = failedTests;
    });

    runner.on('fail', (test, err) => {
      const flattenTitles = function(test) {
        const titles = [];
        while (test.parent.title) {
          titles.push(test.parent.title);
          test = test.parent;
        }
        return titles.reverse();
      };
      failedTests.push({
        name: test.title,
        result: false,
        message: err.message,
        stack: err.stack,
        titles: flattenTitles(test),
      });
    });

    new OriginalReporter(runner);
  };

  SauceReporter.prototype = OriginalReporter.prototype;

  mocha.reporter(SauceReporter);
})();

/*
 * global helpers for tests
 */
function assertEqualArrayBuffers(ab1, ab2) {
  assert.deepEqual(new Uint8Array(ab1), new Uint8Array(ab2));
}

function hexToArrayBuffer(str) {
  const ret = new ArrayBuffer(str.length / 2);
  const array = new Uint8Array(ret);
  for (let i = 0; i < str.length / 2; i++)
    array[i] = parseInt(str.substr(i * 2, 2), 16);
  return ret;
}

window.MockSocket.prototype.addEventListener = function() {};