@qooxdoo/framework
Version:
The JS Framework for Coders
194 lines (158 loc) • 5.71 kB
JavaScript
/* ************************************************************************
qooxdoo - the new era of web development
http://qooxdoo.org
Copyright:
2007-2013 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)
* Christian Hagendorn (chris_schmidt)
************************************************************************ */
qx.Class.define("qx.test.bom.element.Style", {
extend: qx.dev.unit.TestCase,
include: [qx.dev.unit.MRequirements],
members: {
__element: null,
hasCssBoxshadow() {
return qx.core.Environment.get("css.boxshadow") !== null;
},
setUp() {
this.__element = document.createElement("div");
document.body.appendChild(this.__element);
},
tearDown() {
document.body.removeChild(this.__element);
this.__element = null;
},
testSetStylesWithCss3() {
if (this.require(["cssBoxshadow"])) {
var styles = {
MozBoxShadow: "6px 6px 10px rgb(128, 128, 128)",
WebkitBoxShadow: "6px 6px 10px rgb(128, 128, 128)",
boxShadow: "6px 6px 10px rgb(128, 128, 128)"
};
qx.bom.element.Style.setStyles(this.__element, styles);
var expected = qx.core.Environment.select("engine.name", {
webkit: "rgb(128, 128, 128) 6px 6px 10px",
mshtml: "6px 6px 10px rgb(128,128,128)",
default: "6px 6px 10px rgb(128, 128, 128)"
});
this.assertEquals(expected, this.__element.style["boxShadow"]);
}
},
testSetAndGetCss() {
var css = "font-weight: bold;";
qx.bom.element.Style.setCss(this.__element, css);
this.assertMatch(
qx.bom.element.Style.getCss(this.__element),
/font-weight.*?bold/i
);
},
testSet() {
var name = "border";
var style = ["1px", "solid", "red"];
qx.bom.element.Style.set(this.__element, name, style.join(" "));
if (
qx.core.Environment.get("engine.name") == "mshtml" &&
qx.core.Environment.get("browser.documentmode") < 9
) {
this.assertEquals("red 1px solid", this.__element.style.border);
} else {
this.assertEquals(style.join(" "), this.__element.style.border);
}
this.assertEquals(style[0], this.__element.style.borderWidth);
this.assertEquals(style[1], this.__element.style.borderStyle);
this.assertEquals(style[2], this.__element.style.borderColor);
},
testGet() {
var name = "border";
var style = "1px solid red";
var engine = qx.core.Environment.get("engine.name");
var expected = ["1px", "solid", "red"];
var isOldSafari =
qx.core.Environment.get("browser.name") == "safari" &&
qx.core.Environment.get("browser.version") < 6;
if (
engine == "gecko" ||
engine == "opera" ||
(engine == "webkit" &&
!isOldSafari &&
qx.core.Environment.get("browser.name") !== "edge")
) {
expected = ["1px", "solid", "rgb(255, 0, 0)"];
}
qx.bom.element.Style.set(this.__element, name, style);
if (
qx.core.Environment.get("engine.name") == "mshtml" &&
qx.core.Environment.get("browser.documentmode") < 9 &&
qx.core.Environment.get("browser.name") !== "edge"
) {
this.assertEquals(
"red 1px solid",
qx.bom.element.Style.get(this.__element, name)
);
} else {
this.assertEquals(
expected.join(" "),
qx.bom.element.Style.get(this.__element, name)
);
}
this.assertEquals(
expected[0],
qx.bom.element.Style.get(this.__element, "borderWidth")
);
this.assertEquals(
expected[1],
qx.bom.element.Style.get(this.__element, "borderStyle")
);
this.assertEquals(
expected[2],
qx.bom.element.Style.get(this.__element, "borderColor")
);
},
testSetFloat() {
qx.bom.element.Style.set(this.__element, "float", "left");
this.assertEquals(
"left",
this.__element.style.float || this.__element.style.styleFloat
);
},
testCompileFloat() {
var css = qx.bom.element.Style.compile({ float: "left" });
this.assertEquals("float:left;", css);
},
testGetFloat() {
// known to fail in chrome
if (qx.core.Environment.get("browser.name") == "chrome") {
throw new qx.dev.unit.RequirementError();
}
// important to set this value as CSS class
var sheet = qx.bom.Stylesheet.createElement(".right { float: right; }");
this.__element.className = "right";
var floatValue = qx.bom.element.Style.get(this.__element, "float");
this.assertEquals("right", floatValue);
qx.bom.Stylesheet.removeSheet(sheet);
this.__element.className = "";
},
testCompileContent() {
var css = qx.bom.element.Style.compile({ content: "" });
this.assertEquals('content:"";', css);
},
testSetOpacity() {
if (!qx.core.Environment.get("css.opacity")) {
throw new qx.dev.unit.RequirementError("css.opacity");
}
qx.bom.element.Style.set(this.__element, "opacity", 1);
this.assertEquals("1", this.__element.style.opacity);
},
testCompileOpacity() {
if (!qx.core.Environment.get("css.opacity")) {
throw new qx.dev.unit.RequirementError("css.opacity");
}
var css = qx.bom.element.Style.compile({ opacity: 1 });
this.assertEquals("opacity:1;", css);
}
}
});