mirror of
https://github.com/scratchfoundation/scratch-blocks.git
synced 2025-06-27 04:30:22 -04:00
* Do not refresh the toolbox when a new variable is created on the workspace but it already exists in the variable map. This gets rid of some calls to Toolbox.refreshSelection. e.g. when you drag a variable block out of the toolbox, we were refreshing the toolbox. It will also help with xml loading for workspaces using multiple of the same variable reporter. More needs to be done to solve #879, but this helps a little. * Fix typo
135 lines
5.1 KiB
JavaScript
135 lines
5.1 KiB
JavaScript
/**
|
|
* @license
|
|
* Blockly Tests
|
|
*
|
|
* Copyright 2017 Google Inc.
|
|
* https://developers.google.com/blockly/
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
'use strict';
|
|
|
|
goog.require('goog.testing');
|
|
goog.require('goog.testing.MockControl');
|
|
|
|
function helper_createWorkspaceWithToolbox() {
|
|
var toolbox = document.getElementById('toolbox-categories');
|
|
return Blockly.inject('blocklyDiv', {toolbox: toolbox});
|
|
}
|
|
|
|
function test_createWorkspace() {
|
|
var workspace = helper_createWorkspaceWithToolbox();
|
|
workspace.dispose();
|
|
}
|
|
|
|
function test_emptyWorkspace() {
|
|
var workspace = helper_createWorkspaceWithToolbox();
|
|
try {
|
|
assertEquals('Empty workspace (1).', 0, workspace.getTopBlocks(true).length);
|
|
assertEquals('Empty workspace (2).', 0, workspace.getTopBlocks(false).length);
|
|
assertEquals('Empty workspace (3).', 0, workspace.getAllBlocks().length);
|
|
workspace.clear();
|
|
assertEquals('Empty workspace (4).', 0, workspace.getTopBlocks(true).length);
|
|
assertEquals('Empty workspace (5).', 0, workspace.getTopBlocks(false).length);
|
|
assertEquals('Empty workspace (6).', 0, workspace.getAllBlocks().length);
|
|
} finally {
|
|
workspace.dispose();
|
|
}
|
|
}
|
|
|
|
function test_flatWorkspace() {
|
|
var workspace = helper_createWorkspaceWithToolbox();
|
|
var blockA, blockB;
|
|
try {
|
|
blockA = workspace.newBlock('');
|
|
assertEquals('One block workspace (1).', 1, workspace.getTopBlocks(true).length);
|
|
assertEquals('One block workspace (2).', 1, workspace.getTopBlocks(false).length);
|
|
assertEquals('One block workspace (3).', 1, workspace.getAllBlocks().length);
|
|
blockB = workspace.newBlock('');
|
|
assertEquals('Two block workspace (1).', 2, workspace.getTopBlocks(true).length);
|
|
assertEquals('Two block workspace (2).', 2, workspace.getTopBlocks(false).length);
|
|
assertEquals('Two block workspace (3).', 2, workspace.getAllBlocks().length);
|
|
blockA.dispose();
|
|
assertEquals('One block workspace (4).', 1, workspace.getTopBlocks(true).length);
|
|
assertEquals('One block workspace (5).', 1, workspace.getTopBlocks(false).length);
|
|
assertEquals('One block workspace (6).', 1, workspace.getAllBlocks().length);
|
|
workspace.clear();
|
|
assertEquals('Cleared workspace (1).', 0, workspace.getTopBlocks(true).length);
|
|
assertEquals('Cleared workspace (2).', 0, workspace.getTopBlocks(false).length);
|
|
assertEquals('Cleared workspace (3).', 0, workspace.getAllBlocks().length);
|
|
} finally {
|
|
blockB && blockB.dispose();
|
|
blockA && blockA.dispose();
|
|
workspace.dispose();
|
|
}
|
|
}
|
|
|
|
/** Tests the alignment of appendDomToWorkspace with WorkspaceSvg. */
|
|
function test_appendDomToWorkspace() {
|
|
var workspace = helper_createWorkspaceWithToolbox();
|
|
try {
|
|
var dom = Blockly.Xml.textToDom(
|
|
'<xml xmlns="http://www.w3.org/1999/xhtml">' +
|
|
' <block type="looks_show" inline="true" x="21" y="23">' +
|
|
' </block>' +
|
|
'</xml>');
|
|
Blockly.Xml.appendDomToWorkspace(dom, workspace);
|
|
assertEquals('Block count', 1, workspace.getAllBlocks().length);
|
|
Blockly.Xml.appendDomToWorkspace(dom, workspace);
|
|
assertEquals('Block count', 2, workspace.getAllBlocks().length);
|
|
var blocks = workspace.getAllBlocks();
|
|
assertEquals('Block 1 position x',21,blocks[0].getRelativeToSurfaceXY().x);
|
|
assertEquals('Block 1 position y',23,blocks[0].getRelativeToSurfaceXY().y);
|
|
assertEquals('Block 2 position x',21,blocks[1].getRelativeToSurfaceXY().x);
|
|
assertEquals('Block 2 position y',23 + blocks[0].getHeightWidth().height + Blockly.BlockSvg.SEP_SPACE_Y,blocks[1].getRelativeToSurfaceXY().y);
|
|
} finally {
|
|
workspace.dispose();
|
|
}
|
|
}
|
|
|
|
function test_addNewVariableRefreshToolbox() {
|
|
var workspace = helper_createWorkspaceWithToolbox();
|
|
|
|
var mockControl = new goog.testing.MockControl();
|
|
var mockMethod = mockControl.createMethodMock(Blockly.WorkspaceSvg.prototype,
|
|
'refreshToolboxSelection_');
|
|
try {
|
|
mockMethod().$once();
|
|
mockControl.$replayAll();
|
|
|
|
workspace.createVariable('name1', 'type1', 'id1');
|
|
mockControl.$verifyAll();
|
|
} finally {
|
|
workspace.dispose();
|
|
}
|
|
}
|
|
|
|
function test_addDuplicateVariableDoNotRefreshToolbox() {
|
|
var workspace = helper_createWorkspaceWithToolbox();
|
|
|
|
var mockControl = new goog.testing.MockControl();
|
|
var mockMethod = mockControl.createMethodMock(Blockly.WorkspaceSvg.prototype,
|
|
'refreshToolboxSelection_');
|
|
try {
|
|
mockMethod().$once();
|
|
mockControl.$replayAll();
|
|
// Create same variable twice. The first should refresh the toolbox,
|
|
// the second should not.
|
|
workspace.createVariable('name1', 'type1', 'id1');
|
|
workspace.createVariable('name1', 'type1', 'id1');
|
|
|
|
mockControl.$verifyAll();
|
|
} finally {
|
|
workspace.dispose();
|
|
}
|
|
}
|