Best JavaScript code snippet using playwright-internal
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 })...
wrap-method.js
Source:wrap-method.js
1"use strict";2var getPropertyDescriptor = require("./get-property-descriptor");3var valueToString = require("./value-to-string");4var hasOwn = Object.prototype.hasOwnProperty;5function isFunction(obj) {6 return typeof obj === "function" || !!(obj && obj.constructor && obj.call && obj.apply);7}8function mirrorProperties(target, source) {9 for (var prop in source) {10 if (!hasOwn.call(target, prop)) {11 target[prop] = source[prop];12 }13 }14}15// Cheap way to detect if we have ES5 support.16var hasES5Support = "keys" in Object;17module.exports = function wrapMethod(object, property, method) {18 if (!object) {19 throw new TypeError("Should wrap property of object");20 }21 if (typeof method !== "function" && typeof method !== "object") {22 throw new TypeError("Method wrapper should be a function or a property descriptor");23 }24 function checkWrappedMethod(wrappedMethod) {25 var error;26 if (!isFunction(wrappedMethod)) {27 error = new TypeError("Attempted to wrap " + (typeof wrappedMethod) + " property " +28 valueToString(property) + " as function");29 } else if (wrappedMethod.restore && wrappedMethod.restore.sinon) {30 error = new TypeError("Attempted to wrap " + valueToString(property) + " which is already wrapped");31 } else if (wrappedMethod.calledBefore) {32 var verb = wrappedMethod.returns ? "stubbed" : "spied on";33 error = new TypeError("Attempted to wrap " + valueToString(property) + " which is already " + verb);34 }35 if (error) {36 if (wrappedMethod && wrappedMethod.stackTrace) {37 error.stack += "\n--------------\n" + wrappedMethod.stackTrace;38 }39 throw error;40 }41 }42 var error, wrappedMethod, i;43 function simplePropertyAssignment() {44 wrappedMethod = object[property];45 checkWrappedMethod(wrappedMethod);46 object[property] = method;47 method.displayName = property;48 }49 // Firefox has a problem when using hasOwn.call on objects from other frames.50 var owned = object.hasOwnProperty ? object.hasOwnProperty(property) : hasOwn.call(object, property);51 if (hasES5Support) {52 var methodDesc = (typeof method === "function") ? {value: method} : method;53 var wrappedMethodDesc = getPropertyDescriptor(object, property);54 if (!wrappedMethodDesc) {55 error = new TypeError("Attempted to wrap " + (typeof wrappedMethod) + " property " +56 property + " as function");57 } else if (wrappedMethodDesc.restore && wrappedMethodDesc.restore.sinon) {58 error = new TypeError("Attempted to wrap " + property + " which is already wrapped");59 }60 if (error) {61 if (wrappedMethodDesc && wrappedMethodDesc.stackTrace) {62 error.stack += "\n--------------\n" + wrappedMethodDesc.stackTrace;63 }64 throw error;65 }66 var types = Object.keys(methodDesc);67 for (i = 0; i < types.length; i++) {68 wrappedMethod = wrappedMethodDesc[types[i]];69 checkWrappedMethod(wrappedMethod);70 }71 mirrorProperties(methodDesc, wrappedMethodDesc);72 for (i = 0; i < types.length; i++) {73 mirrorProperties(methodDesc[types[i]], wrappedMethodDesc[types[i]]);74 }75 Object.defineProperty(object, property, methodDesc);76 // catch failing assignment77 // this is the converse of the check in `.restore` below78 if ( typeof method === "function" && object[property] !== method ) {79 // correct any wrongdoings caused by the defineProperty call above,80 // such as adding new items (if object was a Storage object)81 delete object[property];82 simplePropertyAssignment();83 }84 } else {85 simplePropertyAssignment();86 }87 method.displayName = property;88 // Set up a stack trace which can be used later to find what line of89 // code the original method was created on.90 method.stackTrace = (new Error("Stack Trace for original")).stack;91 method.restore = function () {92 // For prototype properties try to reset by delete first.93 // If this fails (ex: localStorage on mobile safari) then force a reset94 // via direct assignment.95 if (!owned) {96 // In some cases `delete` may throw an error97 try {98 delete object[property];99 } catch (e) {} // eslint-disable-line no-empty100 // For native code functions `delete` fails without throwing an error101 // on Chrome < 43, PhantomJS, etc.102 } else if (hasES5Support) {103 Object.defineProperty(object, property, wrappedMethodDesc);104 }105 if (hasES5Support) {106 var descriptor = getPropertyDescriptor(object, property);107 if (descriptor && descriptor.value === method) {108 object[property] = wrappedMethod;109 }110 }111 else {112 // Use strict equality comparison to check failures then force a reset113 // via direct assignment.114 if (object[property] === method) {115 object[property] = wrappedMethod;116 }117 }118 };119 method.wrappedMethod = wrappedMethod;120 method.restore.sinon = true;121 if (!hasES5Support) {122 mirrorProperties(method, wrappedMethod);123 }124 return method;...
Wrapper.js
Source:Wrapper.js
1/**2 *3 */4Ext.define('Ext.util.Wrapper', {5 mixins: ['Ext.mixin.Bindable'],6 constructor: function(elementConfig, wrappedElement) {7 var element = this.link('element', Ext.Element.create(elementConfig));8 if (wrappedElement) {9 element.insertBefore(wrappedElement);10 this.wrap(wrappedElement);11 }12 },13 bindSize: function(sizeName) {14 var wrappedElement = this.wrappedElement,15 boundMethodName;16 this.boundSizeName = sizeName;17 this.boundMethodName = boundMethodName = sizeName === 'width' ? 'setWidth' : 'setHeight';18 this.bind(wrappedElement, boundMethodName, 'onBoundSizeChange');19 wrappedElement[boundMethodName].call(wrappedElement, wrappedElement.getStyleValue(sizeName));20 },21 onBoundSizeChange: function(size, args) {22 var element = this.element;23 if (typeof size === 'string' && size.substr(-1) === '%') {24 args[0] = '100%';25 }26 else {27 size = '';28 }29 element[this.boundMethodName].call(element, size);30 },31 wrap: function(wrappedElement) {32 var element = this.element,33 innerDom;34 this.wrappedElement = wrappedElement;35 innerDom = element.dom;36 while (innerDom.firstElementChild !== null) {37 innerDom = innerDom.firstElementChild;38 }39 innerDom.appendChild(wrappedElement.dom);40 },41 destroy: function() {42 var element = this.element,43 dom = element.dom,44 wrappedElement = this.wrappedElement,45 boundMethodName = this.boundMethodName,46 parentNode = dom.parentNode,47 size;48 if (boundMethodName) {49 this.unbind(wrappedElement, boundMethodName, 'onBoundSizeChange');50 size = element.getStyle(this.boundSizeName);51 if (size) {52 wrappedElement[boundMethodName].call(wrappedElement, size);53 }54 }55 if (parentNode) {56 if (!wrappedElement.isDestroyed) {57 parentNode.replaceChild(dom.firstElementChild, dom);58 }59 delete this.wrappedElement;60 }61 this.callSuper();62 }...
wrapped-operation.js
Source:wrapped-operation.js
1if (typeof ot === 'undefined') {2 // Export for browsers3 var ot = {};4}5ot.WrappedOperation = (function (global) {6 'use strict';7 // A WrappedOperation contains an operation and corresponing metadata.8 function WrappedOperation (operation, meta) {9 this.wrapped = operation;10 this.meta = meta;11 }12 WrappedOperation.prototype.apply = function () {13 return this.wrapped.apply.apply(this.wrapped, arguments);14 };15 WrappedOperation.prototype.invert = function () {16 var meta = this.meta;17 return new WrappedOperation(18 this.wrapped.invert.apply(this.wrapped, arguments),19 meta && typeof meta === 'object' && typeof meta.invert === 'function' ?20 meta.invert.apply(meta, arguments) : meta21 );22 };23 // Copy all properties from source to target.24 function copy (source, target) {25 for (var key in source) {26 if (source.hasOwnProperty(key)) {27 target[key] = source[key];28 }29 }30 }31 function composeMeta (a, b) {32 if (a && typeof a === 'object') {33 if (typeof a.compose === 'function') { return a.compose(b); }34 var meta = {};35 copy(a, meta);36 copy(b, meta);37 return meta;38 }39 return b;40 }41 WrappedOperation.prototype.compose = function (other) {42 return new WrappedOperation(43 this.wrapped.compose(other.wrapped),44 composeMeta(this.meta, other.meta)45 );46 };47 function transformMeta (meta, operation) {48 if (meta && typeof meta === 'object') {49 if (typeof meta.transform === 'function') {50 return meta.transform(operation);51 }52 }53 return meta;54 }55 WrappedOperation.transform = function (a, b) {56 var transform = a.wrapped.constructor.transform;57 var pair = transform(a.wrapped, b.wrapped);58 return [59 new WrappedOperation(pair[0], transformMeta(a.meta, b.wrapped)),60 new WrappedOperation(pair[1], transformMeta(b.meta, a.wrapped))61 ];62 };63 return WrappedOperation;64}(this));65// Export for CommonJS66if (typeof module === 'object') {67 module.exports = ot.WrappedOperation;...
index_stopwatch_redux.js
Source:index_stopwatch_redux.js
1import React from "react";2import ReactDOM from "react-dom";3import { combineReducers, createStore } from "redux";4import { connect, Provider } from "react-redux";5const UPDATE_ACTION = "UPDATE_ACTION";6const createUpdateAction = () => ({7 type: UPDATE_ACTION8});9const stopWatch = function(10 initialState = {11 currentTimestamp: 012 },13 action14) {15 switch (action.type) {16 case UPDATE_ACTION:17 initialState.currentTimestamp = Date.now();18 return Object.assign({}, initialState);19 default:20 return initialState;21 }22};23const store = createStore(24 combineReducers({25 stopWatch26 })27);28class StopWatch extends React.Component {29 constructor(props) {30 super(props);31 const { update } = this.props;32 setInterval(update);33 }34 render() {35 const { currentTimestamp } = this.props;36 return <div>{currentTimestamp}</div>;37 }38}39const WrappedStopWatch = connect(40 function mapStateToProps(state, props) {41 const {42 stopWatch: { currentTimestamp }43 } = state;44 return {45 currentTimestamp46 };47 },48 function(dispatch) {49 return {50 update: () => {51 dispatch(createUpdateAction());52 }53 };54 }55)(StopWatch);56ReactDOM.render(57 <Provider store={store}>58 <div>59 <WrappedStopWatch />60 <WrappedStopWatch />61 <WrappedStopWatch />62 <WrappedStopWatch />63 <WrappedStopWatch />64 <WrappedStopWatch />65 <WrappedStopWatch />66 <WrappedStopWatch />67 <WrappedStopWatch />68 <WrappedStopWatch />69 <WrappedStopWatch />70 <WrappedStopWatch />71 <WrappedStopWatch />72 <WrappedStopWatch />73 <WrappedStopWatch />74 <WrappedStopWatch />75 <WrappedStopWatch />76 <WrappedStopWatch />77 <WrappedStopWatch />78 <WrappedStopWatch />79 </div>80 </Provider>,81 document.querySelector("#app")...
Using AI Code Generation
1const { chromium } = require('playwright');2(async () => {3 const browser = await chromium.launch();4 const context = await browser.newContext();5 const page = await context.newPage();6 await page.screenshot({ path: `example.png` });7 await browser.close();8})();
Using AI Code Generation
1const { firefox } = require('playwright');2(async () => {3 const browser = await firefox.launch();4 const context = await browser.newContext();5 const page = await context.newPage();6 await page.screenshot({ path: `example.png` });7 await browser.close();8})();9* [Playwright GitHub](
Using AI Code Generation
1const { internalAPI } = require('playwright');2const { chromium } = require('playwright-chromium');3(async () => {4 const browser = await chromium.launch();5 const context = await browser.newContext();6 const page = await context.newPage();7 const original = await internalAPI.grabOriginalMethod(page, 'evaluate');8 const result = await original('1+1');9 console.log(result);10 await browser.close();11})();12const { Page } = require('playwright/lib/server/page.js');13const original = Page.prototype.evaluate;14const { internalAPI } = require('playwright');15const { chromium } = require('playwright-chromium');16(async () => {17 const browser = await chromium.launch();18 const context = await browser.newContext();19 const page = await context.newPage();20 const original = await internalAPI.grabOriginalMethod(page, 'evaluate');21 const result = await original('1+1');22 console.log(result);23 await browser.close();24})();
Using AI Code Generation
1const { Playwright } = require('playwright-internal');2const { chromium } = Playwright;3const browser = await chromium.launch();4const page = await browser.newPage();5await page.screenshot({ path: 'example.png' });6await browser.close();7const { chromium } = require('playwright');8const browser = await chromium.launch();9const page = await browser.newPage();10await page.screenshot({ path: 'example.png' });11await browser.close();12const { Playwright } = require('playwright-internal');13const { chromium } = Playwright;14const browser = await chromium.launch();15const page = await browser.newPage();16await page.screenshot({ path: 'example.png' });17await browser.close();18const { chromium } = require('playwright');19const browser = await chromium.launch();20const page = await browser.newPage();21await page.screenshot({ path: 'example.png' });22await browser.close();23const { chromium } = require('playwright');24const browser = await chromium.launch();25const page = await browser.newPage();26await page.screenshot({ path: 'example.png' });27await browser.close();28const { chromium } = require('playwright');29const browser = await chromium.launch();30const page = await browser.newPage();31await page.screenshot({ path: 'example.png' });32await browser.close();33const { chromium } = require('playwright');34const browser = await chromium.launch();35const page = await browser.newPage();36await page.screenshot({ path: 'example.png' });37await browser.close();38const { chromium } = require('playwright');39const browser = await chromium.launch();
Using AI Code Generation
1const { chromium } = require('playwright');2const { wrapPlaywright } = require('@testim/root-cause-playwright');3const wrappedPlaywright = wrapPlaywright(chromium);4(async () => {5 const browser = await wrappedPlaywright.launch();6 const page = await browser.newPage();7 await page.screenshot({ path: 'testim.png' });8 await browser.close();9})();
Using AI Code Generation
1const { Playwright } = require('playwright-internal')2const { chromium } = Playwright3const playwright = require('playwright');4(async () => {5 const browser = await playwright.chromium.launch({ headless: false });6 const context = await browser.newContext();7 const page = await context.newPage();8 await page.screenshot({ path: 'example.png' });9 await browser.close();10})();11#### `Playwright.executablePath()`12#### `Playwright.launch([options])`
Using AI Code Generation
1const playwright = require('playwright-internal');2const fs = require('fs');3(async () => {4 const browser = await playwright.launchChromium({5 });6 const context = await browser.newContext();7 const page = await context.newPage();8 await page.screenshot({ path: 'google.png' });9 await browser.close();10})();
Using AI Code Generation
1const {chromium} = require('playwright');2const {getChromium} = require('playwright/internal');3(async () => {4 const browser = await chromium.launch();5 const chromiumBrowser = getChromium(browser);6 const {connection} = chromiumBrowser._browser;7 const {targetId} = connection._session._targetInfo;8 const {webSocketDebuggerUrl} = await connection.send('Target.getTargetInfo', {targetId});9 console.log(webSocketDebuggerUrl);10 await browser.close();11})();12const {chromium} = require('playwright');13const {launch} = require('puppeteer');14(async () => {15 const browser = await chromium.launch();16 const browserWSEndpoint = browser.wsEndpoint();17 console.log(browserWSEndpoint);18 const puppeteerBrowser = await launch({browserWSEndpoint});19 await puppeteerBrowser.close();20 await browser.close();21})();22const {chromium} = require('playwright');23const {getChromium} = require('playwright/internal');24(async () => {25 const browser = await chromium.launch();26 const chromiumBrowser = getChromium(browser);27 const {connection} = chromiumBrowser._browser;28 const {targetId} = connection._session._targetInfo;29 const {webSocketDebuggerUrl} = await connection.send('Target.getTargetInfo', {targetId});30 console.log(webSocketDebuggerUrl);31 await browser.close();32})();33const {chromium} = require('playwright');34const {launch} = require('puppeteer');35(async () => {36 const browser = await chromium.launch();37 const browserWSEndpoint = browser.wsEndpoint();38 console.log(browserWSEndpoint);39 const puppeteerBrowser = await launch({browserWSEndpoint});40 await puppeteerBrowser.close();41 await browser.close();42})();43const {chromium} = require('playwright');44const {getChromium} = require('playwright/internal');45(async () => {46 const browser = await chromium.launch();
Using AI Code Generation
1const { internal } = require('playwright');2const { chromium } = internal;3const { BrowserContext } = chromium;4const { Page } = chromium;5BrowserContext.prototype.newPage = async function (options) {6 const page = await Page.create(this, options);7 await page._initialize();8 await this._doSlowMo();9 return page;10};11Page.prototype.goto = async function (url, options = {}) {12 const { timeout = this._timeoutSettings.navigationTimeout() } = options;13 const waitUntil = options.waitUntil || 'load';14 const waitForLoadState = waitUntil === 'load' ? 'load' : 'domcontentloaded';15 const response = await this._frameManager.navigateFrame(16 this.mainFrame(),17 );18 await this._doSlowMo();19 return response;20};21const { chromium } = require('playwright');22(async () => {23 const browser = await chromium.launch({ headless: false });24 const context = await browser.newContext();25 const page = await context.newPage();26 await page.screenshot({ path: 'google.png' });27 await browser.close();28})();
LambdaTest’s Playwright tutorial will give you a broader idea about the Playwright automation framework, its unique features, and use cases with examples to exceed your understanding of Playwright testing. This tutorial will give A to Z guidance, from installing the Playwright framework to some best practices and advanced concepts.
Get 100 minutes of automation test minutes FREE!!