// Copyright 2017 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

let {session, contextGroup, Protocol} = InspectorTest.start('Checks format of console.timeEnd output');

Protocol.Runtime.enable();
Protocol.Runtime.onConsoleAPICalled(message => {
  InspectorTest.log(message.params.args[0].value);
});

InspectorTest.runAsyncTestSuite([
  function zero() {
    return checkInterval(0.0);
  },
  function verySmall() {
    return checkInterval(1e-15);
  },
  function small() {
    return checkInterval(0.001);
  },
  function regular() {
    return checkInterval(1.2345);
  },
  function big() {
    return checkInterval(10000.2345);
  },
  function veryBig() {
    return checkInterval(1e+15 + 0.2345);
  },
  function huge() {
    return checkInterval(1e+42);
  },
  function undefinedAsLabel() {
    return checkInterval(1.0, 'undefined');
  },
  function emptyAsLabel() {
    return checkInterval(1.0, '');
  }
]);

async function checkInterval(time, label) {
  label = label === undefined ? '\'timeEnd\'' : label;
  utils.setCurrentTimeMSForTest(0.0);
  Protocol.Runtime.evaluate({
    expression: `console.log('js: ' + ${time} + 'ms')`
  });
  await Protocol.Runtime.evaluate({expression: `console.time(${label})`});
  utils.setCurrentTimeMSForTest(time);
  await Protocol.Runtime.evaluate({expression: `console.timeEnd(${label})`});
}