mirror of
https://github.com/google/blockly.git
synced 2026-01-08 09:30:06 +01:00
* chore(deps): Bump chai from 4.3.10 to 5.1.1 Bumps [chai](https://github.com/chaijs/chai) from 4.3.10 to 5.1.1. - [Release notes](https://github.com/chaijs/chai/releases) - [Changelog](https://github.com/chaijs/chai/blob/main/History.md) - [Commits](https://github.com/chaijs/chai/compare/v4.3.10...v5.1.1) --- updated-dependencies: - dependency-name: chai dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> * fix(tests): Migrate all usage of chai to ESM (#8216) * fix(tests): Migrate node tests from CJS to ESM This allows us to import (rather than require) chai, fixing failures caused by that package dropping suppport for CJS in chai v5.0.0. * fix(tests): Have mocha tests directly import chai Previously they relied on obtaining it from the global scope, but it's better if imports are explicit. * fix(tests): Remove broken load of chai as script Chai v5.0.0 no longer supports being loaded as a script, so this did nothing but emit an syntax error message on the console. * fix(tests): Migrate browser tests from CJS to ESM This allows us to import (rather than require) chai, fixing failures caused by chai no longer supporting CJS. * chore(tests): format --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Christopher Allen <cpcallen+git@google.com>
311 lines
9.3 KiB
JavaScript
311 lines
9.3 KiB
JavaScript
/**
|
|
* @license
|
|
* Copyright 2020 Google LLC
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
import {assert} from '../../../node_modules/chai/chai.js';
|
|
import {runTestCases, TestCase} from './common.js';
|
|
|
|
/**
|
|
* Field value test case.
|
|
* @implements {TestCase}
|
|
* @record
|
|
*/
|
|
export class FieldValueTestCase {
|
|
/**
|
|
* Class for a a field value test case.
|
|
*/
|
|
constructor() {
|
|
/**
|
|
* @type {*} The value to use in test.
|
|
*/
|
|
this.value;
|
|
/**
|
|
* @type {*} The expected value.
|
|
*/
|
|
this.expectedValue;
|
|
/**
|
|
* @type {string|undefined} The expected text value. Provided if different
|
|
* from String(expectedValue).
|
|
*/
|
|
this.expectedText;
|
|
/**
|
|
* @type {!RegExp|string|undefined} The optional error message matcher.
|
|
* Provided if test case is expected to throw.
|
|
*/
|
|
this.errMsgMatcher;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Field creation test case.
|
|
* @extends {FieldValueTestCase}
|
|
* @record
|
|
*/
|
|
export class FieldCreationTestCase {
|
|
/**
|
|
* Class for a field creation test case.
|
|
*/
|
|
constructor() {
|
|
/**
|
|
* @type {Array<*>} The arguments to pass to field constructor.
|
|
*/
|
|
this.args;
|
|
/**
|
|
* @type {string} The json to use in field creation.
|
|
*/
|
|
this.json;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Assert a field's value is the same as the expected value.
|
|
* @param {!Blockly.Field} field The field.
|
|
* @param {*} expectedValue The expected value.
|
|
* @param {string=} expectedText The expected text.
|
|
*/
|
|
export function assertFieldValue(
|
|
field,
|
|
expectedValue,
|
|
expectedText = undefined,
|
|
) {
|
|
const actualValue = field.getValue();
|
|
const actualText = field.getText();
|
|
if (expectedText === undefined) {
|
|
expectedText = String(expectedValue);
|
|
}
|
|
assert.deepEqual(actualValue, expectedValue);
|
|
assert.deepEqual(actualText, expectedText);
|
|
}
|
|
|
|
/**
|
|
* Runs provided creation test cases.
|
|
* @param {!Array<!FieldCreationTestCase>} testCases The test cases to run.
|
|
* @param {function(!Blockly.Field, !FieldCreationTestCase)} assertion The
|
|
* assertion to use.
|
|
* @param {function(new:Blockly.Field,!FieldCreationTestCase):Blockly.Field
|
|
* } creation A function that returns an instance of the field based on the
|
|
* provided test case.
|
|
* @private
|
|
*/
|
|
function runCreationTests_(testCases, assertion, creation) {
|
|
/**
|
|
* Creates test callback for creation test.
|
|
* @param {FieldCreationTestCase} testCase The test case to use.
|
|
* @return {Function} The test callback.
|
|
*/
|
|
const createTestFn = (testCase) => {
|
|
return function () {
|
|
const field = creation.call(this, testCase);
|
|
assertion(field, testCase);
|
|
};
|
|
};
|
|
runTestCases(testCases, createTestFn);
|
|
}
|
|
|
|
/**
|
|
* Runs provided creation test cases.
|
|
* @param {!Array<!FieldCreationTestCase>} testCases The test cases to run.
|
|
* @param {function(new:Blockly.Field,!FieldCreationTestCase):Blockly.Field
|
|
* } creation A function that returns an instance of the field based on the
|
|
* provided test case.
|
|
* @private
|
|
*/
|
|
function runCreationTestsAssertThrows_(testCases, creation) {
|
|
/**
|
|
* Creates test callback for creation test.
|
|
* @param {!FieldCreationTestCase} testCase The test case to use.
|
|
* @return {!Function} The test callback.
|
|
*/
|
|
const createTestFn = (testCase) => {
|
|
return function () {
|
|
assert.throws(function () {
|
|
creation.call(this, testCase);
|
|
}, testCase.errMsgMatcher);
|
|
};
|
|
};
|
|
runTestCases(testCases, createTestFn);
|
|
}
|
|
|
|
/**
|
|
* Runs suite of tests for constructor for the specified field.
|
|
* @param {function(new:Blockly.Field, *=)} TestedField The class of the field
|
|
* being tested.
|
|
* @param {Array<!FieldCreationTestCase>} validValueTestCases Test cases with
|
|
* valid values for given field.
|
|
* @param {Array<!FieldCreationTestCase>} invalidValueTestCases Test cases with
|
|
* invalid values for given field.
|
|
* @param {function(!Blockly.Field, !FieldCreationTestCase)
|
|
* } validRunAssertField Asserts that field has expected values.
|
|
* @param {function(!Blockly.Field)=} assertFieldDefault Asserts that field has
|
|
* default values. If undefined, tests will check that field throws when
|
|
* invalid value is passed rather than asserting default.
|
|
* @param {function(!FieldCreationTestCase=)=} customCreateWithJs Custom
|
|
* creation function to use in tests.
|
|
*/
|
|
export function runConstructorSuiteTests(
|
|
TestedField,
|
|
validValueTestCases,
|
|
invalidValueTestCases,
|
|
validRunAssertField,
|
|
assertFieldDefault,
|
|
customCreateWithJs,
|
|
) {
|
|
suite('Constructor', function () {
|
|
if (assertFieldDefault) {
|
|
test('Empty', function () {
|
|
const field = customCreateWithJs
|
|
? customCreateWithJs.call(this)
|
|
: new TestedField();
|
|
assertFieldDefault(field);
|
|
});
|
|
} else {
|
|
test('Empty', function () {
|
|
assert.throws(function () {
|
|
customCreateWithJs
|
|
? customCreateWithJs.call(this)
|
|
: new TestedField();
|
|
});
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Creates a field using its constructor and the provided test case.
|
|
* @param {!FieldCreationTestCase} testCase The test case information.
|
|
* @return {!Blockly.Field} The instantiated field.
|
|
*/
|
|
const createWithJs = function (testCase) {
|
|
return customCreateWithJs
|
|
? customCreateWithJs.call(this, testCase)
|
|
: new TestedField(...testCase.args);
|
|
};
|
|
if (assertFieldDefault) {
|
|
runCreationTests_(
|
|
invalidValueTestCases,
|
|
assertFieldDefault,
|
|
createWithJs,
|
|
);
|
|
} else {
|
|
runCreationTestsAssertThrows_(invalidValueTestCases, createWithJs);
|
|
}
|
|
runCreationTests_(validValueTestCases, validRunAssertField, createWithJs);
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Runs suite of tests for fromJson creation of specified field.
|
|
* @param {function(new:Blockly.Field, *=)} TestedField The class of the field
|
|
* being tested.
|
|
* @param {!Array<!FieldCreationTestCase>} validValueTestCases Test cases with
|
|
* valid values for given field.
|
|
* @param {!Array<!FieldCreationTestCase>} invalidValueTestCases Test cases with
|
|
* invalid values for given field.
|
|
* @param {function(!Blockly.Field, !FieldValueTestCase)
|
|
* } validRunAssertField Asserts that field has expected values.
|
|
* @param {function(!Blockly.Field)=} assertFieldDefault Asserts that field has
|
|
* default values. If undefined, tests will check that field throws when
|
|
* invalid value is passed rather than asserting default.
|
|
* @param {function(!FieldCreationTestCase=)=} customCreateWithJson Custom
|
|
* creation function to use in tests.
|
|
*/
|
|
export function runFromJsonSuiteTests(
|
|
TestedField,
|
|
validValueTestCases,
|
|
invalidValueTestCases,
|
|
validRunAssertField,
|
|
assertFieldDefault,
|
|
customCreateWithJson,
|
|
) {
|
|
suite('fromJson', function () {
|
|
if (assertFieldDefault) {
|
|
test('Empty', function () {
|
|
const field = customCreateWithJson
|
|
? customCreateWithJson.call(this)
|
|
: TestedField.fromJson({});
|
|
assertFieldDefault(field);
|
|
});
|
|
} else {
|
|
test('Empty', function () {
|
|
assert.throws(function () {
|
|
customCreateWithJson
|
|
? customCreateWithJson.call(this)
|
|
: TestedField.fromJson({});
|
|
});
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Creates a field using fromJson and the provided test case.
|
|
* @param {!FieldCreationTestCase} testCase The test case information.
|
|
* @return {!Blockly.Field} The instantiated field.
|
|
*/
|
|
const createWithJson = function (testCase) {
|
|
return customCreateWithJson
|
|
? customCreateWithJson.call(this, testCase)
|
|
: TestedField.fromJson(testCase.json);
|
|
};
|
|
if (assertFieldDefault) {
|
|
runCreationTests_(
|
|
invalidValueTestCases,
|
|
assertFieldDefault,
|
|
createWithJson,
|
|
);
|
|
} else {
|
|
runCreationTestsAssertThrows_(invalidValueTestCases, createWithJson);
|
|
}
|
|
runCreationTests_(validValueTestCases, validRunAssertField, createWithJson);
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Runs tests for setValue calls.
|
|
* @param {!Array<!FieldValueTestCase>} validValueTestCases Test cases with
|
|
* valid values.
|
|
* @param {!Array<!FieldValueTestCase>} invalidValueTestCases Test cases with
|
|
* invalid values.
|
|
* @param {*} invalidRunExpectedValue Expected value for field after invalid
|
|
* call to setValue.
|
|
* @param {string=} invalidRunExpectedText Expected text for field after invalid
|
|
* call to setValue.
|
|
*/
|
|
export function runSetValueTests(
|
|
validValueTestCases,
|
|
invalidValueTestCases,
|
|
invalidRunExpectedValue,
|
|
invalidRunExpectedText,
|
|
) {
|
|
/**
|
|
* Creates test callback for invalid setValue test.
|
|
* @param {!FieldValueTestCase} testCase The test case information.
|
|
* @return {!Function} The test callback.
|
|
*/
|
|
const createInvalidSetValueTestCallback = (testCase) => {
|
|
return function () {
|
|
this.field.setValue(testCase.value);
|
|
assertFieldValue(
|
|
this.field,
|
|
invalidRunExpectedValue,
|
|
invalidRunExpectedText,
|
|
);
|
|
};
|
|
};
|
|
/**
|
|
* Creates test callback for valid setValue test.
|
|
* @param {!FieldValueTestCase} testCase The test case information.
|
|
* @return {!Function} The test callback.
|
|
*/
|
|
const createValidSetValueTestCallback = (testCase) => {
|
|
return function () {
|
|
this.field.setValue(testCase.value);
|
|
assertFieldValue(
|
|
this.field,
|
|
testCase.expectedValue,
|
|
testCase.expectedText,
|
|
);
|
|
};
|
|
};
|
|
runTestCases(invalidValueTestCases, createInvalidSetValueTestCallback);
|
|
runTestCases(validValueTestCases, createValidSetValueTestCallback);
|
|
}
|