From 9c400f2bf021f5d56af9cc0c81e15051c6e58f2c Mon Sep 17 00:00:00 2001 From: Monica Kozbial Date: Thu, 16 Apr 2020 14:18:12 -0700 Subject: [PATCH] Converting variable tests to mocha. (#3828) --- tests/jsunit/index.html | 1 - tests/jsunit/variables_test.js | 136 ------------------------------- tests/mocha/index.html | 1 + tests/mocha/variables_test.js | 142 +++++++++++++++++++++++++++++++++ 4 files changed, 143 insertions(+), 137 deletions(-) delete mode 100644 tests/jsunit/variables_test.js create mode 100644 tests/mocha/variables_test.js diff --git a/tests/jsunit/index.html b/tests/jsunit/index.html index f7634f8cd..15a0b5156 100644 --- a/tests/jsunit/index.html +++ b/tests/jsunit/index.html @@ -19,7 +19,6 @@ - diff --git a/tests/jsunit/variables_test.js b/tests/jsunit/variables_test.js deleted file mode 100644 index 7041f3174..000000000 --- a/tests/jsunit/variables_test.js +++ /dev/null @@ -1,136 +0,0 @@ -/** - * @license - * Copyright 2018 Google LLC - * SPDX-License-Identifier: Apache-2.0 - */ - -/** - * @fileoverview Tests for variable utility functions in Blockly - * @author fenichel@google.com (Rachel Fenichel) - */ -'use strict'; - -function variablesTest_setUp() { - defineGetVarBlock(); - var workspace = new Blockly.Workspace(); - workspace.createVariable('foo', 'type1', '1'); - workspace.createVariable('bar', 'type1', '2'); - workspace.createVariable('baz', 'type1', '3'); - return workspace; -} - -function variablesTest_tearDown(workspace) { - undefineGetVarBlock(); - workspace.dispose(); -} - -function buildVariablesTest(testImpl) { - return function() { - var workspace = variablesTest_setUp(); - try { - testImpl(workspace); - } finally { - variablesTest_tearDown(workspace); - } - }; -} - -var test_allUsedVarModels = buildVariablesTest( - function(workspace) { - createMockVarBlock(workspace, '1'); - createMockVarBlock(workspace, '2'); - createMockVarBlock(workspace, '3'); - - var result = Blockly.Variables.allUsedVarModels(workspace); - assertEquals('Expected three variables in the list of used variables', - 3, result.length); - } -); - -var test_allUsedVarModels_someUnused = buildVariablesTest( - function(workspace) { - createMockVarBlock(workspace, '2'); - - var result = Blockly.Variables.allUsedVarModels(workspace); - assertEquals('Expected one variable in the list of used variables', - 1, result.length); - assertEquals('Expected variable with ID 2 in the list of used variables', - '2', result[0].getId()); - } -); - -var test_allUsedVarModels_varUsedTwice = buildVariablesTest( - function(workspace) { - createMockVarBlock(workspace, '2'); - createMockVarBlock(workspace, '2'); - - var result = Blockly.Variables.allUsedVarModels(workspace); - // Using the same variable multiple times should not change the number of - // elements in the list. - assertEquals('Expected one variable in the list of used variables', - 1, result.length); - assertEquals('Expected variable with ID 2 in the list of used variables', - '2', result[0].getId()); - } -); - -var test_allUsedVarModels_allUnused = buildVariablesTest( - function(workspace) { - var result = Blockly.Variables.allUsedVarModels(workspace); - assertEquals('Expected no variables in the list of used variables', - 0, result.length); - } -); - -var test_getVariable_byId = buildVariablesTest( - function(workspace) { - var var_1 = workspace.createVariable('name1', 'type1', 'id1'); - var var_2 = workspace.createVariable('name2', 'type1', 'id2'); - var var_3 = workspace.createVariable('name3', 'type2', 'id3'); - var result_1 = Blockly.Variables.getVariable(workspace, 'id1'); - var result_2 = Blockly.Variables.getVariable(workspace, 'id2'); - var result_3 = Blockly.Variables.getVariable(workspace, 'id3'); - - assertEquals(var_1, result_1); - assertEquals(var_2, result_2); - assertEquals(var_3, result_3); - } -); - -var test_getVariable_byNameAndType = buildVariablesTest( - function(workspace) { - var var_1 = workspace.createVariable('name1', 'type1', 'id1'); - var var_2 = workspace.createVariable('name2', 'type1', 'id2'); - var var_3 = workspace.createVariable('name3', 'type2', 'id3'); - var result_1 = - Blockly.Variables.getVariable(workspace, null, 'name1', 'type1'); - var result_2 = - Blockly.Variables.getVariable(workspace, null, 'name2', 'type1'); - var result_3 = - Blockly.Variables.getVariable(workspace, null, 'name3', 'type2'); - - // Searching by name + type is correct. - assertEquals(var_1, result_1); - assertEquals(var_2, result_2); - assertEquals(var_3, result_3); - } -); - -var test_getVariable_byIdThenName = buildVariablesTest( - function(workspace) { - var var_1 = workspace.createVariable('name1', 'type1', 'id1'); - var var_2 = workspace.createVariable('name2', 'type1', 'id2'); - var var_3 = workspace.createVariable('name3', 'type2', 'id3'); - var result_1 = - Blockly.Variables.getVariable(workspace, 'badId', 'name1', 'type1'); - var result_2 = - Blockly.Variables.getVariable(workspace, 'badId', 'name2', 'type1'); - var result_3 = - Blockly.Variables.getVariable(workspace, 'badId', 'name3', 'type2'); - - // Searching by ID failed, but falling back onto name + type is correct. - assertEquals(var_1, result_1); - assertEquals(var_2, result_2); - assertEquals(var_3, result_3); - } -); diff --git a/tests/mocha/index.html b/tests/mocha/index.html index c156f3f28..70d7ab502 100644 --- a/tests/mocha/index.html +++ b/tests/mocha/index.html @@ -59,6 +59,7 @@ + diff --git a/tests/mocha/variables_test.js b/tests/mocha/variables_test.js new file mode 100644 index 000000000..7e0efbdb9 --- /dev/null +++ b/tests/mocha/variables_test.js @@ -0,0 +1,142 @@ +/** + * @license + * Copyright 2020 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +suite('Variables', function() { + setup(function() { + this.workspace = new Blockly.Workspace(); + Blockly.defineBlocksWithJsonArray([{ + "type": "get_var_block", + "message0": "%1", + "args0": [ + { + "type": "field_variable", + "name": "VAR", + "variableTypes": ["", "type1", "type2"] + } + ] + }]); + this.workspace.createVariable('foo', 'type1', '1'); + this.workspace.createVariable('bar', 'type1', '2'); + this.workspace.createVariable('baz', 'type1', '3'); + }); + + teardown(function() { + delete Blockly.Blocks['get_var_block']; + this.workspace.dispose(); + + // Clear Blockly.Event state. + Blockly.Events.setGroup(false); + Blockly.Events.disabled_ = 0; + sinon.restore(); + }); + + /** + * Create a test get_var_block. + * Will fail if get_var_block isn't defined. + * @param {!Blockly.Workspace} workspace The workspace on which to create the + * block. + * @param {!string} variable_id The id of the variable to reference. + * @return {!Blockly.Block} The created block. + */ + function createTestVarBlock(workspace, variable_id) { + // Turn off events to avoid testing XML at the same time. + Blockly.Events.disable(); + var block = new Blockly.Block(workspace, 'get_var_block'); + block.inputList[0].fieldRow[0].setValue(variable_id); + Blockly.Events.enable(); + return block; + } + + suite('allUsedVarModels', function() { + test('All used', function() { + createTestVarBlock(this.workspace, '1'); + createTestVarBlock(this.workspace, '2'); + createTestVarBlock(this.workspace, '3'); + + var result = Blockly.Variables.allUsedVarModels(this.workspace); + assertEquals('Expected three variables in the list of used variables', + 3, result.length); + }); + + test('Some unused', function() { + createTestVarBlock(this.workspace, '2'); + + var result = Blockly.Variables.allUsedVarModels(this.workspace); + assertEquals('Expected one variable in the list of used variables', + 1, result.length); + assertEquals('Expected variable with ID 2 in the list of used variables', + '2', result[0].getId()); + }); + + test('Var used twice', function() { + createTestVarBlock(this.workspace, '2'); + createTestVarBlock(this.workspace, '2'); + + var result = Blockly.Variables.allUsedVarModels(this.workspace); + // Using the same variable multiple times should not change the number of + // elements in the list. + assertEquals('Expected one variable in the list of used variables', + 1, result.length); + assertEquals('Expected variable with ID 2 in the list of used variables', + '2', result[0].getId()); + }); + + test('All unused', function() { + var result = Blockly.Variables.allUsedVarModels(this.workspace); + assertEquals('Expected no variables in the list of used variables', + 0, result.length); + }); + }); + + suite('getVariable', function() { + test('By id', function() { + var var1 = this.workspace.createVariable('name1', 'type1', 'id1'); + var var2 = this.workspace.createVariable('name2', 'type1', 'id2'); + var var3 = this.workspace.createVariable('name3', 'type2', 'id3'); + var result1 = Blockly.Variables.getVariable(this.workspace, 'id1'); + var result2 = Blockly.Variables.getVariable(this.workspace, 'id2'); + var result3 = Blockly.Variables.getVariable(this.workspace, 'id3'); + + assertEquals(var1, result1); + assertEquals(var2, result2); + assertEquals(var3, result3); + }); + + test('By name and type', function() { + var var1 = this.workspace.createVariable('name1', 'type1', 'id1'); + var var2 = this.workspace.createVariable('name2', 'type1', 'id2'); + var var3 = this.workspace.createVariable('name3', 'type2', 'id3'); + var result1 = + Blockly.Variables.getVariable(this.workspace, null, 'name1', 'type1'); + var result2 = + Blockly.Variables.getVariable(this.workspace, null, 'name2', 'type1'); + var result3 = + Blockly.Variables.getVariable(this.workspace, null, 'name3', 'type2'); + + // Searching by name + type is correct. + assertEquals(var1, result1); + assertEquals(var2, result2); + assertEquals(var3, result3); + }); + + test('Bad id with name and type fallback', function() { + var var1 = this.workspace.createVariable('name1', 'type1', 'id1'); + var var2 = this.workspace.createVariable('name2', 'type1', 'id2'); + var var3 = this.workspace.createVariable('name3', 'type2', 'id3'); + var result1 = + Blockly.Variables.getVariable(this.workspace, 'badId', 'name1', 'type1'); + var result2 = + Blockly.Variables.getVariable(this.workspace, 'badId', 'name2', 'type1'); + var result3 = + Blockly.Variables.getVariable(this.workspace, 'badId', 'name3', 'type2'); + + // Searching by ID failed, but falling back onto name + type is correct. + assertEquals(var1, result1); + assertEquals(var2, result2); + assertEquals(var3, result3); + }); + }); +});