diff --git a/tests/deps.mocha.js b/tests/deps.mocha.js index 25b784759..a2782f746 100644 --- a/tests/deps.mocha.js +++ b/tests/deps.mocha.js @@ -20,7 +20,7 @@ goog.addDependency('../../tests/mocha/field_dropdown_test.js', ['Blockly.test.fi goog.addDependency('../../tests/mocha/field_image_test.js', ['Blockly.test.fieldImage'], ['Blockly.test.helpers', 'Blockly.test.helpers.fields'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../tests/mocha/field_label_serializable_test.js', ['Blockly.test.fieldLabelSerialization'], ['Blockly.test.helpers', 'Blockly.test.helpers.fields'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../tests/mocha/field_label_test.js', ['Blockly.test.fieldLabel'], ['Blockly.test.helpers', 'Blockly.test.helpers.fields'], {'lang': 'es6', 'module': 'goog'}); -goog.addDependency('../../tests/mocha/field_multilineinput_test.js', ['Blockly.test.fieldMultiline'], ['Blockly.test.blockHelpers', 'Blockly.test.helpers', 'Blockly.test.helpers.fields'], {'lang': 'es6', 'module': 'goog'}); +goog.addDependency('../../tests/mocha/field_multilineinput_test.js', ['Blockly.test.fieldMultiline'], ['Blockly.test.helpers', 'Blockly.test.helpers.codeGeneration', 'Blockly.test.helpers.fields'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../tests/mocha/field_number_test.js', ['Blockly.test.fieldNumber'], ['Blockly.test.helpers', 'Blockly.test.helpers.common', 'Blockly.test.helpers.fields'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../tests/mocha/field_registry_test.js', ['Blockly.test.fieldRegistry'], ['Blockly.test.helpers'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../tests/mocha/field_test.js', ['Blockly.test.fieldTest'], ['Blockly.test.helpers'], {'lang': 'es6', 'module': 'goog'}); @@ -35,19 +35,20 @@ goog.addDependency('../../tests/mocha/jso_deserialization_test.js', ['Blockly.te goog.addDependency('../../tests/mocha/jso_serialization_test.js', ['Blockly.test.jsoSerialization'], ['Blockly.test.helpers'], {'lang': 'es8', 'module': 'goog'}); goog.addDependency('../../tests/mocha/json_test.js', ['Blockly.test.json'], ['Blockly.test.helpers'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../tests/mocha/keydown_test.js', ['Blockly.test.keydown'], ['Blockly.test.helpers'], {'lang': 'es6', 'module': 'goog'}); -goog.addDependency('../../tests/mocha/logic_ternary_test.js', ['Blockly.test.logicTernary'], ['Blockly.Events.utils', 'Blockly.test.blockHelpers', 'Blockly.test.helpers'], {'lang': 'es6', 'module': 'goog'}); +goog.addDependency('../../tests/mocha/logic_ternary_test.js', ['Blockly.test.logicTernary'], ['Blockly.Events.utils', 'Blockly.test.helpers', 'Blockly.test.helpers.serialization'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../tests/mocha/metrics_test.js', ['Blockly.test.metrics'], ['Blockly.test.helpers'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../tests/mocha/mutator_test.js', ['Blockly.test.mutator'], ['Blockly.test.helpers'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../tests/mocha/names_test.js', ['Blockly.test.names'], ['Blockly.test.helpers'], {'lang': 'es6', 'module': 'goog'}); -goog.addDependency('../../tests/mocha/procedures_test.js', ['Blockly.test.procedures'], ['Blockly', 'Blockly.Msg', 'Blockly.test.blockHelpers', 'Blockly.test.helpers', 'Blockly.test.helpers.procedures'], {'lang': 'es6', 'module': 'goog'}); +goog.addDependency('../../tests/mocha/procedures_test.js', ['Blockly.test.procedures'], ['Blockly', 'Blockly.Msg', 'Blockly.test.helpers', 'Blockly.test.helpers.procedures', 'Blockly.test.helpers.serialization'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../tests/mocha/registry_test.js', ['Blockly.test.registry'], ['Blockly.test.helpers'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../tests/mocha/run_mocha_tests_in_browser.js', [], [], {'lang': 'es8'}); goog.addDependency('../../tests/mocha/serializer_test.js', ['Blockly.test.serialization'], ['Blockly.test.helpers', 'Blockly.test.helpers.common'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../tests/mocha/shortcut_registry_test.js', ['Blockly.test.shortcutRegistry'], ['Blockly.test.helpers'], {'lang': 'es6', 'module': 'goog'}); -goog.addDependency('../../tests/mocha/test_helpers/block_test_helpers.mocha.js', ['Blockly.test.blockHelpers'], ['Blockly.test.helpers.common'], {'lang': 'es6', 'module': 'goog'}); +goog.addDependency('../../tests/mocha/test_helpers/code_generation.js', ['Blockly.test.helpers.codeGeneration'], ['Blockly.test.helpers.common'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../tests/mocha/test_helpers/common.js', ['Blockly.test.helpers.common'], [], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../tests/mocha/test_helpers/fields.js', ['Blockly.test.helpers.fields'], ['Blockly.test.helpers.common'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../tests/mocha/test_helpers/procedures.js', ['Blockly.test.helpers.procedures'], ['Blockly.ConnectionType'], {'lang': 'es6', 'module': 'goog'}); +goog.addDependency('../../tests/mocha/test_helpers/serialization.js', ['Blockly.test.helpers.serialization'], ['Blockly.test.helpers.common'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../tests/mocha/test_helpers/test_helpers.js', ['Blockly.test.helpers'], ['Blockly.Events.utils', 'Blockly.blocks', 'Blockly.test.helpers.common', 'Blockly.utils.KeyCodes'], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../tests/mocha/test_helpers/toolbox_definitions.js', ['Blockly.test.helpers.toolbox_definitions'], [], {'lang': 'es6', 'module': 'goog'}); goog.addDependency('../../tests/mocha/test_helpers/workspace.js', ['Blockly.test.helpers.workspace'], ['Blockly.Events.utils', 'Blockly.test.helpers'], {'lang': 'es6', 'module': 'goog'}); diff --git a/tests/mocha/field_multilineinput_test.js b/tests/mocha/field_multilineinput_test.js index ed966c012..4a2cc807e 100644 --- a/tests/mocha/field_multilineinput_test.js +++ b/tests/mocha/field_multilineinput_test.js @@ -8,7 +8,7 @@ goog.module('Blockly.test.fieldMultiline'); const {assertFieldValue, runConstructorSuiteTests, runFromJsonSuiteTests, runSetValueTests} = goog.require('Blockly.test.helpers.fields'); const {createTestBlock, defineRowBlock, sharedTestSetup, sharedTestTeardown, workspaceTeardown} = goog.require('Blockly.test.helpers'); -const {runCodeGenerationTestSuites} = goog.require('Blockly.test.blockHelpers'); +const {runCodeGenerationTestSuites} = goog.require('Blockly.test.helpers.codeGeneration'); suite('Multiline Input Fields', function() { diff --git a/tests/mocha/logic_ternary_test.js b/tests/mocha/logic_ternary_test.js index 8c7711281..9b7a8f3b0 100644 --- a/tests/mocha/logic_ternary_test.js +++ b/tests/mocha/logic_ternary_test.js @@ -7,7 +7,7 @@ goog.module('Blockly.test.logicTernary'); const eventUtils = goog.require('Blockly.Events.utils'); -const {runSerializationTestSuite} = goog.require('Blockly.test.blockHelpers'); +const {runSerializationTestSuite} = goog.require('Blockly.test.helpers.serialization'); const {sharedTestSetup, sharedTestTeardown} = goog.require('Blockly.test.helpers'); diff --git a/tests/mocha/procedures_test.js b/tests/mocha/procedures_test.js index 57871bfd4..9ac95a1b0 100644 --- a/tests/mocha/procedures_test.js +++ b/tests/mocha/procedures_test.js @@ -9,7 +9,7 @@ goog.module('Blockly.test.procedures'); goog.require('Blockly'); goog.require('Blockly.Msg'); const {assertCallBlockStructure, assertDefBlockStructure, createProcDefBlock, createProcCallBlock} = goog.require('Blockly.test.helpers.procedures'); -const {runSerializationTestSuite} = goog.require('Blockly.test.blockHelpers'); +const {runSerializationTestSuite} = goog.require('Blockly.test.helpers.serialization'); const {sharedTestSetup, sharedTestTeardown, workspaceTeardown} = goog.require('Blockly.test.helpers'); diff --git a/tests/mocha/test_helpers/code_generation.js b/tests/mocha/test_helpers/code_generation.js new file mode 100644 index 000000000..b25dc1c09 --- /dev/null +++ b/tests/mocha/test_helpers/code_generation.js @@ -0,0 +1,117 @@ +/** + * @license + * Copyright 2020 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +goog.module('Blockly.test.helpers.codeGeneration'); + +const {runTestSuites} = goog.require('Blockly.test.helpers.common'); + + +/** + * Code generation test case configuration. + * @implements {TestCase} + * @record + */ +class CodeGenerationTestCase { + /** + * Class for a code generation test case. + */ + constructor() { + /** + * @type {string} The expected code. + */ + this.expectedCode; + /** + * @type {boolean|undefined} Whether to use workspaceToCode instead of + * blockToCode for test. + */ + this.useWorkspaceToCode; + /** + * @type {number|undefined} The expected inner order. + */ + this.expectedInnerOrder; + } + + /** + * Creates the block to use for this test case. + * @param {!Blockly.Workspace} workspace The workspace context for this + * test. + * @return {!Blockly.Block} The block to use for the test case. + */ + createBlock(workspace) {} +} +exports.CodeGenerationTestCase = CodeGenerationTestCase; + +/** + * Code generation test suite. + * @extends {TestSuite} + * @record + */ +class CodeGenerationTestSuite { + /** + * Class for a code generation test suite. + */ + constructor() { + /** + * @type {!Blockly.Generator} The generator to use for running test cases. + */ + this.generator; + } +} +exports.CodeGenerationTestSuite = CodeGenerationTestSuite; + +/** + * Returns mocha test callback for code generation based on provided + * generator. + * @param {!Blockly.Generator} generator The generator to use in test. + * @return {function(!CodeGenerationTestCase):!Function} Function that + * returns mocha test callback based on test case. + * @private + */ +const createCodeGenerationTestFn_ = (generator) => { + return (testCase) => { + return function() { + const block = testCase.createBlock(this.workspace); + let code; + let innerOrder; + if (testCase.useWorkspaceToCode) { + code = generator.workspaceToCode(this.workspace); + } else { + generator.init(this.workspace); + code = generator.blockToCode(block); + if (Array.isArray(code)) { + innerOrder = code[1]; + code = code[0]; + } + } + const assertFunc = (typeof testCase.expectedCode === 'string') ? + chai.assert.equal : chai.assert.match; + assertFunc(code, testCase.expectedCode); + if (!testCase.useWorkspaceToCode && + testCase.expectedInnerOrder !== undefined) { + chai.assert.equal(innerOrder, testCase.expectedInnerOrder); + } + }; + }; +}; + +/** + * Runs blockToCode test suites. + * @param {!Array} testSuites The test suites to run. + */ +const runCodeGenerationTestSuites = (testSuites) => { + /** + * Creates function used to generate mocha test callback. + * @param {!CodeGenerationTestSuite} suiteInfo The test suite information. + * @return {function(!CodeGenerationTestCase):!Function} Function that + * creates mocha test callback. + */ + const createTestFn = (suiteInfo) => { + return createCodeGenerationTestFn_(suiteInfo.generator); + }; + + runTestSuites(testSuites, createTestFn); +}; +exports.runCodeGenerationTestSuites = runCodeGenerationTestSuites; \ No newline at end of file diff --git a/tests/mocha/test_helpers/block_test_helpers.mocha.js b/tests/mocha/test_helpers/serialization.js similarity index 56% rename from tests/mocha/test_helpers/block_test_helpers.mocha.js rename to tests/mocha/test_helpers/serialization.js index f43c3727a..c8b90ba7f 100644 --- a/tests/mocha/test_helpers/block_test_helpers.mocha.js +++ b/tests/mocha/test_helpers/serialization.js @@ -4,63 +4,9 @@ * SPDX-License-Identifier: Apache-2.0 */ -goog.module('Blockly.test.blockHelpers'); +goog.module('Blockly.test.helpers.serialization'); -const {runTestCases, runTestSuites, TestCase, TestSuite} = goog.require('Blockly.test.helpers.common'); - - -/** - * Code generation test case configuration. - * @implements {TestCase} - * @record - */ -class CodeGenerationTestCase { - /** - * Class for a code generation test case. - */ - constructor() { - /** - * @type {string} The expected code. - */ - this.expectedCode; - /** - * @type {boolean|undefined} Whether to use workspaceToCode instead of - * blockToCode for test. - */ - this.useWorkspaceToCode; - /** - * @type {number|undefined} The expected inner order. - */ - this.expectedInnerOrder; - } - - /** - * Creates the block to use for this test case. - * @param {!Blockly.Workspace} workspace The workspace context for this - * test. - * @return {!Blockly.Block} The block to use for the test case. - */ - createBlock(workspace) {} -} -exports.CodeGenerationTestCase = CodeGenerationTestCase; - -/** - * Code generation test suite. - * @extends {TestSuite} - * @record - */ -class CodeGenerationTestSuite { - /** - * Class for a code generation test suite. - */ - constructor() { - /** - * @type {!Blockly.Generator} The generator to use for running test cases. - */ - this.generator; - } -} -exports.CodeGenerationTestSuite = CodeGenerationTestSuite; +const {runTestCases} = goog.require('Blockly.test.helpers.common'); /** * Serialization test case. @@ -101,60 +47,6 @@ class SerializationTestCase { } exports.SerializationTestCase = SerializationTestCase; -/** - * Returns mocha test callback for code generation based on provided - * generator. - * @param {!Blockly.Generator} generator The generator to use in test. - * @return {function(!CodeGenerationTestCase):!Function} Function that - * returns mocha test callback based on test case. - * @private - */ -const createCodeGenerationTestFn_ = (generator) => { - return (testCase) => { - return function() { - const block = testCase.createBlock(this.workspace); - let code; - let innerOrder; - if (testCase.useWorkspaceToCode) { - code = generator.workspaceToCode(this.workspace); - } else { - generator.init(this.workspace); - code = generator.blockToCode(block); - if (Array.isArray(code)) { - innerOrder = code[1]; - code = code[0]; - } - } - const assertFunc = (typeof testCase.expectedCode === 'string') ? - chai.assert.equal : chai.assert.match; - assertFunc(code, testCase.expectedCode); - if (!testCase.useWorkspaceToCode && - testCase.expectedInnerOrder !== undefined) { - chai.assert.equal(innerOrder, testCase.expectedInnerOrder); - } - }; - }; -}; - -/** - * Runs blockToCode test suites. - * @param {!Array} testSuites The test suites to run. - */ -const runCodeGenerationTestSuites = (testSuites) => { - /** - * Creates function used to generate mocha test callback. - * @param {!CodeGenerationTestSuite} suiteInfo The test suite information. - * @return {function(!CodeGenerationTestCase):!Function} Function that - * creates mocha test callback. - */ - const createTestFn = (suiteInfo) => { - return createCodeGenerationTestFn_(suiteInfo.generator); - }; - - runTestSuites(testSuites, createTestFn); -}; -exports.runCodeGenerationTestSuites = runCodeGenerationTestSuites; - /** * Runs serialization test suite. * @param {!Array} testCases The test cases to run.