widget.html revision 0fc5b7844cf15c234263eccb6534440a525fbd7f
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews #console .yui3-console-entry {
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews min-height:0;
c718d15a9a95054ee3c71540c02335426071fc6dMark Andrews #console .yui3-console-entry-fail .yui3-console-entry-cat {
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews background-color:red;
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews #console .yui3-console-entry-pass .yui3-console-entry-cat {
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews background-color:green;
c718d15a9a95054ee3c71540c02335426071fc6dMark Andrews #console .yui3-console-entry-perf .yui3-console-entry-cat {
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews background-color:blue;
b6617c5adad7f12e5fcde1e873f7b982d247fe05Mark Andrews #console .yui3-console-entry-content {
91216cff91b34c9ff6e846dc23f248219cafe660Andreas Gustafsson font-family:monospace;
91216cff91b34c9ff6e846dc23f248219cafe660Andreas Gustafsson #console .yui3-console-entry-cat {
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews line-height:10px;
c718d15a9a95054ee3c71540c02335426071fc6dMark Andrews overflow:hidden;
c6d4f781529d2f28693546b25b2967d44ec89e60Mark Andrews display:inline-block;
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews *display:inline;
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews position:static;
3f6174bffe227be44e241a29d186add00c032ff6Mark Andrews #automationmsg {
1eb1e1e838d2ea00b166c918bf50764a95826be8Mark Andrews margin-left:2em;
992616aaf75643a0c9f84826f0a1ed5a27e84328Mark Andrews display:none;
efb0e886f18894a1d2489f1ad74ad14b579e11c7Mark Andrews html, body {
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington /** Extended Core Tests Need This. Custom CSS **/
26a77b80bb7ee886c6fa704348d5e80a011d8811Mark Andrews .yui3-mywidget-hidden {
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews display:none;
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews /** SingleBox Core Tests Need This. Custom CSS **/
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews .yui3-mysingleboxwidget-hidden {
62ee2c9f460d2e2e45dcf1abc8b4b4a4a43f5618Mark Andrews display:none;
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews /** Custom Widget Tests Need This. Custom CSS **/
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews .yui3-mycustomwidget-hidden {
efb0e886f18894a1d2489f1ad74ad14b579e11c7Mark Andrews visibility:hidden;
91216cff91b34c9ff6e846dc23f248219cafe660Andreas Gustafsson <p><input type="button" value="Run Tests" id="btnRun" disabled="true"><span id="automationmsg" class="msg-hidden">Currently running tests, with logging disabled to speed up automation. Button will be enabled once complete.</span></p>
91216cff91b34c9ff6e846dc23f248219cafe660Andreas Gustafsson <div id="testbed" class="yui3-skin-foo"></div>
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington <div id="widgetRenderContainer" style="height:300px;width:300px"></div>
46e873c835bf7d9ec3e1097e0aceb8db5b1ae93aMark Andrews useBrowserConsole:false,
dd9ad704c3800e3ab07ede8595871eac79984871Mark Andrews filter: (window.location.search.match(/[?&]filter=([^&]+)/) || [])[1] || 'min'
605bd686e437162b5ab65ac4e7c1be0bba1886ddMark Andrews }).use('test', 'widget', 'node-event-simulate', 'console', function (Y) {
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews // Extended Widget
ab81f57ca0c3addfec3df3babdcea9644757cf23Mark Andrews function MyWidget() {
605bd686e437162b5ab65ac4e7c1be0bba1886ddMark Andrews MyWidget.superclass.constructor.apply(this, arguments);
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews // Single Box Widget
6b5c57e52ac8c3e0af1547be3140ebbfb41a85b3Mark Andrews function MySingleBoxWidget() {
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews MySingleBoxWidget.superclass.constructor.apply(this, arguments);
6b5c57e52ac8c3e0af1547be3140ebbfb41a85b3Mark Andrews MySingleBoxWidget.NAME = "mySingleBoxWidget";
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews CONTENT_TEMPLATE:null
6b5c57e52ac8c3e0af1547be3140ebbfb41a85b3Mark Andrews var suite = new Y.Test.Suite("Widget Tests");
6b5c57e52ac8c3e0af1547be3140ebbfb41a85b3Mark Andrews var coreTests = {
45eca3a5d46ed15aee14d81f6cb6c9fb6f365344Mark Andrews name : "Widget Core Tests",
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews createWidget: function(cfg) {
6b5c57e52ac8c3e0af1547be3140ebbfb41a85b3Mark Andrews return new Y.Widget(cfg);
d56e188030368b835122d759ebbf8d9613c166f4Mark Andrews "testInstantiation" : function() {
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews // Basic API
46e873c835bf7d9ec3e1097e0aceb8db5b1ae93aMark Andrews "testInitState" : function() {
605bd686e437162b5ab65ac4e7c1be0bba1886ddMark Andrews Y.Assert.areEqual("div", w.get("boundingBox").get("tagName").toLowerCase());
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.areEqual("div", w.get("contentBox").get("tagName").toLowerCase());
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews Y.Assert.isFalse(w.get("disabled"), "disabled should be false");
62ee2c9f460d2e2e45dcf1abc8b4b4a4a43f5618Mark Andrews Y.Assert.isFalse(w.get("focused"), "focused should be false");
1eb1e1e838d2ea00b166c918bf50764a95826be8Mark Andrews Y.Assert.areSame("", w.get("height"), "height should be empty string");
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews Y.Assert.areSame("", w.get("width"), "width should be empty string");
75216e007570b8ea36b3ac9cca096bf70c0ca6f6Mark Andrews Y.Assert.isString(w.get("id"), "id should be a string");
ea206aebcafe1ed5d470dd99daab9a1cedc81c7cMark Andrews Y.Assert.isTrue(w.get("initialized"), "initialized should be true");
91216cff91b34c9ff6e846dc23f248219cafe660Andreas Gustafsson Y.Assert.isFalse(w.get("destroyed"), "destroyed should be false");
992616aaf75643a0c9f84826f0a1ed5a27e84328Mark Andrews Y.Assert.isFalse(w.get("rendered"), "rendered should be false");
45eca3a5d46ed15aee14d81f6cb6c9fb6f365344Mark Andrews Y.Assert.isTrue(w.get("visible"), "visible should be true");
ca12f7f4cf72e2368ee946f3eb4915ab73576cdcMark Andrews Y.Assert.isNull(w.get("tabIndex"), "tabIndex should be null");
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews "testNonRenderedStateUpdate" : function() {
605bd686e437162b5ab65ac4e7c1be0bba1886ddMark Andrews // WRITE ONCE
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews id: "foobar",
821d2613356f81e5bb5c107288d6d5cf35c2a1e8Mark Andrews boundingBox: Y.Node.create("<span id='bb'></span>"),
91216cff91b34c9ff6e846dc23f248219cafe660Andreas Gustafsson srcNode: Y.Node.create("<span id='cb'></span>")
75216e007570b8ea36b3ac9cca096bf70c0ca6f6Mark Andrews w.set("disabled", true);
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews w.set("height", 100);
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews w.set("width", 200);
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews w.set("visible", false);
ed178efa9ab8f813538fce4ff603b81ded9f1799Mark Andrews w.set("tabIndex", 5);
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews Y.Assert.areEqual("span", w.get("boundingBox").get("tagName").toLowerCase());
6b5c57e52ac8c3e0af1547be3140ebbfb41a85b3Mark Andrews Y.Assert.areEqual("span", w.get("contentBox").get("tagName").toLowerCase());
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews Y.Assert.areEqual("bb", w.get("boundingBox").get("id"));
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews Y.Assert.areEqual("cb", w.get("contentBox").get("id"));
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews Y.Assert.isTrue(w.get("disabled"), "disabled should be true");
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews Y.Assert.isFalse(w.get("focused"), "focused should be false"); // focused is READONLY
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews Y.Assert.areEqual("100", w.get("height"), "height should be 100px");
e076d0c88be69de7c190ab924d095e69d2e11f7aAndreas Gustafsson Y.Assert.areEqual("200", w.get("width"), "width should be 200px");
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews Y.Assert.areEqual("foobar", w.get("id"), "id should be foobar");
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews Y.Assert.isFalse(w.get("visible"), "visible should be false");
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews Y.Assert.areEqual(5, w.get("tabIndex"), "tabIndex should be 5");
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews "testValidationReadonlyWriteonce" : function() {
efb0e886f18894a1d2489f1ad74ad14b579e11c7Mark Andrews w.set("focused", true);
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington w.set("rendered", true);
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington // WRITE ONCE
282e38d96feb488fddbbc0b0409491094786977fMark Andrews w.set("boundingBox", Y.Node.create("<span id='bb'></span>"));
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews w.set("contentBox", Y.Node.create("<span id='cb'></span>"));
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews w.set("render", true);
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews w.set("tabIndex", "foo");
abf32d940f8f674b3971ef41b306a01b3da8d2cfMark Andrews // State should be the same as the initial state
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.areEqual("div", w.get("boundingBox").get("tagName").toLowerCase());
75216e007570b8ea36b3ac9cca096bf70c0ca6f6Mark Andrews Y.Assert.areEqual("div", w.get("contentBox").get("tagName").toLowerCase());
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.isFalse(w.get("disabled"), "disabled should be false");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.isFalse(w.get("focused"), "focused should be false");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.areSame("", w.get("height"), "height should be empty string");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.areSame("", w.get("width"), "width should be empty string");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.isString(w.get("id"), "id should be a string");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.isTrue(w.get("initialized"), "initialized should be true");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.isFalse(w.get("destroyed"), "destroyed should be false");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.isFalse(w.get("rendered"), "rendered should be false");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.isTrue(w.get("visible"), "visible should be true");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.isNull(w.get("tabIndex"), "tabIndex should be null");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington "testStaticClassNameGeneration" : function() {
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.areEqual("yui3-widget-foo-bar", Y.Widget.getClassName("foo", "bar"));
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington "testInstanceClassNameGeneration" : function() {
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.areEqual("yui3-widget-foo-bar", w.getClassName("foo", "bar"));
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington "testCssPrefix" : function() {
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.areEqual("yui3-widget", w._cssPrefix, "Unexpected Prefix");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington "testRender" : function() {
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington id: "widgetRender"
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington var bbFromDom = Y.Node.one("#widgetRender");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.isTrue(w.get("boundingBox").compareTo(bbFromDom), "boundingBox not found in DOM");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.isTrue(bbFromDom.get("firstChild").compareTo(w.get("contentBox")), "contentBox not first child of boundingBox");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.isTrue(bbFromDom.compareTo(Y.Node.one("body").get("firstChild")), "widget not inserted to body");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.isTrue(w.get("rendered"), "Rendered flag not set");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington "testRenderTo" : function() {
eaccf5e805405de257b5a4840256c580fefe00e3Mark Andrews id: "widgetRender"
d4ef65050feac78554addf6e16a06c6e2e0bd331Brian Wellington w.render("#widgetRenderContainer");
d4ef65050feac78554addf6e16a06c6e2e0bd331Brian Wellington var bbFromDom = Y.Node.one("#widgetRender");
d4ef65050feac78554addf6e16a06c6e2e0bd331Brian Wellington Y.Assert.isTrue(bbFromDom.get("parentNode").compareTo(Y.Node.one("#widgetRenderContainer")), "widget not rendered to container passed to render()");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.isTrue(w.get("boundingBox").compareTo(bbFromDom), "boundingBox not found in DOM");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.isTrue(bbFromDom.get("firstChild").compareTo(w.get("contentBox")), "contentBox not first child of boundingBox");
d4ef65050feac78554addf6e16a06c6e2e0bd331Brian Wellington Y.Assert.isTrue(w.get("rendered"), "Rendered flag not set");
bf54ac86eeddce16b67c525d38d1096cc956f478Mark Andrews "testBaseClassNames" : function() {
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington var bb = w.get("boundingBox");
bf54ac86eeddce16b67c525d38d1096cc956f478Mark Andrews var cb = w.get("contentBox");
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews Y.Assert.isTrue(bb.hasClass("yui3-widget"), "bb missing yui3-widget marker");
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews Y.Assert.isTrue(cb.hasClass("yui3-widget-content"), "cb missing yui3-widget-content marker");
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews "testHeight" : function() {
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews render:"#widgetRenderContainer"
eaccf5e805405de257b5a4840256c580fefe00e3Mark Andrews var bb = w.get("boundingBox"),
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews cb = w.get("contentBox");
75216e007570b8ea36b3ac9cca096bf70c0ca6f6Mark Andrews // Default CSS has no border/padding/margin on BB/CB so this should be fine in all browsers
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.areEqual(100, bb.get("offsetHeight"), "100 height not set correctly in DOM");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.areEqual(100, cb.get("offsetHeight"), "100 height not set correctly in DOM");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington w.set("height", "200px");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.areEqual(200, bb.get("offsetHeight"), "200px height not set correctly in DOM");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.areEqual(200, cb.get("offsetHeight"), "200px height not set correctly in DOM");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington w.set("height", "50%");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.areEqual(150, bb.get("offsetHeight"), "% height not set correctly in DOM");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.areEqual(150, cb.get("offsetHeight"), "% height not set correctly in DOM");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington "testWidth" : function() {
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington render:"#widgetRenderContainer"
bf54ac86eeddce16b67c525d38d1096cc956f478Mark Andrews var bb = w.get("boundingBox"),
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews cb = w.get("contentBox");
01bf5871f8861eb805dd8ca79bdb9b0b9e4e6a5eMark Andrews // Default CSS has no border/padding/margin on BB/CB so this should be fine in all browsers
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews Y.Assert.areEqual(100, bb.get("offsetWidth"), "100 width not set correctly in DOM");
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews Y.Assert.areEqual(100, cb.get("offsetWidth"), "100 width not set correctly in DOM");
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews w.set("width", "200px");
75216e007570b8ea36b3ac9cca096bf70c0ca6f6Mark Andrews Y.Assert.areEqual(200, bb.get("offsetWidth"), "200px width not set correctly in DOM");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.areEqual(200, cb.get("offsetWidth"), "200px width not set correctly in DOM");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington w.set("width", "50%");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.areEqual(150, bb.get("offsetWidth"), "% width not set correctly in DOM");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.areEqual(150, cb.get("offsetWidth"), "% width not set correctly in DOM");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington "testDisabled" : function() {
b7aab05edae933e169d5f83c653935b17c7f0a8bMark Andrews var w = this.createWidget({render:true});
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington var bb = w.get("boundingBox");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington var className = w._cssPrefix + "-disabled";
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.isFalse(w.get("disabled"), "disabled should be false by default");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.isFalse(bb.hasClass(className), "bb should not have a disabled marker class");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington w.set("disabled", true);
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.isTrue(w.get("disabled"), "disabled should be true");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.isTrue(bb.hasClass(className), "bb should have a disabled marker");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington w.set("disabled", false);
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.isFalse(w.get("disabled"), "disabled should be false");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.isFalse(bb.hasClass(className), "bb should not have a disabled marker class");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington "testDisableEnable" : function() {
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews var w = this.createWidget({render:true});
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews var bb = w.get("boundingBox");
75216e007570b8ea36b3ac9cca096bf70c0ca6f6Mark Andrews var className = w._cssPrefix + "-disabled";
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews Y.Assert.isFalse(w.get("disabled"), "disabled should be false by default");
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews Y.Assert.isFalse(bb.hasClass(className), "bb should not have a disabled marker class");
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews Y.Assert.isTrue(w.get("disabled"), "disabled should be true");
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews Y.Assert.isTrue(bb.hasClass(className), "bb should have a disabled marker");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.isFalse(w.get("disabled"), "disabled should be false");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.isFalse(bb.hasClass(className), "bb should not have a disabled marker class");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington "testFocusBlur" : function() {
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington // The focused attribute is read-only, so we test through the public api
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington var w = this.createWidget({render:true});
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington var bb = w.get("boundingBox");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington var className = w._cssPrefix + "-focused";
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington // TODO ENH REQUEST: This doesn't seem right. We should focus on render.
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.isFalse(w.get("focused"), "focused should be false by default");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.isFalse(bb.hasClass(className), "bb should not have a disabled marker class");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.isTrue(w.get("focused"), "focused should be true");
bf54ac86eeddce16b67c525d38d1096cc956f478Mark Andrews Y.Assert.isTrue(bb.hasClass(className), "bb should have a focused marker");
abf32d940f8f674b3971ef41b306a01b3da8d2cfMark Andrews Y.Assert.isFalse(w.get("focused"), "focused should be false");
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews Y.Assert.isFalse(bb.hasClass(className), "bb should not have a focused marker class");
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews "testTabIndex" : function() {
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington var w = this.createWidget({render:true});
75216e007570b8ea36b3ac9cca096bf70c0ca6f6Mark Andrews var bb = w.get("boundingBox");
eaccf5e805405de257b5a4840256c580fefe00e3Mark Andrews Y.Assert.isNull(w.get("tabIndex"), "tabIndex should be null by default");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.isTrue(bb.get("tabIndex") <= 0, "tabIndex should not be set by default"); // default varies across browsers 0 or -1
d4ef65050feac78554addf6e16a06c6e2e0bd331Brian Wellington Y.Assert.areSame(6, w.get("tabIndex"), "tabIndex should be 6");
d4ef65050feac78554addf6e16a06c6e2e0bd331Brian Wellington Y.Assert.areSame(6, bb.get("tabIndex"), "tabIndex should be 6");
75216e007570b8ea36b3ac9cca096bf70c0ca6f6Mark Andrews Y.Assert.areSame("testId", w.get("id"), "id not set");
75216e007570b8ea36b3ac9cca096bf70c0ca6f6Mark Andrews Y.Assert.areSame("testId", bb.get("id"), "id not reflected in DOM");
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews Y.Assert.isTrue(w.get("visible"), "visible should be true by default");
7e1a8f402e3881388db37152f71c698cb1f1c426Mark Andrews Y.Assert.isFalse(bb.hasClass(className), "bb should not have a hidden marker class");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.areNotEqual("none", bb.getStyle("display"), "widget should not be display:none");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.isFalse(w.get("visible"), "visible should be false");
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews Y.Assert.isTrue(bb.hasClass(className), "bb should have an hidden marker");
75216e007570b8ea36b3ac9cca096bf70c0ca6f6Mark Andrews Y.Assert.areEqual("none", bb.getStyle("display"), "Default CSS should hide widget using display:none");
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews Y.Assert.isTrue(w.get("visible"), "visible should be true by default");
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews Y.Assert.isFalse(bb.hasClass(className), "bb should not have a hidden marker class");
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews Y.Assert.areNotEqual("none", bb.getStyle("display"), "widget should not be display:none");
6fac7ff1f9ec9c3873d3b55c5079fa79aba1f146Mark Andrews Y.Assert.isTrue(w.get("visible"), "visible should be true by default");
6fac7ff1f9ec9c3873d3b55c5079fa79aba1f146Mark Andrews Y.Assert.isFalse(bb.hasClass(className), "bb should not have a hidden marker class");
6fac7ff1f9ec9c3873d3b55c5079fa79aba1f146Mark Andrews Y.Assert.areNotEqual("none", bb.getStyle("display"), "widget should not be display:none");
3a9a66b32adf379e680d18e92428058910880119Mark Andrews Y.Assert.isFalse(w.get("visible"), "visible should be false");
48b492d73ae5328c5efef4b9e0f22063e0ab058aMark Andrews Y.Assert.isTrue(bb.hasClass(className), "bb should have an hidden marker");
48b492d73ae5328c5efef4b9e0f22063e0ab058aMark Andrews Y.Assert.areEqual("none", bb.getStyle("display"), "Default CSS should hide widget using display:none");
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews Y.Assert.isTrue(w.get("visible"), "visible should be true by default");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.isFalse(bb.hasClass(className), "bb should not have a hidden marker class");
3a9a66b32adf379e680d18e92428058910880119Mark Andrews Y.Assert.areNotEqual("none", bb.getStyle("display"), "widget should not be display:none");
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews var container = Y.one("#widgetRenderContainer");
3a9a66b32adf379e680d18e92428058910880119Mark Andrews Y.Assert.isTrue(w.get("boundingBox").compareTo(bb), "bb passed to constructor, not used");
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews Y.Assert.isTrue(w.get("contentBox").compareTo(bb.get("firstChild")), "Missing contentBox");
7e5b2100ea65658a7ec3795919b4ecd29a6f118aMark Andrews Y.Assert.isTrue(w.get("boundingBox").get("parentNode").compareTo(container), "boundingBox moved from it's place in the DOM");
7e5b2100ea65658a7ec3795919b4ecd29a6f118aMark Andrews var container = Y.one("#widgetRenderContainer");
75216e007570b8ea36b3ac9cca096bf70c0ca6f6Mark Andrews Y.Assert.isTrue(w.get("contentBox").compareTo(cb), "cb passed to constructor, not used");
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews Y.Assert.isTrue(w.get("boundingBox").compareTo(cb.get("parentNode")), "Missing boundingBox");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.isTrue(w.get("boundingBox").get("parentNode").compareTo(container), "contentBox moved from it's place in the DOM");
75216e007570b8ea36b3ac9cca096bf70c0ca6f6Mark Andrews var container = Y.one("#widgetRenderContainer");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.isTrue(w.get("boundingBox").compareTo(bb), "bb passed to constructor, not used");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.isTrue(w.get("contentBox").compareTo(cb), "cb passed to constructor, not used");
75216e007570b8ea36b3ac9cca096bf70c0ca6f6Mark Andrews Y.Assert.isTrue(w.get("boundingBox").compareTo(cb.get("parentNode")), "bb not not cb's parent");
7a6ad11e0185a73984410f3252f3c49c3a301dbdBrian Wellington Y.Assert.isTrue(w.get("boundingBox").get("parentNode").compareTo(container), "bb moved from it's place in the DOM");
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews Y.Assert.isTrue(w.get("boundingBox").get("firstChild").compareTo(cb), "cb not bb's firstChild");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington var container = Y.one("#widgetRenderContainer");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington // NOTE: PE content sits in body, not container
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.one("body").append("<div id='bbTest'></div>");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.isTrue(w.get("boundingBox").compareTo(bb), "bb passed to constructor, not used");
75216e007570b8ea36b3ac9cca096bf70c0ca6f6Mark Andrews Y.Assert.isTrue(w.get("contentBox").compareTo(bb.get("firstChild")), "Missing contentBox");
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews Y.Assert.isTrue(w.get("boundingBox").get("parentNode").compareTo(container), "boundingBox moved from it's place in the DOM");
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews var container = Y.one("#widgetRenderContainer");
3a9a66b32adf379e680d18e92428058910880119Mark Andrews Y.one("body").append("<div id='cbTest'></div>");
75216e007570b8ea36b3ac9cca096bf70c0ca6f6Mark Andrews Y.Assert.isTrue(w.get("contentBox").compareTo(cb), "cb passed to constructor, not used");
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews Y.Assert.isTrue(w.get("boundingBox").compareTo(cb.get("parentNode")), "Missing boundingBox");
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews Y.Assert.isTrue(w.get("boundingBox").get("parentNode").compareTo(container), "contentBox moved from it's place in the DOM");
01bf5871f8861eb805dd8ca79bdb9b0b9e4e6a5eMark Andrews "testBoundingBoxContentBoxRenderTo" : function() {
01bf5871f8861eb805dd8ca79bdb9b0b9e4e6a5eMark Andrews var container = Y.one("#widgetRenderContainer");
c718d15a9a95054ee3c71540c02335426071fc6dMark Andrews Y.one("body").append("<div id='bbTest'></div>");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.isTrue(w.get("boundingBox").compareTo(bb), "bb passed to constructor, not used");
75216e007570b8ea36b3ac9cca096bf70c0ca6f6Mark Andrews Y.Assert.isTrue(w.get("contentBox").compareTo(cb), "cb passed to constructor, not used");
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews Y.Assert.isTrue(w.get("boundingBox").compareTo(cb.get("parentNode")), "bb not not cb's parent");
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews Y.Assert.isTrue(w.get("boundingBox").get("parentNode").compareTo(container), "bb moved from it's place in the DOM");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.isTrue(w.get("boundingBox").get("firstChild").compareTo(cb), "cb not bb's firstChild");
49ef9cb60f37eb190986b750db57a194c8f7321cMark Andrews var container = Y.one("#widgetRenderContainer");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington container.append("<div id='srcNode'><div id='foo'></div></div>");
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews Y.Assert.isTrue(w.get("contentBox").compareTo(sn), "srcNode should end up being cb");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.isTrue(w.get("srcNode").compareTo(sn), "srcNode should still be accessible from srcNode attribute");
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews Y.Assert.isTrue(w.get("boundingBox").compareTo(sn.get("parentNode")), "Missing boundingBox");
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews Y.Assert.isTrue(w.get("boundingBox").get("parentNode").compareTo(container), "srcNode moved from it's place in the DOM");
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews Y.Assert.isNotNull(w.get("contentBox").one("#foo"), "contents of srcNode not maintained");
75216e007570b8ea36b3ac9cca096bf70c0ca6f6Mark Andrews ocb.append("<div><div id='outerContent'>Outer</div></div>");
7e1a8f402e3881388db37152f71c698cb1f1c426Mark Andrews icb.append("<div><div id='innerContent'>Inner</div></div>");
7e1a8f402e3881388db37152f71c698cb1f1c426Mark Andrews Y.Assert.areSame(o, Y.Widget.getByNode(outerContent), "Couldn't find outer widget from content");
7e1a8f402e3881388db37152f71c698cb1f1c426Mark Andrews Y.Assert.areSame(i, Y.Widget.getByNode(innerContent), "Couldn't find inner widget from content");
7e1a8f402e3881388db37152f71c698cb1f1c426Mark Andrews Y.Assert.areSame(o, Y.Widget.getByNode(o.get("contentBox")), "Couldn't find outer widget from outer contentBox");
7e1a8f402e3881388db37152f71c698cb1f1c426Mark Andrews Y.Assert.areSame(o, Y.Widget.getByNode(o.get("boundingBox")), "Couldn't find outer widget from outer boundingBox");
7e1a8f402e3881388db37152f71c698cb1f1c426Mark Andrews Y.Assert.areSame(i, Y.Widget.getByNode(i.get("contentBox")), "Couldn't find inner widget from inner contentBox");
7e1a8f402e3881388db37152f71c698cb1f1c426Mark Andrews Y.Assert.areSame(i, Y.Widget.getByNode(i.get("boundingBox")), "Couldn't find inner widget from inner boundingBox");
7e1a8f402e3881388db37152f71c698cb1f1c426Mark Andrews Y.ObjectAssert.ownsNoKeys(w.get("strings"), "No strings should be available by default");
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews Y.Assert.areEqual("one", w.get("strings").stringOne);
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews Y.Assert.areEqual("two", w.get("strings").stringTwo);
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.areEqual("three", w.get("strings").stringThree);
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews Y.Assert.areEqual("four", w.get("strings").stringFour);
7e1a8f402e3881388db37152f71c698cb1f1c426Mark Andrews var n = Y.Node.create('<div id="srcNode" class="yui3-widget-loading">Src Node Content</div>');
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.isTrue(n.hasClass("yui3-widget-loading"), "yui3-widget-loading should not have been removed");
75216e007570b8ea36b3ac9cca096bf70c0ca6f6Mark Andrews Y.Assert.areSame(n, w.get("contentBox"), "srcNode not used as content box");
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews Y.Assert.isFalse(n.hasClass("yui3-widget-loading"), "yui3-widget-loading should have removed");
75216e007570b8ea36b3ac9cca096bf70c0ca6f6Mark Andrews Y.Assert.isFalse(w.get("focused"), "Widget should not be focused here");
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews var n = w.get("contentBox").appendChild('<a href="#" id="clickme">Click Me</a>');
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews Y.Assert.isTrue(w.get("focused"), "Widget should be focused here");
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews var n = Y.Node.create('<div id="srcNode" class="yui3-mywidget-loading">Src Node Content</div>');
75216e007570b8ea36b3ac9cca096bf70c0ca6f6Mark Andrews Y.Assert.isTrue(n.hasClass("yui3-mywidget-loading"), "yui3-mywidget-loading should not have been removed");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.areSame(n, w.get("contentBox"), "srcNode not used as content box");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.isFalse(n.hasClass("yui3-mywidget-loading"), "yui3-mywidget-loading should have removed");
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews Y.Assert.isTrue(bb.hasClass("yui3-widget"), "bb missing generic yui3-widget marker");
8227257b1c0224a7991e04bb79dc5059d5062dfbAndreas Gustafsson Y.Assert.isTrue(bb.hasClass("yui3-mywidget"), "bb missing yui3-mywidget marker");
75216e007570b8ea36b3ac9cca096bf70c0ca6f6Mark Andrews Y.Assert.isTrue(cb.hasClass("yui3-mywidget-content"), "cb missing yui3-mywidget-content marker");
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews Y.Assert.isFalse(cb.hasClass("yui3-widget-content"), "cb shouldn't have yui3-widget-content marker");
75216e007570b8ea36b3ac9cca096bf70c0ca6f6Mark Andrews Y.Assert.areEqual("yui3-mywidget", w._cssPrefix, "Unexpected Prefix");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington "testInstanceClassNameGeneration" : function() {
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews Y.Assert.areEqual("yui3-mywidget-foo-bar", w.getClassName("foo", "bar"));
75216e007570b8ea36b3ac9cca096bf70c0ca6f6Mark Andrews var singleBoxCoreTests = Y.Object(extendedCoreTests);
99f467f016d9354c7548b7d24b65ac986b118a52Andreas Gustafsson "testNonRenderedStateUpdate" : function() {
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington boundingBox: Y.Node.create("<span id='bb'></span>")
83a810eba60ae87341a2d177ff60d834e26d7a90Mark Andrews // Doesn't make sense to pass 2 boxes into a single box widget.
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington // srcNode: Y.Node.create("<span id='cb'></span>")
b0804b92737de82fc15fb44e35f70797b4ee166fMark Andrews w.set("disabled", true);
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews w.set("height", 100);
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington w.set("width", 200);
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews w.set("visible", false);
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews w.set("tabIndex", 5);
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews Y.Assert.areEqual("span", w.get("boundingBox").get("tagName").toLowerCase());
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.areEqual("span", w.get("contentBox").get("tagName").toLowerCase());
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews Y.Assert.areEqual("bb", w.get("boundingBox").get("id"));
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews // Doesn't make sense to pass 2 boxes into a single box widget.
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews // Y.Assert.areEqual("cb", w.get("contentBox").get("id"));
832cebe0cbc843785897f1c124ae54958028c4e7Mark Andrews Y.Assert.isTrue(w.get("disabled"), "disabled should be true");
832cebe0cbc843785897f1c124ae54958028c4e7Mark Andrews Y.Assert.isFalse(w.get("focused"), "focused should be false"); // focused is READONLY
832cebe0cbc843785897f1c124ae54958028c4e7Mark Andrews Y.Assert.areEqual("100", w.get("height"), "height should be 100px");
832cebe0cbc843785897f1c124ae54958028c4e7Mark Andrews Y.Assert.areEqual("200", w.get("width"), "width should be 200px");
832cebe0cbc843785897f1c124ae54958028c4e7Mark Andrews Y.Assert.areEqual("foobar", w.get("id"), "id should be foobar");
832cebe0cbc843785897f1c124ae54958028c4e7Mark Andrews Y.Assert.isFalse(w.get("visible"), "visible should be false");
832cebe0cbc843785897f1c124ae54958028c4e7Mark Andrews Y.Assert.areEqual(5, w.get("tabIndex"), "tabIndex should be 5");
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews Y.Assert.areEqual("yui3-mysingleboxwidget", w._cssPrefix, "Unexpected Prefix");
eaccf5e805405de257b5a4840256c580fefe00e3Mark Andrews "testInstanceClassNameGeneration" : function() {
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Assert.areEqual("yui3-mysingleboxwidget-foo-bar", w.getClassName("foo", "bar"));
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews var n = Y.Node.create('<div id="srcNode" class="yui3-mysingleboxwidget-loading">Src Node Content</div>');
113aa279d1f5dbe77dfaa5a7f35623d49c85b77fMark Andrews Y.Assert.isTrue(n.hasClass("yui3-mysingleboxwidget-loading"), "yui3-mysingleboxwidget-loading should not have been removed");
91216cff91b34c9ff6e846dc23f248219cafe660Andreas Gustafsson // FIXME: Include after this is fixed: http://yuilibrary.com/projects/yui3/ticket/2530076, 2530311.
3341c8b653577f2f0cb8b72702ea6197035334ffMark Andrews // Y.Assert.areSame(n, w.get("contentBox"), "srcNode not used as content box");
91216cff91b34c9ff6e846dc23f248219cafe660Andreas Gustafsson Y.Assert.isFalse(w.get("boundingBox").hasClass("yui3-mysingleboxwidget-loading"), "yui3-mysingleboxwidget-loading should have removed");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington "testBoundingBoxContentBoxAreTheSame" : function() {
46e873c835bf7d9ec3e1097e0aceb8db5b1ae93aMark Andrews Y.Assert.isTrue( w.get("boundingBox").compareTo(w.get("contentBox")));
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews Y.Assert.isTrue(w.get("boundingBox").compareTo(w.get("contentBox")));
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews Y.Assert.isTrue(Y.one("#singleBox").compareTo(w.get("contentBox")));
8fca573ba41a1669fff64f234275e956551eb6e5Mark Andrews Y.Assert.isTrue(bb.hasClass("yui3-widget"), "bb missing generic yui3-widget marker");
8fca573ba41a1669fff64f234275e956551eb6e5Mark Andrews Y.Assert.isTrue(bb.hasClass("yui3-mysingleboxwidget"), "bb missing yui3-mysingleboxwidget marker");
8fca573ba41a1669fff64f234275e956551eb6e5Mark Andrews Y.Assert.isTrue(bb.hasClass("yui3-mysingleboxwidget-content"), "cb missing yui3-mysingleboxwidget-content marker");
8fca573ba41a1669fff64f234275e956551eb6e5Mark Andrews Y.Assert.isFalse(bb.hasClass("yui3-widget-content"), "cb shouldn't have yui3-widget-content marker");
821d2613356f81e5bb5c107288d6d5cf35c2a1e8Mark Andrews Y.Assert.isTrue(w.get("boundingBox").compareTo(bbFromDom), "boundingBox not found in DOM");
821d2613356f81e5bb5c107288d6d5cf35c2a1e8Mark Andrews Y.Assert.isTrue(bbFromDom.compareTo(Y.Node.one("body").get("firstChild")), "widget not inserted to body");
821d2613356f81e5bb5c107288d6d5cf35c2a1e8Mark Andrews Y.Assert.isTrue(w.get("rendered"), "Rendered flag not set");
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews Y.Assert.isTrue(bbFromDom.get("parentNode").compareTo(Y.Node.one("#widgetRenderContainer")), "widget not rendered to container passed to render()");
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews Y.Assert.isTrue(w.get("boundingBox").compareTo(bbFromDom), "boundingBox not found in DOM");
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews Y.Assert.isTrue(w.get("rendered"), "Rendered flag not set");
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews var container = Y.one("#widgetRenderContainer");
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews Y.Assert.isTrue(w.get("boundingBox").compareTo(bb), "bb passed to constructor, not used");
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews Y.Assert.isTrue(w.get("contentBox").compareTo(bb), "bb !== cb");
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews Y.Assert.isTrue(w.get("boundingBox").get("parentNode").compareTo(container), "boundingBox moved from it's place in the DOM");
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews // FIXME: Include after this is fixed: http://yuilibrary.com/projects/yui3/ticket/2530076, 2530311.
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews function() {
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews var container = Y.one("#widgetRenderContainer");
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews Y.Assert.isTrue(w.get("boundingBox").compareTo(cb), "cb passed to constructor, not used");
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews Y.Assert.isTrue(w.get("boundingBox").compareTo(w.get("contentBox")), "bb !== cb");
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews Y.Assert.isTrue(w.get("boundingBox").get("parentNode").compareTo(container), "contentBox moved from it's place in the DOM");
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews var container = Y.one("#widgetRenderContainer");
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews // NOTE: PE content sits in body, not container
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews Y.one("body").append("<div id='bbTest'></div>");
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews Y.Assert.isTrue(w.get("boundingBox").compareTo(bb), "bb passed to constructor, not used");
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews Y.Assert.isTrue(w.get("contentBox").compareTo(bb), "bb !== cb");
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews Y.Assert.isTrue(w.get("boundingBox").get("parentNode").compareTo(container), "boundingBox moved from it's place in the DOM");
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews // FIXME: Include after this is fixed: http://yuilibrary.com/projects/yui3/ticket/2530076, 2530311.
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews function() {
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews var container = Y.one("#widgetRenderContainer");
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews Y.one("body").append("<div id='cbTest'></div>");
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews Y.Assert.isTrue(w.get("contentBox").compareTo(cb), "cb passed to constructor, not used");
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews Y.Assert.isTrue(w.get("boundingBox").compareTo(cb), "bb !== cb");
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews Y.Assert.isTrue(w.get("boundingBox").get("parentNode").compareTo(container), "contentBox moved from it's place in the DOM");
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews // FIXME: Include after this is fixed: http://yuilibrary.com/projects/yui3/ticket/2530076, 2530311.
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews function() {
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews var container = Y.one("#widgetRenderContainer");
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews container.append("<div id='srcNode'><div id='foo'></div></div>");
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews Y.Assert.isTrue(w.get("contentBox").compareTo(sn), "srcNode should end up being cb");
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews Y.Assert.isTrue(w.get("srcNode").compareTo(sn), "srcNode should still be accessible from srcNode attribute");
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews Y.Assert.isTrue(w.get("boundingBox").compareTo(sn), "cb !== bb !== sn");
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews Y.Assert.isTrue(w.get("boundingBox").get("parentNode").compareTo(container), "srcNode moved from it's place in the DOM");
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews // Y.Assert.isNotNull(w.get("contentBox").one("#foo"), "contents of srcNode not maintained");
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews // CONSCIOUSLY NOT TESTED - CAN'T PASS 2 BOXES TO A SINGLE BOX WIDGET
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews "testBoundingBoxContentBox" : null,
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews "testBoundingBoxContentBoxRenderTo" : null
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews suite.add(new Y.Test.Case(coreTests));
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews suite.add(new Y.Test.Case(extendedCoreTests));
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews suite.add(new Y.Test.Case(singleBoxCoreTests));
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews var coreEventTests = {
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews name : "Widget Events",
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews createWidget : function(cfg) {
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews return (new Y.Widget(cfg));
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews "testLifecycleEvents" : function() {
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews var actual = [],
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews expected = ["onInit", "afterInit", "onRender", "afterRender", "onDestroy", "afterDestroy"];
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews init: function() {
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews init: function() {
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews w.on("render", function() {
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews w.after("render", function() {
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews actual.push("afterRender");
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews w.on("destroy", function() {
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews w.after("destroy", function() {
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews actual.push("afterDestroy");
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews Y.ArrayAssert.itemsAreEqual(expected, actual, "Unexpected Lifecycle Events");
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews "testLifecycleFireOnceEvents" : function() {
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews var actual = [],
4f087942583014b241adca1bc78c6db89ed96e94Mark Andrews expected = ["onInit", "afterInit", "onRender", "afterRender", "onDestroy", "afterDestroy"];
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington w.on("init", function() {
a7038d1a0513c8e804937ebc95fc9cb3a46c04f5Mark Andrews w.after("init", function() {
a7038d1a0513c8e804937ebc95fc9cb3a46c04f5Mark Andrews w.on("render", function() {
a7038d1a0513c8e804937ebc95fc9cb3a46c04f5Mark Andrews w.after("render", function() {
a7038d1a0513c8e804937ebc95fc9cb3a46c04f5Mark Andrews actual.push("afterRender");
a7038d1a0513c8e804937ebc95fc9cb3a46c04f5Mark Andrews // Can't really test destroy, after w.destroy();
959fb01017fa83578e7c8776ed3baba3076a2409Mark Andrews Y.ArrayAssert.itemsAreEqual(expected, actual, "Unexpected Lifecycle FireOnce Events");
959fb01017fa83578e7c8776ed3baba3076a2409Mark Andrews var attrs = [
959fb01017fa83578e7c8776ed3baba3076a2409Mark Andrews "initialized",
959fb01017fa83578e7c8776ed3baba3076a2409Mark Andrews "boundingBox",
959fb01017fa83578e7c8776ed3baba3076a2409Mark Andrews "contentBox",
754ebd37e782356aedbb2987e3c1a8ab4f29574eMark Andrews var expected = [
754ebd37e782356aedbb2987e3c1a8ab4f29574eMark Andrews "on:initializedChange",
341e6281575518b9e291c666c5020c29f395b63bMark Andrews "after:initializedChange",
5c679dbb66df92766f6a7e7bb93c18d61275d1feMark Andrews "on:renderedChange",
5c679dbb66df92766f6a7e7bb93c18d61275d1feMark Andrews "after:renderedChange",
5c679dbb66df92766f6a7e7bb93c18d61275d1feMark Andrews "on:visibleChange",
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews "after:visibleChange",
75216e007570b8ea36b3ac9cca096bf70c0ca6f6Mark Andrews "on:disabledChange",
75216e007570b8ea36b3ac9cca096bf70c0ca6f6Mark Andrews "after:disabledChange",
75216e007570b8ea36b3ac9cca096bf70c0ca6f6Mark Andrews "on:heightChange",
da93950363b307b718d156514b95b9df93a63776Mark Andrews "after:heightChange",
821d2613356f81e5bb5c107288d6d5cf35c2a1e8Mark Andrews "on:widthChange",
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews "after:widthChange",
821d2613356f81e5bb5c107288d6d5cf35c2a1e8Mark Andrews "on:stringsChange",
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews "after:stringsChange",
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews "on:tabIndexChange",
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews "after:tabIndexChange",
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington "on:focusedChange",
45eca3a5d46ed15aee14d81f6cb6c9fb6f365344Mark Andrews "after:focusedChange",
46e873c835bf7d9ec3e1097e0aceb8db5b1ae93aMark Andrews "on:destroyedChange",
c718d15a9a95054ee3c71540c02335426071fc6dMark Andrews "after:destroyedChange"
c718d15a9a95054ee3c71540c02335426071fc6dMark Andrews var actual = [];
c718d15a9a95054ee3c71540c02335426071fc6dMark Andrews listeners.on[attrs[i] + "Change"] = onListener;
c718d15a9a95054ee3c71540c02335426071fc6dMark Andrews listeners.after[attrs[i] + "Change"] = afterListener;
c718d15a9a95054ee3c71540c02335426071fc6dMark Andrews var w = this.createWidget(listeners);
c718d15a9a95054ee3c71540c02335426071fc6dMark Andrews // boundingBox, contentBox, srcNode, id, don't fire since they are writeOnce/readOnly
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews w.set("visible", false);
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews w.set("disabled", true);
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews w.set("height", "100px");
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews w.set("width", "100px");
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews w.set("strings", {newStrings: "foo"});
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews w.set("tabIndex", 7);
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews // focused is readOnly, need to go through the focus/blur API
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews Y.ArrayAssert.itemsAreEqual(expected, actual, "Unexpected attribute change events");
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews "testContentUpdateEvent" : function() {
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews expected = ["onContentUpdate", "afterContentUpdate"],
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews actual = [];
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews w.on("contentUpdate", function() {
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews actual.push("onContentUpdate");
45eca3a5d46ed15aee14d81f6cb6c9fb6f365344Mark Andrews w.after("contentUpdate", function() {
45eca3a5d46ed15aee14d81f6cb6c9fb6f365344Mark Andrews actual.push("afterContentUpdate");
45eca3a5d46ed15aee14d81f6cb6c9fb6f365344Mark Andrews w.fire("contentUpdate");
a7038d1a0513c8e804937ebc95fc9cb3a46c04f5Mark Andrews Y.ArrayAssert.itemsAreEqual(expected, actual, "Unexpected content update events");
c718d15a9a95054ee3c71540c02335426071fc6dMark Andrews var extendedEventTests = Y.Object(coreEventTests);
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews Y.mix(extendedEventTests, {
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews name: "MyWidget Event Tests",
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington createWidget : function(cfg) {
04428429c4e689333e3ef8d19a2debeb20d4d15dMark Andrews return (new MyWidget(cfg));
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington suite.add(new Y.Test.Case(coreEventTests));
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington suite.add(new Y.Test.Case(extendedEventTests));
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington // Lifecycle Monitoring Widget
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington function MyLifecycleWidget(cfg) {
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington this.__test = cfg.__test;
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington this.__test.push("preconstructor");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington MyLifecycleWidget.superclass.constructor.apply(this, arguments);
251227789bd26421471076f04f4e9eb7f0efb2f1Mark Andrews this.__test.push("postconstructor");
20403510ec038ae07b2b343bcc974428d8558555Mark Andrews renderUI: function() {
ed178efa9ab8f813538fce4ff603b81ded9f1799Mark Andrews Y.Assert.isTrue(this.get("boundingBox").inDoc());
ed178efa9ab8f813538fce4ff603b81ded9f1799Mark Andrews Y.Assert.isTrue(this.get("contentBox").inDoc());
6c68e68fc550c947100581eb7b5340b81c062c94Andreas Gustafsson Y.Assert.isTrue(this.get("contentBox").compareTo(this.get("boundingBox").get("firstChild")));
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington bindUI: function() {
03dad90858e09e5d06e77ed1bd37371a8a950dabBrian Wellington syncUI : function() {
70232e6b444994979d8bab60bc9a8656ffd861e9Mark Andrews initializer: function() {
ea206aebcafe1ed5d470dd99daab9a1cedc81c7cMark Andrews // To trigger lazyAdd of attribute
ea206aebcafe1ed5d470dd99daab9a1cedc81c7cMark Andrews var attr = this.get("lazyAttr");
ea206aebcafe1ed5d470dd99daab9a1cedc81c7cMark Andrews destructor: function() {
ea206aebcafe1ed5d470dd99daab9a1cedc81c7cMark Andrews "lazyAttr" : {
ea206aebcafe1ed5d470dd99daab9a1cedc81c7cMark Andrews value: "lazyAttrValue",
ea206aebcafe1ed5d470dd99daab9a1cedc81c7cMark Andrews setter: function(value) {
ea206aebcafe1ed5d470dd99daab9a1cedc81c7cMark Andrews return value;
7e1a8f402e3881388db37152f71c698cb1f1c426Mark Andrews "nonLazyAttr" : {
e4757e3dafe50ae59f693eec828f68c42c197a70Andreas Gustafsson value: "nonLazyAttrValue",
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews setter: function(value) {
dd9ad704c3800e3ab07ede8595871eac79984871Mark Andrews this.__test.push("nonLazySetter");
ea206aebcafe1ed5d470dd99daab9a1cedc81c7cMark Andrews return value;
ea206aebcafe1ed5d470dd99daab9a1cedc81c7cMark Andrews lazyAdd: false
ea206aebcafe1ed5d470dd99daab9a1cedc81c7cMark Andrews MyLifecycleWidget.NAME = "myLifecycleWidget";
ea206aebcafe1ed5d470dd99daab9a1cedc81c7cMark Andrews name : "Widget Lifecycle",
ea206aebcafe1ed5d470dd99daab9a1cedc81c7cMark Andrews "testNonRenderPhases" : function() {
ea206aebcafe1ed5d470dd99daab9a1cedc81c7cMark Andrews var expected = [
ea206aebcafe1ed5d470dd99daab9a1cedc81c7cMark Andrews "preconstructor",
ea206aebcafe1ed5d470dd99daab9a1cedc81c7cMark Andrews "nonLazySetter",
ea206aebcafe1ed5d470dd99daab9a1cedc81c7cMark Andrews "initializer",
71c66884067e249bec5ae819139265c35f6f128fMichael Graff "lazySetter",
ea206aebcafe1ed5d470dd99daab9a1cedc81c7cMark Andrews "afterInit",
ab81f57ca0c3addfec3df3babdcea9644757cf23Mark Andrews "postconstructor",
ea206aebcafe1ed5d470dd99daab9a1cedc81c7cMark Andrews "onDestroy",
ea206aebcafe1ed5d470dd99daab9a1cedc81c7cMark Andrews "destructor",
ea206aebcafe1ed5d470dd99daab9a1cedc81c7cMark Andrews "afterDestroy"
ea206aebcafe1ed5d470dd99daab9a1cedc81c7cMark Andrews w = new MyLifecycleWidget({
e49d15b398d34b76ceb51e50bcfea9501ade07b6Mark Andrews init: function() {
ea206aebcafe1ed5d470dd99daab9a1cedc81c7cMark Andrews destroy: function() {
ea206aebcafe1ed5d470dd99daab9a1cedc81c7cMark Andrews render: function() {
ea206aebcafe1ed5d470dd99daab9a1cedc81c7cMark Andrews init: function() {
ea206aebcafe1ed5d470dd99daab9a1cedc81c7cMark Andrews destroy: function() {
ea206aebcafe1ed5d470dd99daab9a1cedc81c7cMark Andrews this.__test.push("afterDestroy");
ea206aebcafe1ed5d470dd99daab9a1cedc81c7cMark Andrews render: function() {
ea206aebcafe1ed5d470dd99daab9a1cedc81c7cMark Andrews Y.ArrayAssert.itemsAreEqual(expected, w.__test, "Unexpected phase order");
ea206aebcafe1ed5d470dd99daab9a1cedc81c7cMark Andrews "testAllPhases" : function() {
dd9ad704c3800e3ab07ede8595871eac79984871Mark Andrews var expected = [
ea206aebcafe1ed5d470dd99daab9a1cedc81c7cMark Andrews "preconstructor",
ea206aebcafe1ed5d470dd99daab9a1cedc81c7cMark Andrews "nonLazySetter",
ea206aebcafe1ed5d470dd99daab9a1cedc81c7cMark Andrews "initializer",
ea206aebcafe1ed5d470dd99daab9a1cedc81c7cMark Andrews "lazySetter",
ea206aebcafe1ed5d470dd99daab9a1cedc81c7cMark Andrews "afterInit",
7f2adb8556a4b86134b7af2d00955c56130d78aeMark Andrews "postconstructor",
ea206aebcafe1ed5d470dd99daab9a1cedc81c7cMark Andrews "afterRender",
ea206aebcafe1ed5d470dd99daab9a1cedc81c7cMark Andrews "onDestroy",
ea206aebcafe1ed5d470dd99daab9a1cedc81c7cMark Andrews "destructor",
ea206aebcafe1ed5d470dd99daab9a1cedc81c7cMark Andrews "afterDestroy"
ea206aebcafe1ed5d470dd99daab9a1cedc81c7cMark Andrews w = new MyLifecycleWidget({
9d45619a1e2b6dbb97ebb19a7bfafb2adf611c6bMark Andrews init: function() {
abf32d940f8f674b3971ef41b306a01b3da8d2cfMark Andrews destroy: function() {
b7aab05edae933e169d5f83c653935b17c7f0a8bMark Andrews render: function() {
ea206aebcafe1ed5d470dd99daab9a1cedc81c7cMark Andrews init: function() {
ea206aebcafe1ed5d470dd99daab9a1cedc81c7cMark Andrews destroy: function() {
ea206aebcafe1ed5d470dd99daab9a1cedc81c7cMark Andrews this.__test.push("afterDestroy");
ea206aebcafe1ed5d470dd99daab9a1cedc81c7cMark Andrews render: function() {
dd9ad704c3800e3ab07ede8595871eac79984871Mark Andrews this.__test.push("afterRender");
ea206aebcafe1ed5d470dd99daab9a1cedc81c7cMark Andrews w.render(); // Only once
ea206aebcafe1ed5d470dd99daab9a1cedc81c7cMark Andrews Y.ArrayAssert.itemsAreEqual(expected, w.__test, "Unexpected phase order");
ea206aebcafe1ed5d470dd99daab9a1cedc81c7cMark Andrews // Custom Widget Tests
ea206aebcafe1ed5d470dd99daab9a1cedc81c7cMark Andrews function MyCustomWidget() {
ea206aebcafe1ed5d470dd99daab9a1cedc81c7cMark Andrews MyCustomWidget.superclass.constructor.apply(this, arguments);
94da7d97aecac6e3edb92aafa6b2bc8e80404e11Mark Andrews DEF_PARENT_NODE: "#customWidgetRenderContainer",
ea206aebcafe1ed5d470dd99daab9a1cedc81c7cMark Andrews BOUNDING_TEMPLATE: "<p>",
ea206aebcafe1ed5d470dd99daab9a1cedc81c7cMark Andrews CONTENT_TEMPLATE: "<ul>"
dd9ad704c3800e3ab07ede8595871eac79984871Mark Andrews value:"custAttrValue"
ea206aebcafe1ed5d470dd99daab9a1cedc81c7cMark Andrews // Modify attr
94da7d97aecac6e3edb92aafa6b2bc8e80404e11Mark Andrews // Modify attr
dd9ad704c3800e3ab07ede8595871eac79984871Mark Andrews valueFn: function() {
a722680638b8a9c00edcf82aa118949c2dba3f7bMark Andrews custStringOne:"one",
ea206aebcafe1ed5d470dd99daab9a1cedc81c7cMark Andrews custStringTwo:"two"
ea206aebcafe1ed5d470dd99daab9a1cedc81c7cMark Andrews value:"Default Label"
ca9a8f6d0b0f2a400a96f868193471510364336fMark Andrews listNodes : {
ca9a8f6d0b0f2a400a96f868193471510364336fMark Andrews valueFn: function() {
ea206aebcafe1ed5d470dd99daab9a1cedc81c7cMark Andrews HTML_PARSER : {
dd9ad704c3800e3ab07ede8595871eac79984871Mark Andrews label : function(srcNode) {
ea206aebcafe1ed5d470dd99daab9a1cedc81c7cMark Andrews // FIXME: Ideally we should be able to do a this.get("titleNode") here. However,
dd9ad704c3800e3ab07ede8595871eac79984871Mark Andrews // HTML_PARSER is called during widget initializer, when sub-class attrs aren't yet configured
a7038d1a0513c8e804937ebc95fc9cb3a46c04f5Mark Andrews // Moving all attribute set up to before all initializers, should allow us to do this.
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews var labelHolder = srcNode.one("> h1");
a7038d1a0513c8e804937ebc95fc9cb3a46c04f5Mark Andrews if (labelHolder) {
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews return labelHolder.get("text");
94da7d97aecac6e3edb92aafa6b2bc8e80404e11Mark Andrews listNodes: ["> ul > li"],
94da7d97aecac6e3edb92aafa6b2bc8e80404e11Mark Andrews titleNode: "> h1"
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews MyCustomWidget.NAME = "myCustomWidget";
94da7d97aecac6e3edb92aafa6b2bc8e80404e11Mark Andrews name : "Custom Widget",
39afe995c2bc1790061312b48ee294fd4907439fMark Andrews "testDefaultParentNode" : function() {
39afe995c2bc1790061312b48ee294fd4907439fMark Andrews var w = new MyCustomWidget({
39afe995c2bc1790061312b48ee294fd4907439fMark Andrews id: "customWidget"
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews var bbFromDom = Y.Node.one("#customWidget");
ca9a8f6d0b0f2a400a96f868193471510364336fMark Andrews Y.Assert.isTrue(bbFromDom.get("parentNode").compareTo(Y.Node.one("#customWidgetRenderContainer")), "Custom widget not rendered to container passed to render()");
94da7d97aecac6e3edb92aafa6b2bc8e80404e11Mark Andrews Y.Assert.isTrue(w.get("boundingBox").compareTo(bbFromDom), "boundingBox not found in DOM");
94da7d97aecac6e3edb92aafa6b2bc8e80404e11Mark Andrews Y.Assert.isTrue(bbFromDom.get("firstChild").compareTo(w.get("contentBox")), "contentBox not first child of boundingBox");
a7038d1a0513c8e804937ebc95fc9cb3a46c04f5Mark Andrews Y.Assert.isTrue(w.get("rendered"), "Rendered flag not set");
a7038d1a0513c8e804937ebc95fc9cb3a46c04f5Mark Andrews "testDefaultParentNodeUsingRenderAttr" : function() {
e4757e3dafe50ae59f693eec828f68c42c197a70Andreas Gustafsson var w = new MyCustomWidget({
ca9a8f6d0b0f2a400a96f868193471510364336fMark Andrews id: "customWidget",
94da7d97aecac6e3edb92aafa6b2bc8e80404e11Mark Andrews render: true
f345258dabf4e8ad8a1573c56810f52fca50f5d4Mark Andrews var bbFromDom = Y.Node.one("#customWidget");
f345258dabf4e8ad8a1573c56810f52fca50f5d4Mark Andrews Y.Assert.isTrue(bbFromDom.get("parentNode").compareTo(Y.Node.one("#customWidgetRenderContainer")), "Custom widget not rendered to container passed to render()");
f345258dabf4e8ad8a1573c56810f52fca50f5d4Mark Andrews Y.Assert.isTrue(w.get("boundingBox").compareTo(bbFromDom), "boundingBox not found in DOM");
f345258dabf4e8ad8a1573c56810f52fca50f5d4Mark Andrews Y.Assert.isTrue(bbFromDom.get("firstChild").compareTo(w.get("contentBox")), "contentBox not first child of boundingBox");
f345258dabf4e8ad8a1573c56810f52fca50f5d4Mark Andrews Y.Assert.isTrue(w.get("rendered"), "Rendered flag not set");
f345258dabf4e8ad8a1573c56810f52fca50f5d4Mark Andrews "testBoundingBoxTemplate" : function() {
a7038d1a0513c8e804937ebc95fc9cb3a46c04f5Mark Andrews var w = new MyCustomWidget({
94da7d97aecac6e3edb92aafa6b2bc8e80404e11Mark Andrews var bb = w.get("boundingBox");
a7038d1a0513c8e804937ebc95fc9cb3a46c04f5Mark Andrews Y.Assert.areEqual("p", bb.get("tagName").toLowerCase());
94da7d97aecac6e3edb92aafa6b2bc8e80404e11Mark Andrews "testContentBoxTemplate" : function() {
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews var w = new MyCustomWidget({
a7038d1a0513c8e804937ebc95fc9cb3a46c04f5Mark Andrews var bb = w.get("contentBox");
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews Y.Assert.areEqual("ul", bb.get("tagName").toLowerCase());
94da7d97aecac6e3edb92aafa6b2bc8e80404e11Mark Andrews "testModifyAttr-Visible" : function() {
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews var w = new MyCustomWidget();
ca9a8f6d0b0f2a400a96f868193471510364336fMark Andrews Y.Assert.isFalse(w.get("visible"), "Custom widget should be hidden by default");
a7038d1a0513c8e804937ebc95fc9cb3a46c04f5Mark Andrews var bb = w.get("boundingBox");
e4757e3dafe50ae59f693eec828f68c42c197a70Andreas Gustafsson Y.Assert.isTrue(bb.hasClass("yui3-mycustomwidget-hidden"), "custom bb should have a hidden marker class");
ca9a8f6d0b0f2a400a96f868193471510364336fMark Andrews Y.Assert.areEqual("hidden", bb.getStyle("visibility"), "custom widget should not be visibility:hidden");
e4757e3dafe50ae59f693eec828f68c42c197a70Andreas Gustafsson "testModifyAttr-Strings" : function() {
1676408640d8283c9f17eec0b183e1302ea7fd70Mark Andrews var w = new MyCustomWidget();
a7038d1a0513c8e804937ebc95fc9cb3a46c04f5Mark Andrews var expected = {
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews custStringOne:"one",
e4757e3dafe50ae59f693eec828f68c42c197a70Andreas Gustafsson custStringTwo:"two"
94da7d97aecac6e3edb92aafa6b2bc8e80404e11Mark Andrews var actual = w.get("strings");
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews Y.ObjectAssert.areEqual(expected, actual, "Unexpected strings");
e4757e3dafe50ae59f693eec828f68c42c197a70Andreas Gustafsson Y.ObjectAssert.areEqual(actual, expected, "Unexpected strings");
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews "testNewAttr" : function() {
e4757e3dafe50ae59f693eec828f68c42c197a70Andreas Gustafsson var w = new MyCustomWidget();
94da7d97aecac6e3edb92aafa6b2bc8e80404e11Mark Andrews Y.Assert.areEqual("custAttrValue", w.get("custAttr"), "New attribute not added");
94da7d97aecac6e3edb92aafa6b2bc8e80404e11Mark Andrews "testHTMLParser" : function() {
a7038d1a0513c8e804937ebc95fc9cb3a46c04f5Mark Andrews // HTML to Parse
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews var markup = Y.Node.create('<div id="customWidgetContent"><h1>My Label</h1><ul><li>Item1</li><li>Item2</li></ul></div>');
e4757e3dafe50ae59f693eec828f68c42c197a70Andreas Gustafsson Y.Node.one("body").append(markup);
94da7d97aecac6e3edb92aafa6b2bc8e80404e11Mark Andrews var w = new MyCustomWidget({
a7038d1a0513c8e804937ebc95fc9cb3a46c04f5Mark Andrews srcNode: "#customWidgetContent"
ca9a8f6d0b0f2a400a96f868193471510364336fMark Andrews Y.Assert.areEqual("My Label", w.get("label"), "label not picked up from markup");
94da7d97aecac6e3edb92aafa6b2bc8e80404e11Mark Andrews Y.Assert.areEqual("h1", w.get("titleNode").get("tagName").toLowerCase(), "titleNode not picked up from markup");
a7038d1a0513c8e804937ebc95fc9cb3a46c04f5Mark Andrews Y.Assert.areEqual(2, w.get("listNodes").size(), "listNodes count does not match markup");
e4757e3dafe50ae59f693eec828f68c42c197a70Andreas Gustafsson Y.Assert.areSame("li", w.get("listNodes").item(0).get("tagName").toLowerCase(), "listNode 0 not picked up from markup");
ca9a8f6d0b0f2a400a96f868193471510364336fMark Andrews Y.Assert.areSame("li", w.get("listNodes").item(1).get("tagName").toLowerCase(), "listNode 1 not picked up from markup");
a7038d1a0513c8e804937ebc95fc9cb3a46c04f5Mark Andrews Y.Assert.areSame("Item1", w.get("listNodes").item(0).get("text"), "listNode 0 not picked up from markup");
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews Y.Assert.areSame("Item2", w.get("listNodes").item(1).get("text"), "listNode 1 not picked up from markup");
94da7d97aecac6e3edb92aafa6b2bc8e80404e11Mark Andrews name : "getSkinName",
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews "getSkinName should return null if not rendered" : function () {
e4757e3dafe50ae59f693eec828f68c42c197a70Andreas Gustafsson "getSkinName should return name from BB if available": function () {
ca9a8f6d0b0f2a400a96f868193471510364336fMark Andrews var bb = Y.Node.create( '<div class="yui3-skin-foo"><div></div></div>' ),
94da7d97aecac6e3edb92aafa6b2bc8e80404e11Mark Andrews cb = bb.one( 'div' ),
94da7d97aecac6e3edb92aafa6b2bc8e80404e11Mark Andrews boundingBox: bb,
94da7d97aecac6e3edb92aafa6b2bc8e80404e11Mark Andrews contentBox: cb
e4757e3dafe50ae59f693eec828f68c42c197a70Andreas Gustafsson Y.Assert.areEqual( "foo", w.getSkinName() );
a7038d1a0513c8e804937ebc95fc9cb3a46c04f5Mark Andrews "getSkinName should return name from body or null": function () {
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews var w = new Y.Widget().render(),
e4757e3dafe50ae59f693eec828f68c42c197a70Andreas Gustafsson body = Y.one( 'body' );
94da7d97aecac6e3edb92aafa6b2bc8e80404e11Mark Andrews body.removeClass( "yui3-skin-sam" );
ca9a8f6d0b0f2a400a96f868193471510364336fMark Andrews body.addClass( "yui3-skin-sam" );
94da7d97aecac6e3edb92aafa6b2bc8e80404e11Mark Andrews "getSkinName should return name from ancestor if both ancestor and body are classed": function () {
a7038d1a0513c8e804937ebc95fc9cb3a46c04f5Mark Andrews var w = new Y.Widget().render( '#testbed' ),
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews body = Y.one( 'body' );
ca9a8f6d0b0f2a400a96f868193471510364336fMark Andrews body.addClass( "yui3-skin-sam" );
e4757e3dafe50ae59f693eec828f68c42c197a70Andreas Gustafsson name:"destroy",
94da7d97aecac6e3edb92aafa6b2bc8e80404e11Mark Andrews testRenderedDestroy: function() {
94da7d97aecac6e3edb92aafa6b2bc8e80404e11Mark Andrews var w = new Y.Widget({id:"foo"}).render();
e4757e3dafe50ae59f693eec828f68c42c197a70Andreas Gustafsson Y.Assert.isNull(Y.Node.one("#foo"), "Bounding box still in DOM");
ca9a8f6d0b0f2a400a96f868193471510364336fMark Andrews } catch(e) {
94da7d97aecac6e3edb92aafa6b2bc8e80404e11Mark Andrews Y.Assert.fail("w.destroy() on a rendered widget threw an exception" + e);
e4757e3dafe50ae59f693eec828f68c42c197a70Andreas Gustafsson testRenderedDeepDestroy: function() {
ca9a8f6d0b0f2a400a96f868193471510364336fMark Andrews var w = new Y.Widget({id:"foo"}).render();
a7038d1a0513c8e804937ebc95fc9cb3a46c04f5Mark Andrews var nref = Y.Node.create('<div id="deep">Foo</div>');
a7038d1a0513c8e804937ebc95fc9cb3a46c04f5Mark Andrews w.get("contentBox").appendChild(nref);
ea6566e3c4ffbf116219cc15f23d9d0eeac559a1Mark Andrews Y.Assert.isNull(Y.Node.one("#foo"), "Bounding box still in DOM");
ea206aebcafe1ed5d470dd99daab9a1cedc81c7cMark Andrews Y.Assert.isNull(Y.Node.one("#deep"), "Deep content box still in DOM");
dd9ad704c3800e3ab07ede8595871eac79984871Mark Andrews Y.Assert.isNull(Y.Node.getDOMNode(nref), "Deep content still in Node cache");
ea206aebcafe1ed5d470dd99daab9a1cedc81c7cMark Andrews } catch(e) {
ea206aebcafe1ed5d470dd99daab9a1cedc81c7cMark Andrews Y.Assert.fail("w.destroy(true) on a rendered widget threw an exception" + e);
ea206aebcafe1ed5d470dd99daab9a1cedc81c7cMark Andrews testUnrenderedDestroy: function() {
ea206aebcafe1ed5d470dd99daab9a1cedc81c7cMark Andrews var w = new Y.Widget();
ea206aebcafe1ed5d470dd99daab9a1cedc81c7cMark Andrews } catch(e) {
9cd148558bfff691175a58245e10aede0f550442Mark Andrews Y.Assert.fail("w.destroy() on an unrendered widget threw an exception" + e);
75216e007570b8ea36b3ac9cca096bf70c0ca6f6Mark Andrews testSingleBoxDestroy: function() {
c718d15a9a95054ee3c71540c02335426071fc6dMark Andrews var w = new MySingleBoxWidget({
45eca3a5d46ed15aee14d81f6cb6c9fb6f365344Mark Andrews Y.Assert.isNull(Y.Node.one("#foo"), "Bounding box still in DOM");
45eca3a5d46ed15aee14d81f6cb6c9fb6f365344Mark Andrews } catch(e) {
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews Y.Assert.fail("w.destroy() on a single box widget threw an exception" + e);
10640b2e3efc7bc8034108136d7487f7407fbf37Andreas Gustafsson testSingleBoxDeepDestroy: function() {
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews var w = new MySingleBoxWidget({
812920de0d0a02ad61be3bb09c2e93274708fde5Mark Andrews var nref = Y.Node.create('<div id="deep_single">Foo</div>');
70232e6b444994979d8bab60bc9a8656ffd861e9Mark Andrews w.get("contentBox").appendChild(nref);
6b5c57e52ac8c3e0af1547be3140ebbfb41a85b3Mark Andrews Y.Assert.isNull(Y.Node.one("#foo"), "Bounding box still in DOM");
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews Y.Assert.isNull(Y.Node.one("#deep_single"), "Deep content box still in DOM");
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews Y.Assert.isNull(Y.Node.getDOMNode(nref), "Deep content still in Node cache");
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews } catch(e) {
6274add733f4a16dfef4455dafb71a6a4721a0dfMark Andrews Y.Assert.fail("w.destroy(true) on a single box widget threw an exception" + e);
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews name:"UI Events",
605bd686e437162b5ab65ac4e7c1be0bba1886ddMark Andrews testSingleSimple: function() {
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews var w, h, cb,
eaccf5e805405de257b5a4840256c580fefe00e3Mark Andrews actualEvents = [],
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews expectedEvents = ["widget:click"];
0d3490f93bb980fde704055e74c1b508987a5fe4Mark Andrews cb = w.get("contentBox");
605bd686e437162b5ab65ac4e7c1be0bba1886ddMark Andrews cb.append("<p class='et'>Some Content For My Widget</p>");
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews h = function(e) { actualEvents.push(e.type); };
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews w.on("click", h);
45eca3a5d46ed15aee14d81f6cb6c9fb6f365344Mark Andrews cb.one(".et").simulate("click");
45eca3a5d46ed15aee14d81f6cb6c9fb6f365344Mark Andrews Y.ArrayAssert.itemsAreEqual(expectedEvents, actualEvents);
45eca3a5d46ed15aee14d81f6cb6c9fb6f365344Mark Andrews testSingleComplex: function() {
45eca3a5d46ed15aee14d81f6cb6c9fb6f365344Mark Andrews var w, h, cb
45eca3a5d46ed15aee14d81f6cb6c9fb6f365344Mark Andrews actualEvents = [],
45eca3a5d46ed15aee14d81f6cb6c9fb6f365344Mark Andrews expectedEvents = ["widget:render",
45eca3a5d46ed15aee14d81f6cb6c9fb6f365344Mark Andrews "widget:renderedChange",
45eca3a5d46ed15aee14d81f6cb6c9fb6f365344Mark Andrews "widget:render",
8112eda1404b589fae1605f4c6a905c588904b75Mark Andrews "widget:mousedown",
45eca3a5d46ed15aee14d81f6cb6c9fb6f365344Mark Andrews "widget:mouseup",
45eca3a5d46ed15aee14d81f6cb6c9fb6f365344Mark Andrews "widget:mouseup",
45eca3a5d46ed15aee14d81f6cb6c9fb6f365344Mark Andrews "widget:mouseup",
45eca3a5d46ed15aee14d81f6cb6c9fb6f365344Mark Andrews "widget:mouseup",
45eca3a5d46ed15aee14d81f6cb6c9fb6f365344Mark Andrews "widget:mouseup",
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews "widget:mouseup",
45eca3a5d46ed15aee14d81f6cb6c9fb6f365344Mark Andrews "widget:click"];
45eca3a5d46ed15aee14d81f6cb6c9fb6f365344Mark Andrews cb = w.get("contentBox");
45eca3a5d46ed15aee14d81f6cb6c9fb6f365344Mark Andrews cb.append("<p class='et'>Some Content For My Widget</p>");
6b5c57e52ac8c3e0af1547be3140ebbfb41a85b3Mark Andrews h = function(e) { actualEvents.push(e.type); };
45eca3a5d46ed15aee14d81f6cb6c9fb6f365344Mark Andrews "render": h,
1eb1e1e838d2ea00b166c918bf50764a95826be8Mark Andrews "renderedChange": h
45eca3a5d46ed15aee14d81f6cb6c9fb6f365344Mark Andrews w.on("widget:mouseup", h);
45eca3a5d46ed15aee14d81f6cb6c9fb6f365344Mark Andrews w.on("foo|widget:mouseup", h);
45eca3a5d46ed15aee14d81f6cb6c9fb6f365344Mark Andrews w.on("mouseup", h);
6b5c57e52ac8c3e0af1547be3140ebbfb41a85b3Mark Andrews w.after("widget:mouseup", h);
45eca3a5d46ed15aee14d81f6cb6c9fb6f365344Mark Andrews w.after("foo|widget:mouseup", h);
45eca3a5d46ed15aee14d81f6cb6c9fb6f365344Mark Andrews w.after("mouseup", h);
1eb1e1e838d2ea00b166c918bf50764a95826be8Mark Andrews "mousedown" : h,
45eca3a5d46ed15aee14d81f6cb6c9fb6f365344Mark Andrews "render" : h
45eca3a5d46ed15aee14d81f6cb6c9fb6f365344Mark Andrews cb.one(".et").simulate("mousedown");
45eca3a5d46ed15aee14d81f6cb6c9fb6f365344Mark Andrews cb.one(".et").simulate("mouseup");
ffa5575495e2cc1681ac8cfd42842b42af6997a6Mark Andrews cb.one(".et").simulate("click");
45eca3a5d46ed15aee14d81f6cb6c9fb6f365344Mark Andrews Y.ArrayAssert.itemsAreEqual(expectedEvents, actualEvents);
45eca3a5d46ed15aee14d81f6cb6c9fb6f365344Mark Andrews testNested: function() {
45eca3a5d46ed15aee14d81f6cb6c9fb6f365344Mark Andrews var outer = new Y.Widget();
45eca3a5d46ed15aee14d81f6cb6c9fb6f365344Mark Andrews var inner = new Y.Widget();
46e873c835bf7d9ec3e1097e0aceb8db5b1ae93aMark Andrews var ocb = outer.get('contentBox');
d3a3e690ab1f87fa02b3fa77be5ddea5c1fe0cd4Mark Andrews var icb = inner.get('contentBox');
45eca3a5d46ed15aee14d81f6cb6c9fb6f365344Mark Andrews var expectedEvents = ["outerClick", "innerClick", "outerClick"];
45eca3a5d46ed15aee14d81f6cb6c9fb6f365344Mark Andrews var actualEvents = [];
605bd686e437162b5ab65ac4e7c1be0bba1886ddMark Andrews ocb.setContent("<span class='oet'>Outer Content</span>");
45eca3a5d46ed15aee14d81f6cb6c9fb6f365344Mark Andrews icb.setContent("<span class='iet'>Inner Content</span>");
605bd686e437162b5ab65ac4e7c1be0bba1886ddMark Andrews inner.after('click', function() {actualEvents.push("innerClick");});
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews outer.after('click', function() {actualEvents.push("outerClick");});
45eca3a5d46ed15aee14d81f6cb6c9fb6f365344Mark Andrews // Only outer
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews ocb.one(".oet").simulate("click");
7e1a8f402e3881388db37152f71c698cb1f1c426Mark Andrews // One Inner, One Outer
1eb1e1e838d2ea00b166c918bf50764a95826be8Mark Andrews ocb.one(".iet").simulate("click");
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews Y.ArrayAssert.itemsAreEqual(expectedEvents, actualEvents);
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews testMultipleInstances : function() {
67a0e14fa9c3c160116f0671f4ac5874306b1150Mark Andrews var actualEvents = [],
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews expectedEvents = ["clickOuter", "clickInner", "clickOuter"],
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews YUI().use('widget', function (Y) {
282e38d96feb488fddbbc0b0409491094786977fMark Andrews w1 = new Y.Widget({render:true});
5985ae96cdb38a19ed361ebbfd867d7fd9d1bed4Mark Andrews w1.get('contentBox').append('<div class="w2-container"></div><span class="miouter">Outer</span>');
ef67e6d8fa86d98a2c0defc43b624434324d9ce7Mark Andrews w1.on('click', function (e) {
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews YUI().use('widget', function (Y1) {
75216e007570b8ea36b3ac9cca096bf70c0ca6f6Mark Andrews w2 = new Y1.Widget({render:".w2-container"});
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews w2.get('contentBox').append('<span class="miinner">Inner</span>');
78b7d41deb6a6db28696e83260dbd1ccfe6b96faMark Andrews w2.on('click', function (e) {
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews Y.Node.one(".miouter").simulate("click"); // only outer, once.
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews Y.Node.one(".miinner").simulate("click"); // inner, bubbled to outer (once each, without JS errors)
75216e007570b8ea36b3ac9cca096bf70c0ca6f6Mark Andrews Y.ArrayAssert.itemsAreEqual(expectedEvents, actualEvents);
75216e007570b8ea36b3ac9cca096bf70c0ca6f6Mark Andrews name:"clone",
75216e007570b8ea36b3ac9cca096bf70c0ca6f6Mark Andrews testWidgetClone : function() {
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews var a = new Y.Widget();
75216e007570b8ea36b3ac9cca096bf70c0ca6f6Mark Andrews var b = new Y.Widget();
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews var c = new Y.Widget();
75216e007570b8ea36b3ac9cca096bf70c0ca6f6Mark Andrews var a2 = Y.clone(a1);
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews var a3 = Y.clone(a2);
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews var b2 = Y.clone(b1);
75216e007570b8ea36b3ac9cca096bf70c0ca6f6Mark Andrews var b3 = Y.clone(b2);
75216e007570b8ea36b3ac9cca096bf70c0ca6f6Mark Andrews var c2 = Y.clone(c1);
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews var c3 = Y.clone(c2);
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews testWidgetHashClone : function() {
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews // When Widget's are properties of an object it seems to break apart
50a1a0e0d22d4537ae0d130da34199bb1a1820f7Mark Andrews // something not passed to the recursive call maybe?
c718d15a9a95054ee3c71540c02335426071fc6dMark Andrews var a = new Y.Widget();
c718d15a9a95054ee3c71540c02335426071fc6dMark Andrews var b = new Y.Widget();
75216e007570b8ea36b3ac9cca096bf70c0ca6f6Mark Andrews var c = new Y.Widget();
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews var o2 = Y.clone(o1);
75216e007570b8ea36b3ac9cca096bf70c0ca6f6Mark Andrews var o3 = Y.clone(o2);
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews testBaseClone : function() {
b7aab05edae933e169d5f83c653935b17c7f0a8bMark Andrews var a = new Y.Base();
b7aab05edae933e169d5f83c653935b17c7f0a8bMark Andrews var b = new Y.Base();
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews var c = new Y.Base();
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews // Base works fine
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews var a2 = Y.clone(a1);
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews var a3 = Y.clone(a2);
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews var b2 = Y.clone(b1);
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews var b3 = Y.clone(b2);
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews var c2 = Y.clone(c1);
1da87201292c454b0e5e3d3f38d9bb086196b87fMark Andrews var c3 = Y.clone(c2);
0d3490f93bb980fde704055e74c1b508987a5fe4Mark Andrews testBaseHashClone : function() {
ffa5575495e2cc1681ac8cfd42842b42af6997a6Mark Andrews var a = new Y.Base();
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews var b = new Y.Base();
57afda49b8639864dbb9875e1c23cb4c27dee8a4Mark Andrews var c = new Y.Base();
068a66979695c77359e7a9181bb3f831c965b21cMark Andrews var o2 = Y.clone(o1);
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington Y.Test.Runner.once("begin", function() {
605bd686e437162b5ab65ac4e7c1be0bba1886ddMark Andrews Y.one("#automationmsg").removeClass("msg-hidden");
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews Y.Test.Runner.once("complete", function() {
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews Y.one("#automationmsg").addClass("msg-hidden");
0d3490f93bb980fde704055e74c1b508987a5fe4Mark Andrews var console, runButton = Y.one("#btnRun");
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews runButton.set("value", "Run Tests");
0d3490f93bb980fde704055e74c1b508987a5fe4Mark Andrews runButton.set("disabled", false).on("click", function() {
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews if (!console) {
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews console = new Y.Console({
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews id:"console",
7e5b2100ea65658a7ec3795919b4ecd29a6f118aMark Andrews width:"100%",
753259033ce336bf43a589a44560a0af84d75ce1Mark Andrews height:"90%",
a9789e288ee11ae4315e27235c33bae5405bd7c4Mark Andrews verbose : false,
605bd686e437162b5ab65ac4e7c1be0bba1886ddMark Andrews printTimeout: 0,
c6d4f781529d2f28693546b25b2967d44ec89e60Mark Andrews newestOnTop : false,
45eca3a5d46ed15aee14d81f6cb6c9fb6f365344Mark Andrews entryTemplate: '<div class="{entry_class} {cat_class} {src_class}">'+
920c892667f7a1a284cc0f62e52a0cd3a7a78e14Mark Andrews '<span class="{entry_cat_class}"> </span>'+
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington '<span class="{entry_content_class}">{message}</span>'+