|
| 1 | + // jQUnit defines: |
| 2 | + // asyncTest,deepEqual,equal,expect,module,notDeepEqual,notEqual,notStrictEqual,ok,QUnit,raises,start,stop,strictEqual,test |
| 3 | + |
| 4 | + /*globals asyncTest,equal,expect,module,ok,QUnit,start,test */ |
| 5 | + |
| 6 | +/** |
| 7 | + * Tools inspired by https://github.com/jquery/jquery-ui/blob/master/tests/unit/menu/ |
| 8 | + */ |
| 9 | +function TestHelpers() { |
| 10 | + |
| 11 | + var lastItem = "", |
| 12 | + log = [], |
| 13 | + $ = jQuery; |
| 14 | + |
| 15 | + return { |
| 16 | + log: function( message, clear ) { |
| 17 | + if ( clear ) { |
| 18 | + log.length = 0; |
| 19 | + } |
| 20 | + if ( message === undefined ) { |
| 21 | + message = lastItem; |
| 22 | + } |
| 23 | +// window.console.log(message); |
| 24 | + log.push( $.trim( message ) ); |
| 25 | + }, |
| 26 | + logOutput: function() { |
| 27 | + return log.join( "," ); |
| 28 | + }, |
| 29 | + clearLog: function() { |
| 30 | + log.length = 0; |
| 31 | + }, |
| 32 | + click: function( menu, item ) { |
| 33 | + lastItem = item; |
| 34 | + window.console.log("clck: ", menu.children( ":eq(" + item + ")" ).find( "a:first" ).length); |
| 35 | + menu.children( ":eq(" + item + ")" ).find( "a:first" ).trigger( "click" ); |
| 36 | + }, |
| 37 | + entry: function( menu, item ) { |
| 38 | + return menu.children( ":eq(" + item + ")" ); |
| 39 | + } |
| 40 | + }; |
| 41 | +} |
| 42 | + |
| 43 | +// **************************************************************************** |
| 44 | + |
| 45 | +jQuery(document).ready(function(){ |
| 46 | + |
| 47 | +/******************************************************************************* |
| 48 | + * QUnit setup |
| 49 | + */ |
| 50 | +QUnit.log(function(data) { |
| 51 | + if (window.console && window.console.log) { |
| 52 | +// window.console.log(data.result + " :: " + data.message); |
| 53 | + } |
| 54 | +}); |
| 55 | +QUnit.config.requireExpects = true; |
| 56 | + |
| 57 | +var th = new TestHelpers(), |
| 58 | + log = th.log, |
| 59 | + logOutput = th.logOutput, |
| 60 | + click = th.click, |
| 61 | + entry = th.entry, |
| 62 | + lifecycle = { |
| 63 | + setup: function () { |
| 64 | + th.clearLog(); |
| 65 | + }, |
| 66 | + teardown: function () { |
| 67 | + $(":moogle-contextmenu").contextmenu("destroy"); |
| 68 | + } |
| 69 | + }, |
| 70 | + SAMPLE_MENU = [ |
| 71 | + {title: "Cut", cmd: "cut", uiIcon: "ui-icon-scissors"}, |
| 72 | + {title: "Copy", cmd: "copy", uiIcon: "ui-icon-copy"}, |
| 73 | + {title: "Paste", cmd: "paste", uiIcon: "ui-icon-clipboard", disabled: true }, |
| 74 | + {title: "----"}, |
| 75 | + {title: "More", children: [ |
| 76 | + {title: "Sub Item 1", cmd: "sub1"}, |
| 77 | + {title: "Sub Item 2", cmd: "sub2"} |
| 78 | + ]} |
| 79 | + ], |
| 80 | + $ = jQuery; |
| 81 | + |
| 82 | + |
| 83 | + |
| 84 | + |
| 85 | +// --------------------------------------------------------------------------- |
| 86 | + |
| 87 | +//--------------------------------------------------------------------------- |
| 88 | + |
| 89 | +module("open", lifecycle); |
| 90 | + |
| 91 | +function _openTest(menu){ |
| 92 | + var $ctx, $popup; |
| 93 | + |
| 94 | + expect(11); |
| 95 | + |
| 96 | + $("#container").contextmenu({ |
| 97 | + delegate: ".hasmenu", |
| 98 | + menu: menu, |
| 99 | + beforeOpen: function(event, ui){ |
| 100 | + log("beforeOpen"); |
| 101 | + |
| 102 | + equal( event.type, "contextmenubeforeopen", |
| 103 | + "beforeOpen: Got contextmenubeforeopen event" ); |
| 104 | + equal( ui.target.text(), "AAA", |
| 105 | + "beforeOpen: ui.target is set" ); |
| 106 | + ok( $popup.is(":hidden"), "beforeOpen: Menu is hidden" ); |
| 107 | + ok( ! entry($popup, 0).hasClass("ui-state-disabled"), |
| 108 | + "beforeOpen: Entry 0 is enabled" ); |
| 109 | + ok( entry($popup, 2).hasClass("ui-state-disabled"), |
| 110 | + "beforeOpen: Entry 2 is disabled" ); |
| 111 | + |
| 112 | + $("#container").contextmenu("enableEntry", "cut", false); |
| 113 | + |
| 114 | + ok( entry($popup, 0).hasClass("ui-state-disabled"), |
| 115 | + "beforeOpen: Entry 0 is disabled" ); |
| 116 | + }, |
| 117 | + open: function(event){ |
| 118 | + log("open"); |
| 119 | + |
| 120 | + ok( $popup.is(":visible"), "open: Menu is visible" ); |
| 121 | + ok( entry($popup, 2).hasClass("ui-state-disabled"), "open: Entry is disabled" ); |
| 122 | + |
| 123 | + equal(logOutput(), "open(),beforeOpen,after open(),open", |
| 124 | + "Event sequence OK."); |
| 125 | + start(); |
| 126 | + } |
| 127 | + }); |
| 128 | + |
| 129 | + $ctx = $(":moogle-contextmenu"); |
| 130 | + $popup = $ctx.contextmenu("getMenu"); |
| 131 | + |
| 132 | + equal( $ctx.length, 1, "widget created"); |
| 133 | + ok($popup.is(":hidden"), "Menu is hidden"); |
| 134 | + log("open()"); |
| 135 | + $ctx.contextmenu("open", $("span.hasmenu:first")); |
| 136 | + log("after open()"); |
| 137 | +} |
| 138 | + |
| 139 | + |
| 140 | +asyncTest("UL menu", function(){ |
| 141 | + _openTest("ul#sampleMenu1"); |
| 142 | +}); |
| 143 | +//asyncTest("UL menu", function(){ |
| 144 | +// _openTest("ul#sampleMenu1"); |
| 145 | +//}); |
| 146 | + |
| 147 | + |
| 148 | +//asyncTest("Array menu", function(){ |
| 149 | +// _openTest(SAMPLE_MENU); |
| 150 | +//}); |
| 151 | + |
| 152 | + |
| 153 | +//--------------------------------------------------------------------------- |
| 154 | + |
| 155 | +module("click event sequence", lifecycle); |
| 156 | + |
| 157 | +function _clickTest(menu){ |
| 158 | + var $ctx, $popup; |
| 159 | + |
| 160 | + expect(3); |
| 161 | + |
| 162 | + $("#container").contextmenu({ |
| 163 | + delegate: ".hasmenu", |
| 164 | + menu: menu, |
| 165 | + beforeOpen: function(event, ui){ |
| 166 | + log("beforeOpen(" + ui.target.text() + ")"); |
| 167 | + }, |
| 168 | + create: function(event, ui){ |
| 169 | + log("create"); |
| 170 | + }, |
| 171 | + createMenu: function(event, ui){ |
| 172 | + log("createMenu"); |
| 173 | + }, |
| 174 | + select: function(event, ui){ |
| 175 | + window.console.log("select"); |
| 176 | + var t = ui.item ? $(ui.item).find("a:first").attr("href") : ui.item; |
| 177 | + log("select(" + t + ")"); |
| 178 | + equal( ui.cmd, "cut", "select: ui.cmd is set" ); |
| 179 | + equal( ui.target.text(), "AAA", "select: ui.target is set" ); |
| 180 | + }, |
| 181 | + open: function(event){ |
| 182 | + log("open"); |
| 183 | + setTimeout(function(){ |
| 184 | + click($popup, 0); |
| 185 | + }, 10); |
| 186 | + }, |
| 187 | + close: function(event){ |
| 188 | + log("close"); |
| 189 | + } |
| 190 | + }); |
| 191 | + |
| 192 | + $ctx = $(":moogle-contextmenu"); |
| 193 | + $popup = $ctx.contextmenu("getMenu"); |
| 194 | + |
| 195 | + log("open()"); |
| 196 | + $ctx.contextmenu("open", $("span.hasmenu:first")); |
| 197 | + log("after open()"); |
| 198 | + |
| 199 | + setTimeout(function(){ |
| 200 | + // TODO: why is focus() called twice? |
| 201 | + equal(logOutput(), "createMenu,create,open(),beforeOpen(AAA),after open(),open,select(#cut),close", |
| 202 | + "Event sequence OK."); |
| 203 | + start(); |
| 204 | + }, 4000); |
| 205 | +} |
| 206 | + |
| 207 | + |
| 208 | +//asyncTest("Array menu", function(){ |
| 209 | +// _clickTest(SAMPLE_MENU); |
| 210 | +//}); |
| 211 | + |
| 212 | + |
| 213 | +asyncTest("UL menu", function(){ |
| 214 | + _clickTest("ul#sampleMenu1"); |
| 215 | +}); |
| 216 | + |
| 217 | + |
| 218 | +}); |
0 commit comments