-
Notifications
You must be signed in to change notification settings - Fork 79
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browser JS: Use strict mode, fix JSHint problems.
- Loading branch information
Showing
3 changed files
with
135 additions
and
120 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,36 +1,40 @@ | ||
var Yeti = { | ||
capture: function (resource) { | ||
if (resource === "/") { | ||
resource = ""; | ||
} | ||
resource += "/socket.io"; | ||
resource = resource.substr(1); // strip leading slash | ||
/*jshint browser:true */ | ||
/*global YUI, io */ | ||
(function () { | ||
"use strict"; | ||
|
||
YUI().use("cookie", function (Y) { | ||
var agentId = Y.Cookie.get("yeti-agent"); | ||
window.Yeti = { | ||
capture: function (resource) { | ||
if (resource === "/") { | ||
resource = ""; | ||
} | ||
resource += "/socket.io"; | ||
resource = resource.substr(1); // strip leading slash | ||
|
||
var socket = io.connect(io.util.uniqueUri({}) + "/capture", { | ||
resource: resource | ||
}); | ||
YUI().use("cookie", function (Y) { | ||
var agentId = Y.Cookie.get("yeti-agent"), | ||
socket = io.connect(io.util.uniqueUri({}) + "/capture", { | ||
resource: resource | ||
}); | ||
|
||
socket.json.emit("register", { | ||
agentId: agentId, | ||
ua: Y.UA | ||
}); | ||
socket.json.emit("register", { | ||
agentId: agentId, | ||
ua: Y.UA | ||
}); | ||
|
||
socket.on("ready", function (newId) { | ||
agentId = newId; | ||
Y.Cookie.set("yeti-agent", newId, { | ||
path: "/", | ||
expires: new Date("March 10, 2029") | ||
socket.on("ready", function (newId) { | ||
agentId = newId; | ||
Y.Cookie.set("yeti-agent", newId, { | ||
path: "/", | ||
expires: new Date("March 10, 2029") | ||
}); | ||
document.getElementById("test").innerHTML = "All set!"; | ||
}); | ||
document.getElementById("test").innerHTML = "All set!"; | ||
}); | ||
|
||
socket.on("navigate", function (test) { | ||
document.location.href = test; | ||
socket.on("navigate", function (test) { | ||
document.location.href = test; | ||
}); | ||
}); | ||
}); | ||
} | ||
}; | ||
|
||
} | ||
}; | ||
}()); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,110 +1,116 @@ | ||
/*jshint browser:true, nonstandard:true */ | ||
|
||
// At this point, the only script that | ||
// loaded on the page before us was socket.io.js. | ||
|
||
function $yetify(firstRunConfiguration) { | ||
(function () { | ||
"use strict"; | ||
|
||
var win = window, | ||
socket = $yetify.socket, | ||
Runner = null; | ||
window.$yetify = function $yetify(firstRunConfiguration) { | ||
|
||
function init(config) { | ||
$yetify.socket = null; | ||
$yetify.polls = 0; | ||
var win = window, | ||
socket = $yetify.socket, | ||
Runner = null; | ||
|
||
var getCookie = function (sKey) { | ||
// FIXME This breaks on IE6 and Android. | ||
return unescape(document.cookie.replace(new RegExp("(?:^|.*;\\s*)" + escape(sKey).replace(/[\-\.\+\*]/g, "\\$&") + "\\s*\\=\\s*((?:[^;](?!;))*[^;]?).*"), "$1")); | ||
}, | ||
io = win.io, | ||
socket, | ||
resourcePaths = ["socket.io"]; | ||
function init(config) { | ||
$yetify.socket = null; | ||
$yetify.polls = 0; | ||
|
||
if (config.mountpoint !== "/") { | ||
resourcePaths.unshift(config.mountpoint.substr(1)); | ||
} | ||
var getCookie = function (sKey) { | ||
// FIXME This breaks on IE6 and Android. | ||
return unescape(document.cookie.replace(new RegExp("(?:^|.*;\\s*)" + escape(sKey).replace(/[\-\.\+\*]/g, "\\$&") + "\\s*\\=\\s*((?:[^;](?!;))*[^;]?).*"), "$1")); | ||
}, | ||
io = win.io, | ||
socket, | ||
resourcePaths = ["socket.io"]; | ||
|
||
if (config.mountpoint !== "/") { | ||
resourcePaths.unshift(config.mountpoint.substr(1)); | ||
} | ||
|
||
socket = $yetify.socket = io.connect(io.util.uniqueUri({}) + "/run", { | ||
resource: resourcePaths.join("/") | ||
}); | ||
|
||
socket = $yetify.socket = io.connect(io.util.uniqueUri({}) + "/run", { | ||
resource: resourcePaths.join("/") | ||
}); | ||
// Handle user errors. | ||
win.onerror = function (message, url, line) { | ||
socket.json.emit("scriptError", { | ||
message: message, | ||
url: url, | ||
line: line | ||
}); | ||
return true; | ||
}; | ||
|
||
socket.on("navigate", function (test) { | ||
document.location.href = test; | ||
}); | ||
|
||
// Handle user errors. | ||
win.onerror = function (message, url, line) { | ||
socket.json.emit("scriptError", { | ||
message: message, | ||
url: url, | ||
line: line | ||
socket.json.emit("register", { | ||
agentId: getCookie("yeti-agent"), | ||
}); | ||
return true; | ||
}; | ||
|
||
socket.on("navigate", function (test) { | ||
document.location.href = test; | ||
}); | ||
|
||
socket.json.emit("register", { | ||
agentId: getCookie("yeti-agent"), | ||
}); | ||
} | ||
|
||
// $yetify will be called again from setTimeout. | ||
// In Firefox < 13, the first argument may be a `lateness` argument. | ||
// https://developer.mozilla.org/en/window.setTimeout | ||
// Make sure this argument is an object before initializing. | ||
if ("object" === typeof firstRunConfiguration) { | ||
init(firstRunConfiguration); | ||
if (document.compatMode !== "CSS1Compat") { | ||
throw new Error("Yeti requires HTML files with doctypes."); | ||
} | ||
} | ||
|
||
// At this point, we are ready to attempt injection. | ||
if (win.YUITest && win.YUITest.TestRunner) { | ||
Runner = win.YUITest.TestRunner; | ||
} | ||
|
||
// Poll for YUI test. | ||
if (!Runner) { | ||
// TODO Make this value configurable. | ||
if ($yetify.polls > 750) { | ||
//console.log("Timing out..."); | ||
throw new Error("Could not find YUI Test."); | ||
} else { | ||
$yetify.polls++; | ||
return win.setTimeout($yetify, 50); | ||
|
||
// $yetify will be called again from setTimeout. | ||
// In Firefox < 13, the first argument may be a `lateness` argument. | ||
// https://developer.mozilla.org/en/window.setTimeout | ||
// Make sure this argument is an object before initializing. | ||
if ("object" === typeof firstRunConfiguration) { | ||
init(firstRunConfiguration); | ||
if (document.compatMode !== "CSS1Compat") { | ||
throw new Error("Yeti requires HTML files with doctypes."); | ||
} | ||
} | ||
} | ||
|
||
// The test runner is on the page. | ||
// At this point, we are ready to attempt injection. | ||
if (win.YUITest && win.YUITest.TestRunner) { | ||
Runner = win.YUITest.TestRunner; | ||
} | ||
|
||
// Prevent careless errors. | ||
function reportCarelessErrors() { | ||
win.print = win.confirm = win.alert = win.open = function () { | ||
throw new Error("Careless method called."); | ||
}; | ||
} | ||
// Poll for YUI test. | ||
if (!Runner) { | ||
// TODO Make this value configurable. | ||
if ($yetify.polls > 750) { | ||
//console.log("Timing out..."); | ||
throw new Error("Could not find YUI Test."); | ||
} else { | ||
$yetify.polls = $yetify.polls + 1; | ||
return win.setTimeout($yetify, 50); | ||
} | ||
} | ||
|
||
// The test runner is on the page. | ||
|
||
function beat() { | ||
reportCarelessErrors(); | ||
socket.json.emit("beat"); | ||
} | ||
// Prevent careless errors. | ||
function reportCarelessErrors() { | ||
win.print = win.confirm = win.alert = win.open = function () { | ||
throw new Error("Careless method called."); | ||
}; | ||
} | ||
|
||
beat(); | ||
function beat() { | ||
reportCarelessErrors(); | ||
socket.json.emit("beat"); | ||
} | ||
|
||
function complete(data) { | ||
socket.json.emit("results", data.results); | ||
} | ||
beat(); | ||
|
||
// Did tests already complete? | ||
if (Runner._root && Runner._root.results && Runner._root.results.type === "report") { | ||
complete(Runner._root); | ||
} | ||
function complete(data) { | ||
socket.json.emit("results", data.results); | ||
} | ||
|
||
// Did tests already complete? | ||
if (Runner._root && Runner._root.results && Runner._root.results.type === "report") { | ||
complete(Runner._root); | ||
} | ||
|
||
// Otherwise, listen for completion. | ||
Runner.subscribe(Runner.COMPLETE_EVENT, complete); | ||
// Otherwise, listen for completion. | ||
Runner.subscribe(Runner.COMPLETE_EVENT, complete); | ||
|
||
// Send heartbeats. | ||
Runner.subscribe(Runner.TEST_PASS_EVENT, beat); | ||
Runner.subscribe(Runner.TEST_FAIL_EVENT, beat); | ||
Runner.subscribe(Runner.TEST_IGNORE_EVENT, beat); | ||
// Send heartbeats. | ||
Runner.subscribe(Runner.TEST_PASS_EVENT, beat); | ||
Runner.subscribe(Runner.TEST_FAIL_EVENT, beat); | ||
Runner.subscribe(Runner.TEST_IGNORE_EVENT, beat); | ||
|
||
} | ||
}; | ||
}()); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters