Skip to content

Commit

Permalink
Browser JS: Use strict mode, fix JSHint problems.
Browse files Browse the repository at this point in the history
  • Loading branch information
reid committed Apr 17, 2012
1 parent 913fd3f commit e78bc61
Show file tree
Hide file tree
Showing 3 changed files with 135 additions and 120 deletions.
62 changes: 33 additions & 29 deletions lib/hub/view/public/capture.js
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;
});
});
});
}
};

}
};
}());
184 changes: 95 additions & 89 deletions lib/hub/view/public/inject.js
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);

}
};
}());
9 changes: 7 additions & 2 deletions test/fixture/local-js.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,17 @@
/*global YUI */
YUI().use("test", function (Y) {
var LocalJSTestCase = new Y.Test.Case({
"use strict";
var LocalJSTestCase,
LocalJSSuite;

LocalJSTestCase = new Y.Test.Case({
name: "Yeti Local JS Test Case",
testOk: function () {
Y.Assert.areEqual(1, 1);
}
});

var LocalJSSuite = new Y.Test.Suite("Yeti Local JS Test Suite");
LocalJSSuite = new Y.Test.Suite("Yeti Local JS Test Suite");

LocalJSSuite.add(LocalJSTestCase);

Expand Down

0 comments on commit e78bc61

Please sign in to comment.