chromium/chrome/browser/resources/chromeos/accessibility/common/testing/common.js

// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/** @fileoverview File containing test framework helper functions. */

/**
 * Similar to |TEST_F|. Generates a test for the given |testFixture|,
 * |testName|, and |testFunction|.
 * Use this variant when an |isAsync| fixture wants to temporarily mix in a
 * sync test or use async/await.
 * @param {string} testFixture Fixture name.
 * @param {string} testName Test name.
 * @param {function} testFunction The test impl.
 * @param {string=} preamble C++ code to execute before the test.
 */
function AX_TEST_F(testFixture, testName, testFunction, preamble) {
  TEST_F(testFixture, testName, function() {
    this.newCallback(testFunction)();
  }, preamble);
}

// var is used to export this function alias outside of the current context
// while all tests are migrated to the new fixture.
var SYNC_TEST_F = AX_TEST_F;

/**
 * Helper to import a module, and expose it onto window.
 * @param {string|!Array<string>} toImport Names of the module exports to
 *     expose.
 * @param {string} path Path to the module js file.
 */
async function importModule(toImport, path) {
  const module = await import(path);
  let moduleNames;
  if (typeof (toImport) === 'string') {
    moduleNames = [toImport];
  } else if (typeof (toImport) === 'object') {
    moduleNames = toImport;
  } else {
    throw new Error('Invalid argument to importModule: ' + toImport);
  }

  for (const moduleName of moduleNames) {
    window[moduleName] = module[moduleName];
  }
}