UNPKG

@qooxdoo/framework

Version:

The JS Framework for Coders

228 lines (176 loc) 6.82 kB
/* ************************************************************************ qooxdoo - the new era of web development http://qooxdoo.org Copyright: 2007-2008 1&1 Internet AG, Germany, http://www.1und1.de License: MIT: https://opensource.org/licenses/MIT See the LICENSE file in the project's top-level directory for details. Authors: * Alexander Steitz (aback) ************************************************************************ */ qx.Class.define("qx.test.bom.Blocker", { extend: qx.dev.unit.TestCase, members: { setUp() { this.__blocker = new qx.bom.Blocker(); this.__blocker.setBlockerZIndex(199); this.__blockedElement = qx.dom.Element.create("div"); qx.bom.element.Style.setStyles(this.__blockedElement, { position: "absolute", top: "100px", left: "100px", width: "500px", height: "400px", zIndex: 200 }); qx.dom.Element.insertBegin(this.__blockedElement, document.body); }, tearDown() { this.__blocker.unblock(); this.__blocker.dispose(); this.__blocker = null; qx.dom.Element.remove(this.__blockedElement); }, testBlockWholeDocument() { this.__blocker.block(); var blockerElement = this.__blocker.getBlockerElement(); this.assertNotNull(blockerElement, "Blocker element not inserted."); this.assertEquals( qx.bom.Document.getWidth(), qx.bom.element.Dimension.getWidth(blockerElement) ); this.assertEquals( qx.bom.Document.getHeight(), qx.bom.element.Dimension.getHeight(blockerElement) ); if (qx.core.Environment.get("engine.name") == "mshtml") { var childElements = qx.dom.Hierarchy.getChildElements(document.body); var blockerIframeElement = childElements[childElements.length - 1]; this.assertNotNull( blockerIframeElement, "Blocker iframe element not inserted" ); this.assertEquals( qx.bom.Document.getWidth(), qx.bom.element.Dimension.getWidth(blockerIframeElement) ); this.assertEquals( qx.bom.Document.getHeight(), qx.bom.element.Dimension.getHeight(blockerIframeElement) ); } this.__blocker.unblock(); }, testUnblockWholeDocument() { this.__blocker.block(); if (qx.core.Environment.get("engine.name") == "mshtml") { var childElements = qx.dom.Hierarchy.getChildElements(document.body); var blockerIframeElement = childElements[childElements.length - 1]; } this.__blocker.unblock(); var blockerElement = this.__blocker.getBlockerElement(); this.assertFalse( qx.dom.Element.isInDom(blockerElement, window), "Blocker element not correctly removed" ); if (qx.core.Environment.get("engine.name") == "mshtml") { this.assertFalse( qx.dom.Element.isInDom(blockerIframeElement, window), "Blocker iframe element not correctly removed" ); } }, testBlockElement() { this.__blocker.block(this.__blockedElement); // Timer is needed for IE6, otherwise the test will fail because IE6 // is not able to resize the blockerElement fast enough qx.event.Timer.once( function () { var self = this; this.resume(function () { var blockerElement = self.__blocker.getBlockerElement(); self.assertNotNull(blockerElement, "Blocker element not inserted."); self.assertEquals( qx.bom.element.Dimension.getWidth(self.__blockedElement), qx.bom.element.Dimension.getWidth(blockerElement) ); self.assertEquals( qx.bom.element.Dimension.getHeight(self.__blockedElement), qx.bom.element.Dimension.getHeight(blockerElement) ); self.assertEquals( qx.bom.element.Location.getLeft(self.__blockedElement), qx.bom.element.Location.getLeft(blockerElement) ); self.assertEquals( qx.bom.element.Location.getTop(self.__blockedElement), qx.bom.element.Location.getTop(blockerElement) ); self.assertEquals( qx.bom.element.Style.get(self.__blockedElement, "zIndex") - 1, qx.bom.element.Style.get(blockerElement, "zIndex") ); if (qx.core.Environment.get("engine.name") == "mshtml") { var childElements = qx.dom.Hierarchy.getChildElements( document.body ); var blockerIframeElement = childElements[childElements.length - 1]; self.assertEquals( qx.bom.element.Style.get(self.__blockedElement, "zIndex") - 2, qx.bom.element.Style.get(blockerIframeElement, "zIndex") ); } self.__blocker.unblock(); }, self); }, this, 1000 ); this.wait(); }, testBlockerColor() { this.__blocker.setBlockerColor("#FF0000"); this.__blocker.block(); var blockerElement = this.__blocker.getBlockerElement(); var color = qx.bom.element.Style.get(blockerElement, "backgroundColor"); if (qx.util.ColorUtil.isRgbString(color)) { this.assertEquals("rgb(255, 0, 0)", color); } else { this.assertEquals("#ff0000", color); } this.__blocker.unblock(); }, testBlockerOpacity() { this.__blocker.setBlockerOpacity(0.7); this.__blocker.block(); var blockerElement = this.__blocker.getBlockerElement(); var value = qx.bom.element.Opacity.get(blockerElement); if (qx.core.Environment.get("engine.name") == "webkit") { value = Math.round(value * 10) / 10; } this.assertEquals(0.7, value); this.__blocker.unblock(); }, testDoubleBlocking() { var before = qx.dom.Hierarchy.getDescendants(document.body); this.__blocker.block(this.__blockedElement); this.__blocker.block(this.__blockedElement); var after = qx.dom.Hierarchy.getDescendants(document.body); if (qx.core.Environment.get("engine.name") == "mshtml") { this.assertEquals(after.length, before.length + 2); } else { this.assertEquals(after.length, before.length + 1); } this.__blocker.unblock(); }, testDoubleUnBlocking() { this.__blocker.block(this.__blockedElement); this.__blocker.unblock(); this.__blocker.unblock(); var blockerElement = this.__blocker.getBlockerElement(); this.assertNotEquals(blockerElement.parentNode, this.__blockedElement); } } });