mirror of
https://github.com/google/blockly.git
synced 2026-01-25 17:50:10 +01:00
* fix: move core test helpers into new directory * fix: add test helpers to core and convert to goog modules * fix: change tests to use local helpers * fix: change local tests to use chai asserts * fix: skip field tests in serializer b/c test blocks are unavailable * fix: rename some helper files * fix: rename some helper modules * fix: split block helpers into code gen and serialization * fix: split block defs into new helper file * fix: split warning helpers into new file * fix: split user input helpers into new file * fix: split event helpers into a new file * fix: split variable helper into new file * fix: move remaining test helpers to new setup-teardown file * fix: rename setup and teardown module * fix: cleanup from rebase * fix: undo accidental rename * fix: lint? * fix: bad toolbox definitions namespace * fix: fixup warning helpers * fix: remove inclusion of dev-tools in mocha tests * move to modules, but break mocha * fix: run mocha as a module * fix: lint
109 lines
2.8 KiB
JavaScript
109 lines
2.8 KiB
JavaScript
/**
|
|
* @license
|
|
* Copyright 2020 Google LLC
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
goog.declareModuleId('Blockly.test.helpers.common');
|
|
|
|
/**
|
|
* Test case configuration.
|
|
* @record
|
|
*/
|
|
export class TestCase {
|
|
/**
|
|
* Class for a test case configuration.
|
|
*/
|
|
constructor() {
|
|
/**
|
|
* @type {string} The title for the test case.
|
|
*/
|
|
this.title;
|
|
/**
|
|
* @type {boolean|undefined} Whether this test case should be skipped.
|
|
* Used to skip buggy test case and should have an associated bug.
|
|
*/
|
|
this.skip;
|
|
/**
|
|
* @type {boolean|undefined} Whether this test case should be called as
|
|
* only. Used for debugging.
|
|
*/
|
|
this.only;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Test suite configuration.
|
|
* @record
|
|
* @template {TestCase} T
|
|
* @template {TestSuite} U
|
|
*/
|
|
export class TestSuite {
|
|
/**
|
|
* Class for a test suite configuration.
|
|
*/
|
|
constructor() {
|
|
/**
|
|
* @type {string} The title for the test case.
|
|
*/
|
|
this.title;
|
|
/**
|
|
* @type {?Array<T>} The associated test cases.
|
|
*/
|
|
this.testCases;
|
|
/**
|
|
* @type {?Array<U>} List of nested inner test suites.
|
|
*/
|
|
this.testSuites;
|
|
/**
|
|
* @type {boolean|undefined} Whether this test suite should be skipped.
|
|
* Used to skip buggy test case and should have an associated bug.
|
|
*/
|
|
this.skip;
|
|
/**
|
|
* @type {boolean|undefined} Whether this test suite should be called as
|
|
* only. Used for debugging.
|
|
*/
|
|
this.only;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Runs provided test cases.
|
|
* @template {TestCase} T
|
|
* @param {!Array<T>} testCases The test cases to run.
|
|
* @param {function(T):Function} createTestCallback Creates test
|
|
* callback using given test case.
|
|
*/
|
|
export function runTestCases(testCases, createTestCallback) {
|
|
testCases.forEach((testCase) => {
|
|
let testCall = (testCase.skip ? test.skip : test);
|
|
testCall = (testCase.only ? test.only : testCall);
|
|
testCall(testCase.title, createTestCallback(testCase));
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Runs provided test suite.
|
|
* @template {TestCase} T
|
|
* @template {TestSuite<T, U>} U
|
|
* @param {Array<!U>} testSuites The test suites to run.
|
|
* @param {function(!U):(function(T):!Function)
|
|
* } createTestCaseCallback Creates test case callback using given test
|
|
* suite.
|
|
*/
|
|
export function runTestSuites(testSuites, createTestCaseCallback) {
|
|
testSuites.forEach((testSuite) => {
|
|
let suiteCall = (testSuite.skip ? suite.skip : suite);
|
|
suiteCall = (testSuite.only ? suite.only : suiteCall);
|
|
suiteCall(testSuite.title, function() {
|
|
if (testSuite.testSuites && testSuite.testSuites.length) {
|
|
runTestSuites(testSuite.testSuites, createTestCaseCallback);
|
|
}
|
|
if (testSuite.testCases && testSuite.testCases.length) {
|
|
runTestCases(testSuite.testCases, createTestCaseCallback(testSuite));
|
|
}
|
|
});
|
|
});
|
|
}
|