widget.html revision 12bdc27e9ac1ba89d9657200cfb22aadad54e7fb
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai #console .yui3-console-entry {
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai padding:2px;
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai min-height:0;
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai #console .yui3-console-entry-fail .yui3-console-entry-cat {
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai background-color:red;
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai #console .yui3-console-entry-pass .yui3-console-entry-cat {
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai background-color:green;
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai #console .yui3-console-entry-perf .yui3-console-entry-cat {
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai background-color:blue;
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai position:static;
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai html, body {
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai height:100%;
12bdc27e9ac1ba89d9657200cfb22aadad54e7fbSatyen DesaiYUI({useBrowserConsole:false}).use('test', 'widget', 'node-event-simulate', 'console', function (Y) {
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai var suite = new Y.Test.Suite("Widget Tests");
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai name : "getSkinName",
98c1ab155c0e2148f69291b1abe1007c9d5a08e8Satyen Desai "getSkinName should return null if not rendered" : function () {
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai var w = new Y.Widget();
98c1ab155c0e2148f69291b1abe1007c9d5a08e8Satyen Desai "getSkinName should return name from BB if available": function () {
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai var bb = Y.Node.create( '<div class="yui3-skin-foo"><div></div></div>' ),
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai cb = bb.one( 'div' ),
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai boundingBox: bb,
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai contentBox: cb
98c1ab155c0e2148f69291b1abe1007c9d5a08e8Satyen Desai "getSkinName should return name from body or null": function () {
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai var w = new Y.Widget().render(),
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai body = Y.one( 'body' );
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai body.removeClass( "yui3-skin-sam" );
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai body.addClass( "yui3-skin-sam" );
98c1ab155c0e2148f69291b1abe1007c9d5a08e8Satyen Desai "getSkinName should return name from ancestor if both ancestor and body are classed": function () {
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai var w = new Y.Widget().render( '#testbed' ),
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai body = Y.one( 'body' );
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai body.addClass( "yui3-skin-sam" );
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai name:"destroy",
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai testRenderedDestroy: function() {
81ed0aaa8456bd5c6a54e7797258b1f182eb1f5bSatyen Desai var w = new Y.Widget({id:"foo"}).render();
81ed0aaa8456bd5c6a54e7797258b1f182eb1f5bSatyen Desai Y.Assert.isNull(Y.Node.one("#foo"), "Bounding box still in DOM");
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai } catch(e) {
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai Y.Assert.fail("w.destroy() on a rendered widget threw an exception" + e);
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai testUnrenderedDestroy: function() {
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai var w = new Y.Widget();
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai } catch(e) {
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai Y.Assert.fail("w.destroy() on an unrendered widget threw an exception" + e);
81ed0aaa8456bd5c6a54e7797258b1f182eb1f5bSatyen Desai testSingleBoxDestroy: function() {
81ed0aaa8456bd5c6a54e7797258b1f182eb1f5bSatyen Desai function MyWidget() {
81ed0aaa8456bd5c6a54e7797258b1f182eb1f5bSatyen Desai MyWidget.superclass.constructor.apply(this, arguments);
81ed0aaa8456bd5c6a54e7797258b1f182eb1f5bSatyen Desai CONTENT_TEMPLATE:null
81ed0aaa8456bd5c6a54e7797258b1f182eb1f5bSatyen Desai var w = new MyWidget({
81ed0aaa8456bd5c6a54e7797258b1f182eb1f5bSatyen Desai Y.Assert.isNull(Y.Node.one("#foo"), "Bounding box still in DOM");
81ed0aaa8456bd5c6a54e7797258b1f182eb1f5bSatyen Desai } catch(e) {
81ed0aaa8456bd5c6a54e7797258b1f182eb1f5bSatyen Desai Y.Assert.fail("w.destroy() on a single box widget threw an exception" + e);
12bdc27e9ac1ba89d9657200cfb22aadad54e7fbSatyen Desai name:"uiEvents",
12bdc27e9ac1ba89d9657200cfb22aadad54e7fbSatyen Desai testSingleSimple: function() {
12bdc27e9ac1ba89d9657200cfb22aadad54e7fbSatyen Desai var w, h, cb,
12bdc27e9ac1ba89d9657200cfb22aadad54e7fbSatyen Desai actualEvents = [],
12bdc27e9ac1ba89d9657200cfb22aadad54e7fbSatyen Desai expectedEvents = ["widget:click"];
12bdc27e9ac1ba89d9657200cfb22aadad54e7fbSatyen Desai cb = w.get("contentBox");
12bdc27e9ac1ba89d9657200cfb22aadad54e7fbSatyen Desai cb.append("<p class='et'>Some Content For My Widget</p>");
12bdc27e9ac1ba89d9657200cfb22aadad54e7fbSatyen Desai h = function(e) { actualEvents.push(e.type); };
12bdc27e9ac1ba89d9657200cfb22aadad54e7fbSatyen Desai w.on("click", h);
12bdc27e9ac1ba89d9657200cfb22aadad54e7fbSatyen Desai cb.one(".et").simulate("click");
12bdc27e9ac1ba89d9657200cfb22aadad54e7fbSatyen Desai Y.ArrayAssert.itemsAreEqual(expectedEvents, actualEvents);
12bdc27e9ac1ba89d9657200cfb22aadad54e7fbSatyen Desai testSingleComplex: function() {
12bdc27e9ac1ba89d9657200cfb22aadad54e7fbSatyen Desai var w, h, cb
12bdc27e9ac1ba89d9657200cfb22aadad54e7fbSatyen Desai actualEvents = [],
12bdc27e9ac1ba89d9657200cfb22aadad54e7fbSatyen Desai expectedEvents = ["widget:render",
12bdc27e9ac1ba89d9657200cfb22aadad54e7fbSatyen Desai "widget:renderedChange",
12bdc27e9ac1ba89d9657200cfb22aadad54e7fbSatyen Desai "widget:render",
12bdc27e9ac1ba89d9657200cfb22aadad54e7fbSatyen Desai "widget:mousedown",
12bdc27e9ac1ba89d9657200cfb22aadad54e7fbSatyen Desai "widget:mouseup",
12bdc27e9ac1ba89d9657200cfb22aadad54e7fbSatyen Desai "widget:mouseup",
12bdc27e9ac1ba89d9657200cfb22aadad54e7fbSatyen Desai "widget:mouseup",
12bdc27e9ac1ba89d9657200cfb22aadad54e7fbSatyen Desai "widget:mouseup",
12bdc27e9ac1ba89d9657200cfb22aadad54e7fbSatyen Desai "widget:mouseup",
12bdc27e9ac1ba89d9657200cfb22aadad54e7fbSatyen Desai "widget:mouseup",
12bdc27e9ac1ba89d9657200cfb22aadad54e7fbSatyen Desai "widget:click"];
12bdc27e9ac1ba89d9657200cfb22aadad54e7fbSatyen Desai cb = w.get("contentBox");
12bdc27e9ac1ba89d9657200cfb22aadad54e7fbSatyen Desai cb.append("<p class='et'>Some Content For My Widget</p>");
12bdc27e9ac1ba89d9657200cfb22aadad54e7fbSatyen Desai h = function(e) { actualEvents.push(e.type); };
12bdc27e9ac1ba89d9657200cfb22aadad54e7fbSatyen Desai "render": h,
12bdc27e9ac1ba89d9657200cfb22aadad54e7fbSatyen Desai "renderedChange": h
12bdc27e9ac1ba89d9657200cfb22aadad54e7fbSatyen Desai w.on("widget:mouseup", h);
12bdc27e9ac1ba89d9657200cfb22aadad54e7fbSatyen Desai w.on("foo|widget:mouseup", h);
12bdc27e9ac1ba89d9657200cfb22aadad54e7fbSatyen Desai w.on("mouseup", h);
12bdc27e9ac1ba89d9657200cfb22aadad54e7fbSatyen Desai w.after("widget:mouseup", h);
12bdc27e9ac1ba89d9657200cfb22aadad54e7fbSatyen Desai w.after("foo|widget:mouseup", h);
12bdc27e9ac1ba89d9657200cfb22aadad54e7fbSatyen Desai w.after("mouseup", h);
12bdc27e9ac1ba89d9657200cfb22aadad54e7fbSatyen Desai "mousedown" : h,
12bdc27e9ac1ba89d9657200cfb22aadad54e7fbSatyen Desai "render" : h
12bdc27e9ac1ba89d9657200cfb22aadad54e7fbSatyen Desai cb.one(".et").simulate("mousedown");
12bdc27e9ac1ba89d9657200cfb22aadad54e7fbSatyen Desai cb.one(".et").simulate("mouseup");
12bdc27e9ac1ba89d9657200cfb22aadad54e7fbSatyen Desai cb.one(".et").simulate("click");
12bdc27e9ac1ba89d9657200cfb22aadad54e7fbSatyen Desai Y.ArrayAssert.itemsAreEqual(expectedEvents, actualEvents);
12bdc27e9ac1ba89d9657200cfb22aadad54e7fbSatyen Desai testNested: function() {
12bdc27e9ac1ba89d9657200cfb22aadad54e7fbSatyen Desai var outer = new Y.Widget();
12bdc27e9ac1ba89d9657200cfb22aadad54e7fbSatyen Desai var inner = new Y.Widget();
12bdc27e9ac1ba89d9657200cfb22aadad54e7fbSatyen Desai var ocb = outer.get('contentBox');
12bdc27e9ac1ba89d9657200cfb22aadad54e7fbSatyen Desai var icb = inner.get('contentBox');
12bdc27e9ac1ba89d9657200cfb22aadad54e7fbSatyen Desai var expectedEvents = ["outerClick", "innerClick", "outerClick"];
12bdc27e9ac1ba89d9657200cfb22aadad54e7fbSatyen Desai var actualEvents = [];
12bdc27e9ac1ba89d9657200cfb22aadad54e7fbSatyen Desai ocb.setContent("<span class='oet'>Outer Content</span>");
12bdc27e9ac1ba89d9657200cfb22aadad54e7fbSatyen Desai icb.setContent("<span class='iet'>Inner Content</span>");
12bdc27e9ac1ba89d9657200cfb22aadad54e7fbSatyen Desai inner.after('click', function() {actualEvents.push("innerClick");});
12bdc27e9ac1ba89d9657200cfb22aadad54e7fbSatyen Desai outer.after('click', function() {actualEvents.push("outerClick");});
12bdc27e9ac1ba89d9657200cfb22aadad54e7fbSatyen Desai // Only outer
12bdc27e9ac1ba89d9657200cfb22aadad54e7fbSatyen Desai ocb.one(".oet").simulate("click");
12bdc27e9ac1ba89d9657200cfb22aadad54e7fbSatyen Desai // One Inner, One Outer
12bdc27e9ac1ba89d9657200cfb22aadad54e7fbSatyen Desai ocb.one(".iet").simulate("click");
12bdc27e9ac1ba89d9657200cfb22aadad54e7fbSatyen Desai Y.ArrayAssert.itemsAreEqual(expectedEvents, actualEvents);
12bdc27e9ac1ba89d9657200cfb22aadad54e7fbSatyen Desai name:"clone",
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai testWidgetClone : function() {
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai var a = new Y.Widget();
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai var b = new Y.Widget();
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai var c = new Y.Widget();
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai var a2 = Y.clone(a1);
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai var a3 = Y.clone(a2);
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai var b2 = Y.clone(b1);
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai var b3 = Y.clone(b2);
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai var c2 = Y.clone(c1);
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai var c3 = Y.clone(c2);
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai testWidgetHashClone : function() {
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai // When Widget's are properties of an object it seems to break apart
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai // something not passed to the recursive call maybe?
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai var a = new Y.Widget();
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai var b = new Y.Widget();
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai var c = new Y.Widget();
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai var o2 = Y.clone(o1);
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai var o3 = Y.clone(o2);
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai testBaseClone : function() {
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai var a = new Y.Base();
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai var b = new Y.Base();
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai var c = new Y.Base();
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai // Base works fine
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai var a2 = Y.clone(a1);
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai var a3 = Y.clone(a2);
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai var b2 = Y.clone(b1);
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai var b3 = Y.clone(b2);
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai var c2 = Y.clone(c1);
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai var c3 = Y.clone(c2);
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai testBaseHashClone : function() {
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai var a = new Y.Base();
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai var b = new Y.Base();
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai var c = new Y.Base();
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai var o2 = Y.clone(o1);
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai var o3 = Y.clone(o2);
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai var console;
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai Y.one("#btnRun").set("disabled", false).on("click", function() {
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai if (!console) {
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai console = new Y.Console({
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai id:"console",
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai width:"100%",
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai height:"90%",
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai verbose : false,
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai printTimeout: 0,
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai newestOnTop : false,
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai entryTemplate: '<pre class="{entry_class} {cat_class} {src_class}">'+
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai '<span class="{entry_cat_class}">{label}</span>'+
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai '<span class="{entry_content_class}">{message}</span>'+
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai }).render();
d3c5729464159cab52ada7ff4b6c26b91bd4dcb4Satyen Desai<p><input type="button" value="Run Tests" id="btnRun" disabled=true></p>