Best Python code snippet using tavern
tab-content.js
Source:tab-content.js
1// *******************************************************************************2// Educational Online Test Delivery System3// Copyright (c) 2017 American Institutes for Research4//5// Distributed under the AIR Open Source License, Version 1.06// See accompanying file AIR-License-1_0.txt or at7// http://www.smarterapp.org/documents/American_Institutes_for_Research_Open_Source_Software_License.pdf8// *******************************************************************************9var { classes: Cc, interfaces: Ci, utils: Cu, results: Cr } = Components;10Cu.import("resource://gre/modules/XPCOMUtils.jsm");11Cu.import("resource://gre/modules/Services.jsm");12Cu.import("resource://gre/modules/ExtensionContent.jsm");13var BrowserDebug =14{15 log : function (aMsg)16 {17 Cc["@mozilla.org/consoleservice;1"].getService(Ci.nsIConsoleService).logStringMessage(aMsg);18 },19 print : function ()20 {21 var msg = "TAB:FRAME: "+Array.join(arguments, ": ");22 BrowserDebug.log(msg);23 },24 error : function ()25 {26 BrowserDebug.log("ERROR", Array.join(arguments, ": "));27 }28};29addMessageListener("SecureBrowser:InsertTopLevelJS", function (aMsg)30{31 BrowserDebug.print("SecureBrowser:InsertTopLevelJS", "MESSAGE", aMsg.data.one, aMsg.data.two, content.location);32 // BrowserDebug.print("sendAsyncMessage", typeof(sendAsyncMessage));33});34var SecureBrowserFrame =35{36 // DOMBrower Observer37 DOMBrowserObserver :38 {39 _speakCallBack : null,40 _speakListenerAdded : false,41 _previousStatus : null,42 _window : null,43 observe : function (subject, topic, data)44 {45 /**46 * SECURITY QUIT47 */48 if (topic == "sb-dom-browser-quit")49 {50 BrowserDebug.print("QUIT");51 sendAsyncMessage("SecureBrowser:FrameMessageListener", { command: "sb-dom-browser-quit" });52 }53 /**54 * SECURITY RESTART55 */56 if (topic == "sb-dom-browser-restart")57 {58 BrowserDebug.print("OBSERVER", "RESTART");59 sendAsyncMessage("SecureBrowser:FrameMessageListener", { command: "sb-dom-browser-restart" });60 }61 /**62 * SECURITY GETMACADDRESS63 */64 if (topic == "sb-dom-browser-getMacAddress")65 {66 function cb (aMsg) 67 { 68 if (typeof(subject.wrappedJSObject.callback == "function")) subject.wrappedJSObject.callback(aMsg.data.ma);69 removeMessageListener("SecureBrowser:GetMacAddress", cb);70 }71 addMessageListener("SecureBrowser:GetMacAddress", cb);72 sendAsyncMessage("SecureBrowser:FrameMessageListener", { command: "sb-dom-browser-getMacAddress" });73 }74 /**75 * TTS PAUSE76 */77 if (topic == "sb-dom-browser-tts-pause")78 {79 function cb (aMsg) 80 { 81 if (typeof(subject.wrappedJSObject.callback == "function")) subject.wrappedJSObject.callback(aMsg.data.status);82 removeMessageListener("SecureBrowser:TTS:Pause", cb);83 }84 addMessageListener("SecureBrowser:TTS:Pause", cb);85 sendAsyncMessage("SecureBrowser:FrameMessageListener", { command: "sb-dom-browser-tts-pause" });86 }87 /**88 * TTS STOP89 */90 if (topic == "sb-dom-browser-tts-stop")91 {92 function cb (aMsg) 93 { 94 if (typeof(subject.wrappedJSObject.callback == "function")) subject.wrappedJSObject.callback(aMsg.data.status);95 removeMessageListener("SecureBrowser:TTS:Stop", cb);96 }97 addMessageListener("SecureBrowser:TTS:Stop", cb);98 sendAsyncMessage("SecureBrowser:FrameMessageListener", { command: "sb-dom-browser-tts-stop" });99 }100 /**101 * TTS RESUME102 */103 if (topic == "sb-dom-browser-tts-resume")104 {105 function cb (aMsg) 106 { 107 if (typeof(subject.wrappedJSObject.callback == "function")) subject.wrappedJSObject.callback(aMsg.data.status);108 removeMessageListener("SecureBrowser:TTS:Resume", cb);109 }110 addMessageListener("SecureBrowser:TTS:Resume", cb);111 sendAsyncMessage("SecureBrowser:FrameMessageListener", { command: "sb-dom-browser-tts-resume" });112 }113 /**114 * TTS PLAY115 */116 if (topic == "sb-dom-browser-tts-play")117 {118 SecureBrowserFrame.DOMBrowserObserver._speakCallBack = subject.wrappedJSObject.callback;119 SecureBrowserFrame.DOMBrowserObserver._window = subject.wrappedJSObject.window;120 function cb (aMsg) 121 { 122 let status = aMsg.data.o.status;123 let type = aMsg.data.o.type;124 try125 {126 if (typeof(SecureBrowserFrame.DOMBrowserObserver._speakCallBack == "function")) 127 {128 let e = 129 {130 type : null,131 charindex : aMsg.data.o.start,132 mark : null,133 length : aMsg.data.o.length,134 message : null135 };136 e.type = "word";137#ifdef XP_MACOSX138 if (aMsg.data.o.start == 0) e.type = "start";139#endif140 if (type == "Start") e.type = "start";141 if (type == "SentenceStart") e.type = "sentence";142 if (type == "Done") e.type = "end";143 if (type == "Sync") 144 {145 e.type = "sync";146 e.mark = true;147 }148 if (type == "Phoneme") e.type = "phoneme";149 if (status == "Paused") e.type = "pause";150 if (SecureBrowserFrame.DOMBrowserObserver.previousStatus == "Paused" && status == "Playing") e.type = "resumed"; 151 SecureBrowserFrame.DOMBrowserObserver._speakCallBack(Cu.cloneInto(e, SecureBrowserFrame.DOMBrowserObserver._window));152 SecureBrowserFrame.DOMBrowserObserver.previousStatus = status;153 }154 } 155 catch (e) { BrowserDebug.error(e); }156 }157 let o = 158 {159 options : subject.wrappedJSObject.options,160 txt : subject.wrappedJSObject.txt161 };162 try163 {164 // BrowserDebug.print("PLAY", "REMOVE MESSAGE LISTENER");165 removeMessageListener("SecureBrowser:TTS:Play", cb);166 } 167 catch (e) { BrowserDebug.error(e); }168 // BrowserDebug.print("PLAY", "ADD MESSAGE LISTENER");169 if (!SecureBrowserFrame.DOMBrowserObserver._speakListenerAdded)170 {171 addMessageListener("SecureBrowser:TTS:Play", cb);172 SecureBrowserFrame.DOMBrowserObserver._speakListenerAdded = true;173 }174 sendAsyncMessage("SecureBrowser:FrameMessageListener", { command: "sb-dom-browser-tts-play", o:o });175 }176 /**177 * TTS STATUS178 */179 if (topic == "sb-dom-browser-tts-status")180 {181 // BrowserDebug.print("STATUS");182 function cb (aMsg) 183 { 184 if (typeof(subject.wrappedJSObject.callback == "function")) subject.wrappedJSObject.callback(aMsg.data.status);185 removeMessageListener("SecureBrowser:TTS:Status", cb);186 }187 addMessageListener("SecureBrowser:TTS:Status", cb);188 sendAsyncMessage("SecureBrowser:FrameMessageListener", { command: "sb-dom-browser-tts-status" });189 }190 /**191 * TTS VOICES192 */193 if (topic == "sb-dom-browser-tts-voices")194 {195 function cb (aMsg) 196 { 197 if (typeof(subject.wrappedJSObject.callback == "function")) 198 {199 let a = new Array;200 for (let el of aMsg.data.voices) 201 {202 // BrowserDebug.print("EL", el);203 let s = "new Object("+el+")";204 let o = eval(s);205 // BrowserDebug.print(typeof(o), o.name, o.gender, o.language);206 a.push(o);207 208 }209 subject.wrappedJSObject.callback(Cu.cloneInto(a, subject.wrappedJSObject.window));210 }211 removeMessageListener("SecureBrowser:TTS:Voices", cb);212 }213 addMessageListener("SecureBrowser:TTS:Voices", cb);214 sendAsyncMessage("SecureBrowser:FrameMessageListener", { command: "sb-dom-browser-tts-voices" });215 }216 /**217 * TTS VOICE218 */219 if (topic == "sb-dom-browser-tts-voice")220 {221 function cb (aMsg) 222 { 223 if (typeof(subject.wrappedJSObject.callback == "function")) 224 {225 subject.wrappedJSObject.callback(aMsg.data.voice);226 }227 removeMessageListener("SecureBrowser:TTS:Voice", cb);228 }229 addMessageListener("SecureBrowser:TTS:Voice", cb);230 sendAsyncMessage("SecureBrowser:FrameMessageListener", { command: "sb-dom-browser-tts-voice" });231 }232 /**233 * CLEAR CACHE234 */235 if (topic == "sb-dom-browser-air-clearcache")236 {237 function cb (aMsg) 238 { 239 removeMessageListener("SecureBrowser:AIR:ClearCache", cb);240 }241 addMessageListener("SecureBrowser:AIR:ClearCache", cb);242 sendAsyncMessage("SecureBrowser:FrameMessageListener", { command: "sb-dom-browser-air-clearcache" });243 }244 /**245 * CLEAR COOKIES246 */247 if (topic == "sb-dom-browser-air-clearcookies")248 {249 function cb (aMsg) 250 { 251 removeMessageListener("SecureBrowser:AIR:ClearCookies", cb);252 }253 addMessageListener("SecureBrowser:AIR:ClearCookies", cb);254 sendAsyncMessage("SecureBrowser:FrameMessageListener", { command: "sb-dom-browser-air-clearcookies" });255 }256 /**257 * SET BOOL PREF258 */259 if (topic == "sb-dom-browser-air-setboolpref")260 {261 // BrowserDebug.print("sb-dom-browser-air-setboolpref", subject.wrappedJSObject.name, subject.wrappedJSObject.value);262 function cb (aMsg) 263 { 264 removeMessageListener("SecureBrowser:AIR:SetBoolPref", cb);265 }266 let o =267 {268 name : subject.wrappedJSObject.name,269 value : subject.wrappedJSObject.value270 };271 addMessageListener("SecureBrowser:AIR:SetBoolPref", cb);272 sendAsyncMessage("SecureBrowser:FrameMessageListener", { command: "sb-dom-browser-air-setboolpref", o:o });273 }274 /**275 * SET STRING PREF276 */277 if (topic == "sb-dom-browser-air-setstringpref")278 {279 // BrowserDebug.print("sb-dom-browser-air-setstringpref", subject.wrappedJSObject.name, subject.wrappedJSObject.value);280 function cb (aMsg) 281 { 282 removeMessageListener("SecureBrowser:AIR:SetStringPref", cb);283 }284 let o =285 {286 name : subject.wrappedJSObject.name,287 value : subject.wrappedJSObject.value288 };289 addMessageListener("SecureBrowser:AIR:SetStringPref", cb);290 sendAsyncMessage("SecureBrowser:FrameMessageListener", { command: "sb-dom-browser-air-setstringpref", o:o });291 }292 /**293 * SET INT PREF294 */295 if (topic == "sb-dom-browser-air-setintpref")296 {297 // BrowserDebug.print("sb-dom-browser-air-setintpref", subject.wrappedJSObject.name, subject.wrappedJSObject.value);298 function cb (aMsg) 299 { 300 removeMessageListener("SecureBrowser:AIR:SetIntPref", cb);301 }302 let o =303 {304 name : subject.wrappedJSObject.name,305 value : subject.wrappedJSObject.value306 };307 addMessageListener("SecureBrowser:AIR:SetIntPref", cb);308 sendAsyncMessage("SecureBrowser:FrameMessageListener", { command: "sb-dom-browser-air-setintpref", o:o });309 }310 /**311 * CLEAR PREF312 */313 if (topic == "sb-dom-browser-air-clearpref")314 {315 function cb (aMsg) 316 { 317 removeMessageListener("SecureBrowser:AIR:ClearPref", cb);318 }319 let o = { name : subject.wrappedJSObject.name };320 addMessageListener("SecureBrowser:AIR:ClearPref", cb);321 sendAsyncMessage("SecureBrowser:FrameMessageListener", { command: "sb-dom-browser-air-clearpref", o:o });322 }323 /**324 * KILL PROCESS325 */326 if (topic == "sb-dom-browser-air-killprocess")327 {328 // BrowserDebug.print("sb-dom-browser-air-killprocess", subject.wrappedJSObject.name);329 function cb (aMsg) 330 { 331 removeMessageListener("SecureBrowser:AIR:KillProcess", cb);332 if (typeof(subject.wrappedJSObject.callback == "function")) subject.wrappedJSObject.callback(aMsg.data.rv);333 }334 let o = { name : subject.wrappedJSObject.name };335 addMessageListener("SecureBrowser:AIR:KillProcess", cb);336 sendAsyncMessage("SecureBrowser:FrameMessageListener", { command: "sb-dom-browser-air-killprocess", o:o });337 }338 /**339 * LAUNCH PROCESS340 */341 if (topic == "sb-dom-browser-air-launchprocess")342 {343 // BrowserDebug.print("sb-dom-browser-air-launchprocess", subject.wrappedJSObject.name);344 function cb (aMsg) 345 { 346 removeMessageListener("SecureBrowser:AIR:LaunchProcess", cb);347 if (typeof(subject.wrappedJSObject.callback == "function")) subject.wrappedJSObject.callback(aMsg.data.rv);348 }349 let o = { name : subject.wrappedJSObject.name };350 addMessageListener("SecureBrowser:AIR:LaunchProcess", cb);351 sendAsyncMessage("SecureBrowser:FrameMessageListener", { command: "sb-dom-browser-air-launchprocess", o:o });352 }353 /**354 * GET PROCESS LIST355 */356 if (topic == "sb-dom-browser-air-getprocesslist")357 {358 function cb (aMsg) 359 { 360 removeMessageListener("SecureBrowser:AIR:GetProcessList", cb);361 if (typeof(subject.wrappedJSObject.callback == "function")) subject.wrappedJSObject.callback(Cu.cloneInto(aMsg.data.list, subject.wrappedJSObject.window));362 }363 addMessageListener("SecureBrowser:AIR:GetProcessList", cb);364 sendAsyncMessage("SecureBrowser:FrameMessageListener", { command: "sb-dom-browser-air-getprocesslist" });365 }366 /**367 * EXAMINE PROCESS LIST368 */369 if (topic == "sb-dom-browser-security-examineprocesslist")370 {371 function cb (aMsg) 372 { 373 let inArray = subject.wrappedJSObject.plist;374 let rv = new Array;375 if (Array.isArray(inArray))376 {377 let plist = aMsg.data.list;378 // BrowserDebug.print("PROCESS LIST", plist);379 for (let iItem of inArray)380 {381 for (let eItem of plist)382 {383 // BrowserDebug.print(iItem.toLowerCase(), eItem.toLowerCase());384 if (iItem.toLowerCase() == eItem.toLowerCase()) rv.push(iItem);385 }386 }387 }388 removeMessageListener("SecureBrowser:AIR:ExamineProcessList", cb);389 if (typeof(subject.wrappedJSObject.callback == "function")) subject.wrappedJSObject.callback(Cu.cloneInto(rv, subject.wrappedJSObject.window));390 }391 addMessageListener("SecureBrowser:AIR:ExamineProcessList", cb);392 sendAsyncMessage("SecureBrowser:FrameMessageListener", { command: "sb-dom-browser-security-examineprocesslist" });393 }394 /**395 * SET ALT STARTPAGE396 */397 if (topic == "sb-dom-browser-security-setAltStartPage")398 {399 BrowserDebug.print("sb-dom-browser-security-setAltStartPage");400 function cb (aMsg) 401 { 402 removeMessageListener("SecureBrowser:SECURITY:SetAltStartPage", cb);403 }404 let o = { url : subject.wrappedJSObject.url };405 addMessageListener("SecureBrowser:SECURITY:SetAltStartPage", cb);406 sendAsyncMessage("SecureBrowser:FrameMessageListener", { command: "sb-dom-browser-security-setAltStartPage", o:o });407 }408 /**409 * RESTORE ALT STARTPAGE410 */411 if (topic == "sb-dom-browser-security-restoreDefaultStartPage")412 {413 BrowserDebug.print("sb-dom-browser-security-restoreDefaultStartPage");414 function cb (aMsg) 415 { 416 removeMessageListener("SecureBrowser:SECURITY:RestoreDefaultStartPage", cb);417 }418 addMessageListener("SecureBrowser:SECURITY:RestoreDefaultStartPage", cb);419 sendAsyncMessage("SecureBrowser:FrameMessageListener", { command: "sb-dom-browser-security-restoreDefaultStartPage" });420 }421 /**422 * SECURITY PERMISSIVE423 */424 if (topic == "sb-dom-browser-security-permissive")425 {426 function cb (aMsg) 427 { 428 try429 {430 // BrowserDebug.print("CALLBACK", "permissive", typeof(subject.wrappedJSObject.callback));431 if (typeof(subject.wrappedJSObject.callback == "function")) subject.wrappedJSObject.callback(aMsg.data.o.p);432 removeMessageListener("SecureBrowser:SECURITY:Permissive", cb);433 }434 catch (e) { BrowserDebug.error(e); }435 }436 let o =437 {438 permissive : subject.wrappedJSObject.permissive439 };440 addMessageListener("SecureBrowser:SECURITY:Permissive", cb);441 sendAsyncMessage("SecureBrowser:FrameMessageListener", { command: "sb-dom-browser-security-permissive", o:o });442 }443 /**444 * READ445 */446 if (topic == "sb-dom-browser-air-read")447 {448 // BrowserDebug.print("sb-dom-browser-air-read");449 function cb (aMsg) 450 { 451 if (typeof(subject.wrappedJSObject.callback == "function")) subject.wrappedJSObject.callback(aMsg.data.filedata);452 removeMessageListener("SecureBrowser:AIR:Read", cb);453 }454 let o =455 {456 key : subject.wrappedJSObject.key,457 filename : subject.wrappedJSObject.filename458 };459 addMessageListener("SecureBrowser:AIR:Read", cb);460 sendAsyncMessage("SecureBrowser:FrameMessageListener", { command: "sb-dom-browser-air-read", o:o });461 }462 /**463 * WRITE464 */465 if (topic == "sb-dom-browser-air-write")466 {467 BrowserDebug.print("sb-dom-browser-air-write");468 function cb (aMsg) 469 { 470 if (typeof(subject.wrappedJSObject.callback == "function")) subject.wrappedJSObject.callback(aMsg.data.result);471 removeMessageListener("SecureBrowser:AIR:Write", cb);472 }473 let o =474 {475 key : subject.wrappedJSObject.key,476 filename : subject.wrappedJSObject.filename,477 data : subject.wrappedJSObject.data478 };479 addMessageListener("SecureBrowser:AIR:Write", cb);480 sendAsyncMessage("SecureBrowser:FrameMessageListener", { command: "sb-dom-browser-air-write", o:o });481 }482 /**483 * READ DIRECTORY484 */485 if (topic == "sb-dom-browser-air-readdirectory")486 {487 // BrowserDebug.print("sb-dom-browser-air-readdirectory");488 function cb (aMsg) 489 { 490 if (typeof(subject.wrappedJSObject.callback == "function")) subject.wrappedJSObject.callback(Cu.cloneInto(aMsg.data.entries, subject.wrappedJSObject.window));491 removeMessageListener("SecureBrowser:AIR:ReadDirectory", cb);492 }493 let o =494 {495 key : subject.wrappedJSObject.key,496 };497 addMessageListener("SecureBrowser:AIR:ReadDirectory", cb);498 sendAsyncMessage("SecureBrowser:FrameMessageListener", { command: "sb-dom-browser-air-readdirectory", o:o });499 }500 /**501 * REG WRITE DWORD502 */503 if (topic == "sb-dom-browser-air-regwritedword")504 {505 function cb (aMsg) 506 { 507 // BrowserDebug.print("success", aMsg.data.success);508 if (typeof(subject.wrappedJSObject.callback == "function")) subject.wrappedJSObject.callback(aMsg.data.success);509 removeMessageListener("SecureBrowser:AIR:RegWriteDWORD", cb);510 }511 let o =512 {513 hkey : subject.wrappedJSObject.hkey,514 key : subject.wrappedJSObject.key,515 name : subject.wrappedJSObject.name,516 value : subject.wrappedJSObject.value,517 };518 addMessageListener("SecureBrowser:AIR:RegWriteDWORD", cb);519 sendAsyncMessage("SecureBrowser:FrameMessageListener", { command: "sb-dom-browser-air-regwritedword", o:o });520 }521 /**522 * REG WRITE BOOL523 */524 if (topic == "sb-dom-browser-air-regwritebool")525 {526 function cb (aMsg) 527 { 528 // BrowserDebug.print("success", aMsg.data.success);529 if (typeof(subject.wrappedJSObject.callback == "function")) subject.wrappedJSObject.callback(aMsg.data.success);530 removeMessageListener("SecureBrowser:AIR:RegWriteBool", cb);531 }532 let o =533 {534 hkey : subject.wrappedJSObject.hkey,535 key : subject.wrappedJSObject.key,536 name : subject.wrappedJSObject.name,537 value : subject.wrappedJSObject.value,538 };539 addMessageListener("SecureBrowser:AIR:RegWriteBool", cb);540 sendAsyncMessage("SecureBrowser:FrameMessageListener", { command: "sb-dom-browser-air-regwritebool", o:o });541 }542 /**543 * REG WRITE STRING544 */545 if (topic == "sb-dom-browser-air-regwritestring")546 {547 function cb (aMsg) 548 { 549 // BrowserDebug.print("success", aMsg.data.success);550 if (typeof(subject.wrappedJSObject.callback == "function")) subject.wrappedJSObject.callback(aMsg.data.success);551 removeMessageListener("SecureBrowser:AIR:RegWriteString", cb);552 }553 let o =554 {555 hkey : subject.wrappedJSObject.hkey,556 key : subject.wrappedJSObject.key,557 name : subject.wrappedJSObject.name,558 value : subject.wrappedJSObject.value,559 };560 addMessageListener("SecureBrowser:AIR:RegWriteString", cb);561 sendAsyncMessage("SecureBrowser:FrameMessageListener", { command: "sb-dom-browser-air-regwritestring", o:o });562 }563 /**564 * REG REMOVE565 */566 if (topic == "sb-dom-browser-air-regremove")567 {568 function cb (aMsg) 569 { 570 // BrowserDebug.print("success", aMsg.data.success);571 if (typeof(subject.wrappedJSObject.callback == "function")) subject.wrappedJSObject.callback(aMsg.data.success);572 removeMessageListener("SecureBrowser:AIR:RegRemove", cb);573 }574 let o =575 {576 hkey : subject.wrappedJSObject.hkey,577 key : subject.wrappedJSObject.key,578 name : subject.wrappedJSObject.name,579 };580 addMessageListener("SecureBrowser:AIR:RegRemove", cb);581 sendAsyncMessage("SecureBrowser:FrameMessageListener", { command: "sb-dom-browser-air-regremove", o:o });582 }583 /**584 * ADD EVENT LISTENER585 */586 if (topic == "sb-dom-browser-settings-addEventListener")587 {588 let domCallBack = subject.wrappedJSObject.callback;589 // BrowserDebug.print("sb-dom-browser-settings-addEventListener", "domCallBack", domCallBack);590 function handleDOM () { if (typeof(domCallBack == "function")) domCallBack(); }591 function cb (aMsg) 592 { 593 try594 {595 if (Components.utils.isDeadWrapper(subject.wrappedJSObject.window)) return;596 // BrowserDebug.print("CALLBACK", "SecureBrowser:EVENTS:AddEventListener");597 handleDOM();598 }599 catch (e) {}600 }601 let o = { event : subject.wrappedJSObject.event };602 removeMessageListener("SecureBrowser:EVENTS:AddEventListener", cb);603 addMessageListener("SecureBrowser:EVENTS:AddEventListener", cb);604 sendAsyncMessage("SecureBrowser:FrameMessageListener", { command: "sb-dom-browser-settings-addEventListener", o:o });605 }606 }607 }608};609Services.obs.addObserver(SecureBrowserFrame.DOMBrowserObserver, "sb-dom-browser-quit", false);610Services.obs.addObserver(SecureBrowserFrame.DOMBrowserObserver, "sb-dom-browser-restart", false);611Services.obs.addObserver(SecureBrowserFrame.DOMBrowserObserver, "sb-dom-browser-getMacAddress", false);612Services.obs.addObserver(SecureBrowserFrame.DOMBrowserObserver, "sb-dom-browser-tts-pause", false);613Services.obs.addObserver(SecureBrowserFrame.DOMBrowserObserver, "sb-dom-browser-tts-stop", false);614Services.obs.addObserver(SecureBrowserFrame.DOMBrowserObserver, "sb-dom-browser-tts-resume", false);615Services.obs.addObserver(SecureBrowserFrame.DOMBrowserObserver, "sb-dom-browser-tts-play", false);616Services.obs.addObserver(SecureBrowserFrame.DOMBrowserObserver, "sb-dom-browser-tts-status", false);617Services.obs.addObserver(SecureBrowserFrame.DOMBrowserObserver, "sb-dom-browser-tts-voices", false);618Services.obs.addObserver(SecureBrowserFrame.DOMBrowserObserver, "sb-dom-browser-tts-voice", false);619Services.obs.addObserver(SecureBrowserFrame.DOMBrowserObserver, "sb-dom-browser-air-clearcache", false);620Services.obs.addObserver(SecureBrowserFrame.DOMBrowserObserver, "sb-dom-browser-air-clearcookies", false);621Services.obs.addObserver(SecureBrowserFrame.DOMBrowserObserver, "sb-dom-browser-air-setboolpref", false);622Services.obs.addObserver(SecureBrowserFrame.DOMBrowserObserver, "sb-dom-browser-air-setstringpref", false);623Services.obs.addObserver(SecureBrowserFrame.DOMBrowserObserver, "sb-dom-browser-air-setintpref", false);624Services.obs.addObserver(SecureBrowserFrame.DOMBrowserObserver, "sb-dom-browser-air-clearpref", false);625Services.obs.addObserver(SecureBrowserFrame.DOMBrowserObserver, "sb-dom-browser-air-killprocess", false);626Services.obs.addObserver(SecureBrowserFrame.DOMBrowserObserver, "sb-dom-browser-air-launchprocess", false);627Services.obs.addObserver(SecureBrowserFrame.DOMBrowserObserver, "sb-dom-browser-air-getprocesslist", false);628Services.obs.addObserver(SecureBrowserFrame.DOMBrowserObserver, "sb-dom-browser-air-read", false);629Services.obs.addObserver(SecureBrowserFrame.DOMBrowserObserver, "sb-dom-browser-air-write", false);630Services.obs.addObserver(SecureBrowserFrame.DOMBrowserObserver, "sb-dom-browser-air-readdirectory", false);631Services.obs.addObserver(SecureBrowserFrame.DOMBrowserObserver, "sb-dom-browser-air-regwritedword", false);632Services.obs.addObserver(SecureBrowserFrame.DOMBrowserObserver, "sb-dom-browser-air-regwritebool", false);633Services.obs.addObserver(SecureBrowserFrame.DOMBrowserObserver, "sb-dom-browser-air-regwritestring", false);634Services.obs.addObserver(SecureBrowserFrame.DOMBrowserObserver, "sb-dom-browser-air-regremove", false);635Services.obs.addObserver(SecureBrowserFrame.DOMBrowserObserver, "sb-dom-browser-security-setAltStartPage", false);636Services.obs.addObserver(SecureBrowserFrame.DOMBrowserObserver, "sb-dom-browser-security-restoreDefaultStartPage", false);637Services.obs.addObserver(SecureBrowserFrame.DOMBrowserObserver, "sb-dom-browser-security-permissive", false);638Services.obs.addObserver(SecureBrowserFrame.DOMBrowserObserver, "sb-dom-browser-security-examineprocesslist", false);...
wrap-for-optimizing-test.js
Source:wrap-for-optimizing-test.js
1var vows = require('vows');2var assert = require('assert');3var wrapForOptimizing = require('../../lib/optimizer/wrap-for-optimizing').all;4vows.describe(wrapForOptimizing)5 .addBatch({6 'one': {7 'topic': function () {8 return wrapForOptimizing([9 [10 'property',11 ['property-name', 'margin'],12 ['property-value', '0'],13 ['property-value', '0']14 ]15 ], true);16 },17 'has one wrap': function (wrapped) {18 assert.lengthOf(wrapped, 1);19 },20 'has name': function (wrapped) {21 assert.deepEqual(wrapped[0].name, 'margin');22 },23 'has value': function (wrapped) {24 assert.deepEqual(wrapped[0].value, [['property-value', '0'], ['property-value', '0']]);25 },26 'is not a block': function (wrapped) {27 assert.isFalse(wrapped[0].block);28 },29 'has no components': function (wrapped) {30 assert.lengthOf(wrapped[0].components, 0);31 },32 'is not important': function (wrapped) {33 assert.isFalse(wrapped[0].important);34 },35 'is not dirty': function (wrapped) {36 assert.isFalse(wrapped[0].dirty);37 },38 'is not a shorthand': function (wrapped) {39 assert.isFalse(wrapped[0].shorthand);40 },41 'is unused': function (wrapped) {42 assert.isFalse(wrapped[0].unused);43 },44 'is hack': function (wrapped) {45 assert.isFalse(wrapped[0].hack);46 },47 'is multiplex': function (wrapped) {48 assert.isFalse(wrapped[0].multiplex);49 }50 },51 'two': {52 'topic': function () {53 return wrapForOptimizing([54 [55 'property',56 ['property-name', 'margin'],57 ['property-value', '0'],58 ['property-value', '0']59 ],60 [61 'property',62 ['property-name', 'color'],63 ['property-value', 'red']64 ]65 ], true);66 },67 'has two wraps': function (wrapped) {68 assert.lengthOf(wrapped, 2);69 }70 },71 'with comments': {72 'topic': function () {73 return wrapForOptimizing([74 [75 'comment',76 '/* comment */'77 ],78 [79 'property',80 ['property-name', 'color'],81 ['property-value', 'red']82 ]83 ], true);84 },85 'has one wrap': function (wrapped) {86 assert.lengthOf(wrapped, 1);87 },88 'sets position correctly': function (wrapped) {89 assert.equal(wrapped[0].position, 1);90 }91 },92 'longhand': {93 'topic': function () {94 return wrapForOptimizing([95 [96 'property',97 ['property-name', 'border-radius-top-left'],98 ['property-value', '1px'],99 ['property-value', '/'],100 ['property-value', '2px']101 ]102 ], true);103 },104 'has one wrap': function (wrapped) {105 assert.lengthOf(wrapped, 1);106 },107 'has name': function (wrapped) {108 assert.deepEqual(wrapped[0].name, 'border-radius-top-left');109 },110 'has value': function (wrapped) {111 assert.deepEqual(wrapped[0].value, [['property-value', '1px'], ['property-value', '/'], ['property-value', '2px']]);112 },113 'is multiplex': function (wrapped) {114 assert.isTrue(wrapped[0].multiplex);115 }116 },117 'variable': {118 'topic': function () {119 return wrapForOptimizing([120 [121 'property',122 ['property-name', '--color'],123 ['property-value', 'red']124 ]125 ], true);126 },127 'has one wrap': function (wrapped) {128 assert.lengthOf(wrapped, 1);129 },130 'has name': function (wrapped) {131 assert.deepEqual(wrapped[0].name, '--color');132 },133 'is not a block': function (wrapped) {134 assert.isFalse(wrapped[0].block);135 }136 },137 'variable reference': {138 'topic': function () {139 return wrapForOptimizing([140 [141 'property',142 ['property-name', 'color'],143 ['property-value', 'var(--red)']144 ]145 ], true);146 },147 'has one wrap': function (wrapped) {148 assert.lengthOf(wrapped, 1);149 },150 'has name': function (wrapped) {151 assert.deepEqual(wrapped[0].name, 'color');152 },153 'has value': function (wrapped) {154 assert.deepEqual(wrapped[0].value, [['property-value', 'var(--red)']]);155 }156 },157 'variable reference when variables are ignored': {158 'topic': function () {159 return wrapForOptimizing([160 [161 'property',162 ['property-name', 'color'],163 ['property-value', 'var(--red)']164 ]165 ], false);166 },167 'has one wrap': function (wrapped) {168 assert.lengthOf(wrapped, 0);169 }170 },171 'variable block': {172 'topic': function () {173 return wrapForOptimizing([174 [175 'property',176 ['property-name', '--color'],177 [178 'property-block',179 [180 [181 'property',182 ['property-name', 'color'],183 ['property-value', 'red']184 ],185 [186 'property',187 ['property-name', 'text-color'],188 ['property-value', 'red']189 ]190 ]191 ]192 ]193 ], true);194 },195 'has one wrap': function (wrapped) {196 assert.lengthOf(wrapped, 1);197 },198 'has name': function (wrapped) {199 assert.deepEqual(wrapped[0].name, '--color');200 },201 'has value': function (wrapped) {202 assert.deepEqual(wrapped[0].value, [203 [204 'property-block',205 [206 [207 'property',208 ['property-name', 'color'],209 ['property-value', 'red']210 ],211 [212 'property',213 ['property-name', 'text-color'],214 ['property-value', 'red']215 ]216 ]217 ]218 ], true);219 },220 'is a block': function (wrapped) {221 assert.isTrue(wrapped[0].block);222 }223 },224 'without value': {225 'topic': function () {226 return wrapForOptimizing([227 [228 'property',229 ['property-name', 'margin']230 ]231 ], true);232 },233 'has one wrap': function (wrapped) {234 assert.lengthOf(wrapped, 1);235 },236 'has value': function (wrapped) {237 assert.isUndefined(wrapped.value);238 },239 'unused is not set': function (wrapped) {240 assert.isFalse(wrapped[0].unused);241 }242 },243 'important': {244 'topic': function () {245 return wrapForOptimizing([246 [247 'property',248 ['property-name', 'margin'],249 ['property-value', '0!important']250 ]251 ], true);252 },253 'has one wrap': function (wrapped) {254 assert.lengthOf(wrapped, 1);255 },256 'has right value': function (wrapped) {257 assert.deepEqual(wrapped[0].value, [['property-value', '0']]);258 },259 'has important set': function (wrapped) {260 assert.isTrue(wrapped[0].important);261 }262 },263 'important with prefix space': {264 'topic': function () {265 return wrapForOptimizing([266 [267 'property',268 ['property-name', 'margin'],269 ['property-value', '0'],270 ['property-value', '!important']271 ]272 ], true);273 },274 'has one wrap': function (wrapped) {275 assert.lengthOf(wrapped, 1);276 },277 'has right value': function (wrapped) {278 assert.deepEqual(wrapped[0].value, [['property-value', '0']]);279 },280 'has important set': function (wrapped) {281 assert.isTrue(wrapped[0].important);282 }283 },284 'important with suffix space': {285 'topic': function () {286 return wrapForOptimizing([287 [288 'property',289 ['property-name', 'margin'],290 ['property-value', '0!'],291 ['property-value', 'important']292 ]293 ], true);294 },295 'has one wrap': function (wrapped) {296 assert.lengthOf(wrapped, 1);297 },298 'has right value': function (wrapped) {299 assert.deepEqual(wrapped[0].value, [['property-value', '0']]);300 },301 'has important set': function (wrapped) {302 assert.isTrue(wrapped[0].important);303 }304 },305 'important with two spaces': {306 'topic': function () {307 return wrapForOptimizing([308 [309 'property',310 ['property-name', 'margin'],311 ['property-value', '0'],312 ['property-value', '!'],313 ['property-value', 'important']314 ]315 ], true);316 },317 'has one wrap': function (wrapped) {318 assert.lengthOf(wrapped, 1);319 },320 'has right value': function (wrapped) {321 assert.deepEqual(wrapped[0].value, [['property-value', '0']]);322 },323 'has important set': function (wrapped) {324 assert.isTrue(wrapped[0].important);325 },326 'is not a bang hack': function (wrapped) {327 assert.isFalse(wrapped[0].hack);328 }329 },330 'underscore hack': {331 'topic': function () {332 return wrapForOptimizing([333 [334 'property',335 ['property-name', '_color'],336 ['property-value', 'red']337 ]338 ], true);339 },340 'has one wrap': function (wrapped) {341 assert.lengthOf(wrapped, 1);342 },343 'has right name': function (wrapped) {344 assert.deepEqual(wrapped[0].name, 'color');345 },346 'is a hack': function (wrapped) {347 assert.deepEqual(wrapped[0].hack, ['underscore']);348 }349 },350 'star hack': {351 'topic': function () {352 return wrapForOptimizing([353 [354 'property',355 ['property-name', '*color'],356 ['property-value', 'red']357 ]358 ], true);359 },360 'has one wrap': function (wrapped) {361 assert.lengthOf(wrapped, 1);362 },363 'has right name': function (wrapped) {364 assert.deepEqual(wrapped[0].name, 'color');365 },366 'is a hack': function (wrapped) {367 assert.deepEqual(wrapped[0].hack, ['asterisk']);368 }369 },370 'backslash hack': {371 'topic': function () {372 return wrapForOptimizing([373 [374 'property',375 ['property-name', 'margin'],376 ['property-value', '0\\9']377 ]378 ], true);379 },380 'has one wrap': function (wrapped) {381 assert.lengthOf(wrapped, 1);382 },383 'has right value': function (wrapped) {384 assert.deepEqual(wrapped[0].value, [['property-value', '0']]);385 },386 'is a hack': function (wrapped) {387 assert.deepEqual(wrapped[0].hack, ['backslash', '9']);388 }389 },390 'backslash hack - single value': {391 'topic': function () {392 return wrapForOptimizing([393 [394 'property',395 ['property-name', 'margin'],396 ['property-value', '0']397 ]398 ], true);399 },400 'has one wrap': function (wrapped) {401 assert.lengthOf(wrapped, 1);402 },403 'has right value': function (wrapped) {404 assert.deepEqual(wrapped[0].value, [['property-value', '0']]);405 },406 'is a hack': function (wrapped) {407 assert.isFalse(wrapped[0].hack);408 }409 },410 'backslash hack - space between values': {411 'topic': function () {412 return wrapForOptimizing([413 [414 'property',415 ['property-name', 'margin'],416 ['property-value', '0'],417 ['property-value', '\\9']418 ]419 ], true);420 },421 'has one wrap': function (wrapped) {422 assert.lengthOf(wrapped, 1);423 },424 'has right value': function (wrapped) {425 assert.deepEqual(wrapped[0].value, [['property-value', '0']]);426 },427 'is a hack': function (wrapped) {428 assert.deepEqual(wrapped[0].hack, ['backslash', '9']);429 }430 },431 'bang hack': {432 'topic': function () {433 return wrapForOptimizing([434 [435 'property',436 ['property-name', 'margin'],437 ['property-value', '0!ie']438 ]439 ], true);440 },441 'has one wrap': function (wrapped) {442 assert.lengthOf(wrapped, 1);443 },444 'has right value': function (wrapped) {445 assert.deepEqual(wrapped[0].value, [['property-value', '0']]);446 },447 'is a hack': function (wrapped) {448 assert.deepEqual(wrapped[0].hack, ['bang']);449 },450 'is not important': function (wrapped) {451 assert.isFalse(wrapped[0].important);452 }453 },454 'bang hack with space': {455 'topic': function () {456 return wrapForOptimizing([457 [458 'property',459 ['property-name', 'margin'],460 ['property-value', '0 !ie']461 ]462 ], true);463 },464 'has one wrap': function (wrapped) {465 assert.lengthOf(wrapped, 1);466 },467 'has right value': function (wrapped) {468 assert.deepEqual(wrapped[0].value, [['property-value', '0']]);469 },470 'is a hack': function (wrapped) {471 assert.deepEqual(wrapped[0].hack, ['bang']);472 },473 'is not important': function (wrapped) {474 assert.isFalse(wrapped[0].important);475 }476 },477 'bang hack - space between values': {478 'topic': function () {479 return wrapForOptimizing([480 [481 'property',482 ['property-name', 'margin'],483 ['property-value', '0'],484 ['property-value', '!ie']485 ]486 ], true);487 },488 'has one wrap': function (wrapped) {489 assert.lengthOf(wrapped, 1);490 },491 'has right value': function (wrapped) {492 assert.deepEqual(wrapped[0].value, [['property-value', '0']]);493 },494 'is a hack': function (wrapped) {495 assert.deepEqual(wrapped[0].hack, ['bang']);496 },497 'is not important': function (wrapped) {498 assert.isFalse(wrapped[0].important);499 }500 },501 'two hacks': {502 'topic': function () {503 return wrapForOptimizing([504 [505 'property',506 ['property-name', 'color'],507 ['property-value', 'red\\9!important']508 ]509 ], true);510 },511 'has one wrap': function (wrapped) {512 assert.lengthOf(wrapped, 1);513 },514 'has right value': function (wrapped) {515 assert.deepEqual(wrapped[0].value, [['property-value', 'red']]);516 },517 'is important': function (wrapped) {518 assert.isTrue(wrapped[0].important);519 },520 'is a hack': function (wrapped) {521 assert.deepEqual(wrapped[0].hack, ['backslash', '9']);522 }523 },524 'source map': {525 'topic': function () {526 return wrapForOptimizing([527 [528 'property',529 ['property-name', 'color', [[1, 2, undefined]]],530 ['property-value', 'red', [[1, 2, undefined]]]531 ]532 ], true);533 },534 'has one wrap': function (wrapped) {535 assert.lengthOf(wrapped, 1);536 },537 'has right value': function (wrapped) {538 assert.deepEqual(wrapped[0].value, [['property-value', 'red', [[1, 2, undefined]]]]);539 }540 },541 'skipping properties': {542 'topic': function () {543 return wrapForOptimizing([544 [545 'property',546 ['property-name', 'background', [[1, 2, undefined]]],547 ['property-value', 'red', [[1, 12, undefined]]]548 ]549 ], true, ['background']);550 },551 'has no wrap': function (wrapped) {552 assert.lengthOf(wrapped, 0);553 }554 }555 })...
namespace-test.js
Source:namespace-test.js
1/*global bean:true, buster:true, Syn:true, assert:true, defer:true, features:true, globalSetUp:true, globalTearDown:true*/2buster.testCase('namespaces', {3 'setUp': globalSetUp4 , 'tearDown': globalTearDown5 , 'should be able to name handlers': {6 'setUp': function () {7 var self = this8 this.runTest = function (done, regFn) {9 var el1 = self.byId('foo')10 , trigger = self.trigger()11 , spy = self.spy()12 trigger.after(function () {13 assert.equals(spy.callCount, 1, 'triggered click event')14 done()15 })16 regFn(el1, trigger.wrap(spy))17 Syn.click(el1)18 }19 }20 , 'on()': function (done) {21 this.runTest(done, function (el1, wrappedSpy) {22 bean.on(el1, 'click.fat', wrappedSpy)23 })24 }25 , 'add()': function (done) {26 this.runTest(done, function (el1, wrappedSpy) {27 bean.add(el1, 'click.fat', wrappedSpy)28 })29 }30 }31 , 'should be able to add multiple handlers under the same namespace to the same element': {32 'setUp': function () {33 var self = this34 this.runTest = function (done, regFn) {35 var el1 = self.byId('foo')36 , trigger = self.trigger()37 , spy1 = self.spy()38 , spy2 = self.spy()39 trigger.after(function () {40 assert.equals(spy1.callCount, 1, 'triggered click event')41 assert.equals(spy2.callCount, 1, 'triggered click event')42 done()43 })44 regFn(el1, trigger.wrap(spy1), trigger.wrap(spy2))45 Syn.click(el1)46 }47 }48 , 'on()': function (done) {49 this.runTest(done, function (el1, wrappedSpy1, wrappedSpy2) {50 bean.on(el1, 'click.fat', wrappedSpy1)51 bean.on(el1, 'click.fat', wrappedSpy2)52 })53 }54 , 'add()': function (done) {55 this.runTest(done, function (el1, wrappedSpy1, wrappedSpy2) {56 bean.add(el1, 'click.fat', wrappedSpy1)57 bean.add(el1, 'click.fat', wrappedSpy2)58 })59 }60 }61 , 'should be able to fire an event without handlers': function () {62 var el1 = this.byId('foo')63 bean.fire(el1, 'click.fat')64 assert(true, 'fire namespaced event with no handlers (no exception)')65 }66 , 'should be able to target namespaced event handlers with fire': {67 'setUp': function () {68 var self = this69 this.runTest = function (done, regFn) {70 var el1 = self.byId('foo')71 , trigger = self.trigger()72 , spy1 = self.spy()73 , spy2 = self.spy()74 trigger.after(function () {75 assert.equals(spy1.callCount, 1, 'triggered click event (namespaced)')76 assert.equals(spy2.callCount, 0, 'should not trigger click event (plain)')77 done()78 })79 regFn(el1, trigger.wrap(spy1), trigger.wrap(spy2))80 bean.fire(el1, 'click.fat')81 }82 }83 , 'on()': function (done) {84 this.runTest(done, function (el1, wrappedSpy1, wrappedSpy2) {85 bean.on(el1, 'click.fat', wrappedSpy1)86 bean.on(el1, 'click', wrappedSpy2)87 })88 }89 , 'add()': function (done) {90 this.runTest(done, function (el1, wrappedSpy1, wrappedSpy2) {91 bean.add(el1, 'click.fat', wrappedSpy1)92 bean.add(el1, 'click', wrappedSpy2)93 })94 }95 }96 // changed in 0.5 so this doesn't fire, namespaces need to match97 , 'should not be able to target multiple namespaced event handlers with fire': {98 'setUp': function () {99 var self = this100 this.runTest = function (done, regFn) {101 var el1 = self.byId('foo')102 , spy1 = self.spy()103 , spy2 = self.spy()104 , spy3 = self.spy()105 regFn(el1, spy1, spy2, spy3)106 bean.fire(el1, 'click.fat.ded')107 defer(function () {108 assert.equals(spy1.callCount, 0, 'should not trigger click event (namespaced)')109 assert.equals(spy2.callCount, 0, 'should not trigger click event (namespaced)')110 assert.equals(spy3.callCount, 0, 'should not trigger click event (plain)')111 done()112 })113 }114 }115 , 'on()': function (done) {116 this.runTest(done, function (el1, wrappedSpy1, wrappedSpy2, wrappedSpy3) {117 bean.on(el1, 'click.fat', wrappedSpy1)118 bean.on(el1, 'click.ded', wrappedSpy2)119 bean.on(el1, 'click', wrappedSpy3)120 })121 }122 , 'add()': function (done) {123 this.runTest(done, function (el1, wrappedSpy1, wrappedSpy2, wrappedSpy3) {124 bean.add(el1, 'click.fat', wrappedSpy1)125 bean.add(el1, 'click.ded', wrappedSpy2)126 bean.add(el1, 'click', wrappedSpy3)127 })128 }129 }130 , 'should be able to remove handlers based on name': {131 'setUp': function () {132 var self = this133 this.runTest = function (done, regFn) {134 var el1 = self.byId('foo')135 , trigger = self.trigger()136 , spy1 = self.spy()137 , spy2 = self.spy()138 trigger.after(function () {139 assert.equals(spy1.callCount, 0, 'should not trigger click event (namespaced)')140 assert.equals(spy2.callCount, 1, 'triggered click event (plain)')141 done()142 })143 regFn(el1, trigger.wrap(spy1), trigger.wrap(spy2))144 bean.remove(el1, 'click.ded')145 Syn.click(el1)146 }147 }148 , 'on()': function (done) {149 this.runTest(done, function (el1, wrappedSpy1, wrappedSpy2) {150 bean.on(el1, 'click.ded', wrappedSpy1)151 bean.on(el1, 'click', wrappedSpy2)152 })153 }154 , 'add()': function (done) {155 this.runTest(done, function (el1, wrappedSpy1, wrappedSpy2) {156 bean.add(el1, 'click.ded', wrappedSpy1)157 bean.add(el1, 'click', wrappedSpy2)158 })159 }160 }161 // changed in 0.5 so this doesn't remove, namespaces need to match162 , 'should not be able to remove multiple handlers based on name': {163 'setUp': function () {164 var self = this165 this.runTest = function (done, regFn) {166 var el1 = self.byId('foo')167 , trigger = self.trigger()168 , spy1 = self.spy()169 , spy2 = self.spy()170 , spy3 = self.spy()171 trigger.after(function () {172 assert.equals(spy1.callCount, 1, 'triggered click event (namespaced)')173 assert.equals(spy2.callCount, 1, 'triggered click event (namespaced)')174 assert.equals(spy3.callCount, 1, 'triggered click event (plain)')175 done()176 })177 regFn(el1, trigger.wrap(spy1), trigger.wrap(spy2), trigger.wrap(spy3))178 bean.remove(el1, 'click.ded.fat')179 Syn.click(el1)180 }181 }182 , 'on()': function (done) {183 this.runTest(done, function (el1, wrappedSpy1, wrappedSpy2, wrappedSpy3) {184 bean.on(el1, 'click.fat', wrappedSpy1)185 bean.on(el1, 'click.ded', wrappedSpy2)186 bean.on(el1, 'click', wrappedSpy3)187 })188 }189 , 'add()': function (done) {190 this.runTest(done, function (el1, wrappedSpy1, wrappedSpy2, wrappedSpy3) {191 bean.add(el1, 'click.fat', wrappedSpy1)192 bean.add(el1, 'click.ded', wrappedSpy2)193 bean.add(el1, 'click', wrappedSpy3)194 })195 }196 }197 , 'should be able to add multiple custom events to a single handler and call them individually': {198 'setUp': function () {199 var self = this200 this.runTest = function (done, regFn) {201 var el1 = self.byId('foo')202 , trigger = self.trigger()203 , spy = self.spy()204 trigger.after(function () {205 assert.equals(spy.callCount, 2, 'triggered custom event')206 assert.equals(spy.firstCall.args[0], '1', 'expected array argument')207 assert.equals(spy.secondCall.args[0], '2', 'expected array argument')208 done()209 })210 regFn(el1, trigger.wrap(spy))211 bean.fire(el1, 'fat.test1', ['1'])212 bean.fire(el1, 'fat.test2', ['2'])213 }214 }215 , 'on()': function (done) {216 this.runTest(done, function (el1, wrappedSpy) {217 bean.on(el1, 'fat.test1 fat.test2', wrappedSpy)218 })219 }220 , 'add()': function (done) {221 this.runTest(done, function (el1, wrappedSpy) {222 bean.add(el1, 'fat.test1 fat.test2', wrappedSpy)223 })224 }225 }226 227 , 'should be able to fire an event if the fired namespace is within the event namespace range': {228 'setUp': function () {229 var self = this230 this.runTest = function (done, regFn) {231 var el1 = self.byId('foo')232 , trigger = self.trigger()233 , spy = self.spy()234 trigger.after(function () {235 assert.equals(spy.callCount, 4, 'triggered custom event')236 assert.equals(spy.firstCall.args[0], '1', 'expected array argument')237 assert.equals(spy.secondCall.args[0], '2', 'expected array argument')238 assert.equals(spy.thirdCall.args[0], '3', 'expected array argument')239 assert.equals(spy.lastCall.args[0], '3', 'expected array argument')240 done()241 })242 regFn(el1, trigger.wrap(spy))243 bean.fire(el1, 'fat.test1', ['1'])244 bean.fire(el1, 'fat.test2', ['2'])245 bean.fire(el1, 'fat.foo', ['3'])246 }247 }248 , 'on()': function (done) {249 this.runTest(done, function (el1, wrappedSpy) {250 bean.on(el1, 'fat.test1.foo fat.test2.foo', wrappedSpy)251 })252 }253 , 'add()': function (done) {254 this.runTest(done, function (el1, wrappedSpy) {255 bean.add(el1, 'fat.test1.foo fat.test2.foo', wrappedSpy)256 })257 }258 }259 , 'should be able to fire multiple events and fire them regardless of the order of the namespaces': {260 'setUp': function () {261 var self = this262 this.runTest = function (done, regFn) {263 var el1 = self.byId('foo')264 , trigger = self.trigger()265 , spy = self.spy()266 trigger.after(function () {267 assert.equals(spy.callCount, 4, 'triggered custom event')268 assert.equals(spy.firstCall.args[0], '1', 'expected array argument')269 assert.equals(spy.secondCall.args[0], '1', 'expected array argument')270 assert.equals(spy.thirdCall.args[0], '2', 'expected array argument')271 assert.equals(spy.lastCall.args[0], '2', 'expected array argument')272 done()273 })274 regFn(el1, trigger.wrap(spy))275 bean.fire(el1, 'fat.test.foo', ['1'])276 bean.fire(el1, 'fat.foo.test', ['2'])277 }278 }279 , 'on()': function (done) {280 this.runTest(done, function (el1, wrappedSpy) {281 bean.on(el1, 'fat.test.foo fat.foo.test', wrappedSpy)282 })283 }284 , 'add()': function (done) {285 this.runTest(done, function (el1, wrappedSpy) {286 bean.add(el1, 'fat.test.foo fat.foo.test', wrappedSpy)287 })288 }289 }290 291 , 'should only fire an event if the fired namespaces is within the event namespace or if the event namespace is within the fired namespace': {292 'setUp': function () {293 var self = this294 this.runTest = function (done, regFn) {295 var el1 = self.byId('foo')296 , trigger = self.trigger()297 , spy = self.spy()298 trigger.after(function () {299 assert.equals(spy.callCount, 5, 'triggered custom event')300 assert.equals(spy.firstCall.args[0], '1', 'expected array argument')301 assert.equals(spy.secondCall.args[0], '1', 'expected array argument')302 assert.equals(spy.thirdCall.args[0], '2', 'expected array argument')303 assert.equals(spy.getCall(3).args[0], '2', 'expected array argument')304 assert.equals(spy.getCall(4).args[0], '3', 'expected array argument')305 done()306 })307 regFn(el1, trigger.wrap(spy))308 bean.fire(el1, 'fat.test.foo', ['1'])309 bean.fire(el1, 'fat.foo.test', ['2'])310 bean.fire(el1, 'fat.test.ded', ['3'])311 }312 }313 , 'on()': function (done) {314 this.runTest(done, function (el1, wrappedSpy) {315 bean.on(el1, 'fat.test.foo.ded fat.foo.test fat.ded', wrappedSpy)316 })317 }318 , 'add()': function (done) {319 this.runTest(done, function (el1, wrappedSpy) {320 bean.add(el1, 'fat.test.foo.ded fat.foo.test fat.ded', wrappedSpy)321 })322 }323 }...
populate-components-test.js
Source:populate-components-test.js
1var assert = require('assert');2var vows = require('vows');3var wrapForOptimizing = require('../../../../lib/optimizer/wrap-for-optimizing').all;4var compatibilityFrom = require('../../../../lib/options/compatibility');5var validator = require('../../../../lib/optimizer/validator');6var populateComponents = require('../../../../lib/optimizer/level-2/properties/populate-components');7vows.describe(populateComponents)8 .addBatch({9 'shorthand': {10 'topic': function () {11 var wrapped = wrapForOptimizing([12 [13 'property',14 ['property-name', 'margin'],15 ['property-value', '0px'],16 ['property-value', '1px'],17 ['property-value', '2px'],18 ['property-value', '3px']19 ]20 ]);21 populateComponents(wrapped, validator(compatibilityFrom({})), []);22 return wrapped;23 },24 'has one': function (wrapped) {25 assert.lengthOf(wrapped, 1);26 },27 'becomes shorthand': function (wrapped) {28 assert.isTrue(wrapped[0].shorthand);29 },30 'is dirty': function (wrapped) {31 assert.isTrue(wrapped[0].dirty);32 },33 'gets 4 components': function (wrapped) {34 assert.lengthOf(wrapped[0].components, 4);35 },36 'gets a margin-top': function (wrapped) {37 assert.deepEqual(wrapped[0].components[0].name, 'margin-top');38 assert.deepEqual(wrapped[0].components[0].value, [['property-value', '0px']]);39 },40 'gets a margin-right': function (wrapped) {41 assert.deepEqual(wrapped[0].components[1].name, 'margin-right');42 assert.deepEqual(wrapped[0].components[1].value, [['property-value', '1px']]);43 },44 'gets a margin-bottom': function (wrapped) {45 assert.deepEqual(wrapped[0].components[2].name, 'margin-bottom');46 assert.deepEqual(wrapped[0].components[2].value, [['property-value', '2px']]);47 },48 'gets a margin-left': function (wrapped) {49 assert.deepEqual(wrapped[0].components[3].name, 'margin-left');50 assert.deepEqual(wrapped[0].components[3].value, [['property-value', '3px']]);51 }52 },53 'shorthand with shorthand components': {54 'topic': function () {55 var wrapped = wrapForOptimizing([56 [57 'property',58 ['property-name', 'border'],59 ['property-value', '1px'],60 ['property-value', 'solid'],61 ['property-value', 'red']62 ]63 ]);64 populateComponents(wrapped, validator(compatibilityFrom({})), []);65 return wrapped;66 },67 'has one': function (wrapped) {68 assert.lengthOf(wrapped, 1);69 },70 'becomes shorthand': function (wrapped) {71 assert.isTrue(wrapped[0].shorthand);72 },73 'is dirty': function (wrapped) {74 assert.isTrue(wrapped[0].dirty);75 },76 'gets 3 components': function (wrapped) {77 assert.lengthOf(wrapped[0].components, 3);78 },79 'gets a border-width with subcomponents': function (wrapped) {80 assert.deepEqual(wrapped[0].components[0].name, 'border-width');81 assert.deepEqual(wrapped[0].components[0].value, [82 ['property-value', '1px'],83 ['property-value', '1px'],84 ['property-value', '1px'],85 ['property-value', '1px']86 ]);87 assert.lengthOf(wrapped[0].components[0].components, 4);88 assert.deepEqual(wrapped[0].components[0].components.map(function (c) { return c.name; }), [89 'border-top-width',90 'border-right-width',91 'border-bottom-width',92 'border-left-width'93 ]);94 },95 'gets a border-style': function (wrapped) {96 assert.deepEqual(wrapped[0].components[1].name, 'border-style');97 assert.deepEqual(wrapped[0].components[1].value, [98 ['property-value', 'solid'],99 ['property-value', 'solid'],100 ['property-value', 'solid'],101 ['property-value', 'solid']102 ]);103 assert.lengthOf(wrapped[0].components[1].components, 4);104 assert.deepEqual(wrapped[0].components[1].components.map(function (c) { return c.name; }), [105 'border-top-style',106 'border-right-style',107 'border-bottom-style',108 'border-left-style'109 ]);110 },111 'gets a border-color': function (wrapped) {112 assert.deepEqual(wrapped[0].components[2].name, 'border-color');113 assert.deepEqual(wrapped[0].components[2].value, [114 ['property-value', 'red'],115 ['property-value', 'red'],116 ['property-value', 'red'],117 ['property-value', 'red']118 ]);119 assert.lengthOf(wrapped[0].components[2].components, 4);120 assert.deepEqual(wrapped[0].components[2].components.map(function (c) { return c.name; }), [121 'border-top-color',122 'border-right-color',123 'border-bottom-color',124 'border-left-color'125 ]);126 }127 },128 'longhand': {129 'topic': function () {130 var wrapped = wrapForOptimizing([131 [132 'property',133 ['property-name', 'margin-top'],134 ['property-value', '0px']135 ]136 ]);137 populateComponents(wrapped, validator(compatibilityFrom({})), []);138 return wrapped;139 },140 'has one': function (wrapped) {141 assert.lengthOf(wrapped, 1);142 },143 'gets no components': function (wrapped) {144 assert.isEmpty(wrapped[0].components);145 }146 },147 'no value': {148 'topic': function () {149 var wrapped = wrapForOptimizing([150 [151 'property',152 ['property-name', 'margin']153 ]154 ]);155 populateComponents(wrapped, validator(compatibilityFrom({})), []);156 return wrapped;157 },158 'has one': function (wrapped) {159 assert.lengthOf(wrapped, 1);160 },161 'is unused': function (wrapped) {162 assert.isTrue(wrapped[0].unused);163 }164 }165 })...
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!