chromium/third_party/blink/web_tests/inspector-protocol/runtime/runtime-console-basic-functions.js

(async function testRemoteObjects(testRunner) {
  const {dp, session} = await testRunner.startBlank('Tests ConsoleOM APIs with standard argument behavior.');
  dp.Runtime.enable();
  const response1 = await dp.Runtime.onceExecutionContextCreated();
  const pageContextId = response1.params.context.id; // main page
  session.evaluate(`
    window.frame = document.createElement('iframe');
    frame.src = '${testRunner.url('../resources/blank.html')}';
    document.body.appendChild(frame);
  `);
  const response2 = await dp.Runtime.onceExecutionContextCreated();
  const frameContextId = response2.params.context.id; // IFrame
  const console_argsRequired = [
    'log',
    'debug',
    'info',
    'error',
    'warn',
    'dir',
    'dirxml',
    'table'
  ];
  const console_argsOptional = [
    'trace',
    'clear',
    'group',
    'groupCollapsed',
    'groupEnd'
  ];
  const configs = [
    pageContextId,
    frameContextId
  ];

  dp.Runtime.onConsoleAPICalled(result => testRunner.log(result));

  for (const contextId of configs) {
    for (const func of console_argsRequired) {
      logConsoleTestMethod(func, true, contextId);
      await dp.Runtime.evaluate({ expression: `console.${func}({a:3, b:"hello"})`, contextId });
    }

    for (const func of console_argsOptional) {
      logConsoleTestMethod(func, false, contextId);
      await dp.Runtime.evaluate({ expression: `console.${func}()`, contextId });
    }
  }

  testRunner.completeTest();

  function logConsoleTestMethod(func, required, contextId) {
    const context = getContextType(contextId);
    const contextString = context ? `inside ${context} context` : '';
    const argType = required ? 'required' : 'optional';
    testRunner.log(`Testing console.${func} with ${argType} args ${contextString}`);
  }

  function getContextType(contextId) {
    if (contextId === pageContextId) {
      return 'page';
    } else if (contextId === frameContextId) {
      return 'frame';
    }
  }
});