/** * @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'); function widgetdiv_testHelper_makeBBox(left, top, width, height) { return { left: left, right: left + width, top: top, bottom: top + height }; } function widgetdiv_testHelper_makeSize(width, height) { return { width: width, height: height }; } var widgetDiv_test_viewport = widgetdiv_testHelper_makeBBox(0, 0, 1000, 1000); var widgetDiv_test_widgetSize = widgetdiv_testHelper_makeSize(100, 100); // Anchor is always 90 px wide and 90 px tall for this test. var widgetDiv_test_anchorSize = 90; function widgetdiv_testHelper_makeAnchor(left, top) { return { left: left, right: left + widgetDiv_test_anchorSize, top: top, bottom: top + widgetDiv_test_anchorSize }; } function test_widgetDiv_topConflict() { var anchorTop = 50; // Anchor placed close to the top. var anchorBBox = widgetdiv_testHelper_makeAnchor(500, anchorTop); // The widget div should be placed just below the anchor. var calculated = Blockly.WidgetDiv.calculateY_(widgetDiv_test_viewport, anchorBBox, widgetDiv_test_widgetSize); assertEquals(anchorTop + widgetDiv_test_anchorSize, calculated); } function test_widgetDiv_bottomConflict() { var anchorTop = 900; // Anchor placed close to the bottom. var anchorBBox = widgetdiv_testHelper_makeAnchor(500, anchorTop); // The widget div should be placed just above the anchor. var calculated = Blockly.WidgetDiv.calculateY_(widgetDiv_test_viewport, anchorBBox, widgetDiv_test_widgetSize); assertEquals(anchorTop - widgetDiv_test_widgetSize.height, calculated); } function test_widgetDiv_noYConflict() { var anchorTop = 500; // Anchor placed in the middle. var anchorBBox = widgetdiv_testHelper_makeAnchor(500, anchorTop); // The widget div should be placed just below the anchor. var calculated = Blockly.WidgetDiv.calculateY_(widgetDiv_test_viewport, anchorBBox, widgetDiv_test_widgetSize); assertEquals(anchorTop + widgetDiv_test_anchorSize, calculated); } function test_widgetDiv_leftConflict_LTR() { var anchorLeft = 50; // Anchor placed close to the left side. var anchorBBox = widgetdiv_testHelper_makeAnchor(anchorLeft, 500); // The widget div should be placed at the anchor. var calculated = Blockly.WidgetDiv.calculateX_(widgetDiv_test_viewport, anchorBBox, widgetDiv_test_widgetSize, false /* rtl */); assertEquals(anchorLeft, calculated); } function test_widgetDiv_rightConflict_LTR() { var anchorLeft = 950; // Anchor placed close to the right side. var anchorBBox = widgetdiv_testHelper_makeAnchor(anchorLeft, 500); // The widget div should be placed as far right as possible--at the edge of // the screen. var calculated = Blockly.WidgetDiv.calculateX_(widgetDiv_test_viewport, anchorBBox, widgetDiv_test_widgetSize, false /* rtl */); assertEquals(1000 - widgetDiv_test_widgetSize.width, calculated); } function test_widgetDiv_noXConflict_LTR() { var anchorLeft = 500; // Anchor in the middle var anchorBBox = widgetdiv_testHelper_makeAnchor(anchorLeft, 500); // The widget div should be placed just at the left side of the anchor. var calculated = Blockly.WidgetDiv.calculateX_(widgetDiv_test_viewport, anchorBBox, widgetDiv_test_widgetSize, false /* rtl */); assertEquals(anchorLeft, calculated); } function test_widgetDiv_leftConflict_RTL() { var anchorLeft = 10; // Anchor placed close to the left side. var anchorBBox = widgetdiv_testHelper_makeAnchor(anchorLeft, 500); // The widget div should be placed as far left as possible--at the edge of // the screen. var calculated = Blockly.WidgetDiv.calculateX_(widgetDiv_test_viewport, anchorBBox, widgetDiv_test_widgetSize, true /* rtl */); assertEquals(0, calculated); } function test_widgetDiv_rightConflict_RTL() { var anchorLeft = 950; // Anchor placed close to the right side. var anchorBBox = widgetdiv_testHelper_makeAnchor(anchorLeft, 500); // The widget div should be placed as far right as possible--at the edge of // the screen. var calculated = Blockly.WidgetDiv.calculateX_(widgetDiv_test_viewport, anchorBBox, widgetDiv_test_widgetSize, true /* rtl */); assertEquals(1000 - widgetDiv_test_widgetSize.width, calculated); } function test_widgetDiv_noXConflict_RTL() { var anchorLeft = 500; // anchor placed in the middle var anchorBBox = widgetdiv_testHelper_makeAnchor(anchorLeft, 500); // The widget div should be placed at the right side of the anchor. var calculated = Blockly.WidgetDiv.calculateX_(widgetDiv_test_viewport, anchorBBox, widgetDiv_test_widgetSize, true /* rtl */); assertEquals(anchorBBox.right - widgetDiv_test_widgetSize.width, calculated); }