var webdriver = require('selenium-webdriver');
var chrome = require('selenium-webdriver/chrome');
var builder = new webdriver.Builder().forBrowser('chrome');

if (process.env.CI) {
  const options = new chrome.Options().headless();
  if (process.platform === 'linux') {
    options.addArguments('no-sandbox');
  }
  builder.setChromeOptions(options);
}

var browser = builder.build();

// Parse jsunit html report, exit(1) if there are any failures.
var testHtml = function (htmlString) {
  var regex = /[\d]+\spassed,\s([\d]+)\sfailed./i;
  var numOfFailure = regex.exec(htmlString)[1];
  var regex2 = /Unit Tests for .*]/;
  var testStatus = regex2.exec(htmlString)[0];
  console.log("============Unit Test Summary=================");
  console.log(testStatus);
  var regex3 = /\d+ passed,\s\d+ failed/;
  var detail = regex3.exec(htmlString)[0];
  console.log(detail);
  console.log("============Unit Test Summary=================");
  if (parseInt(numOfFailure) !== 0) {
    console.log(htmlString);
    process.exit(1);
  }
};

var path = process.cwd();

var runTests = async function () {
  try {
    var element, text;

    await browser.get("file://" + path + "/tests/jsunit/vertical_tests.html");
    await browser.sleep(5000);
    element = await browser.findElement({id: "closureTestRunnerLog"});
    text = await element.getText();
    testHtml(text);

    await browser.get("file://" + path + "/tests/jsunit/horizontal_tests.html");
    await browser.sleep(5000);
    element = await browser.findElement({id: "closureTestRunnerLog"});
    text = await element.getText();
    testHtml(text);
  }
  finally {
    await browser.quit();
  }
};

runTests().catch(e => {
  console.error(e);
  process.exit(1);
});