diff --git a/core/dropdowndiv.js b/core/dropdowndiv.js
index 86f40853f..488ac5338 100644
--- a/core/dropdowndiv.js
+++ b/core/dropdowndiv.js
@@ -292,6 +292,8 @@ DropDownDiv.showPositionedByField = function(
getScaledBboxOfField(field), field, opt_onHide, opt_secondaryYOffset);
};
+const internal = {};
+
/**
* Get the scaled bounding box of a block.
* @param {!BlockSvg} block The block.
@@ -408,7 +410,7 @@ DropDownDiv.show = function(
* @return {!DropDownDiv.BoundsInfo} An object containing size
* information about the bounding element (bounding box and width/height).
*/
-let getBoundsInfo = function() {
+internal.getBoundsInfo = function() {
const boundPosition = style.getPageOffset(
/** @type {!Element} */ (DropDownDiv.boundsElement_));
const boundSize = style.getSize(
@@ -436,9 +438,9 @@ let getBoundsInfo = function() {
* @return {!DropDownDiv.PositionMetrics} Various final metrics,
* including rendered positions for drop-down and arrow.
*/
-const getPositionMetrics = function(
+internal.getPositionMetrics = function(
primaryX, primaryY, secondaryX, secondaryY) {
- const boundsInfo = getBoundsInfo();
+ const boundsInfo = internal.getBoundsInfo();
const divSize = style.getSize(
/** @type {!Element} */ (DropDownDiv.DIV_));
@@ -689,7 +691,7 @@ DropDownDiv.hideWithoutAnimation = function() {
*/
const positionInternal = function(primaryX, primaryY, secondaryX, secondaryY) {
const metrics =
- getPositionMetrics(primaryX, primaryY, secondaryX, secondaryY);
+ internal.getPositionMetrics(primaryX, primaryY, secondaryX, secondaryY);
// Update arrow CSS.
if (metrics.arrowVisible) {
@@ -756,12 +758,4 @@ DropDownDiv.repositionForWindowResize = function() {
};
exports = DropDownDiv;
-exports.testOnly_setGetBoundsInfo = function(getBoundsInfoMock) {
- goog.setTestOnly();
- getBoundsInfo = getBoundsInfoMock;
-};
-
-exports.testOnly_getPositionMetrics = function (...args) {
- goog.setTestOnly();
- return getPositionMetrics(...args);
-}
+exports.TEST_ONLY = internal;
diff --git a/scripts/gulpfiles/build_tasks.js b/scripts/gulpfiles/build_tasks.js
index 7ce0e9be9..318304189 100644
--- a/scripts/gulpfiles/build_tasks.js
+++ b/scripts/gulpfiles/build_tasks.js
@@ -341,8 +341,6 @@ function buildDeps(done) {
closurePath,
'core',
'blocks',
- 'generators',
- 'tests/mocha'
];
const args = roots.map(root => `--root '${root}' `).join('');
execSync(`closure-make-deps ${args} > tests/deps.js`, {stdio: 'inherit'});
diff --git a/tests/deps.js b/tests/deps.js
index c271c44fd..9504969e7 100644
--- a/tests/deps.js
+++ b/tests/deps.js
@@ -211,112 +211,5 @@ goog.addDependency('../../core/workspace_dragger.js', ['Blockly.WorkspaceDragger
goog.addDependency('../../core/workspace_svg.js', ['Blockly.WorkspaceSvg'], ['Blockly.BlockSvg', 'Blockly.ComponentManager', 'Blockly.ConnectionDB', 'Blockly.ContextMenu', 'Blockly.ContextMenuRegistry', 'Blockly.Events', 'Blockly.Events.BlockCreate', 'Blockly.Events.ThemeChange', 'Blockly.Events.ViewportChange', 'Blockly.Gesture', 'Blockly.Grid', 'Blockly.IASTNodeLocationSvg', 'Blockly.MarkerManager', 'Blockly.MetricsManager', 'Blockly.Msg', 'Blockly.Options', 'Blockly.ThemeManager', 'Blockly.Themes.Classic', 'Blockly.TouchGesture', 'Blockly.Workspace', 'Blockly.WorkspaceAudio', 'Blockly.WorkspaceDragSurfaceSvg', 'Blockly.Xml', 'Blockly.blockRendering', 'Blockly.browserEvents', 'Blockly.internalConstants', 'Blockly.registry', 'Blockly.utils', 'Blockly.utils.Coordinate', 'Blockly.utils.Metrics', 'Blockly.utils.Rect', 'Blockly.utils.Size', 'Blockly.utils.Svg', 'Blockly.utils.dom', 'Blockly.utils.object', 'Blockly.utils.toolbox'], {'lang': 'es5'});
goog.addDependency('../../core/xml.js', ['Blockly.Xml'], ['Blockly.Events', 'Blockly.inputTypes', 'Blockly.utils', 'Blockly.utils.Size', 'Blockly.utils.dom', 'Blockly.utils.xml']);
goog.addDependency('../../core/zoom_controls.js', ['Blockly.ZoomControls'], ['Blockly.ComponentManager', 'Blockly.Css', 'Blockly.Events', 'Blockly.Events.Click', 'Blockly.IPositionable', 'Blockly.Touch', 'Blockly.browserEvents', 'Blockly.internalConstants', 'Blockly.uiPosition', 'Blockly.utils', 'Blockly.utils.Rect', 'Blockly.utils.Svg', 'Blockly.utils.dom'], {'lang': 'es5'});
-goog.addDependency('../../generators/dart.js', ['Blockly.Dart'], ['Blockly.Generator', 'Blockly.inputTypes', 'Blockly.utils.string']);
-goog.addDependency('../../generators/dart/colour.js', ['Blockly.Dart.colour'], ['Blockly.Dart']);
-goog.addDependency('../../generators/dart/lists.js', ['Blockly.Dart.lists'], ['Blockly.Dart']);
-goog.addDependency('../../generators/dart/logic.js', ['Blockly.Dart.logic'], ['Blockly.Dart']);
-goog.addDependency('../../generators/dart/loops.js', ['Blockly.Dart.loops'], ['Blockly.Dart']);
-goog.addDependency('../../generators/dart/math.js', ['Blockly.Dart.math'], ['Blockly.Dart']);
-goog.addDependency('../../generators/dart/procedures.js', ['Blockly.Dart.procedures'], ['Blockly.Dart']);
-goog.addDependency('../../generators/dart/text.js', ['Blockly.Dart.texts'], ['Blockly.Dart']);
-goog.addDependency('../../generators/dart/variables.js', ['Blockly.Dart.variables'], ['Blockly.Dart']);
-goog.addDependency('../../generators/dart/variables_dynamic.js', ['Blockly.Dart.variablesDynamic'], ['Blockly.Dart', 'Blockly.Dart.variables']);
-goog.addDependency('../../generators/javascript.js', ['Blockly.JavaScript'], ['Blockly.Generator', 'Blockly.inputTypes', 'Blockly.utils.global', 'Blockly.utils.object', 'Blockly.utils.string']);
-goog.addDependency('../../generators/javascript/colour.js', ['Blockly.JavaScript.colour'], ['Blockly.JavaScript']);
-goog.addDependency('../../generators/javascript/lists.js', ['Blockly.JavaScript.lists'], ['Blockly.JavaScript']);
-goog.addDependency('../../generators/javascript/logic.js', ['Blockly.JavaScript.logic'], ['Blockly.JavaScript']);
-goog.addDependency('../../generators/javascript/loops.js', ['Blockly.JavaScript.loops'], ['Blockly.JavaScript']);
-goog.addDependency('../../generators/javascript/math.js', ['Blockly.JavaScript.math'], ['Blockly.JavaScript']);
-goog.addDependency('../../generators/javascript/procedures.js', ['Blockly.JavaScript.procedures'], ['Blockly.JavaScript']);
-goog.addDependency('../../generators/javascript/text.js', ['Blockly.JavaScript.texts'], ['Blockly.JavaScript']);
-goog.addDependency('../../generators/javascript/variables.js', ['Blockly.JavaScript.variables'], ['Blockly.JavaScript']);
-goog.addDependency('../../generators/javascript/variables_dynamic.js', ['Blockly.JavaScript.variablesDynamic'], ['Blockly.JavaScript', 'Blockly.JavaScript.variables']);
-goog.addDependency('../../generators/lua.js', ['Blockly.Lua'], ['Blockly.Generator', 'Blockly.inputTypes', 'Blockly.utils.object', 'Blockly.utils.string']);
-goog.addDependency('../../generators/lua/colour.js', ['Blockly.Lua.colour'], ['Blockly.Lua']);
-goog.addDependency('../../generators/lua/lists.js', ['Blockly.Lua.lists'], ['Blockly.Lua']);
-goog.addDependency('../../generators/lua/logic.js', ['Blockly.Lua.logic'], ['Blockly.Lua']);
-goog.addDependency('../../generators/lua/loops.js', ['Blockly.Lua.loops'], ['Blockly.Lua']);
-goog.addDependency('../../generators/lua/math.js', ['Blockly.Lua.math'], ['Blockly.Lua']);
-goog.addDependency('../../generators/lua/procedures.js', ['Blockly.Lua.procedures'], ['Blockly.Lua']);
-goog.addDependency('../../generators/lua/text.js', ['Blockly.Lua.texts'], ['Blockly.Lua'], {'lang': 'es5'});
-goog.addDependency('../../generators/lua/variables.js', ['Blockly.Lua.variables'], ['Blockly.Lua']);
-goog.addDependency('../../generators/lua/variables_dynamic.js', ['Blockly.Lua.variablesDynamic'], ['Blockly.Lua', 'Blockly.Lua.variables']);
-goog.addDependency('../../generators/php.js', ['Blockly.PHP'], ['Blockly.Generator', 'Blockly.inputTypes', 'Blockly.utils.object', 'Blockly.utils.string']);
-goog.addDependency('../../generators/php/colour.js', ['Blockly.PHP.colour'], ['Blockly.PHP']);
-goog.addDependency('../../generators/php/lists.js', ['Blockly.PHP.lists'], ['Blockly.PHP']);
-goog.addDependency('../../generators/php/logic.js', ['Blockly.PHP.logic'], ['Blockly.PHP']);
-goog.addDependency('../../generators/php/loops.js', ['Blockly.PHP.loops'], ['Blockly.PHP']);
-goog.addDependency('../../generators/php/math.js', ['Blockly.PHP.math'], ['Blockly.PHP']);
-goog.addDependency('../../generators/php/procedures.js', ['Blockly.PHP.procedures'], ['Blockly.PHP']);
-goog.addDependency('../../generators/php/text.js', ['Blockly.PHP.texts'], ['Blockly.PHP']);
-goog.addDependency('../../generators/php/variables.js', ['Blockly.PHP.variables'], ['Blockly.PHP']);
-goog.addDependency('../../generators/php/variables_dynamic.js', ['Blockly.PHP.variablesDynamic'], ['Blockly.PHP', 'Blockly.PHP.variables']);
-goog.addDependency('../../generators/python.js', ['Blockly.Python'], ['Blockly.Generator', 'Blockly.inputTypes', 'Blockly.utils.string']);
-goog.addDependency('../../generators/python/colour.js', ['Blockly.Python.colour'], ['Blockly.Python']);
-goog.addDependency('../../generators/python/lists.js', ['Blockly.Python.lists'], ['Blockly.Python']);
-goog.addDependency('../../generators/python/logic.js', ['Blockly.Python.logic'], ['Blockly.Python']);
-goog.addDependency('../../generators/python/loops.js', ['Blockly.Python.loops'], ['Blockly.Python']);
-goog.addDependency('../../generators/python/math.js', ['Blockly.Python.math'], ['Blockly.Python']);
-goog.addDependency('../../generators/python/procedures.js', ['Blockly.Python.procedures'], ['Blockly.Python']);
-goog.addDependency('../../generators/python/text.js', ['Blockly.Python.texts'], ['Blockly.Python']);
-goog.addDependency('../../generators/python/variables.js', ['Blockly.Python.variables'], ['Blockly.Python']);
-goog.addDependency('../../generators/python/variables_dynamic.js', ['Blockly.Python.variablesDynamic'], ['Blockly.Python', 'Blockly.Python.variables']);
-goog.addDependency('../../tests/mocha/.mocharc.js', [], []);
-goog.addDependency('../../tests/mocha/astnode_test.js', [], [], {'lang': 'es5'});
-goog.addDependency('../../tests/mocha/block_json_test.js', [], [], {'lang': 'es5'});
-goog.addDependency('../../tests/mocha/block_test.js', [], [], {'lang': 'es6'});
-goog.addDependency('../../tests/mocha/comment_test.js', [], [], {'lang': 'es5'});
-goog.addDependency('../../tests/mocha/connection_checker_test.js', [], []);
-goog.addDependency('../../tests/mocha/connection_db_test.js', [], []);
-goog.addDependency('../../tests/mocha/connection_test.js', [], [], {'lang': 'es6'});
-goog.addDependency('../../tests/mocha/contextmenu_items_test.js', [], []);
-goog.addDependency('../../tests/mocha/cursor_test.js', [], [], {'lang': 'es5'});
-goog.addDependency('../../tests/mocha/dropdowndiv_test.js', ['DropDownDivTests'], ['Blockly.DropDownDiv'], {'lang': 'es6', 'module': 'goog'});
-goog.addDependency('../../tests/mocha/event_test.js', [], ['Blockly.WorkspaceComment'], {'lang': 'es6'});
-goog.addDependency('../../tests/mocha/extensions_test.js', [], [], {'lang': 'es6'});
-goog.addDependency('../../tests/mocha/field_angle_test.js', [], [], {'lang': 'es5'});
-goog.addDependency('../../tests/mocha/field_checkbox_test.js', [], [], {'lang': 'es5'});
-goog.addDependency('../../tests/mocha/field_colour_test.js', [], [], {'lang': 'es5'});
-goog.addDependency('../../tests/mocha/field_dropdown_test.js', [], [], {'lang': 'es6'});
-goog.addDependency('../../tests/mocha/field_image_test.js', [], [], {'lang': 'es5'});
-goog.addDependency('../../tests/mocha/field_label_serializable_test.js', [], [], {'lang': 'es5'});
-goog.addDependency('../../tests/mocha/field_label_test.js', [], [], {'lang': 'es5'});
-goog.addDependency('../../tests/mocha/field_multilineinput_test.js', [], [], {'lang': 'es6'});
-goog.addDependency('../../tests/mocha/field_number_test.js', [], [], {'lang': 'es5'});
-goog.addDependency('../../tests/mocha/field_registry_test.js', [], [], {'lang': 'es5'});
-goog.addDependency('../../tests/mocha/field_test.js', [], [], {'lang': 'es6'});
-goog.addDependency('../../tests/mocha/field_textinput_test.js', [], [], {'lang': 'es5'});
-goog.addDependency('../../tests/mocha/field_variable_test.js', [], [], {'lang': 'es6'});
-goog.addDependency('../../tests/mocha/flyout_test.js', [], [], {'lang': 'es5'});
-goog.addDependency('../../tests/mocha/generator_test.js', [], ['Blockly.Dart', 'Blockly.JavaScript', 'Blockly.Lua', 'Blockly.PHP', 'Blockly.Python']);
-goog.addDependency('../../tests/mocha/gesture_test.js', [], []);
-goog.addDependency('../../tests/mocha/input_test.js', [], [], {'lang': 'es5'});
-goog.addDependency('../../tests/mocha/insertion_marker_test.js', [], []);
-goog.addDependency('../../tests/mocha/json_test.js', [], [], {'lang': 'es6'});
-goog.addDependency('../../tests/mocha/keydown_test.js', [], []);
-goog.addDependency('../../tests/mocha/logic_ternary_test.js', [], [], {'lang': 'es6'});
-goog.addDependency('../../tests/mocha/metrics_test.js', [], []);
-goog.addDependency('../../tests/mocha/names_test.js', [], []);
-goog.addDependency('../../tests/mocha/procedures_test.js', [], ['Blockly.Blocks.procedures', 'Blockly.Msg'], {'lang': 'es6'});
-goog.addDependency('../../tests/mocha/procedures_test_helpers.js', [], [], {'lang': 'es6'});
-goog.addDependency('../../tests/mocha/registry_test.js', [], [], {'lang': 'es6'});
-goog.addDependency('../../tests/mocha/run_mocha_tests_in_browser.js', [], [], {'lang': 'es8'});
-goog.addDependency('../../tests/mocha/shortcut_registry_test.js', [], [], {'lang': 'es5'});
-goog.addDependency('../../tests/mocha/test_helpers.js', [], [], {'lang': 'es6'});
-goog.addDependency('../../tests/mocha/theme_test.js', [], [], {'lang': 'es5'});
-goog.addDependency('../../tests/mocha/toolbox_helper.js', [], [], {'lang': 'es5'});
-goog.addDependency('../../tests/mocha/toolbox_test.js', [], [], {'lang': 'es5'});
-goog.addDependency('../../tests/mocha/tooltip_test.js', [], [], {'lang': 'es6'});
-goog.addDependency('../../tests/mocha/trashcan_test.js', [], []);
-goog.addDependency('../../tests/mocha/utils_test.js', [], []);
-goog.addDependency('../../tests/mocha/variable_map_test.js', [], [], {'lang': 'es5'});
-goog.addDependency('../../tests/mocha/variable_model_test.js', [], []);
-goog.addDependency('../../tests/mocha/variables_test.js', [], []);
-goog.addDependency('../../tests/mocha/widget_div_test.js', [], []);
-goog.addDependency('../../tests/mocha/workspace_comment_test.js', [], ['Blockly.WorkspaceComment']);
-goog.addDependency('../../tests/mocha/workspace_svg_test.js', [], [], {'lang': 'es6'});
-goog.addDependency('../../tests/mocha/workspace_test.js', [], [], {'lang': 'es6'});
-goog.addDependency('../../tests/mocha/xml_test.js', [], [], {'lang': 'es5'});
-goog.addDependency('../../tests/mocha/zoom_controls_test.js', [], []);
goog.addDependency('base.js', [], []);
diff --git a/tests/mocha/dropdowndiv_test.js b/tests/mocha/dropdowndiv_test.js
index 332cac467..d54d8ad33 100644
--- a/tests/mocha/dropdowndiv_test.js
+++ b/tests/mocha/dropdowndiv_test.js
@@ -4,24 +4,21 @@
* SPDX-License-Identifier: Apache-2.0
*/
-goog.module('DropDownDivTests');
-goog.setTestOnly();
const DropDownDiv = goog.require('Blockly.DropDownDiv');
suite('DropDownDiv', function() {
suite('Positioning', function() {
setup(function() {
sharedTestSetup.call(this);
- DropDownDiv.testOnly_setGetBoundsInfo(function() {
- return {
- left: 0,
- right: 100,
- top: 0,
- bottom: 100,
- width: 100,
- height: 100
- };
- });
+ this.boundsStub = sinon.stub(Blockly.DropDownDiv.TEST_ONLY, 'getBoundsInfo')
+ .returns({
+ left: 0,
+ right: 100,
+ top: 0,
+ bottom: 100,
+ width: 100,
+ height: 100
+ });
this.sizeStub = sinon.stub(Blockly.utils.style, 'getSize')
.returns({
width: 60,
@@ -36,7 +33,7 @@ suite('DropDownDiv', function() {
sharedTestTeardown.call(this);
});
test('Below, in Bounds', function() {
- var metrics = DropDownDiv.testOnly_getPositionMetrics(50, 0, 50, -10);
+ var metrics = Blockly.DropDownDiv.TEST_ONLY.getPositionMetrics(50, 0, 50, -10);
// "Above" in value actually means below in render.
chai.assert.isAtLeast(metrics.initialY, 0);
chai.assert.isAbove(metrics.finalY, 0);
@@ -44,7 +41,7 @@ suite('DropDownDiv', function() {
chai.assert.isTrue(metrics.arrowAtTop);
});
test('Above, in Bounds', function() {
- var metrics = DropDownDiv.testOnly_getPositionMetrics(50, 100, 50, 90);
+ var metrics = Blockly.DropDownDiv.TEST_ONLY.getPositionMetrics(50, 100, 50, 90);
// "Below" in value actually means above in render.
chai.assert.isAtMost(metrics.initialY, 100);
chai.assert.isBelow(metrics.finalY, 100);
@@ -52,7 +49,7 @@ suite('DropDownDiv', function() {
chai.assert.isFalse(metrics.arrowAtTop);
});
test('Below, out of Bounds', function() {
- var metrics = DropDownDiv.testOnly_getPositionMetrics(50, 60, 50, 50);
+ var metrics = Blockly.DropDownDiv.TEST_ONLY.getPositionMetrics(50, 60, 50, 50);
// "Above" in value actually means below in render.
chai.assert.isAtLeast(metrics.initialY, 60);
chai.assert.isAbove(metrics.finalY, 60);
@@ -60,7 +57,7 @@ suite('DropDownDiv', function() {
chai.assert.isTrue(metrics.arrowAtTop);
});
test('Above, in Bounds', function() {
- var metrics = DropDownDiv.testOnly_getPositionMetrics(50, 100, 50, 90);
+ var metrics = Blockly.DropDownDiv.TEST_ONLY.getPositionMetrics(50, 100, 50, 90);
// "Below" in value actually means above in render.
chai.assert.isAtMost(metrics.initialY, 100);
chai.assert.isBelow(metrics.finalY, 100);
@@ -69,7 +66,7 @@ suite('DropDownDiv', function() {
});
test('No Solution, Render At Top', function() {
this.clientHeightStub.get(function() { return 100; });
- var metrics = DropDownDiv.testOnly_getPositionMetrics(50, 60, 50, 50);
+ var metrics = Blockly.DropDownDiv.TEST_ONLY.getPositionMetrics(50, 60, 50, 50);
// "Above" in value actually means below in render.
chai.assert.equal(metrics.initialY, 0);
chai.assert.equal(metrics.finalY, 0);
diff --git a/tests/mocha/index.html b/tests/mocha/index.html
index ee7480b92..71b7de6b4 100644
--- a/tests/mocha/index.html
+++ b/tests/mocha/index.html
@@ -60,7 +60,7 @@
-
+