Squashed commit of work to make Jasmine a collection of isolated modules. Note now that in our test suite, "jasmine" now always refers to the build jasmine loaded from jasmine.js and "j$" always refers to the code in the src directories.

Also, dev_boot.js is now a copy of boot.js and has additional changes to load jasmine the second time, into the j$ reference.
This commit is contained in:
Davis W. Frank
2013-05-28 14:09:20 -07:00
parent 7516bba2b0
commit aca43bd3a3
52 changed files with 3828 additions and 3323 deletions

View File

@@ -11,6 +11,7 @@ function license() {
module.exports = { module.exports = {
'jasmine-html': { 'jasmine-html': {
src: [ src: [
'src/html/requireHtml.js',
'src/html/HtmlReporter.js', 'src/html/HtmlReporter.js',
'src/html/HtmlSpecFilter.js', 'src/html/HtmlSpecFilter.js',
'src/html/ResultsNode.js', 'src/html/ResultsNode.js',
@@ -20,6 +21,7 @@ module.exports = {
}, },
jasmine: { jasmine: {
src: [ src: [
'src/core/requireCore.js',
'src/core/base.js', 'src/core/base.js',
'src/core/util.js', 'src/core/util.js',
'src/core/Spec.js', 'src/core/Spec.js',
@@ -37,6 +39,13 @@ module.exports = {
src: ['lib/jasmine-core/boot/boot.js'], src: ['lib/jasmine-core/boot/boot.js'],
dest: 'lib/jasmine-core/boot.js' dest: 'lib/jasmine-core/boot.js'
}, },
console: {
src: [
'src/console/requireConsole.js',
'src/console/ConsoleReporter.js'
],
dest: 'src/console/console.js'
},
options: { options: {
banner: license(), banner: license(),
process: { process: {

View File

@@ -6,7 +6,7 @@ module Jasmine
end end
def js_files def js_files
(["jasmine.js"] + Dir.glob(File.join(path, "*.js"))).map { |f| File.basename(f) }.uniq (["jasmine.js"] + Dir.glob(File.join(path, "*.js"))).map { |f| File.basename(f) }.uniq - boot_files
end end
SPEC_TYPES = ["core", "html", "node"] SPEC_TYPES = ["core", "html", "node"]

View File

@@ -22,6 +22,9 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
// Jasmine boot.js for browser runners - exposes external/global interface, builds the Jasmine environment and executes it. // Jasmine boot.js for browser runners - exposes external/global interface, builds the Jasmine environment and executes it.
(function() { (function() {
window.jasmine = jasmineRequire.core(jasmineRequire);
jasmineRequire.html(jasmine);
var env = jasmine.getEnv(); var env = jasmine.getEnv();
var jasmineInterface = { var jasmineInterface = {

View File

@@ -1,5 +1,8 @@
// Jasmine boot.js for browser runners - exposes external/global interface, builds the Jasmine environment and executes it. // Jasmine boot.js for browser runners - exposes external/global interface, builds the Jasmine environment and executes it.
(function() { (function() {
window.jasmine = jasmineRequire.core(jasmineRequire);
jasmineRequire.html(jasmine);
var env = jasmine.getEnv(); var env = jasmine.getEnv();
var jasmineInterface = { var jasmineInterface = {

View File

@@ -20,311 +20,334 @@ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
jasmine.HtmlReporter = function(options) { jasmineRequire.html = function(j$) {
var env = options.env || {}, j$.ResultsNode = jasmineRequire.ResultsNode();
getContainer = options.getContainer, j$.HtmlReporter = jasmineRequire.HtmlReporter();
now = options.now || function() { return new Date().getTime();}, j$.QueryString = jasmineRequire.QueryString();
createElement = options.createElement, j$.HtmlSpecFilter = jasmineRequire.HtmlSpecFilter();
createTextNode = options.createTextNode, };
results = [], jasmineRequire.HtmlReporter = function() {
startTime, function HtmlReporter(options) {
specsExecuted = 0, var env = options.env || {},
failureCount = 0, getContainer = options.getContainer,
pendingSpecCount = 0, now = options.now || function() { return new Date().getTime();},
htmlReporterMain, createElement = options.createElement,
symbols; createTextNode = options.createTextNode,
results = [],
startTime,
specsExecuted = 0,
failureCount = 0,
pendingSpecCount = 0,
htmlReporterMain,
symbols;
this.initialize = function() { this.initialize = function() {
htmlReporterMain = createDom("div", {className: "html-reporter"}, htmlReporterMain = createDom("div", {className: "html-reporter"},
createDom("div", {className: "banner"}, createDom("div", {className: "banner"},
createDom("span", {className: "title"}, "Jasmine"), createDom("span", {className: "title"}, "Jasmine"),
createDom("span", {className: "version"}, jasmine.version) createDom("span", {className: "version"}, jasmine.version)
), ),
createDom("ul", {className: "symbol-summary"}), createDom("ul", {className: "symbol-summary"}),
createDom("div", {className: "alert"}), createDom("div", {className: "alert"}),
createDom("div", {className: "results"}, createDom("div", {className: "results"},
createDom("div", {className: "failures"}) createDom("div", {className: "failures"})
)
);
getContainer().appendChild(htmlReporterMain);
symbols = find(".symbol-summary")[0];
};
var totalSpecsDefined;
this.jasmineStarted = function(options) {
totalSpecsDefined = options.totalSpecsDefined || 0;
startTime = now();
};
var summary = createDom("div", {className: "summary"});
var topResults = new jasmine.ResultsNode({}, "", null),
currentParent = topResults;
this.suiteStarted = function(result) {
currentParent.addChild(result, "suite");
currentParent = currentParent.last();
};
this.suiteDone = function(result) {
if (currentParent == topResults) {
return;
}
currentParent = currentParent.parent;
};
this.specStarted = function(result) {
currentParent.addChild(result, "spec");
};
var failures = [];
this.specDone = function(result) {
if (result.status != "disabled") {
specsExecuted++;
}
symbols.appendChild(createDom("li", {
className: result.status,
id: "spec_" + result.id,
title: result.fullName}
));
if (result.status == "failed") {
failureCount++;
var failure =
createDom("div", {className: "spec-detail failed"},
createDom("a", {className: "description", title: result.fullName, href: specHref(result)}, result.fullName),
createDom("div", {className: "messages"})
);
var messages = failure.childNodes[1];
for (var i = 0; i < result.failedExpectations.length; i++) {
var expectation = result.failedExpectations[i];
messages.appendChild(createDom("div", {className: "result-message"}, expectation.message));
messages.appendChild(createDom("div", {className: "stack-trace"}, expectation.stack));
}
failures.push(failure);
}
if(result.status == "pending") {
pendingSpecCount++;
}
};
this.jasmineDone = function() {
var elapsed = now() - startTime;
var banner = find(".banner")[0];
banner.appendChild(createDom("span", {className: "duration"}, "finished in " + elapsed / 1000 + "s"));
var alert = find(".alert")[0];
alert.appendChild(createDom("span", { className: "exceptions" },
createDom("label", { className: "label", 'for': "raise-exceptions" }, "raise exceptions"),
createDom("input", {
className: "raise",
id: "raise-exceptions",
type: "checkbox"
})
));
var checkbox = find("input")[0];
checkbox.checked = !env.catchingExceptions();
checkbox.onclick = options.onRaiseExceptionsClick;
if (specsExecuted < totalSpecsDefined) {
var skippedMessage = "Ran " + specsExecuted + " of " + totalSpecsDefined + " specs - run all";
alert.appendChild(
createDom("span", {className: "bar skipped"},
createDom("a", {href: "?", title: "Run all specs"}, skippedMessage)
) )
); );
} getContainer().appendChild(htmlReporterMain);
var statusBarMessage = "" + pluralize("spec", specsExecuted) + ", " + pluralize("failure", failureCount);
if(pendingSpecCount) { statusBarMessage += ", " + pluralize("pending spec", pendingSpecCount); }
var statusBarClassName = "bar " + ((failureCount > 0) ? "failed" : "passed"); symbols = find(".symbol-summary")[0];
alert.appendChild(createDom("span", {className: statusBarClassName}, statusBarMessage)); };
var results = find(".results")[0]; var totalSpecsDefined;
results.appendChild(summary); this.jasmineStarted = function(options) {
totalSpecsDefined = options.totalSpecsDefined || 0;
startTime = now();
};
summaryList(topResults, summary); var summary = createDom("div", {className: "summary"});
function summaryList(resultsTree, domParent) { var topResults = new jasmine.ResultsNode({}, "", null),
var specListNode; currentParent = topResults;
for (var i = 0; i < resultsTree.children.length; i++) {
var resultNode = resultsTree.children[i]; this.suiteStarted = function(result) {
if (resultNode.type == "suite") { currentParent.addChild(result, "suite");
var suiteListNode = createDom("ul", {className: "suite", id: "suite-" + resultNode.result.id}, currentParent = currentParent.last();
createDom("li", {className: "suite-detail"}, };
createDom("a", {href: specHref(resultNode.result)}, resultNode.result.description)
) this.suiteDone = function(result) {
if (currentParent == topResults) {
return;
}
currentParent = currentParent.parent;
};
this.specStarted = function(result) {
currentParent.addChild(result, "spec");
};
var failures = [];
this.specDone = function(result) {
if (result.status != "disabled") {
specsExecuted++;
}
symbols.appendChild(createDom("li", {
className: result.status,
id: "spec_" + result.id,
title: result.fullName}
));
if (result.status == "failed") {
failureCount++;
var failure =
createDom("div", {className: "spec-detail failed"},
createDom("a", {className: "description", title: result.fullName, href: specHref(result)}, result.fullName),
createDom("div", {className: "messages"})
); );
var messages = failure.childNodes[1];
summaryList(resultNode, suiteListNode); for (var i = 0; i < result.failedExpectations.length; i++) {
domParent.appendChild(suiteListNode); var expectation = result.failedExpectations[i];
messages.appendChild(createDom("div", {className: "result-message"}, expectation.message));
messages.appendChild(createDom("div", {className: "stack-trace"}, expectation.stack));
} }
if (resultNode.type == "spec") {
if (domParent.getAttribute("class") != "specs") { failures.push(failure);
specListNode = createDom("ul", {className: "specs"}); }
domParent.appendChild(specListNode);
if (result.status == "pending") {
pendingSpecCount++;
}
};
this.jasmineDone = function() {
var elapsed = now() - startTime;
var banner = find(".banner")[0];
banner.appendChild(createDom("span", {className: "duration"}, "finished in " + elapsed / 1000 + "s"));
var alert = find(".alert")[0];
alert.appendChild(createDom("span", { className: "exceptions" },
createDom("label", { className: "label", 'for': "raise-exceptions" }, "raise exceptions"),
createDom("input", {
className: "raise",
id: "raise-exceptions",
type: "checkbox"
})
));
var checkbox = find("input")[0];
checkbox.checked = !env.catchingExceptions();
checkbox.onclick = options.onRaiseExceptionsClick;
if (specsExecuted < totalSpecsDefined) {
var skippedMessage = "Ran " + specsExecuted + " of " + totalSpecsDefined + " specs - run all";
alert.appendChild(
createDom("span", {className: "bar skipped"},
createDom("a", {href: "?", title: "Run all specs"}, skippedMessage)
)
);
}
var statusBarMessage = "" + pluralize("spec", specsExecuted) + ", " + pluralize("failure", failureCount);
if (pendingSpecCount) { statusBarMessage += ", " + pluralize("pending spec", pendingSpecCount); }
var statusBarClassName = "bar " + ((failureCount > 0) ? "failed" : "passed");
alert.appendChild(createDom("span", {className: statusBarClassName}, statusBarMessage));
var results = find(".results")[0];
results.appendChild(summary);
summaryList(topResults, summary);
function summaryList(resultsTree, domParent) {
var specListNode;
for (var i = 0; i < resultsTree.children.length; i++) {
var resultNode = resultsTree.children[i];
if (resultNode.type == "suite") {
var suiteListNode = createDom("ul", {className: "suite", id: "suite-" + resultNode.result.id},
createDom("li", {className: "suite-detail"},
createDom("a", {href: specHref(resultNode.result)}, resultNode.result.description)
)
);
summaryList(resultNode, suiteListNode);
domParent.appendChild(suiteListNode);
}
if (resultNode.type == "spec") {
if (domParent.getAttribute("class") != "specs") {
specListNode = createDom("ul", {className: "specs"});
domParent.appendChild(specListNode);
}
specListNode.appendChild(
createDom("li", {
className: resultNode.result.status,
id: "spec-" + resultNode.result.id
},
createDom("a", {href: specHref(resultNode.result)}, resultNode.result.description)
)
);
} }
specListNode.appendChild(
createDom("li", {
className: resultNode.result.status,
id: "spec-" + resultNode.result.id
},
createDom("a", {href: specHref(resultNode.result)}, resultNode.result.description)
)
);
} }
} }
}
if (failures.length) { if (failures.length) {
alert.appendChild( alert.appendChild(
createDom('span', {className: "menu bar spec-list"}, createDom('span', {className: "menu bar spec-list"},
createDom("span", {}, "Spec List | "), createDom("span", {}, "Spec List | "),
createDom('a', {className: "failures-menu", href: "#"}, "Failures"))); createDom('a', {className: "failures-menu", href: "#"}, "Failures")));
alert.appendChild( alert.appendChild(
createDom('span', {className: "menu bar failure-list"}, createDom('span', {className: "menu bar failure-list"},
createDom('a', {className: "spec-list-menu", href: "#"}, "Spec List"), createDom('a', {className: "spec-list-menu", href: "#"}, "Spec List"),
createDom("span", {}, " | Failures "))); createDom("span", {}, " | Failures ")));
find(".failures-menu")[0].onclick = function() {
setMenuModeTo('failure-list');
};
find(".spec-list-menu")[0].onclick = function() {
setMenuModeTo('spec-list');
};
find(".failures-menu")[0].onclick = function() {
setMenuModeTo('failure-list'); setMenuModeTo('failure-list');
};
find(".spec-list-menu")[0].onclick = function() {
setMenuModeTo('spec-list');
};
setMenuModeTo('failure-list'); var failureNode = find(".failures")[0];
for (var i = 0; i < failures.length; i++) {
var failureNode = find(".failures")[0]; failureNode.appendChild(failures[i]);
for (var i = 0; i < failures.length; i++) {
failureNode.appendChild(failures[i]);
}
}
};
return this;
function find(selector) {
if (selector.match(/^\./)) {
var className = selector.substring(1);
return getContainer().getElementsByClassName(className);
} else {
return getContainer().getElementsByTagName(selector);
}
}
function createDom(type, attrs, childrenVarArgs) {
var el = createElement(type);
for (var i = 2; i < arguments.length; i++) {
var child = arguments[i];
if (typeof child === 'string') {
el.appendChild(createTextNode(child));
} else {
if (child) {
el.appendChild(child);
} }
} }
} };
for (var attr in attrs) { return this;
if (attr == "className") {
el[attr] = attrs[attr]; function find(selector) {
if (selector.match(/^\./)) {
var className = selector.substring(1);
return getContainer().getElementsByClassName(className);
} else { } else {
el.setAttribute(attr, attrs[attr]); return getContainer().getElementsByTagName(selector);
} }
} }
return el; function createDom(type, attrs, childrenVarArgs) {
} var el = createElement(type);
function pluralize(singular, count) { for (var i = 2; i < arguments.length; i++) {
var word = (count == 1 ? singular : singular + "s"); var child = arguments[i];
return "" + count + " " + word; if (typeof child === 'string') {
} el.appendChild(createTextNode(child));
} else {
function specHref(result) { if (child) {
return "?spec=" + encodeURIComponent(result.fullName); el.appendChild(child);
} }
function setMenuModeTo(mode) {
htmlReporterMain.setAttribute("class", "html-reporter " + mode);
}
};
jasmine.HtmlSpecFilter = function(options) {
var filterPattern = new RegExp(options && options.filterString());
this.matches = function(specName) {
return filterPattern.test(specName);
};
};
jasmine.ResultsNode = function(result, type, parent) {
this.result = result;
this.type = type;
this.parent = parent;
this.children = [];
this.addChild = function(result, type) {
this.children.push(new jasmine.ResultsNode(result, type, this));
};
this.last = function() {
return this.children[this.children.length-1];
};
};
jasmine.QueryString = function(options) {
this.setParam = function(key, value) {
var paramMap = queryStringToParamMap();
paramMap[key] = value;
options.getWindowLocation().search = toQueryString(paramMap);
};
this.getParam = function(key) {
return queryStringToParamMap()[key];
};
return this;
function toQueryString(paramMap) {
var qStrPairs = [];
for (var prop in paramMap) {
qStrPairs.push(encodeURIComponent(prop) + "=" + encodeURIComponent(paramMap[prop]));
}
return "?" + qStrPairs.join('&');
}
function queryStringToParamMap() {
var paramStr = options.getWindowLocation().search.substring(1),
params = [],
paramMap = {};
if (paramStr.length > 0) {
params = paramStr.split('&');
for (var i = 0; i < params.length; i++) {
var p = params[i].split('=');
var value = decodeURIComponent(p[1]);
if (value === "true" || value === "false") {
value = JSON.parse(value);
} }
paramMap[decodeURIComponent(p[0])] = value;
} }
for (var attr in attrs) {
if (attr == "className") {
el[attr] = attrs[attr];
} else {
el.setAttribute(attr, attrs[attr]);
}
}
return el;
} }
return paramMap; function pluralize(singular, count) {
var word = (count == 1 ? singular : singular + "s");
return "" + count + " " + word;
}
function specHref(result) {
return "?spec=" + encodeURIComponent(result.fullName);
}
function setMenuModeTo(mode) {
htmlReporterMain.setAttribute("class", "html-reporter " + mode);
}
} }
return HtmlReporter;
};
jasmineRequire.HtmlSpecFilter = function() {
function HtmlSpecFilter(options) {
var filterPattern = new RegExp(options && options.filterString());
this.matches = function(specName) {
return filterPattern.test(specName);
};
}
return HtmlSpecFilter;
};
jasmineRequire.ResultsNode = function() {
function ResultsNode(result, type, parent) {
this.result = result;
this.type = type;
this.parent = parent;
this.children = [];
this.addChild = function(result, type) {
this.children.push(new ResultsNode(result, type, this));
};
this.last = function() {
return this.children[this.children.length - 1];
};
}
return ResultsNode;
};
jasmineRequire.QueryString = function() {
function QueryString(options) {
this.setParam = function(key, value) {
var paramMap = queryStringToParamMap();
paramMap[key] = value;
options.getWindowLocation().search = toQueryString(paramMap);
};
this.getParam = function(key) {
return queryStringToParamMap()[key];
};
return this;
function toQueryString(paramMap) {
var qStrPairs = [];
for (var prop in paramMap) {
qStrPairs.push(encodeURIComponent(prop) + "=" + encodeURIComponent(paramMap[prop]));
}
return "?" + qStrPairs.join('&');
}
function queryStringToParamMap() {
var paramStr = options.getWindowLocation().search.substring(1),
params = [],
paramMap = {};
if (paramStr.length > 0) {
params = paramStr.split('&');
for (var i = 0; i < params.length; i++) {
var p = params[i].split('=');
var value = decodeURIComponent(p[1]);
if (value === "true" || value === "false") {
value = JSON.parse(value);
}
paramMap[decodeURIComponent(p[0])] = value;
}
}
return paramMap;
}
}
return QueryString;
}; };

File diff suppressed because it is too large Load Diff

View File

@@ -19,7 +19,7 @@ describe("ConsoleReporter", function() {
}); });
it("reports that the suite has started to the console", function() { it("reports that the suite has started to the console", function() {
var reporter = new jasmine.ConsoleReporter({ var reporter = new j$.ConsoleReporter({
print: out.print print: out.print
}); });
@@ -29,7 +29,7 @@ describe("ConsoleReporter", function() {
}); });
it("reports a passing spec as a dot", function() { it("reports a passing spec as a dot", function() {
var reporter = new jasmine.ConsoleReporter({ var reporter = new j$.ConsoleReporter({
print: out.print print: out.print
}); });
@@ -39,7 +39,7 @@ describe("ConsoleReporter", function() {
}); });
it("does not report a disabled spec", function() { it("does not report a disabled spec", function() {
var reporter = new jasmine.ConsoleReporter({ var reporter = new j$.ConsoleReporter({
print: out.print print: out.print
}); });
@@ -49,7 +49,7 @@ describe("ConsoleReporter", function() {
}); });
it("reports a failing spec as an 'F'", function() { it("reports a failing spec as an 'F'", function() {
var reporter = new jasmine.ConsoleReporter({ var reporter = new j$.ConsoleReporter({
print: out.print print: out.print
}); });
@@ -59,7 +59,7 @@ describe("ConsoleReporter", function() {
}); });
it("reports a pending spec as a '*'", function() { it("reports a pending spec as a '*'", function() {
var reporter = new jasmine.ConsoleReporter({ var reporter = new j$.ConsoleReporter({
print: out.print print: out.print
}); });
@@ -70,7 +70,7 @@ describe("ConsoleReporter", function() {
it("reports a summary when done (singluar spec and time)", function() { it("reports a summary when done (singluar spec and time)", function() {
var fakeNow = jasmine.createSpy('fake Date.now'), var fakeNow = jasmine.createSpy('fake Date.now'),
reporter = new jasmine.ConsoleReporter({ reporter = new j$.ConsoleReporter({
print: out.print, print: out.print,
now: fakeNow now: fakeNow
}); });
@@ -91,7 +91,7 @@ describe("ConsoleReporter", function() {
it("reports a summary when done (pluralized specs and seconds)", function() { it("reports a summary when done (pluralized specs and seconds)", function() {
var fakeNow = jasmine.createSpy('fake Date.now'), var fakeNow = jasmine.createSpy('fake Date.now'),
reporter = new jasmine.ConsoleReporter({ reporter = new j$.ConsoleReporter({
print: out.print, print: out.print,
now: fakeNow now: fakeNow
}); });
@@ -125,7 +125,7 @@ describe("ConsoleReporter", function() {
}); });
it("reports a summary when done that includes stack traces for a failing suite", function() { it("reports a summary when done that includes stack traces for a failing suite", function() {
var reporter = new jasmine.ConsoleReporter({ var reporter = new j$.ConsoleReporter({
print: out.print print: out.print
}); });
@@ -155,7 +155,7 @@ describe("ConsoleReporter", function() {
it("calls the onComplete callback when the suite is done", function() { it("calls the onComplete callback when the suite is done", function() {
var onComplete = jasmine.createSpy('onComplete'), var onComplete = jasmine.createSpy('onComplete'),
reporter = new jasmine.ConsoleReporter({ reporter = new j$.ConsoleReporter({
print: out.print, print: out.print,
onComplete: onComplete onComplete: onComplete
}); });
@@ -169,7 +169,7 @@ describe("ConsoleReporter", function() {
describe("with color", function() { describe("with color", function() {
it("reports that the suite has started to the console", function() { it("reports that the suite has started to the console", function() {
var reporter = new jasmine.ConsoleReporter({ var reporter = new j$.ConsoleReporter({
print: out.print, print: out.print,
showColors: true showColors: true
}); });
@@ -180,7 +180,7 @@ describe("ConsoleReporter", function() {
}); });
it("reports a passing spec as a dot", function() { it("reports a passing spec as a dot", function() {
var reporter = new jasmine.ConsoleReporter({ var reporter = new j$.ConsoleReporter({
print: out.print, print: out.print,
showColors: true showColors: true
}); });
@@ -191,7 +191,7 @@ describe("ConsoleReporter", function() {
}); });
it("does not report a disabled spec", function() { it("does not report a disabled spec", function() {
var reporter = new jasmine.ConsoleReporter({ var reporter = new j$.ConsoleReporter({
print: out.print, print: out.print,
showColors: true showColors: true
}); });
@@ -202,7 +202,7 @@ describe("ConsoleReporter", function() {
}); });
it("reports a failing spec as an 'F'", function() { it("reports a failing spec as an 'F'", function() {
var reporter = new jasmine.ConsoleReporter({ var reporter = new j$.ConsoleReporter({
print: out.print, print: out.print,
showColors: true showColors: true
}); });

View File

@@ -5,7 +5,7 @@ describe("Clock", function() {
delayedFunctionScheduler = jasmine.createSpyObj('delayedFunctionScheduler', ['scheduleFunction']), delayedFunctionScheduler = jasmine.createSpyObj('delayedFunctionScheduler', ['scheduleFunction']),
global = { setTimeout: setTimeout }, global = { setTimeout: setTimeout },
delayedFn = jasmine.createSpy('delayedFn'), delayedFn = jasmine.createSpy('delayedFn'),
clock = new jasmine.Clock(global, delayedFunctionScheduler); clock = new j$.Clock(global, delayedFunctionScheduler);
clock.setTimeout(delayedFn, 0); clock.setTimeout(delayedFn, 0);
@@ -19,7 +19,7 @@ describe("Clock", function() {
delayedFunctionScheduler = {scheduleFunction: scheduleFunction}, delayedFunctionScheduler = {scheduleFunction: scheduleFunction},
global = { setTimeout: setTimeout }, global = { setTimeout: setTimeout },
delayedFn = jasmine.createSpy('delayedFn'), delayedFn = jasmine.createSpy('delayedFn'),
clock = new jasmine.Clock(global, delayedFunctionScheduler); clock = new j$.Clock(global, delayedFunctionScheduler);
clock.install(); clock.install();
clock.setTimeout(delayedFn, 0, 'a', 'b'); clock.setTimeout(delayedFn, 0, 'a', 'b');
@@ -35,7 +35,7 @@ describe("Clock", function() {
delayedFunctionScheduler = {scheduleFunction: scheduleFunction}, delayedFunctionScheduler = {scheduleFunction: scheduleFunction},
global = { setTimeout: setTimeout }, global = { setTimeout: setTimeout },
delayedFn = jasmine.createSpy('delayedFn'), delayedFn = jasmine.createSpy('delayedFn'),
clock = new jasmine.Clock(global, delayedFunctionScheduler), clock = new j$.Clock(global, delayedFunctionScheduler),
timeoutId; timeoutId;
clock.install(); clock.install();
@@ -48,7 +48,7 @@ describe("Clock", function() {
var clearTimeout = jasmine.createSpy('clearTimeout'), var clearTimeout = jasmine.createSpy('clearTimeout'),
delayedFunctionScheduler = jasmine.createSpyObj('delayedFunctionScheduler', ['clearTimeout']), delayedFunctionScheduler = jasmine.createSpyObj('delayedFunctionScheduler', ['clearTimeout']),
global = { clearTimeout: clearTimeout }, global = { clearTimeout: clearTimeout },
clock = new jasmine.Clock(global, delayedFunctionScheduler); clock = new j$.Clock(global, delayedFunctionScheduler);
clock.clearTimeout(123); clock.clearTimeout(123);
@@ -60,7 +60,7 @@ describe("Clock", function() {
delayedFunctionScheduler = jasmine.createSpyObj('delayedFunctionScheduler', ['removeFunctionWithId']), delayedFunctionScheduler = jasmine.createSpyObj('delayedFunctionScheduler', ['removeFunctionWithId']),
global = { setTimeout: clearTimeout }, global = { setTimeout: clearTimeout },
delayedFn = jasmine.createSpy('delayedFn'), delayedFn = jasmine.createSpy('delayedFn'),
clock = new jasmine.Clock(global, delayedFunctionScheduler); clock = new j$.Clock(global, delayedFunctionScheduler);
clock.install(); clock.install();
clock.clearTimeout(123); clock.clearTimeout(123);
@@ -74,7 +74,7 @@ describe("Clock", function() {
delayedFunctionScheduler = jasmine.createSpyObj('delayedFunctionScheduler', ['scheduleFunction']), delayedFunctionScheduler = jasmine.createSpyObj('delayedFunctionScheduler', ['scheduleFunction']),
global = { setInterval: setInterval }, global = { setInterval: setInterval },
delayedFn = jasmine.createSpy('delayedFn'), delayedFn = jasmine.createSpy('delayedFn'),
clock = new jasmine.Clock(global, delayedFunctionScheduler); clock = new j$.Clock(global, delayedFunctionScheduler);
clock.setInterval(delayedFn, 0); clock.setInterval(delayedFn, 0);
@@ -88,7 +88,7 @@ describe("Clock", function() {
delayedFunctionScheduler = {scheduleFunction: scheduleFunction}, delayedFunctionScheduler = {scheduleFunction: scheduleFunction},
global = { setInterval: setInterval }, global = { setInterval: setInterval },
delayedFn = jasmine.createSpy('delayedFn'), delayedFn = jasmine.createSpy('delayedFn'),
clock = new jasmine.Clock(global, delayedFunctionScheduler); clock = new j$.Clock(global, delayedFunctionScheduler);
clock.install(); clock.install();
clock.setInterval(delayedFn, 0, 'a', 'b'); clock.setInterval(delayedFn, 0, 'a', 'b');
@@ -104,7 +104,7 @@ describe("Clock", function() {
delayedFunctionScheduler = {scheduleFunction: scheduleFunction}, delayedFunctionScheduler = {scheduleFunction: scheduleFunction},
global = { setInterval: setInterval }, global = { setInterval: setInterval },
delayedFn = jasmine.createSpy('delayedFn'), delayedFn = jasmine.createSpy('delayedFn'),
clock = new jasmine.Clock(global, delayedFunctionScheduler), clock = new j$.Clock(global, delayedFunctionScheduler),
intervalId; intervalId;
clock.install(); clock.install();
@@ -117,7 +117,7 @@ describe("Clock", function() {
var clearInterval = jasmine.createSpy('clearInterval'), var clearInterval = jasmine.createSpy('clearInterval'),
delayedFunctionScheduler = jasmine.createSpyObj('delayedFunctionScheduler', ['clearInterval']), delayedFunctionScheduler = jasmine.createSpyObj('delayedFunctionScheduler', ['clearInterval']),
global = { clearInterval: clearInterval }, global = { clearInterval: clearInterval },
clock = new jasmine.Clock(global, delayedFunctionScheduler); clock = new j$.Clock(global, delayedFunctionScheduler);
clock.clearInterval(123); clock.clearInterval(123);
@@ -129,7 +129,7 @@ describe("Clock", function() {
delayedFunctionScheduler = jasmine.createSpyObj('delayedFunctionScheduler', ['removeFunctionWithId']), delayedFunctionScheduler = jasmine.createSpyObj('delayedFunctionScheduler', ['removeFunctionWithId']),
global = { setInterval: clearInterval }, global = { setInterval: clearInterval },
delayedFn = jasmine.createSpy('delayedFn'), delayedFn = jasmine.createSpy('delayedFn'),
clock = new jasmine.Clock(global, delayedFunctionScheduler); clock = new j$.Clock(global, delayedFunctionScheduler);
clock.install(); clock.install();
clock.clearInterval(123); clock.clearInterval(123);
@@ -139,7 +139,7 @@ describe("Clock", function() {
}); });
it("gives you a friendly reminder if the Clock is not installed and you tick", function() { it("gives you a friendly reminder if the Clock is not installed and you tick", function() {
var clock = new jasmine.Clock({}, jasmine.createSpyObj('delayedFunctionScheduler', ['tick'])); var clock = new j$.Clock({}, jasmine.createSpyObj('delayedFunctionScheduler', ['tick']));
expect(function() { expect(function() {
clock.tick(50); clock.tick(50);
}).toThrow(); }).toThrow();
@@ -151,7 +151,7 @@ describe("Clock", function() {
delayedFunctionScheduler = jasmine.createSpyObj('delayedFunctionScheduler', ['scheduleFunction', 'tick', 'reset']), delayedFunctionScheduler = jasmine.createSpyObj('delayedFunctionScheduler', ['scheduleFunction', 'tick', 'reset']),
global = { setTimeout: setTimeout, setInterval: setInterval }, global = { setTimeout: setTimeout, setInterval: setInterval },
delayedFn = jasmine.createSpy('delayedFn'), delayedFn = jasmine.createSpy('delayedFn'),
clock = new jasmine.Clock(global, delayedFunctionScheduler); clock = new j$.Clock(global, delayedFunctionScheduler);
clock.install(); clock.install();
clock.setTimeout(delayedFn, 0); clock.setTimeout(delayedFn, 0);
@@ -188,7 +188,7 @@ describe("Clock", function() {
delayedFunctionScheduler = jasmine.createSpyObj('delayedFunctionScheduler', ['scheduleFunction']), delayedFunctionScheduler = jasmine.createSpyObj('delayedFunctionScheduler', ['scheduleFunction']),
fn = jasmine.createSpy('fn'), fn = jasmine.createSpy('fn'),
global = { setTimeout: setTimeout, setInterval: setInterval }, global = { setTimeout: setTimeout, setInterval: setInterval },
clock = new jasmine.Clock(global, delayedFunctionScheduler); clock = new j$.Clock(global, delayedFunctionScheduler);
setTimeout.apply = null; setTimeout.apply = null;
setInterval.apply = null; setInterval.apply = null;
@@ -216,8 +216,8 @@ describe("Clock (acceptance)", function() {
delayedFn2 = jasmine.createSpy('delayedFn2'), delayedFn2 = jasmine.createSpy('delayedFn2'),
delayedFn3 = jasmine.createSpy('delayedFn3'), delayedFn3 = jasmine.createSpy('delayedFn3'),
recurring1 = jasmine.createSpy('recurring1'), recurring1 = jasmine.createSpy('recurring1'),
delayedFunctionScheduler = new jasmine.DelayedFunctionScheduler(), delayedFunctionScheduler = new j$.DelayedFunctionScheduler(),
clock = new jasmine.Clock({setTimeout: setTimeout}, delayedFunctionScheduler); clock = new j$.Clock({setTimeout: setTimeout}, delayedFunctionScheduler);
clock.install(); clock.install();
@@ -262,8 +262,8 @@ describe("Clock (acceptance)", function() {
it("can clear a previously set timeout", function() { it("can clear a previously set timeout", function() {
var clearedFn = jasmine.createSpy('clearedFn'), var clearedFn = jasmine.createSpy('clearedFn'),
delayedFunctionScheduler = new jasmine.DelayedFunctionScheduler(), delayedFunctionScheduler = new j$.DelayedFunctionScheduler(),
clock = new jasmine.Clock({setTimeout: function() {}}, delayedFunctionScheduler), clock = new j$.Clock({setTimeout: function() {}}, delayedFunctionScheduler),
timeoutId; timeoutId;
clock.install(); clock.install();
@@ -279,8 +279,8 @@ describe("Clock (acceptance)", function() {
it("correctly schedules functions after the Clock has advanced", function() { it("correctly schedules functions after the Clock has advanced", function() {
var delayedFn1 = jasmine.createSpy('delayedFn1'), var delayedFn1 = jasmine.createSpy('delayedFn1'),
delayedFunctionScheduler = new jasmine.DelayedFunctionScheduler(), delayedFunctionScheduler = new j$.DelayedFunctionScheduler(),
clock = new jasmine.Clock({setTimeout: function(){}}, delayedFunctionScheduler); clock = new j$.Clock({setTimeout: function(){}}, delayedFunctionScheduler);
clock.install(); clock.install();
@@ -294,8 +294,8 @@ describe("Clock (acceptance)", function() {
it("calls the global clearTimeout correctly when not installed", function () { it("calls the global clearTimeout correctly when not installed", function () {
var delayedFunctionScheduler = jasmine.createSpyObj('delayedFunctionScheduler', ['clearTimeout']), var delayedFunctionScheduler = jasmine.createSpyObj('delayedFunctionScheduler', ['clearTimeout']),
global = originalJasmine.getGlobal(), global = jasmine.getGlobal(),
clock = new jasmine.Clock(global, delayedFunctionScheduler); clock = new j$.Clock(global, delayedFunctionScheduler);
expect(function() { expect(function() {
clock.clearTimeout(123) clock.clearTimeout(123)
@@ -304,8 +304,8 @@ describe("Clock (acceptance)", function() {
it("calls the global clearTimeout correctly when not installed", function () { it("calls the global clearTimeout correctly when not installed", function () {
var delayedFunctionScheduler = jasmine.createSpyObj('delayedFunctionScheduler', ['clearTimeout']), var delayedFunctionScheduler = jasmine.createSpyObj('delayedFunctionScheduler', ['clearTimeout']),
global = originalJasmine.getGlobal(), global = jasmine.getGlobal(),
clock = new jasmine.Clock(global, delayedFunctionScheduler); clock = new j$.Clock(global, delayedFunctionScheduler);
expect(function() { expect(function() {
clock.clearInterval(123) clock.clearInterval(123)

View File

@@ -1,6 +1,6 @@
describe("DelayedFunctionScheduler", function() { describe("DelayedFunctionScheduler", function() {
it("schedules a function for later execution", function() { it("schedules a function for later execution", function() {
var scheduler = new jasmine.DelayedFunctionScheduler(), var scheduler = new j$.DelayedFunctionScheduler(),
fn = jasmine.createSpy('fn'); fn = jasmine.createSpy('fn');
scheduler.scheduleFunction(fn, 0); scheduler.scheduleFunction(fn, 0);
@@ -13,7 +13,7 @@ describe("DelayedFunctionScheduler", function() {
}); });
it("#tick defaults to 0", function() { it("#tick defaults to 0", function() {
var scheduler = new jasmine.DelayedFunctionScheduler(), var scheduler = new j$.DelayedFunctionScheduler(),
fn = jasmine.createSpy('fn'); fn = jasmine.createSpy('fn');
scheduler.scheduleFunction(fn, 0); scheduler.scheduleFunction(fn, 0);
@@ -26,7 +26,7 @@ describe("DelayedFunctionScheduler", function() {
}); });
it("defaults delay to 0", function() { it("defaults delay to 0", function() {
var scheduler = new jasmine.DelayedFunctionScheduler(), var scheduler = new j$.DelayedFunctionScheduler(),
fn = jasmine.createSpy('fn'); fn = jasmine.createSpy('fn');
scheduler.scheduleFunction(fn); scheduler.scheduleFunction(fn);
@@ -39,7 +39,7 @@ describe("DelayedFunctionScheduler", function() {
}); });
it("optionally passes params to scheduled functions", function() { it("optionally passes params to scheduled functions", function() {
var scheduler = new jasmine.DelayedFunctionScheduler(), var scheduler = new j$.DelayedFunctionScheduler(),
fn = jasmine.createSpy('fn'); fn = jasmine.createSpy('fn');
scheduler.scheduleFunction(fn, 0, ['foo', 'bar']); scheduler.scheduleFunction(fn, 0, ['foo', 'bar']);
@@ -52,7 +52,7 @@ describe("DelayedFunctionScheduler", function() {
}); });
it("scheduled fns can optionally reoccur", function() { it("scheduled fns can optionally reoccur", function() {
var scheduler = new jasmine.DelayedFunctionScheduler(), var scheduler = new j$.DelayedFunctionScheduler(),
fn = jasmine.createSpy('fn'); fn = jasmine.createSpy('fn');
scheduler.scheduleFunction(fn, 20, [], true); scheduler.scheduleFunction(fn, 20, [], true);
@@ -74,7 +74,7 @@ describe("DelayedFunctionScheduler", function() {
}); });
it("increments scheduled fns ids unless one is passed", function() { it("increments scheduled fns ids unless one is passed", function() {
var scheduler = new jasmine.DelayedFunctionScheduler(); var scheduler = new j$.DelayedFunctionScheduler();
expect(scheduler.scheduleFunction(function() { expect(scheduler.scheduleFunction(function() {
}, 0)).toBe(1); }, 0)).toBe(1);
@@ -87,7 +87,7 @@ describe("DelayedFunctionScheduler", function() {
}); });
it("#removeFunctionWithId removes a previously scheduled function with a given id", function() { it("#removeFunctionWithId removes a previously scheduled function with a given id", function() {
var scheduler = new jasmine.DelayedFunctionScheduler(), var scheduler = new j$.DelayedFunctionScheduler(),
fn = jasmine.createSpy('fn'), fn = jasmine.createSpy('fn'),
timeoutKey; timeoutKey;
@@ -103,7 +103,7 @@ describe("DelayedFunctionScheduler", function() {
}); });
it("reset removes scheduled functions", function() { it("reset removes scheduled functions", function() {
var scheduler = new jasmine.DelayedFunctionScheduler(), var scheduler = new j$.DelayedFunctionScheduler(),
fn = jasmine.createSpy('fn'); fn = jasmine.createSpy('fn');
scheduler.scheduleFunction(fn, 0); scheduler.scheduleFunction(fn, 0);
@@ -118,7 +118,7 @@ describe("DelayedFunctionScheduler", function() {
}); });
it("reset resets the returned ids", function() { it("reset resets the returned ids", function() {
var scheduler = new jasmine.DelayedFunctionScheduler(); var scheduler = new j$.DelayedFunctionScheduler();
expect(scheduler.scheduleFunction(function() { }, 0)).toBe(1); expect(scheduler.scheduleFunction(function() { }, 0)).toBe(1);
expect(scheduler.scheduleFunction(function() { }, 0, [], false, 123)).toBe(123); expect(scheduler.scheduleFunction(function() { }, 0, [], false, 123)).toBe(123);
@@ -128,7 +128,7 @@ describe("DelayedFunctionScheduler", function() {
}); });
it("reset resets the current tick time", function() { it("reset resets the current tick time", function() {
var scheduler = new jasmine.DelayedFunctionScheduler(), var scheduler = new j$.DelayedFunctionScheduler(),
fn = jasmine.createSpy('fn'); fn = jasmine.createSpy('fn');
expect(fn).not.toHaveBeenCalled(); expect(fn).not.toHaveBeenCalled();
@@ -144,7 +144,7 @@ describe("DelayedFunctionScheduler", function() {
}); });
it("executes recurring functions interleaved with regular functions in the correct order", function() { it("executes recurring functions interleaved with regular functions in the correct order", function() {
var scheduler = new jasmine.DelayedFunctionScheduler(), var scheduler = new j$.DelayedFunctionScheduler(),
fn = jasmine.createSpy('fn'), fn = jasmine.createSpy('fn'),
recurringCallCount = 0, recurringCallCount = 0,
recurring = jasmine.createSpy('recurring').andCallFake(function() { recurring = jasmine.createSpy('recurring').andCallFake(function() {

View File

@@ -2,7 +2,7 @@
describe("Env", function() { describe("Env", function() {
var env; var env;
beforeEach(function() { beforeEach(function() {
env = new jasmine.Env(); env = new j$.Env();
env.updateInterval = 0; env.updateInterval = 0;
}); });
@@ -18,7 +18,7 @@ describe("Env", function() {
var fakeReporter; var fakeReporter;
beforeEach(function() { beforeEach(function() {
fakeReporter = originalJasmine.createSpyObj("fakeReporter", ["jasmineStarted"]); fakeReporter = jasmine.createSpyObj("fakeReporter", ["jasmineStarted"]);
}); });
it("should allow reporters to be registered", function() { it("should allow reporters to be registered", function() {
@@ -111,14 +111,14 @@ describe("Env", function() {
it("returns true if the exception is a pending spec exception", function() { it("returns true if the exception is a pending spec exception", function() {
env.catchExceptions(false); env.catchExceptions(false);
expect(env.catchException(new Error(jasmine.Spec.pendingSpecExceptionMessage))).toBe(true); expect(env.catchException(new Error(j$.Spec.pendingSpecExceptionMessage))).toBe(true);
}); });
it("returns false if the exception is not a pending spec exception and not catching exceptions", function() { it("returns false if the exception is not a pending spec exception and not catching exceptions", function() {
env.catchExceptions(false); env.catchExceptions(false);
expect(env.catchException(new Error("external error"))).toBe(false); expect(env.catchException(new Error("external error"))).toBe(false);
expect(env.catchException(new Error(jasmine.Spec.pendingSpecExceptionMessage))).toBe(true); expect(env.catchException(new Error(j$.Spec.pendingSpecExceptionMessage))).toBe(true);
}); });
}); });
@@ -126,7 +126,7 @@ describe("Env", function() {
it("throws the Pending Spec exception", function() { it("throws the Pending Spec exception", function() {
expect(function() { expect(function() {
env.pending(); env.pending();
}).toThrow(jasmine.Spec.pendingSpecExceptionMessage); }).toThrow(j$.Spec.pendingSpecExceptionMessage);
}); });
}); });
}); });
@@ -134,7 +134,7 @@ describe("Env", function() {
describe("Env (integration)", function() { describe("Env (integration)", function() {
it("Suites execute as expected (no nesting)", function() { it("Suites execute as expected (no nesting)", function() {
var env = new jasmine.Env(), var env = new j$.Env(),
calls = []; calls = [];
env.describe("A Suite", function() { env.describe("A Suite", function() {
@@ -155,7 +155,7 @@ describe("Env (integration)", function() {
}); });
it("Nested Suites execute as expected", function() { it("Nested Suites execute as expected", function() {
var env = new jasmine.Env(), var env = new j$.Env(),
calls = []; calls = [];
env.describe("Outer suite", function() { env.describe("Outer suite", function() {
@@ -183,7 +183,7 @@ describe("Env (integration)", function() {
}); });
it("Multiple top-level Suites execute as expected", function() { it("Multiple top-level Suites execute as expected", function() {
var env = new jasmine.Env(), var env = new j$.Env(),
calls = []; calls = [];
env.describe("Outer suite", function() { env.describe("Outer suite", function() {
@@ -220,7 +220,7 @@ describe("Env (integration)", function() {
var globalSetTimeout = jasmine.createSpy('globalSetTimeout'), var globalSetTimeout = jasmine.createSpy('globalSetTimeout'),
delayedFunctionForGlobalClock = jasmine.createSpy('delayedFunctionForGlobalClock'), delayedFunctionForGlobalClock = jasmine.createSpy('delayedFunctionForGlobalClock'),
delayedFunctionForMockClock = jasmine.createSpy('delayedFunctionForMockClock'), delayedFunctionForMockClock = jasmine.createSpy('delayedFunctionForMockClock'),
env = new jasmine.Env({global: { setTimeout: globalSetTimeout }}); env = new j$.Env({global: { setTimeout: globalSetTimeout }});
env.describe("tests", function() { env.describe("tests", function() {
env.it("test with mock clock", function() { env.it("test with mock clock", function() {
@@ -242,8 +242,9 @@ describe("Env (integration)", function() {
expect(globalSetTimeout).toHaveBeenCalledWith(delayedFunctionForGlobalClock, 100); expect(globalSetTimeout).toHaveBeenCalledWith(delayedFunctionForGlobalClock, 100);
}); });
// TODO: something is wrong with this spec
it("should report as expected", function() { it("should report as expected", function() {
var env = new jasmine.Env(), var env = new j$.Env(),
reporter = jasmine.createSpyObj('fakeReproter', [ reporter = jasmine.createSpyObj('fakeReproter', [
"jasmineStarted", "jasmineStarted",
"jasmineDone", "jasmineDone",
@@ -280,7 +281,7 @@ describe("Env (integration)", function() {
}); });
it("should be possible to get full name from a spec", function() { it("should be possible to get full name from a spec", function() {
var env = new jasmine.Env({global: { setTimeout: setTimeout }}), var env = new j$.Env({global: { setTimeout: setTimeout }}),
topLevelSpec, nestedSpec, doublyNestedSpec; topLevelSpec, nestedSpec, doublyNestedSpec;
env.describe("my tests", function() { env.describe("my tests", function() {

View File

@@ -7,7 +7,7 @@ describe("ExceptionFormatter", function() {
message: 'you got your foo in my bar', message: 'you got your foo in my bar',
name: 'A Classic Mistake' name: 'A Classic Mistake'
}, },
exceptionFormatter = new jasmine.ExceptionFormatter(), exceptionFormatter = new j$.ExceptionFormatter(),
message = exceptionFormatter.message(sampleFirefoxException); message = exceptionFormatter.message(sampleFirefoxException);
expect(message).toEqual('A Classic Mistake: you got your foo in my bar in foo.js (line 1978)'); expect(message).toEqual('A Classic Mistake: you got your foo in my bar in foo.js (line 1978)');
@@ -20,7 +20,7 @@ describe("ExceptionFormatter", function() {
message: 'you got your foo in my bar', message: 'you got your foo in my bar',
name: 'A Classic Mistake' name: 'A Classic Mistake'
}, },
exceptionFormatter = new jasmine.ExceptionFormatter(), exceptionFormatter = new j$.ExceptionFormatter(),
message = exceptionFormatter.message(sampleWebkitException); message = exceptionFormatter.message(sampleWebkitException);
expect(message).toEqual('A Classic Mistake: you got your foo in my bar in foo.js (line 1978)'); expect(message).toEqual('A Classic Mistake: you got your foo in my bar in foo.js (line 1978)');
@@ -31,7 +31,7 @@ describe("ExceptionFormatter", function() {
message: 'you got your foo in my bar', message: 'you got your foo in my bar',
name: 'A Classic Mistake' name: 'A Classic Mistake'
}, },
exceptionFormatter = new jasmine.ExceptionFormatter(), exceptionFormatter = new j$.ExceptionFormatter(),
message = exceptionFormatter.message(sampleV8); message = exceptionFormatter.message(sampleV8);
expect(message).toEqual('A Classic Mistake: you got your foo in my bar'); expect(message).toEqual('A Classic Mistake: you got your foo in my bar');
@@ -42,11 +42,11 @@ describe("ExceptionFormatter", function() {
describe("#stack", function() { describe("#stack", function() {
it("formats stack traces from Webkit, Firefox or node.js", function() { it("formats stack traces from Webkit, Firefox or node.js", function() {
var error = new Error("an error"); var error = new Error("an error");
expect(new jasmine.ExceptionFormatter().stack(error)).toMatch(/ExceptionFormatterSpec\.js.*\d+/) expect(new j$.ExceptionFormatter().stack(error)).toMatch(/ExceptionFormatterSpec\.js.*\d+/)
}); });
it("returns null if no Error provided", function() { it("returns null if no Error provided", function() {
expect(new jasmine.ExceptionFormatter().stack()).toBeNull(); expect(new j$.ExceptionFormatter().stack()).toBeNull();
}); });
}); });
}); });

View File

@@ -2,7 +2,7 @@ describe('Exceptions:', function() {
var env; var env;
beforeEach(function() { beforeEach(function() {
env = new jasmine.Env(); env = new j$.Env();
env.updateInterval = 0; env.updateInterval = 0;
}); });

View File

@@ -1,16 +1,16 @@
describe("buildExpectationResult", function() { describe("buildExpectationResult", function() {
it("defaults to passed", function() { it("defaults to passed", function() {
var result = jasmine.buildExpectationResult({passed: 'some-value'}); var result = j$.buildExpectationResult({passed: 'some-value'});
expect(result.passed).toBe('some-value'); expect(result.passed).toBe('some-value');
}); });
it("message defaults to Passed for passing specs", function() { it("message defaults to Passed for passing specs", function() {
var result = jasmine.buildExpectationResult({passed: true, message: 'some-value'}); var result = j$.buildExpectationResult({passed: true, message: 'some-value'});
expect(result.message).toBe('Passed.'); expect(result.message).toBe('Passed.');
}); });
it("message returns the message for failing expecations", function() { it("message returns the message for failing expecations", function() {
var result = jasmine.buildExpectationResult({passed: false, message: 'some-value'}); var result = j$.buildExpectationResult({passed: false, message: 'some-value'});
expect(result.message).toBe('some-value'); expect(result.message).toBe('some-value');
}); });
@@ -18,7 +18,7 @@ describe("buildExpectationResult", function() {
var fakeError = {message: 'foo'}, var fakeError = {message: 'foo'},
messageFormatter = jasmine.createSpy("exception message formatter").andReturn(fakeError.message); messageFormatter = jasmine.createSpy("exception message formatter").andReturn(fakeError.message);
var result = jasmine.buildExpectationResult( var result = j$.buildExpectationResult(
{ {
passed: false, passed: false,
error: fakeError, error: fakeError,
@@ -33,7 +33,7 @@ describe("buildExpectationResult", function() {
var fakeError = {stack: 'foo'}, var fakeError = {stack: 'foo'},
stackFormatter = jasmine.createSpy("stack formatter").andReturn(fakeError.stack); stackFormatter = jasmine.createSpy("stack formatter").andReturn(fakeError.stack);
var result = jasmine.buildExpectationResult( var result = j$.buildExpectationResult(
{ {
passed: false, passed: false,
error: fakeError, error: fakeError,
@@ -45,17 +45,17 @@ describe("buildExpectationResult", function() {
}); });
it("matcherName returns passed matcherName", function() { it("matcherName returns passed matcherName", function() {
var result = jasmine.buildExpectationResult({matcherName: 'some-value'}); var result = j$.buildExpectationResult({matcherName: 'some-value'});
expect(result.matcherName).toBe('some-value'); expect(result.matcherName).toBe('some-value');
}); });
it("expected returns passed expected", function() { it("expected returns passed expected", function() {
var result = jasmine.buildExpectationResult({expected: 'some-value'}); var result = j$.buildExpectationResult({expected: 'some-value'});
expect(result.expected).toBe('some-value'); expect(result.expected).toBe('some-value');
}); });
it("actual returns passed actual", function() { it("actual returns passed actual", function() {
var result = jasmine.buildExpectationResult({actual: 'some-value'}); var result = j$.buildExpectationResult({actual: 'some-value'});
expect(result.actual).toBe('some-value'); expect(result.actual).toBe('some-value');
}); });
}); });

View File

@@ -5,7 +5,7 @@ xdescribe('JsApiReporter (integration specs)', function() {
var suite, nestedSuite, nestedSpec; var suite, nestedSuite, nestedSpec;
beforeEach(function() { beforeEach(function() {
env = new jasmine.Env(); env = new j$.Env();
env.updateInterval = 0; env.updateInterval = 0;
suite = env.describe("top-level suite", function() { suite = env.describe("top-level suite", function() {
@@ -26,7 +26,7 @@ xdescribe('JsApiReporter (integration specs)', function() {
}); });
reporter = new jasmine.JsApiReporter(jasmine); reporter = new j$.JsApiReporter(jasmine);
env.addReporter(reporter); env.addReporter(reporter);
env.execute(); env.execute();
@@ -83,7 +83,7 @@ xdescribe('JsApiReporter (integration specs)', function() {
describe("JsApiReporter", function() { describe("JsApiReporter", function() {
it("knows when a full environment is started", function() { it("knows when a full environment is started", function() {
var reporter = new jasmine.JsApiReporter(); var reporter = new j$.JsApiReporter();
expect(reporter.started).toBe(false); expect(reporter.started).toBe(false);
expect(reporter.finished).toBe(false); expect(reporter.finished).toBe(false);
@@ -95,7 +95,7 @@ describe("JsApiReporter", function() {
}); });
it("knows when a full environment is done", function() { it("knows when a full environment is done", function() {
var reporter = new jasmine.JsApiReporter(); var reporter = new j$.JsApiReporter();
expect(reporter.started).toBe(false); expect(reporter.started).toBe(false);
expect(reporter.finished).toBe(false); expect(reporter.finished).toBe(false);
@@ -107,13 +107,13 @@ describe("JsApiReporter", function() {
}); });
it("defaults to 'loaded' status", function() { it("defaults to 'loaded' status", function() {
var reporter = new jasmine.JsApiReporter(); var reporter = new j$.JsApiReporter();
expect(reporter.status()).toEqual('loaded'); expect(reporter.status()).toEqual('loaded');
}); });
it("reports 'started' when Jasmine has started", function() { it("reports 'started' when Jasmine has started", function() {
var reporter = new jasmine.JsApiReporter(); var reporter = new j$.JsApiReporter();
reporter.jasmineStarted(); reporter.jasmineStarted();
@@ -121,7 +121,7 @@ describe("JsApiReporter", function() {
}); });
it("reports 'done' when Jasmine is done", function() { it("reports 'done' when Jasmine is done", function() {
var reporter = new jasmine.JsApiReporter(); var reporter = new j$.JsApiReporter();
reporter.jasmineDone(); reporter.jasmineDone();
@@ -129,7 +129,7 @@ describe("JsApiReporter", function() {
}); });
it("tracks a suite", function() { it("tracks a suite", function() {
var reporter = new jasmine.JsApiReporter(); var reporter = new j$.JsApiReporter();
reporter.suiteStarted({ reporter.suiteStarted({
id: 123, id: 123,
@@ -152,7 +152,7 @@ describe("JsApiReporter", function() {
describe("#specResults", function() { describe("#specResults", function() {
var reporter, specResult1, specResult2; var reporter, specResult1, specResult2;
beforeEach(function() { beforeEach(function() {
reporter = new jasmine.JsApiReporter(); reporter = new j$.JsApiReporter();
specResult1 = { specResult1 = {
id: 1, id: 1,
description: "A spec" description: "A spec"

View File

@@ -2,7 +2,7 @@ describe("jasmine.Matchers", function() {
var env, spec; var env, spec;
beforeEach(function() { beforeEach(function() {
env = new jasmine.Env(); env = new j$.Env();
env.updateInterval = 0; env.updateInterval = 0;
var suite = env.describe("suite", function() { var suite = env.describe("suite", function() {
@@ -391,7 +391,7 @@ describe("jasmine.Matchers", function() {
var matcher; var matcher;
beforeEach(function () { beforeEach(function () {
matcher = { matcher = {
jasmineMatches: originalJasmine.createSpy("jasmineMatches") jasmineMatches: jasmine.createSpy("jasmineMatches")
}; };
}); });
@@ -699,7 +699,7 @@ describe("jasmine.Matchers", function() {
TestClass = { TestClass = {
normalFunction: function() { normalFunction: function() {
}, },
spyFunction: originalJasmine.createSpy("My spy") spyFunction: jasmine.createSpy("My spy")
}; };
}); });
@@ -912,7 +912,7 @@ describe("jasmine.Matchers", function() {
describe("with an empty object", function () { describe("with an empty object", function () {
var containing; var containing;
beforeEach(function () { beforeEach(function () {
containing = new jasmine.Matchers.ObjectContaining({}); containing = new j$.Matchers.ObjectContaining({});
}); });
it("matches everything", function () { it("matches everything", function () {
expect(containing.jasmineMatches("foo", [], [])).toBe(true); expect(containing.jasmineMatches("foo", [], [])).toBe(true);
@@ -928,7 +928,7 @@ describe("jasmine.Matchers", function() {
beforeEach(function () { beforeEach(function () {
mismatchKeys = []; mismatchKeys = [];
mismatchValues = []; mismatchValues = [];
containing = new jasmine.Matchers.ObjectContaining({foo: "fooVal", bar: "barVal"}); containing = new j$.Matchers.ObjectContaining({foo: "fooVal", bar: "barVal"});
}); });
it("doesn't match an empty object", function () { it("doesn't match an empty object", function () {
@@ -979,7 +979,7 @@ describe("jasmine.Matchers", function() {
describe("in real life", function () { describe("in real life", function () {
var method; var method;
beforeEach(function () { beforeEach(function () {
method = originalJasmine.createSpy("method"); method = jasmine.createSpy("method");
method({a:"b", c:"d"}); method({a:"b", c:"d"});
}); });
it("works correctly for positive matches", function () { it("works correctly for positive matches", function () {

View File

@@ -1,34 +1,34 @@
describe("jasmine.pp", function () { describe("j$.pp", function () {
it("should wrap strings in single quotes", function() { it("should wrap strings in single quotes", function() {
expect(jasmine.pp("some string")).toEqual("'some string'"); expect(j$.pp("some string")).toEqual("'some string'");
expect(jasmine.pp("som' string")).toEqual("'som' string'"); expect(j$.pp("som' string")).toEqual("'som' string'");
}); });
it("should stringify primitives properly", function() { it("should stringify primitives properly", function() {
expect(jasmine.pp(true)).toEqual("true"); expect(j$.pp(true)).toEqual("true");
expect(jasmine.pp(false)).toEqual("false"); expect(j$.pp(false)).toEqual("false");
expect(jasmine.pp(null)).toEqual("null"); expect(j$.pp(null)).toEqual("null");
expect(jasmine.pp(jasmine.undefined)).toEqual("undefined"); expect(j$.pp(jasmine.undefined)).toEqual("undefined");
expect(jasmine.pp(3)).toEqual("3"); expect(j$.pp(3)).toEqual("3");
expect(jasmine.pp(-3.14)).toEqual("-3.14"); expect(j$.pp(-3.14)).toEqual("-3.14");
}); });
it("should stringify arrays properly", function() { it("should stringify arrays properly", function() {
expect(jasmine.pp([1, 2])).toEqual("[ 1, 2 ]"); expect(j$.pp([1, 2])).toEqual("[ 1, 2 ]");
expect(jasmine.pp([1, 'foo', {}, jasmine.undefined, null])).toEqual("[ 1, 'foo', { }, undefined, null ]"); expect(j$.pp([1, 'foo', {}, jasmine.undefined, null])).toEqual("[ 1, 'foo', { }, undefined, null ]");
}); });
it("should indicate circular array references", function() { it("should indicate circular array references", function() {
var array1 = [1, 2]; var array1 = [1, 2];
var array2 = [array1]; var array2 = [array1];
array1.push(array2); array1.push(array2);
expect(jasmine.pp(array1)).toEqual("[ 1, 2, [ <circular reference: Array> ] ]"); expect(j$.pp(array1)).toEqual("[ 1, 2, [ <circular reference: Array> ] ]");
}); });
it("should stringify objects properly", function() { it("should stringify objects properly", function() {
expect(jasmine.pp({foo: 'bar'})).toEqual("{ foo : 'bar' }"); expect(j$.pp({foo: 'bar'})).toEqual("{ foo : 'bar' }");
expect(jasmine.pp({foo:'bar', baz:3, nullValue: null, undefinedValue: jasmine.undefined})).toEqual("{ foo : 'bar', baz : 3, nullValue : null, undefinedValue : undefined }"); expect(j$.pp({foo:'bar', baz:3, nullValue: null, undefinedValue: jasmine.undefined})).toEqual("{ foo : 'bar', baz : 3, nullValue : null, undefinedValue : undefined }");
expect(jasmine.pp({foo: function () { expect(j$.pp({foo: function () {
}, bar: [1, 2, 3]})).toEqual("{ foo : Function, bar : [ 1, 2, 3 ] }"); }, bar: [1, 2, 3]})).toEqual("{ foo : Function, bar : [ 1, 2, 3 ] }");
}); });
@@ -37,39 +37,39 @@ describe("jasmine.pp", function () {
SomeClass.prototype.foo = "inherited foo"; SomeClass.prototype.foo = "inherited foo";
var instance = new SomeClass(); var instance = new SomeClass();
instance.bar = "my own bar"; instance.bar = "my own bar";
expect(jasmine.pp(instance)).toEqual("{ bar : 'my own bar' }"); expect(j$.pp(instance)).toEqual("{ bar : 'my own bar' }");
}); });
it("should not recurse objects and arrays more deeply than jasmine.MAX_PRETTY_PRINT_DEPTH", function() { it("should not recurse objects and arrays more deeply than j$.MAX_PRETTY_PRINT_DEPTH", function() {
var originalMaxDepth = jasmine.MAX_PRETTY_PRINT_DEPTH; var originalMaxDepth = j$.MAX_PRETTY_PRINT_DEPTH;
var nestedObject = { level1: { level2: { level3: { level4: "leaf" } } } }; var nestedObject = { level1: { level2: { level3: { level4: "leaf" } } } };
var nestedArray = [1, [2, [3, [4, "leaf"]]]]; var nestedArray = [1, [2, [3, [4, "leaf"]]]];
try { try {
jasmine.MAX_PRETTY_PRINT_DEPTH = 2; j$.MAX_PRETTY_PRINT_DEPTH = 2;
expect(jasmine.pp(nestedObject)).toEqual("{ level1 : { level2 : Object } }"); expect(j$.pp(nestedObject)).toEqual("{ level1 : { level2 : Object } }");
expect(jasmine.pp(nestedArray)).toEqual("[ 1, [ 2, Array ] ]"); expect(j$.pp(nestedArray)).toEqual("[ 1, [ 2, Array ] ]");
jasmine.MAX_PRETTY_PRINT_DEPTH = 3; j$.MAX_PRETTY_PRINT_DEPTH = 3;
expect(jasmine.pp(nestedObject)).toEqual("{ level1 : { level2 : { level3 : Object } } }"); expect(j$.pp(nestedObject)).toEqual("{ level1 : { level2 : { level3 : Object } } }");
expect(jasmine.pp(nestedArray)).toEqual("[ 1, [ 2, [ 3, Array ] ] ]"); expect(j$.pp(nestedArray)).toEqual("[ 1, [ 2, [ 3, Array ] ] ]");
jasmine.MAX_PRETTY_PRINT_DEPTH = 4; j$.MAX_PRETTY_PRINT_DEPTH = 4;
expect(jasmine.pp(nestedObject)).toEqual("{ level1 : { level2 : { level3 : { level4 : 'leaf' } } } }"); expect(j$.pp(nestedObject)).toEqual("{ level1 : { level2 : { level3 : { level4 : 'leaf' } } } }");
expect(jasmine.pp(nestedArray)).toEqual("[ 1, [ 2, [ 3, [ 4, 'leaf' ] ] ] ]"); expect(j$.pp(nestedArray)).toEqual("[ 1, [ 2, [ 3, [ 4, 'leaf' ] ] ] ]");
} finally { } finally {
jasmine.MAX_PRETTY_PRINT_DEPTH = originalMaxDepth; j$.MAX_PRETTY_PRINT_DEPTH = originalMaxDepth;
} }
}); });
it("should stringify RegExp objects properly", function() { it("should stringify RegExp objects properly", function() {
expect(jasmine.pp(/x|y|z/)).toEqual("/x|y|z/"); expect(j$.pp(/x|y|z/)).toEqual("/x|y|z/");
}); });
it("should indicate circular object references", function() { it("should indicate circular object references", function() {
var sampleValue = {foo: 'hello'}; var sampleValue = {foo: 'hello'};
sampleValue.nested = sampleValue; sampleValue.nested = sampleValue;
expect(jasmine.pp(sampleValue)).toEqual("{ foo : 'hello', nested : <circular reference: Object> }"); expect(j$.pp(sampleValue)).toEqual("{ foo : 'hello', nested : <circular reference: Object> }");
}); });
it("should indicate getters on objects as such", function() { it("should indicate getters on objects as such", function() {
@@ -81,25 +81,25 @@ describe("jasmine.pp", function () {
}); });
} }
if (sampleValue.__defineGetter__) { if (sampleValue.__defineGetter__) {
expect(jasmine.pp(sampleValue)).toEqual("{ id : 1, calculatedValue : <getter> }"); expect(j$.pp(sampleValue)).toEqual("{ id : 1, calculatedValue : <getter> }");
} }
else { else {
expect(jasmine.pp(sampleValue)).toEqual("{ id : 1 }"); expect(j$.pp(sampleValue)).toEqual("{ id : 1 }");
} }
}); });
it('should not do HTML escaping of strings', function() { it('should not do HTML escaping of strings', function() {
expect(jasmine.pp('some <b>html string</b> &', false)).toEqual('\'some <b>html string</b> &\''); expect(j$.pp('some <b>html string</b> &', false)).toEqual('\'some <b>html string</b> &\'');
}); });
it("should abbreviate the global (usually window) object", function() { it("should abbreviate the global (usually window) object", function() {
expect(jasmine.pp(jasmine.getGlobal())).toEqual("<global>"); expect(j$.pp(jasmine.getGlobal())).toEqual("<global>");
}); });
it("should stringify Date objects properly", function() { it("should stringify Date objects properly", function() {
var now = new Date(); var now = new Date();
expect(jasmine.pp(now)).toEqual("Date(" + now.toString() + ")"); expect(j$.pp(now)).toEqual("Date(" + now.toString() + ")");
}); });
it("should stringify spy objects properly", function() { it("should stringify spy objects properly", function() {
@@ -108,9 +108,9 @@ describe("jasmine.pp", function () {
} }
}; };
spyOn(TestObject, 'someFunction'); spyOn(TestObject, 'someFunction');
expect(jasmine.pp(TestObject.someFunction)).toEqual("spy on someFunction"); expect(j$.pp(TestObject.someFunction)).toEqual("spy on someFunction");
expect(jasmine.pp(jasmine.createSpy("something"))).toEqual("spy on something"); expect(j$.pp(jasmine.createSpy("something"))).toEqual("spy on something");
}); });
it("should stringify objects that implement jasmineToString", function () { it("should stringify objects that implement jasmineToString", function () {
@@ -118,7 +118,7 @@ describe("jasmine.pp", function () {
jasmineToString: function () { return "strung"; } jasmineToString: function () { return "strung"; }
}; };
expect(jasmine.pp(obj)).toEqual("strung"); expect(j$.pp(obj)).toEqual("strung");
}); });
}); });

View File

@@ -4,7 +4,7 @@ describe("QueueRunner", function() {
var calls = [], var calls = [],
fn1 = jasmine.createSpy('fn1'), fn1 = jasmine.createSpy('fn1'),
fn2 = jasmine.createSpy('fn2'), fn2 = jasmine.createSpy('fn2'),
queueRunner = new jasmine.QueueRunner({ queueRunner = new j$.QueueRunner({
fns: [fn1, fn2] fns: [fn1, fn2]
}); });
fn1.andCallFake(function() { fn1.andCallFake(function() {
@@ -23,10 +23,10 @@ describe("QueueRunner", function() {
//TODO: it would be nice if spy arity could match the fake, so we could do something like: //TODO: it would be nice if spy arity could match the fake, so we could do something like:
//createSpy('asyncfn').andCallFake(function(done) {}); //createSpy('asyncfn').andCallFake(function(done) {});
var onComplete = originalJasmine.createSpy('onComplete'), var onComplete = jasmine.createSpy('onComplete'),
beforeCallback = originalJasmine.createSpy('beforeCallback'), beforeCallback = jasmine.createSpy('beforeCallback'),
fnCallback = originalJasmine.createSpy('fnCallback'), fnCallback = jasmine.createSpy('fnCallback'),
afterCallback = originalJasmine.createSpy('afterCallback'), afterCallback = jasmine.createSpy('afterCallback'),
fn1 = function(done) { fn1 = function(done) {
beforeCallback(); beforeCallback();
setTimeout(function() { setTimeout(function() {
@@ -45,7 +45,7 @@ describe("QueueRunner", function() {
done() done()
}, 100); }, 100);
}, },
queueRunner = new jasmine.QueueRunner({ queueRunner = new j$.QueueRunner({
fns: [fn1, fn2, fn3], fns: [fn1, fn2, fn3],
onComplete: onComplete onComplete: onComplete
}); });
@@ -80,7 +80,7 @@ describe("QueueRunner", function() {
throw new Error('fake error'); throw new Error('fake error');
}, },
exceptionCallback = jasmine.createSpy('exception callback'), exceptionCallback = jasmine.createSpy('exception callback'),
queueRunner = new jasmine.QueueRunner({ queueRunner = new j$.QueueRunner({
fns: [fn], fns: [fn],
onException: exceptionCallback onException: exceptionCallback
}); });
@@ -94,7 +94,7 @@ describe("QueueRunner", function() {
var fn = function() { var fn = function() {
throw new Error('fake error'); throw new Error('fake error');
}, },
queueRunner = new jasmine.QueueRunner({ queueRunner = new j$.QueueRunner({
fns: [fn], fns: [fn],
catchException: function(e) { return false; } catchException: function(e) { return false; }
}); });
@@ -105,7 +105,7 @@ describe("QueueRunner", function() {
it("calls a provided complete callback when done", function() { it("calls a provided complete callback when done", function() {
var fn = jasmine.createSpy('fn'), var fn = jasmine.createSpy('fn'),
completeCallback = jasmine.createSpy('completeCallback'), completeCallback = jasmine.createSpy('completeCallback'),
queueRunner = new jasmine.QueueRunner({ queueRunner = new j$.QueueRunner({
fns: [fn], fns: [fn],
onComplete: completeCallback onComplete: completeCallback
}); });
@@ -119,7 +119,7 @@ describe("QueueRunner", function() {
var fn = jasmine.createSpy('fn'), var fn = jasmine.createSpy('fn'),
completeCallback = jasmine.createSpy('completeCallback'), completeCallback = jasmine.createSpy('completeCallback'),
encourageGC = jasmine.createSpy('encourageGC'), encourageGC = jasmine.createSpy('encourageGC'),
queueRunner = new jasmine.QueueRunner({ queueRunner = new j$.QueueRunner({
fns: [fn], fns: [fn],
encourageGC: encourageGC, encourageGC: encourageGC,
onComplete: completeCallback onComplete: completeCallback

View File

@@ -1,7 +1,7 @@
describe("ReportDispatcher", function() { describe("ReportDispatcher", function() {
it("builds an interface of requested methods", function() { it("builds an interface of requested methods", function() {
var dispatcher = new jasmine.ReportDispatcher(['foo', 'bar', 'baz']); var dispatcher = new j$.ReportDispatcher(['foo', 'bar', 'baz']);
expect(dispatcher.foo).toBeDefined(); expect(dispatcher.foo).toBeDefined();
expect(dispatcher.bar).toBeDefined(); expect(dispatcher.bar).toBeDefined();
@@ -9,7 +9,7 @@ describe("ReportDispatcher", function() {
}); });
it("dispatches requested methods to added reporters", function() { it("dispatches requested methods to added reporters", function() {
var dispatcher = new jasmine.ReportDispatcher(['foo', 'bar']), var dispatcher = new j$.ReportDispatcher(['foo', 'bar']),
reporter = jasmine.createSpyObj('reporter', ['foo', 'bar']), reporter = jasmine.createSpyObj('reporter', ['foo', 'bar']),
anotherReporter = jasmine.createSpyObj('reporter', ['foo', 'bar']); anotherReporter = jasmine.createSpyObj('reporter', ['foo', 'bar']);
@@ -28,7 +28,7 @@ describe("ReportDispatcher", function() {
}); });
it("does not dispatch to a reporter if the reporter doesn't accept the method", function() { it("does not dispatch to a reporter if the reporter doesn't accept the method", function() {
var dispatcher = new jasmine.ReportDispatcher(['foo']), var dispatcher = new j$.ReportDispatcher(['foo']),
reporter = jasmine.createSpyObj('reporter', ['baz']); reporter = jasmine.createSpyObj('reporter', ['baz']);
dispatcher.addReporter(reporter); dispatcher.addReporter(reporter);

View File

@@ -4,7 +4,7 @@ describe("jasmine spec running", function () {
var fakeTimer; var fakeTimer;
beforeEach(function() { beforeEach(function() {
env = new jasmine.Env(); env = new j$.Env();
env.updateInterval = 0; env.updateInterval = 0;
}); });
@@ -221,7 +221,7 @@ describe("jasmine spec running", function () {
}); });
it("shouldn't run disabled suites", function() { it("shouldn't run disabled suites", function() {
var specInADisabledSuite = originalJasmine.createSpy("specInADisabledSuite"), var specInADisabledSuite = jasmine.createSpy("specInADisabledSuite"),
suite = env.describe('A Suite', function() { suite = env.describe('A Suite', function() {
env.xdescribe('with a disabled suite', function(){ env.xdescribe('with a disabled suite', function(){
env.it('spec inside a disabled suite', specInADisabledSuite); env.it('spec inside a disabled suite', specInADisabledSuite);
@@ -248,7 +248,7 @@ describe("jasmine spec running", function () {
// TODO: is this useful? It doesn't catch syntax errors // TODO: is this useful? It doesn't catch syntax errors
xit("should recover gracefully when there are errors in describe functions", function() { xit("should recover gracefully when there are errors in describe functions", function() {
var specs = []; var specs = [];
var superSimpleReporter = new jasmine.Reporter(); var superSimpleReporter = new j$.Reporter();
superSimpleReporter.reportSpecResults = function(result) { superSimpleReporter.reportSpecResults = function(result) {
specs.push("Spec: " + result.fullName); specs.push("Spec: " + result.fullName);
}; };

View File

@@ -1,28 +1,28 @@
describe("Spec", function() { describe("Spec", function() {
it("#isPendingSpecException returns true for a pending spec exception", function() { it("#isPendingSpecException returns true for a pending spec exception", function() {
var e = new Error(jasmine.Spec.pendingSpecExceptionMessage); var e = new Error(j$.Spec.pendingSpecExceptionMessage);
expect(jasmine.Spec.isPendingSpecException(e)).toBe(true); expect(j$.Spec.isPendingSpecException(e)).toBe(true);
}); });
it("#isPendingSpecException returns true for a pending spec exception (even when FF bug is present)", function() { it("#isPendingSpecException returns true for a pending spec exception (even when FF bug is present)", function() {
var fakeError = { var fakeError = {
toString: function() { return "Error: " + jasmine.Spec.pendingSpecExceptionMessage; } toString: function() { return "Error: " + j$.Spec.pendingSpecExceptionMessage; }
}; };
expect(jasmine.Spec.isPendingSpecException(fakeError)).toBe(true); expect(j$.Spec.isPendingSpecException(fakeError)).toBe(true);
}); });
it("#isPendingSpecException returns true for a pending spec exception", function() { it("#isPendingSpecException returns true for a pending spec exception", function() {
var e = new Error("foo"); var e = new Error("foo");
expect(jasmine.Spec.isPendingSpecException(e)).toBe(false); expect(j$.Spec.isPendingSpecException(e)).toBe(false);
}); });
it("delegates execution to a QueueRunner", function() { it("delegates execution to a QueueRunner", function() {
var fakeQueueRunner = jasmine.createSpy('fakeQueueRunner'), var fakeQueueRunner = jasmine.createSpy('fakeQueueRunner'),
spec = new jasmine.Spec({ spec = new j$.Spec({
description: 'my test', description: 'my test',
id: 'some-id', id: 'some-id',
fn: function() {}, fn: function() {},
@@ -37,8 +37,8 @@ describe("Spec", function() {
it("should call the start callback on execution", function() { it("should call the start callback on execution", function() {
var fakeQueueRunner = jasmine.createSpy('fakeQueueRunner'), var fakeQueueRunner = jasmine.createSpy('fakeQueueRunner'),
beforesWereCalled = false, beforesWereCalled = false,
startCallback = originalJasmine.createSpy('startCallback'), startCallback = jasmine.createSpy('startCallback'),
spec = new jasmine.Spec({ spec = new j$.Spec({
id: 123, id: 123,
description: 'foo bar', description: 'foo bar',
fn: function() {}, fn: function() {},
@@ -54,10 +54,10 @@ describe("Spec", function() {
it("should call the start callback on execution but before any befores are called", function() { it("should call the start callback on execution but before any befores are called", function() {
var fakeQueueRunner = jasmine.createSpy('fakeQueueRunner'), var fakeQueueRunner = jasmine.createSpy('fakeQueueRunner'),
beforesWereCalled = false, beforesWereCalled = false,
startCallback = originalJasmine.createSpy('start-callback').andCallFake(function() { startCallback = jasmine.createSpy('start-callback').andCallFake(function() {
expect(beforesWereCalled).toBe(false); expect(beforesWereCalled).toBe(false);
}), }),
spec = new jasmine.Spec({ spec = new j$.Spec({
fn: function() {}, fn: function() {},
beforeFns: function() { beforeFns: function() {
return [function() { return [function() {
@@ -75,13 +75,13 @@ describe("Spec", function() {
it("provides all before fns and after fns to be run", function() { it("provides all before fns and after fns to be run", function() {
var fakeQueueRunner = jasmine.createSpy('fakeQueueRunner'), var fakeQueueRunner = jasmine.createSpy('fakeQueueRunner'),
before = originalJasmine.createSpy('before'), before = jasmine.createSpy('before'),
after = originalJasmine.createSpy('after'), after = jasmine.createSpy('after'),
fn = originalJasmine.createSpy('test body').andCallFake(function() { fn = jasmine.createSpy('test body').andCallFake(function() {
expect(before).toHaveBeenCalled(); expect(before).toHaveBeenCalled();
expect(after).not.toHaveBeenCalled(); expect(after).not.toHaveBeenCalled();
}), }),
spec = new jasmine.Spec({ spec = new j$.Spec({
fn: fn, fn: fn,
beforeFns: function() { beforeFns: function() {
return [before] return [before]
@@ -101,9 +101,9 @@ describe("Spec", function() {
it("is marked pending if created without a function body", function() { it("is marked pending if created without a function body", function() {
var fakeQueueRunner = jasmine.createSpy('fakeQueueRunner'), var fakeQueueRunner = jasmine.createSpy('fakeQueueRunner'),
startCallback = originalJasmine.createSpy('startCallback'), startCallback = jasmine.createSpy('startCallback'),
resultCallback = originalJasmine.createSpy('resultCallback'), resultCallback = jasmine.createSpy('resultCallback'),
spec = new jasmine.Spec({ spec = new j$.Spec({
onStart: startCallback, onStart: startCallback,
fn: null, fn: null,
resultCallback: resultCallback, resultCallback: resultCallback,
@@ -116,10 +116,10 @@ describe("Spec", function() {
it("can be disabled, but still calls callbacks", function() { it("can be disabled, but still calls callbacks", function() {
var fakeQueueRunner = jasmine.createSpy('fakeQueueRunner'), var fakeQueueRunner = jasmine.createSpy('fakeQueueRunner'),
startCallback = originalJasmine.createSpy('startCallback'), startCallback = jasmine.createSpy('startCallback'),
specBody = originalJasmine.createSpy('specBody'), specBody = jasmine.createSpy('specBody'),
resultCallback = originalJasmine.createSpy('resultCallback'), resultCallback = jasmine.createSpy('resultCallback'),
spec = new jasmine.Spec({ spec = new j$.Spec({
onStart:startCallback, onStart:startCallback,
fn: specBody, fn: specBody,
resultCallback: resultCallback, resultCallback: resultCallback,
@@ -141,9 +141,9 @@ describe("Spec", function() {
it("can be marked pending, but still calls callbacks when executed", function() { it("can be marked pending, but still calls callbacks when executed", function() {
var fakeQueueRunner = jasmine.createSpy('fakeQueueRunner'), var fakeQueueRunner = jasmine.createSpy('fakeQueueRunner'),
startCallback = originalJasmine.createSpy('startCallback'), startCallback = jasmine.createSpy('startCallback'),
resultCallback = originalJasmine.createSpy('resultCallback'), resultCallback = jasmine.createSpy('resultCallback'),
spec = new jasmine.Spec({ spec = new j$.Spec({
onStart: startCallback, onStart: startCallback,
resultCallback: resultCallback, resultCallback: resultCallback,
description: "with a spec", description: "with a spec",
@@ -172,8 +172,8 @@ describe("Spec", function() {
}); });
it("should call the done callback on execution complete", function() { it("should call the done callback on execution complete", function() {
var done = originalJasmine.createSpy('done callback'), var done = jasmine.createSpy('done callback'),
spec = new jasmine.Spec({ spec = new j$.Spec({
fn: function() {}, fn: function() {},
catchExceptions: function() { return false; }, catchExceptions: function() { return false; },
resultCallback: function() {}, resultCallback: function() {},
@@ -186,13 +186,13 @@ describe("Spec", function() {
}); });
it("#status returns pending by default", function() { it("#status returns pending by default", function() {
var spec = new jasmine.Spec({fn: jasmine.createSpy("spec body")}); var spec = new j$.Spec({fn: jasmine.createSpy("spec body")});
expect(spec.status()).toEqual('pending'); expect(spec.status()).toEqual('pending');
}); });
it("#status returns pending if no expectations were encountered", function() { it("#status returns pending if no expectations were encountered", function() {
var specBody = jasmine.createSpy("spec body"), var specBody = jasmine.createSpy("spec body"),
spec = new jasmine.Spec({fn: specBody}); spec = new j$.Spec({fn: specBody});
spec.execute(); spec.execute();
@@ -200,13 +200,13 @@ describe("Spec", function() {
}); });
it("#status returns passed if all expectations in the spec have passed", function() { it("#status returns passed if all expectations in the spec have passed", function() {
var spec = new jasmine.Spec({fn: jasmine.createSpy("spec body")}); var spec = new j$.Spec({fn: jasmine.createSpy("spec body")});
spec.addExpectationResult(true); spec.addExpectationResult(true);
expect(spec.status()).toBe('passed'); expect(spec.status()).toBe('passed');
}); });
it("#status returns failed if any expectations in the spec have failed", function() { it("#status returns failed if any expectations in the spec have failed", function() {
var spec = new jasmine.Spec({ fn: jasmine.createSpy("spec body") }); var spec = new j$.Spec({ fn: jasmine.createSpy("spec body") });
spec.addExpectationResult(true); spec.addExpectationResult(true);
spec.addExpectationResult(false); spec.addExpectationResult(false);
expect(spec.status()).toBe('failed'); expect(spec.status()).toBe('failed');
@@ -214,7 +214,7 @@ describe("Spec", function() {
it("can return its full name", function() { it("can return its full name", function() {
var spec; var spec;
spec = new jasmine.Spec({ spec = new j$.Spec({
getSpecName: function(passedVal) { getSpecName: function(passedVal) {
// expect(passedVal).toBe(spec); TODO: a exec time, spec is undefined WTF? // expect(passedVal).toBe(spec); TODO: a exec time, spec is undefined WTF?
return 'expected val'; return 'expected val';
@@ -227,9 +227,9 @@ describe("Spec", function() {
describe("when a spec is marked pending during execution", function() { describe("when a spec is marked pending during execution", function() {
it("should mark the spec as pending", function() { it("should mark the spec as pending", function() {
var fakeQueueRunner = function(opts) { var fakeQueueRunner = function(opts) {
opts.onException(new Error(jasmine.Spec.pendingSpecExceptionMessage)); opts.onException(new Error(j$.Spec.pendingSpecExceptionMessage));
}, },
spec = new jasmine.Spec({ spec = new j$.Spec({
description: 'my test', description: 'my test',
id: 'some-id', id: 'some-id',
fn: function() { }, fn: function() { },

View File

@@ -1,7 +1,7 @@
describe('Spies', function () { describe('Spies', function () {
var env; var env;
beforeEach(function() { beforeEach(function() {
env = new jasmine.Env(); env = new j$.Env();
}); });
it('should replace the specified function with a spy object', function() { it('should replace the specified function with a spy object', function() {
@@ -133,7 +133,7 @@ describe('Spies', function () {
it('is torn down when env.removeAllSpies is called', function() { it('is torn down when env.removeAllSpies is called', function() {
var originalFunctionWasCalled = false, var originalFunctionWasCalled = false,
env = new jasmine.Env(), env = new j$.Env(),
TestClass = { TestClass = {
someFunction: function() { someFunction: function() {
originalFunctionWasCalled = true; originalFunctionWasCalled = true;
@@ -151,15 +151,15 @@ describe('Spies', function () {
}); });
it('calls removeAllSpies during spec finish', function() { it('calls removeAllSpies during spec finish', function() {
var env = new jasmine.Env(), var env = new j$.Env(),
originalFoo = function() {}, originalFoo = function() {},
testObj = { testObj = {
foo: originalFoo foo: originalFoo
}, },
firstSpec = originalJasmine.createSpy('firstSpec').andCallFake(function() { firstSpec = jasmine.createSpy('firstSpec').andCallFake(function() {
env.spyOn(testObj, 'foo'); env.spyOn(testObj, 'foo');
}), }),
secondSpec = originalJasmine.createSpy('secondSpec').andCallFake(function() { secondSpec = jasmine.createSpy('secondSpec').andCallFake(function() {
expect(testObj.foo).toBe(originalFoo); expect(testObj.foo).toBe(originalFoo);
}); });
env.describe('test suite', function() { env.describe('test suite', function() {
@@ -215,7 +215,7 @@ describe('Spies', function () {
describe("createSpyObj", function() { describe("createSpyObj", function() {
it("should create an object with a bunch of spy methods when you call jasmine.createSpyObj()", function() { it("should create an object with a bunch of spy methods when you call jasmine.createSpyObj()", function() {
var spyObj = jasmine.createSpyObj('BaseName', ['method1', 'method2']); var spyObj = jasmine.createSpyObj('BaseName', ['method1', 'method2']);
expect(spyObj).toEqual({ method1: originalJasmine.any(Function), method2: originalJasmine.any(Function)}); expect(spyObj).toEqual({ method1: jasmine.any(Function), method2: jasmine.any(Function)});
expect(spyObj.method1.identity).toEqual('BaseName.method1'); expect(spyObj.method1.identity).toEqual('BaseName.method1');
expect(spyObj.method2.identity).toEqual('BaseName.method2'); expect(spyObj.method2.identity).toEqual('BaseName.method2');
}); });

View File

@@ -1,8 +1,8 @@
describe("Suite", function() { describe("Suite", function() {
it("keeps its id", function() { it("keeps its id", function() {
var env = new jasmine.Env(), var env = new j$.Env(),
suite = new jasmine.Suite({ suite = new j$.Suite({
env: env, env: env,
id: 456, id: 456,
description: "I am a suite" description: "I am a suite"
@@ -12,8 +12,8 @@ describe("Suite", function() {
}); });
it("returns its full name", function() { it("returns its full name", function() {
var env = new jasmine.Env(), var env = new j$.Env(),
suite = new jasmine.Suite({ suite = new j$.Suite({
env: env, env: env,
description: "I am a suite" description: "I am a suite"
}); });
@@ -22,13 +22,13 @@ describe("Suite", function() {
}); });
it("returns its full name when it has parent suites", function() { it("returns its full name when it has parent suites", function() {
var env = new jasmine.Env(), var env = new j$.Env(),
parentSuite = new jasmine.Suite({ parentSuite = new j$.Suite({
env: env, env: env,
description: "I am a parent suite", description: "I am a parent suite",
parentSuite: jasmine.createSpy('pretend top level suite') parentSuite: jasmine.createSpy('pretend top level suite')
}), }),
suite = new jasmine.Suite({ suite = new j$.Suite({
env: env, env: env,
description: "I am a suite", description: "I am a suite",
parentSuite: parentSuite parentSuite: parentSuite
@@ -38,8 +38,8 @@ describe("Suite", function() {
}); });
it("adds before functions in order of needed execution", function() { it("adds before functions in order of needed execution", function() {
var env = new jasmine.Env(), var env = new j$.Env(),
suite = new jasmine.Suite({ suite = new j$.Suite({
env: env, env: env,
description: "I am a suite" description: "I am a suite"
}), }),
@@ -53,8 +53,8 @@ describe("Suite", function() {
}); });
it("adds after functions in order of needed execution", function() { it("adds after functions in order of needed execution", function() {
var env = new jasmine.Env(), var env = new j$.Env(),
suite = new jasmine.Suite({ suite = new j$.Suite({
env: env, env: env,
description: "I am a suite" description: "I am a suite"
}), }),
@@ -68,11 +68,11 @@ describe("Suite", function() {
}); });
it("adds specs", function() { it("adds specs", function() {
var env = new jasmine.Env(), var env = new j$.Env(),
fakeQueue = { fakeQueue = {
add: jasmine.createSpy() add: jasmine.createSpy()
}, },
suite = new jasmine.Suite({ suite = new j$.Suite({
env: env, env: env,
description: "I am a suite", description: "I am a suite",
queueFactory: function() { queueFactory: function() {
@@ -89,18 +89,18 @@ describe("Suite", function() {
}); });
it("adds suites", function() { it("adds suites", function() {
var env = new jasmine.Env(), var env = new j$.Env(),
fakeQueue = { fakeQueue = {
add: jasmine.createSpy() add: jasmine.createSpy()
}, },
suite = new jasmine.Suite({ suite = new j$.Suite({
env: env, env: env,
description: "I am a suite", description: "I am a suite",
queueFactory: function() { queueFactory: function() {
return fakeQueue return fakeQueue
} }
}), }),
anotherSuite = new jasmine.Suite({ anotherSuite = new j$.Suite({
env: env, env: env,
description: "I am another suite", description: "I am another suite",
queueFactory: function() { queueFactory: function() {
@@ -116,9 +116,9 @@ describe("Suite", function() {
}); });
it("can be disabled", function() { it("can be disabled", function() {
var env = new jasmine.Env(), var env = new j$.Env(),
fakeQueueRunner = jasmine.createSpy('fake queue runner'), fakeQueueRunner = jasmine.createSpy('fake queue runner'),
suite = new jasmine.Suite({ suite = new j$.Suite({
env: env, env: env,
description: "with a child suite", description: "with a child suite",
queueRunner: fakeQueueRunner queueRunner: fakeQueueRunner
@@ -134,16 +134,16 @@ describe("Suite", function() {
}); });
it("delegates execution of its specs and suites", function() { it("delegates execution of its specs and suites", function() {
var env = new jasmine.Env(), var env = new j$.Env(),
parentSuiteDone = jasmine.createSpy('parent suite done'), parentSuiteDone = jasmine.createSpy('parent suite done'),
fakeQueueRunnerForParent = jasmine.createSpy('fake parent queue runner'), fakeQueueRunnerForParent = jasmine.createSpy('fake parent queue runner'),
parentSuite = new jasmine.Suite({ parentSuite = new j$.Suite({
env: env, env: env,
description: "I am a parent suite", description: "I am a parent suite",
queueRunner: fakeQueueRunnerForParent queueRunner: fakeQueueRunnerForParent
}), }),
fakeQueueRunner = jasmine.createSpy('fake queue runner'), fakeQueueRunner = jasmine.createSpy('fake queue runner'),
suite = new jasmine.Suite({ suite = new j$.Suite({
env: env, env: env,
description: "with a child suite", description: "with a child suite",
queueRunner: fakeQueueRunner queueRunner: fakeQueueRunner
@@ -168,10 +168,10 @@ describe("Suite", function() {
}); });
it("calls a provided onStart callback when starting", function() { it("calls a provided onStart callback when starting", function() {
var env = new jasmine.Env(), var env = new j$.Env(),
suiteStarted = jasmine.createSpy('suiteStarted'), suiteStarted = jasmine.createSpy('suiteStarted'),
fakeQueueRunner = function(attrs) { attrs.onComplete(); }, fakeQueueRunner = function(attrs) { attrs.onComplete(); },
suite = new jasmine.Suite({ suite = new j$.Suite({
env: env, env: env,
description: "with a child suite", description: "with a child suite",
onStart: suiteStarted, onStart: suiteStarted,
@@ -187,10 +187,10 @@ describe("Suite", function() {
}); });
it("calls a provided onComplete callback when done", function() { it("calls a provided onComplete callback when done", function() {
var env = new jasmine.Env(), var env = new j$.Env(),
suiteCompleted = jasmine.createSpy('parent suite done'), suiteCompleted = jasmine.createSpy('parent suite done'),
fakeQueueRunner = function(attrs) { attrs.onComplete(); }, fakeQueueRunner = function(attrs) { attrs.onComplete(); },
suite = new jasmine.Suite({ suite = new j$.Suite({
env: env, env: env,
description: "with a child suite", description: "with a child suite",
queueRunner: fakeQueueRunner queueRunner: fakeQueueRunner
@@ -205,10 +205,10 @@ describe("Suite", function() {
}); });
it("calls a provided result callback when done", function() { it("calls a provided result callback when done", function() {
var env = new jasmine.Env(), var env = new j$.Env(),
suiteResultsCallback = jasmine.createSpy('suite result callback'), suiteResultsCallback = jasmine.createSpy('suite result callback'),
fakeQueueRunner = function(attrs) { attrs.onComplete(); }, fakeQueueRunner = function(attrs) { attrs.onComplete(); },
suite = new jasmine.Suite({ suite = new j$.Suite({
env: env, env: env,
description: "with a child suite", description: "with a child suite",
queueRunner: fakeQueueRunner, queueRunner: fakeQueueRunner,

View File

@@ -1,28 +1,28 @@
describe("jasmine.util", function() { describe("j$.util", function() {
describe("isArray_", function() { describe("isArray_", function() {
it("should return true if the argument is an array", function() { it("should return true if the argument is an array", function() {
expect(jasmine.isArray_([])).toBe(true); expect(j$.isArray_([])).toBe(true);
expect(jasmine.isArray_(['a'])).toBe(true); expect(j$.isArray_(['a'])).toBe(true);
}); });
it("should return false if the argument is not an array", function() { it("should return false if the argument is not an array", function() {
expect(jasmine.isArray_(undefined)).toBe(false); expect(j$.isArray_(undefined)).toBe(false);
expect(jasmine.isArray_({})).toBe(false); expect(j$.isArray_({})).toBe(false);
expect(jasmine.isArray_(function() {})).toBe(false); expect(j$.isArray_(function() {})).toBe(false);
expect(jasmine.isArray_('foo')).toBe(false); expect(j$.isArray_('foo')).toBe(false);
expect(jasmine.isArray_(5)).toBe(false); expect(j$.isArray_(5)).toBe(false);
expect(jasmine.isArray_(null)).toBe(false); expect(j$.isArray_(null)).toBe(false);
}); });
}); });
describe("isUndefined", function() { describe("isUndefined", function() {
it("reports if a variable is defined", function() { it("reports if a variable is defined", function() {
var a; var a;
expect(jasmine.util.isUndefined(a)).toBe(true); expect(j$.util.isUndefined(a)).toBe(true);
expect(jasmine.util.isUndefined(undefined)).toBe(true); expect(j$.util.isUndefined(undefined)).toBe(true);
var undefined = "diz be undefined yo"; var undefined = "diz be undefined yo";
expect(jasmine.util.isUndefined(undefined)).toBe(false); expect(j$.util.isUndefined(undefined)).toBe(false);
}); });
}); });
}); });

View File

@@ -1,7 +1,6 @@
describe("New HtmlReporter", function() { describe("New HtmlReporter", function() {
// TODO: Figure out why this isn't rendering...
it("builds the initial DOM elements, including the title banner", function() { it("builds the initial DOM elements, including the title banner", function() {
jasmine.version = originalJasmine.version;
var env = new jasmine.Env(), var env = new jasmine.Env(),
container = document.createElement("div"), container = document.createElement("div"),
getContainer = function() { return container; }, getContainer = function() { return container; },
@@ -30,7 +29,7 @@ describe("New HtmlReporter", function() {
expect(title.innerHTML).toMatch(/Jasmine/); expect(title.innerHTML).toMatch(/Jasmine/);
var version = banner.getElementsByClassName("version")[0]; var version = banner.getElementsByClassName("version")[0];
expect(version.innerHTML).toEqual(originalJasmine.version); expect(version.innerHTML).toEqual(jasmine.version);
}); });
describe("when a spec is done", function() { describe("when a spec is done", function() {

View File

@@ -17,7 +17,7 @@ src_files:
stylesheets: stylesheets:
boot_dir: 'spec/support' boot_dir: 'spec/support'
boot_files: boot_files:
- 'boot.js' # - 'boot.js'
- 'dev_boot.js' - 'dev_boot.js'
helpers: helpers:
- 'helpers/**/*.js' - 'helpers/**/*.js'

View File

@@ -74,7 +74,7 @@ function noop() {
} }
jasmine.executeSpecs = function(specs, done, isVerbose, showColors) { jasmine.executeSpecs = function(specs, done, isVerbose, showColors) {
global.originalJasmine = jasmine; global.jasmine = jasmine;
for (var i = 0, len = specs.length; i < len; ++i) { for (var i = 0, len = specs.length; i < len; ++i) {
var filename = specs[i]; var filename = specs[i];

View File

@@ -2,10 +2,14 @@ var fs = require('fs');
var util = require('util'); var util = require('util');
var path = require('path'); var path = require('path');
var jasmineGlobals = require('../lib/jasmine-core/jasmine.js'); // boot code for jasmine
for (var k in jasmineGlobals) { var jasmineRequire = require('../lib/jasmine-core/jasmine.js');
global[k] = jasmineGlobals[k]; var jasmine = jasmineRequire.core(jasmineRequire);
}
var consoleFns = require('../src/console/console.js');
extend(jasmineRequire, consoleFns);
jasmineRequire.console(jasmineRequire, jasmine);
var env = jasmine.getEnv(); var env = jasmine.getEnv();
var jasmineInterface = { var jasmineInterface = {
@@ -54,51 +58,35 @@ var jasmineInterface = {
jsApiReporter: new jasmine.JsApiReporter(jasmine) jsApiReporter: new jasmine.JsApiReporter(jasmine)
}; };
for (var k in jasmineInterface) { extend(global, jasmineInterface);
global[k] = jasmineInterface[k];
function extend(destination, source) {
for (var property in source) destination[property] = source[property];
return destination;
} }
require('../src/console/ConsoleReporter.js'); // Jasmine "runner"
function executeSpecs(specs, done, isVerbose, showColors) {
global.jasmine = jasmine;
/* for (var i = 0; i < specs.length; i++) {
Pulling in code from jasmine-node.
We can't just depend on jasmine-node because it has its own jasmine that it uses.
*/
global.window = {
setTimeout: setTimeout,
clearTimeout: clearTimeout,
setInterval: setInterval,
clearInterval: clearInterval
};
delete global.window;
function noop() {
}
jasmine.executeSpecs = function(specs, done, isVerbose, showColors) {
global.originalJasmine = jasmine;
for (var i = 0, len = specs.length; i < len; ++i) {
var filename = specs[i]; var filename = specs[i];
require(filename.replace(/\.\w+$/, "")); require(filename.replace(/\.\w+$/, ""));
} }
var jasmineEnv = jasmine.getEnv(); var env = jasmine.getEnv();
var consoleReporter = new jasmine.ConsoleReporter({ var consoleReporter = new jasmine.ConsoleReporter({
print: util.print, print: util.print,
onComplete: done, onComplete: done,
showColors: showColors showColors: showColors
}); });
jasmineEnv.addReporter(consoleReporter); env.addReporter(consoleReporter);
jasmineEnv.execute(); env.execute();
}; }
jasmine.getAllSpecFiles = function(dir, matcher) { function getFiles(dir, matcher) {
var specs = []; specs = [];
if (fs.statSync(dir).isFile() && dir.match(matcher)) { if (fs.statSync(dir).isFile() && dir.match(matcher)) {
specs.push(dir); specs.push(dir);
@@ -109,71 +97,76 @@ jasmine.getAllSpecFiles = function(dir, matcher) {
if (fs.statSync(filename).isFile() && filename.match(matcher)) { if (fs.statSync(filename).isFile() && filename.match(matcher)) {
specs.push(filename); specs.push(filename);
} else if (fs.statSync(filename).isDirectory()) { } else if (fs.statSync(filename).isDirectory()) {
var subfiles = this.getAllSpecFiles(filename, matcher); var subfiles = getSpecFiles(filename);
subfiles.forEach(function(result) { subfiles.forEach(function(result) {
specs.push(result); specs.push(result);
}); });
} }
} }
} }
return specs; return specs;
};
function now() {
return new Date().getTime();
} }
jasmine.asyncSpecWait = function() { function getSpecFiles(dir) {
var wait = jasmine.asyncSpecWait; return getFiles(dir, new RegExp("Spec.js$"));
wait.start = now();
wait.done = false;
(function innerWait() {
waits(10);
runs(function() {
if (wait.start + wait.timeout < now()) {
expect('timeout waiting for spec').toBeNull();
} else if (wait.done) {
wait.done = false;
} else {
innerWait();
}
});
})();
};
jasmine.asyncSpecWait.timeout = 4 * 1000;
jasmine.asyncSpecDone = function() {
jasmine.asyncSpecWait.done = true;
};
for (var key in jasmine) {
exports[key] = jasmine[key];
} }
/* var j$require = (function() {
End jasmine-node runner var exported = {},
*/ j$req;
global.getJasmineRequireObj = getJasmineRequireObj;
j$req = require(__dirname + "/../src/core/requireCore.js");
extend(j$req, require(__dirname + "/../src/console/requireConsole.js"));
var srcFiles = getFiles(__dirname + "/../src/core");
srcFiles.push(__dirname + "/../src/version.js");
srcFiles.push(__dirname + "/../src/console/ConsoleReporter.js");
for (var i=0; i < srcFiles.length; i++) {
require(srcFiles[i]);
}
extend(j$req, exported);
delete global.getJasmineRequireObj;
return j$req;
function getJasmineRequireObj() {
return exported;
}
}());
var j$ = j$require.core(j$require);
j$require.console(j$require, j$);
//var specs = getSpecFiles(__dirname + '/smoke', new RegExp("test.js$"));
var consoleSpecs = getSpecFiles(__dirname + "/console"),
coreSpecs = getSpecFiles(__dirname + "/core"),
specs = [];
specs = specs.concat(consoleSpecs);
specs = specs.concat(coreSpecs);
// options from command line
var isVerbose = false; var isVerbose = false;
var showColors = true; var showColors = true;
process.argv.forEach(function(arg) { process.argv.forEach(function(arg) {
switch (arg) { switch (arg) {
case '--color': showColors = true; break; case '--color':
case '--noColor': showColors = false; break; showColors = true;
case '--verbose': isVerbose = true; break; break;
case '--noColor':
showColors = false;
break;
case '--verbose':
isVerbose = true;
break;
} }
}); });
// var specs = jasmine.getAllSpecFiles(__dirname + '/smoke', new RegExp("test.js$")); executeSpecs(specs, function(passed) {
var specs = jasmine.getAllSpecFiles(__dirname, new RegExp("Spec.js$"));
var domIndependentSpecs = [];
for (var i = 0; i < specs.length; i++) {
if (!specs[i].match('html')) {
domIndependentSpecs.push(specs[i]);
}
}
jasmine.executeSpecs(domIndependentSpecs, function(passed) {
if (passed) { if (passed) {
process.exit(0); process.exit(0);
} else { } else {

View File

@@ -1,2 +1,115 @@
var originalJasmine = jasmine; // Jasmine boot.js for browser runners - exposes external/global interface, builds the Jasmine environment and executes it.
jasmine = null; (function() {
window.jasmine = jasmineRequire.core(jasmineRequire);
jasmineRequire.html(jasmine);
var env = jasmine.getEnv();
var jasmineInterface = {
describe: function(description, specDefinitions) {
return env.describe(description, specDefinitions);
},
xdescribe: function(description, specDefinitions) {
return env.xdescribe(description, specDefinitions);
},
it: function(desc, func) {
return env.it(desc, func);
},
xit: function(desc, func) {
return env.xit(desc, func);
},
beforeEach: function(beforeEachFunction) {
return env.beforeEach(beforeEachFunction);
},
afterEach: function(afterEachFunction) {
return env.afterEach(afterEachFunction);
},
expect: function(actual) {
return env.expect(actual);
},
pending: function() {
return env.pending();
},
addMatchers: function(matchers) {
return env.addMatchers(matchers);
},
spyOn: function(obj, methodName) {
return env.spyOn(obj, methodName);
},
clock: env.clock,
setTimeout: env.clock.setTimeout,
clearTimeout: env.clock.clearTimeout,
setInterval: env.clock.setInterval,
clearInterval: env.clock.clearInterval,
jsApiReporter: new jasmine.JsApiReporter(jasmine)
};
if (typeof window == "undefined" && typeof exports == "object") {
extend(exports, jasmineInterface);
} else {
extend(window, jasmineInterface);
}
var queryString = new jasmine.QueryString({
getWindowLocation: function() { return window.location; }
});
// TODO: move all of catching to raise so we don't break our brains
var catchingExceptions = queryString.getParam("catch");
env.catchExceptions(typeof catchingExceptions === "undefined" ? true : catchingExceptions);
var htmlReporter = new jasmine.HtmlReporter({
env: env,
queryString: queryString,
onRaiseExceptionsClick: function() { queryString.setParam("catch", !env.catchingExceptions()); },
getContainer: function() { return document.body; },
createElement: function() { return document.createElement.apply(document, arguments); },
createTextNode: function() { return document.createTextNode.apply(document, arguments); }
});
env.addReporter(jasmineInterface.jsApiReporter);
env.addReporter(htmlReporter);
var specFilter = new jasmine.HtmlSpecFilter({
filterString: function() { return queryString.getParam("spec"); }
});
env.specFilter = function(spec) {
return specFilter.matches(spec.getFullName());
};
var currentWindowOnload = window.onload;
window.onload = function() {
if (currentWindowOnload) {
currentWindowOnload();
}
htmlReporter.initialize();
// By the time onload is called, jasmineRequire will be redefined to point
// to the Jasmine source files (and not jasmine.js). So re-require
window.j$ = jasmineRequire.core(jasmineRequire);
jasmineRequire.html(j$);
jasmineRequire.console(jasmineRequire, j$);
env.execute();
};
function extend(destination, source) {
for (var property in source) destination[property] = source[property];
return destination;
}
}());

View File

@@ -1,118 +1,122 @@
jasmine.ConsoleReporter = function(options) { getJasmineRequireObj().ConsoleReporter = function() {
var print = options.print, function ConsoleReporter(options) {
showColors = options.showColors || false, var print = options.print,
onComplete = options.onComplete || function() {}, showColors = options.showColors || false,
now = options.now || function() { return new Date().getTime();}, onComplete = options.onComplete || function() {},
startTime = 0, now = options.now || function() { return new Date().getTime();},
specCount, startTime = 0,
failureCount, specCount,
failedSpecs = [], failureCount,
pendingCount, failedSpecs = [],
ansi = { pendingCount,
green: '\033[32m', ansi = {
red: '\033[31m', green: '\033[32m',
yellow: '\033[33m', red: '\033[31m',
none: '\033[0m' yellow: '\033[33m',
none: '\033[0m'
};
this.jasmineStarted = function() {
startTime = now();
specCount = 0;
failureCount = 0;
pendingCount = 0;
print("Started");
printNewline();
}; };
this.jasmineStarted = function() { this.jasmineDone = function() {
startTime = now(); var elapsed = now() - startTime;
specCount = 0;
failureCount = 0;
pendingCount = 0;
print("Started");
printNewline();
};
this.jasmineDone = function() {
var elapsed = now() - startTime;
printNewline();
for (var i = 0; i < failedSpecs.length; i++) {
specFailureDetails(failedSpecs[i]);
}
printNewline();
var specCounts = specCount + " " + plural("spec", specCount) + ", " +
failureCount + " " + plural("failure", failureCount);
if (pendingCount) {
specCounts += ", " + pendingCount + " pending " + plural("spec", pendingCount);
}
print(specCounts);
printNewline();
var seconds = elapsed / 1000;
print("Finished in " + seconds + " " + plural("second", seconds));
printNewline();
onComplete();
};
this.specDone = function(result) {
specCount++;
if(result.status == "pending") {
pendingCount++;
print(colored("yellow", "*"));
return;
}
if (result.status == "passed") {
print(colored("green", '.'));
return;
}
if (result.status == "failed") {
failureCount++;
failedSpecs.push(result);
print(colored("red", 'F'));
}
};
return this;
function printNewline() {
print("\n");
}
function colored(color, str) {
return showColors ? (ansi[color] + str + ansi.none) : str;
}
function plural(str, count) {
return count == 1 ? str : str + "s";
}
function repeat(thing, times) {
var arr = [];
for (var i = 0; i < times; i++) {
arr.push(thing);
}
return arr;
}
function indent(str, spaces) {
var lines = (str || '').split("\n");
var newArr = [];
for (var i = 0; i < lines.length; i++) {
newArr.push(repeat(" ", spaces).join("") + lines[i]);
}
return newArr.join("\n");
}
function specFailureDetails(result) {
printNewline();
print(result.fullName);
for (var i = 0; i < result.failedExpectations.length; i++) {
var failedExpectation = result.failedExpectations[i];
printNewline(); printNewline();
print(indent(failedExpectation.stack, 2)); for (var i = 0; i < failedSpecs.length; i++) {
specFailureDetails(failedSpecs[i]);
}
printNewline();
var specCounts = specCount + " " + plural("spec", specCount) + ", " +
failureCount + " " + plural("failure", failureCount);
if (pendingCount) {
specCounts += ", " + pendingCount + " pending " + plural("spec", pendingCount);
}
print(specCounts);
printNewline();
var seconds = elapsed / 1000;
print("Finished in " + seconds + " " + plural("second", seconds));
printNewline();
onComplete();
};
this.specDone = function(result) {
specCount++;
if (result.status == "pending") {
pendingCount++;
print(colored("yellow", "*"));
return;
}
if (result.status == "passed") {
print(colored("green", '.'));
return;
}
if (result.status == "failed") {
failureCount++;
failedSpecs.push(result);
print(colored("red", 'F'));
}
};
return this;
function printNewline() {
print("\n");
} }
printNewline(); function colored(color, str) {
return showColors ? (ansi[color] + str + ansi.none) : str;
}
function plural(str, count) {
return count == 1 ? str : str + "s";
}
function repeat(thing, times) {
var arr = [];
for (var i = 0; i < times; i++) {
arr.push(thing);
}
return arr;
}
function indent(str, spaces) {
var lines = (str || '').split("\n");
var newArr = [];
for (var i = 0; i < lines.length; i++) {
newArr.push(repeat(" ", spaces).join("") + lines[i]);
}
return newArr.join("\n");
}
function specFailureDetails(result) {
printNewline();
print(result.fullName);
for (var i = 0; i < result.failedExpectations.length; i++) {
var failedExpectation = result.failedExpectations[i];
printNewline();
print(indent(failedExpectation.stack, 2));
}
printNewline();
}
} }
return ConsoleReporter;
}; };

157
src/console/console.js Normal file
View File

@@ -0,0 +1,157 @@
/*
Copyright (c) 2008-2013 Pivotal Labs
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
function getJasmineRequireObj() {
if (typeof module !== "undefined" && module.exports) {
return exports;
} else {
window.jasmineRequire = window.jasmineRequire || {};
return window.jasmineRequire;
}
}
getJasmineRequireObj().console = function(jRequire, j$) {
j$.ConsoleReporter = jRequire.ConsoleReporter();
};
getJasmineRequireObj().ConsoleReporter = function() {
function ConsoleReporter(options) {
var print = options.print,
showColors = options.showColors || false,
onComplete = options.onComplete || function() {},
now = options.now || function() { return new Date().getTime();},
startTime = 0,
specCount,
failureCount,
failedSpecs = [],
pendingCount,
ansi = {
green: '\033[32m',
red: '\033[31m',
yellow: '\033[33m',
none: '\033[0m'
};
this.jasmineStarted = function() {
startTime = now();
specCount = 0;
failureCount = 0;
pendingCount = 0;
print("Started");
printNewline();
};
this.jasmineDone = function() {
var elapsed = now() - startTime;
printNewline();
for (var i = 0; i < failedSpecs.length; i++) {
specFailureDetails(failedSpecs[i]);
}
printNewline();
var specCounts = specCount + " " + plural("spec", specCount) + ", " +
failureCount + " " + plural("failure", failureCount);
if (pendingCount) {
specCounts += ", " + pendingCount + " pending " + plural("spec", pendingCount);
}
print(specCounts);
printNewline();
var seconds = elapsed / 1000;
print("Finished in " + seconds + " " + plural("second", seconds));
printNewline();
onComplete();
};
this.specDone = function(result) {
specCount++;
if (result.status == "pending") {
pendingCount++;
print(colored("yellow", "*"));
return;
}
if (result.status == "passed") {
print(colored("green", '.'));
return;
}
if (result.status == "failed") {
failureCount++;
failedSpecs.push(result);
print(colored("red", 'F'));
}
};
return this;
function printNewline() {
print("\n");
}
function colored(color, str) {
return showColors ? (ansi[color] + str + ansi.none) : str;
}
function plural(str, count) {
return count == 1 ? str : str + "s";
}
function repeat(thing, times) {
var arr = [];
for (var i = 0; i < times; i++) {
arr.push(thing);
}
return arr;
}
function indent(str, spaces) {
var lines = (str || '').split("\n");
var newArr = [];
for (var i = 0; i < lines.length; i++) {
newArr.push(repeat(" ", spaces).join("") + lines[i]);
}
return newArr.join("\n");
}
function specFailureDetails(result) {
printNewline();
print(result.fullName);
for (var i = 0; i < result.failedExpectations.length; i++) {
var failedExpectation = result.failedExpectations[i];
printNewline();
print(indent(failedExpectation.stack, 2));
}
printNewline();
}
}
return ConsoleReporter;
};

View File

@@ -0,0 +1,12 @@
function getJasmineRequireObj() {
if (typeof module !== "undefined" && module.exports) {
return exports;
} else {
window.jasmineRequire = window.jasmineRequire || {};
return window.jasmineRequire;
}
}
getJasmineRequireObj().console = function(jRequire, j$) {
j$.ConsoleReporter = jRequire.ConsoleReporter();
};

View File

@@ -1,93 +1,97 @@
jasmine.Clock = function(global, delayedFunctionScheduler) { getJasmineRequireObj().Clock = function() {
var self = this, function Clock(global, delayedFunctionScheduler) {
realTimingFunctions = { var self = this,
setTimeout: global.setTimeout, realTimingFunctions = {
clearTimeout: global.clearTimeout, setTimeout: global.setTimeout,
setInterval: global.setInterval, clearTimeout: global.clearTimeout,
clearInterval: global.clearInterval setInterval: global.setInterval,
}, clearInterval: global.clearInterval
fakeTimingFunctions = { },
setTimeout: setTimeout, fakeTimingFunctions = {
clearTimeout: clearTimeout, setTimeout: setTimeout,
setInterval: setInterval, clearTimeout: clearTimeout,
clearInterval: clearInterval setInterval: setInterval,
}, clearInterval: clearInterval
timer = realTimingFunctions, },
installed = false; timer = realTimingFunctions,
installed = false;
self.install = function() { self.install = function() {
installed = true; installed = true;
timer = fakeTimingFunctions; timer = fakeTimingFunctions;
}; };
self.uninstall = function() { self.uninstall = function() {
delayedFunctionScheduler.reset(); delayedFunctionScheduler.reset();
installed = false; installed = false;
timer = realTimingFunctions; timer = realTimingFunctions;
}; };
self.setTimeout = function(fn, delay, params) { self.setTimeout = function(fn, delay, params) {
if (legacyIE()) { if (legacyIE()) {
if (arguments.length > 2) { if (arguments.length > 2) {
throw new Error("IE < 9 cannot support extra params to setTimeout without a polyfill"); throw new Error("IE < 9 cannot support extra params to setTimeout without a polyfill");
}
return timer.setTimeout(fn, delay);
} }
return timer.setTimeout(fn, delay); return timer.setTimeout.apply(global, arguments);
} };
return timer.setTimeout.apply(global, arguments);
};
self.setInterval = function(fn, delay, params) { self.setInterval = function(fn, delay, params) {
if (legacyIE()) { if (legacyIE()) {
if (arguments.length > 2) { if (arguments.length > 2) {
throw new Error("IE < 9 cannot support extra params to setInterval without a polyfill"); throw new Error("IE < 9 cannot support extra params to setInterval without a polyfill");
}
return timer.setInterval(fn, delay);
} }
return timer.setInterval(fn, delay); return timer.setInterval.apply(global, arguments);
};
self.clearTimeout = function(id) {
return timer.clearTimeout.call(global, id);
};
self.clearInterval = function(id) {
return timer.clearInterval.call(global, id);
};
self.tick = function(millis) {
if (installed) {
delayedFunctionScheduler.tick(millis);
} else {
throw new Error("Mock clock is not installed, use jasmine.Clock.useMock()");
}
};
return self;
function legacyIE() {
//if these methods are polyfilled, apply will be present
//TODO: it may be difficult to load the polyfill before jasmine loads
//(env should be new-ed inside of onload)
return !(global.setTimeout || global.setInterval).apply;
} }
return timer.setInterval.apply(global, arguments);
};
self.clearTimeout = function(id) { function setTimeout(fn, delay) {
return timer.clearTimeout.call(global, id); return delayedFunctionScheduler.scheduleFunction(fn, delay, argSlice(arguments, 2));
};
self.clearInterval = function(id) {
return timer.clearInterval.call(global, id);
};
self.tick = function(millis) {
if (installed) {
delayedFunctionScheduler.tick(millis);
} else {
throw new Error("Mock clock is not installed, use jasmine.Clock.useMock()");
} }
};
return self; function clearTimeout(id) {
return delayedFunctionScheduler.removeFunctionWithId(id);
}
function legacyIE() { function setInterval(fn, interval) {
//if these methods are polyfilled, apply will be present return delayedFunctionScheduler.scheduleFunction(fn, interval, argSlice(arguments, 2), true);
//TODO: it may be difficult to load the polyfill before jasmine loads }
//(env should be new-ed inside of onload)
return !(global.setTimeout || global.setInterval).apply; function clearInterval(id) {
return delayedFunctionScheduler.removeFunctionWithId(id);
}
function argSlice(argsObj, n) {
return Array.prototype.slice.call(argsObj, 2);
}
} }
function setTimeout(fn, delay) { return Clock;
return delayedFunctionScheduler.scheduleFunction(fn, delay, argSlice(arguments, 2));
}
function clearTimeout(id) {
return delayedFunctionScheduler.removeFunctionWithId(id);
}
function setInterval(fn, interval) {
return delayedFunctionScheduler.scheduleFunction(fn, interval, argSlice(arguments, 2), true);
}
function clearInterval(id) {
return delayedFunctionScheduler.removeFunctionWithId(id);
}
function argSlice(argsObj, n) {
return Array.prototype.slice.call(argsObj, 2);
}
}; };

View File

@@ -1,104 +1,108 @@
jasmine.DelayedFunctionScheduler = function() { getJasmineRequireObj().DelayedFunctionScheduler = function() {
var self = this; function DelayedFunctionScheduler() {
var scheduledFunctions = {}; var self = this;
var currentTime = 0; var scheduledFunctions = {};
var delayedFnCount = 0; var currentTime = 0;
var delayedFnCount = 0;
self.tick = function(millis) { self.tick = function(millis) {
millis = millis || 0; millis = millis || 0;
runFunctionsWithinRange(currentTime, currentTime + millis); runFunctionsWithinRange(currentTime, currentTime + millis);
currentTime = currentTime + millis; currentTime = currentTime + millis;
};
self.scheduleFunction = function(funcToCall, millis, params, recurring, timeoutKey, runAtMillis) {
millis = millis || 0;
timeoutKey = timeoutKey || ++delayedFnCount;
runAtMillis = runAtMillis || (currentTime + millis);
scheduledFunctions[timeoutKey] = {
runAtMillis: runAtMillis,
funcToCall: funcToCall,
recurring: recurring,
params: params,
timeoutKey: timeoutKey,
millis: millis
}; };
return timeoutKey;
};
self.removeFunctionWithId = function(timeoutKey) { self.scheduleFunction = function(funcToCall, millis, params, recurring, timeoutKey, runAtMillis) {
delete scheduledFunctions[timeoutKey]; millis = millis || 0;
}; timeoutKey = timeoutKey || ++delayedFnCount;
runAtMillis = runAtMillis || (currentTime + millis);
scheduledFunctions[timeoutKey] = {
runAtMillis: runAtMillis,
funcToCall: funcToCall,
recurring: recurring,
params: params,
timeoutKey: timeoutKey,
millis: millis
};
return timeoutKey;
};
self.reset = function() { self.removeFunctionWithId = function(timeoutKey) {
currentTime = 0; delete scheduledFunctions[timeoutKey];
scheduledFunctions = {}; };
delayedFnCount = 0;
};
return self; self.reset = function() {
currentTime = 0;
scheduledFunctions = {};
delayedFnCount = 0;
};
return self;
//finds/dupes functions within range and removes them. // finds/dupes functions within range and removes them.
function functionsWithinRange(startMillis, endMillis) { function functionsWithinRange(startMillis, endMillis) {
var fnsToRun = []; var fnsToRun = [];
for (var timeoutKey in scheduledFunctions) { for (var timeoutKey in scheduledFunctions) {
var scheduledFunc = scheduledFunctions[timeoutKey]; var scheduledFunc = scheduledFunctions[timeoutKey];
if (scheduledFunc && if (scheduledFunc &&
scheduledFunc.runAtMillis >= startMillis && scheduledFunc.runAtMillis >= startMillis &&
scheduledFunc.runAtMillis <= endMillis) { scheduledFunc.runAtMillis <= endMillis) {
//remove fn -- we'll reschedule later if it is recurring.
self.removeFunctionWithId(timeoutKey); // remove fn -- we'll reschedule later if it is recurring.
if (!scheduledFunc.recurring) { self.removeFunctionWithId(timeoutKey);
fnsToRun.push(scheduledFunc); // schedules each function only once if (!scheduledFunc.recurring) {
} else { fnsToRun.push(scheduledFunc); // schedules each function only once
fnsToRun.push(buildNthInstanceOf(scheduledFunc, 0)); } else {
var additionalTimesFnRunsInRange = fnsToRun.push(buildNthInstanceOf(scheduledFunc, 0));
Math.floor((endMillis - scheduledFunc.runAtMillis) / scheduledFunc.millis); var additionalTimesFnRunsInRange =
for (var i = 0; i < additionalTimesFnRunsInRange; i++) { Math.floor((endMillis - scheduledFunc.runAtMillis) / scheduledFunc.millis);
fnsToRun.push(buildNthInstanceOf(scheduledFunc, i + 1)); for (var i = 0; i < additionalTimesFnRunsInRange; i++) {
fnsToRun.push(buildNthInstanceOf(scheduledFunc, i + 1));
}
reschedule(buildNthInstanceOf(scheduledFunc, additionalTimesFnRunsInRange));
} }
reschedule(buildNthInstanceOf(scheduledFunc, additionalTimesFnRunsInRange));
} }
} }
return fnsToRun;
} }
return fnsToRun; function buildNthInstanceOf(scheduledFunc, n) {
} return {
runAtMillis: scheduledFunc.runAtMillis + (scheduledFunc.millis * n),
function buildNthInstanceOf(scheduledFunc, n) { funcToCall: scheduledFunc.funcToCall,
return { params: scheduledFunc.params,
runAtMillis: scheduledFunc.runAtMillis + (scheduledFunc.millis * n), millis: scheduledFunc.millis,
funcToCall: scheduledFunc.funcToCall, recurring: scheduledFunc.recurring,
params: scheduledFunc.params, timeoutKey: scheduledFunc.timeoutKey
millis: scheduledFunc.millis, };
recurring: scheduledFunc.recurring,
timeoutKey: scheduledFunc.timeoutKey
};
}
function reschedule(scheduledFn) {
self.scheduleFunction(scheduledFn.funcToCall,
scheduledFn.millis,
scheduledFn.params,
true,
scheduledFn.timeoutKey,
scheduledFn.runAtMillis + scheduledFn.millis);
}
function runFunctionsWithinRange(startMillis, endMillis) {
var funcsToRun = functionsWithinRange(startMillis, endMillis);
if (funcsToRun.length === 0) {
return;
} }
funcsToRun.sort(function(a, b) { function reschedule(scheduledFn) {
return a.runAtMillis - b.runAtMillis; self.scheduleFunction(scheduledFn.funcToCall,
}); scheduledFn.millis,
scheduledFn.params,
true,
scheduledFn.timeoutKey,
scheduledFn.runAtMillis + scheduledFn.millis);
}
for (var i = 0; i < funcsToRun.length; ++i) {
var funcToRun = funcsToRun[i]; function runFunctionsWithinRange(startMillis, endMillis) {
funcToRun.funcToCall.apply(null, funcToRun.params); var funcsToRun = functionsWithinRange(startMillis, endMillis);
if (funcsToRun.length === 0) {
return;
}
funcsToRun.sort(function(a, b) {
return a.runAtMillis - b.runAtMillis;
});
for (var i = 0; i < funcsToRun.length; ++i) {
var funcToRun = funcsToRun[i];
funcToRun.funcToCall.apply(null, funcToRun.params);
}
} }
} }
return DelayedFunctionScheduler;
}; };

View File

@@ -1,18 +1,17 @@
(function() { getJasmineRequireObj().Env = function(j$) {
jasmine.Env = function(options) { function Env(options) {
options = options || {}; options = options || {};
var self = this; var self = this;
var global = options.global || jasmine.getGlobal(); var global = options.global || j$.getGlobal();
var catchExceptions = true; var catchExceptions = true;
this.clock = new jasmine.Clock(global, new jasmine.DelayedFunctionScheduler()); this.clock = new j$.Clock(global, new j$.DelayedFunctionScheduler());
this.jasmine = jasmine;
this.spies_ = []; this.spies_ = [];
this.currentSpec = null; this.currentSpec = null;
this.reporter = new jasmine.ReportDispatcher([ this.reporter = new j$.ReportDispatcher([
"jasmineStarted", "jasmineStarted",
"jasmineDone", "jasmineDone",
"suiteStarted", "suiteStarted",
@@ -32,11 +31,11 @@
// wrap matchers // wrap matchers
this.matchersClass = function() { this.matchersClass = function() {
jasmine.Matchers.apply(this, arguments); j$.Matchers.apply(this, arguments);
}; };
jasmine.util.inherit(this.matchersClass, jasmine.Matchers); j$.util.inherit(this.matchersClass, j$.Matchers);
jasmine.Matchers.wrapInto_(jasmine.Matchers.prototype, this.matchersClass); j$.Matchers.wrapInto_(j$.Matchers.prototype, this.matchersClass);
var expectationFactory = function(actual, spec) { var expectationFactory = function(actual, spec) {
var expect = new (self.matchersClass)(self, actual, spec); var expect = new (self.matchersClass)(self, actual, spec);
@@ -69,15 +68,15 @@
}; };
}; };
var specConstructor = jasmine.Spec; var specConstructor = j$.Spec;
var getSpecName = function(spec, currentSuite) { var getSpecName = function(spec, currentSuite) {
return currentSuite.getFullName() + ' ' + spec.description + '.'; return currentSuite.getFullName() + ' ' + spec.description + '.';
}; };
// TODO: we may just be able to pass in the fn instead of wrapping here // TODO: we may just be able to pass in the fn instead of wrapping here
var buildExpectationResult = jasmine.buildExpectationResult, var buildExpectationResult = j$.buildExpectationResult,
exceptionFormatter = new jasmine.ExceptionFormatter(), exceptionFormatter = new j$.ExceptionFormatter(),
expectationResultFactory = function(attrs) { expectationResultFactory = function(attrs) {
attrs.messageFormatter = exceptionFormatter.message; attrs.messageFormatter = exceptionFormatter.message;
attrs.stackFormatter = exceptionFormatter.stack; attrs.stackFormatter = exceptionFormatter.stack;
@@ -96,7 +95,7 @@
}; };
this.catchException = function(e){ this.catchException = function(e){
return jasmine.Spec.isPendingSpecException(e) || catchExceptions; return j$.Spec.isPendingSpecException(e) || catchExceptions;
}; };
var maximumSpecCallbackDepth = 100; var maximumSpecCallbackDepth = 100;
@@ -116,7 +115,7 @@
options.catchException = self.catchException; options.catchException = self.catchException;
options.encourageGC = options.encourageGarbageCollection || encourageGarbageCollection; options.encourageGC = options.encourageGarbageCollection || encourageGarbageCollection;
new jasmine.QueueRunner(options).run(options.fns, 0); new j$.QueueRunner(options).run(options.fns, 0);
}; };
var totalSpecsDefined = 0; var totalSpecsDefined = 0;
@@ -158,9 +157,9 @@
self.reporter.suiteStarted(suite.result); self.reporter.suiteStarted(suite.result);
}; };
var suiteConstructor = jasmine.Suite; var suiteConstructor = j$.Suite;
this.topSuite = new jasmine.Suite({ this.topSuite = new j$.Suite({
env: this, env: this,
id: this.nextSuiteId(), id: this.nextSuiteId(),
description: 'Jasmine__TopLevel__Suite', description: 'Jasmine__TopLevel__Suite',
@@ -190,33 +189,33 @@
}); });
this.topSuite.execute(this.reporter.jasmineDone); this.topSuite.execute(this.reporter.jasmineDone);
}; };
}; }
//TODO: shim Spec addMatchers behavior into Env. Should be rewritten to remove globals, etc. //TODO: shim Spec addMatchers behavior into Env. Should be rewritten to remove globals, etc.
jasmine.Env.prototype.addMatchers = function(matchersPrototype) { Env.prototype.addMatchers = function(matchersPrototype) {
var parent = this.matchersClass; var parent = this.matchersClass;
var newMatchersClass = function() { var newMatchersClass = function() {
parent.apply(this, arguments); parent.apply(this, arguments);
}; };
jasmine.util.inherit(newMatchersClass, parent); j$.util.inherit(newMatchersClass, parent);
jasmine.Matchers.wrapInto_(matchersPrototype, newMatchersClass); j$.Matchers.wrapInto_(matchersPrototype, newMatchersClass);
this.matchersClass = newMatchersClass; this.matchersClass = newMatchersClass;
}; };
jasmine.Env.prototype.version = function() { Env.prototype.version = function() {
return jasmine.version; return j$.version;
}; };
jasmine.Env.prototype.expect = function(actual) { Env.prototype.expect = function(actual) {
return this.currentSpec.expect(actual); return this.currentSpec.expect(actual);
}; };
jasmine.Env.prototype.spyOn = function(obj, methodName) { Env.prototype.spyOn = function(obj, methodName) {
if (jasmine.util.isUndefined(obj)) { if (j$.util.isUndefined(obj)) {
throw "spyOn could not find an object to spy upon for " + methodName + "()"; throw "spyOn could not find an object to spy upon for " + methodName + "()";
} }
if (jasmine.util.isUndefined(obj[methodName])) { if (j$.util.isUndefined(obj[methodName])) {
throw methodName + '() method does not exist'; throw methodName + '() method does not exist';
} }
@@ -225,7 +224,7 @@
throw new Error(methodName + ' has already been spied upon'); throw new Error(methodName + ' has already been spied upon');
} }
var spyObj = jasmine.createSpy(methodName); var spyObj = j$.createSpy(methodName);
this.spies_.push(spyObj); this.spies_.push(spyObj);
spyObj.baseObj = obj; spyObj.baseObj = obj;
@@ -238,7 +237,7 @@
}; };
// TODO: move this to closure // TODO: move this to closure
jasmine.Env.prototype.removeAllSpies = function() { Env.prototype.removeAllSpies = function() {
for (var i = 0; i < this.spies_.length; i++) { for (var i = 0; i < this.spies_.length; i++) {
var spy = this.spies_[i]; var spy = this.spies_[i];
spy.baseObj[spy.methodName] = spy.originalValue; spy.baseObj[spy.methodName] = spy.originalValue;
@@ -247,28 +246,28 @@
}; };
// TODO: move this to closure // TODO: move this to closure
jasmine.Env.prototype.versionString = function() { Env.prototype.versionString = function() {
console.log("DEPRECATED == use jasmine.version"); console.log("DEPRECATED == use j$.version");
return jasmine.version; return j$.version;
}; };
// TODO: move this to closure // TODO: move this to closure
jasmine.Env.prototype.nextSpecId = function() { Env.prototype.nextSpecId = function() {
return this.nextSpecId_++; return this.nextSpecId_++;
}; };
// TODO: move this to closure // TODO: move this to closure
jasmine.Env.prototype.nextSuiteId = function() { Env.prototype.nextSuiteId = function() {
return this.nextSuiteId_++; return this.nextSuiteId_++;
}; };
// TODO: move this to closure // TODO: move this to closure
jasmine.Env.prototype.addReporter = function(reporter) { Env.prototype.addReporter = function(reporter) {
this.reporter.addReporter(reporter); this.reporter.addReporter(reporter);
}; };
// TODO: move this to closure // TODO: move this to closure
jasmine.Env.prototype.describe = function(description, specDefinitions) { Env.prototype.describe = function(description, specDefinitions) {
var suite = this.suiteFactory(description, specDefinitions); var suite = this.suiteFactory(description, specDefinitions);
var parentSuite = this.currentSuite; var parentSuite = this.currentSuite;
@@ -294,47 +293,47 @@
}; };
// TODO: move this to closure // TODO: move this to closure
jasmine.Env.prototype.xdescribe = function(description, specDefinitions) { Env.prototype.xdescribe = function(description, specDefinitions) {
var suite = this.describe(description, specDefinitions); var suite = this.describe(description, specDefinitions);
suite.disable(); suite.disable();
return suite; return suite;
}; };
// TODO: move this to closure // TODO: move this to closure
jasmine.Env.prototype.it = function(description, fn) { Env.prototype.it = function(description, fn) {
var spec = this.specFactory(description, fn, this.currentSuite); var spec = this.specFactory(description, fn, this.currentSuite);
this.currentSuite.addSpec(spec); this.currentSuite.addSpec(spec);
return spec; return spec;
}; };
// TODO: move this to closure // TODO: move this to closure
jasmine.Env.prototype.xit = function(description, fn) { Env.prototype.xit = function(description, fn) {
var spec = this.it(description, fn); var spec = this.it(description, fn);
spec.pend(); spec.pend();
return spec; return spec;
}; };
// TODO: move this to closure // TODO: move this to closure
jasmine.Env.prototype.beforeEach = function(beforeEachFunction) { Env.prototype.beforeEach = function(beforeEachFunction) {
this.currentSuite.beforeEach(beforeEachFunction); this.currentSuite.beforeEach(beforeEachFunction);
}; };
// TODO: move this to closure // TODO: move this to closure
jasmine.Env.prototype.afterEach = function(afterEachFunction) { Env.prototype.afterEach = function(afterEachFunction) {
this.currentSuite.afterEach(afterEachFunction); this.currentSuite.afterEach(afterEachFunction);
}; };
// TODO: move this to closure // TODO: move this to closure
jasmine.Env.prototype.pending = function() { Env.prototype.pending = function() {
throw new Error(jasmine.Spec.pendingSpecExceptionMessage); throw new Error(j$.Spec.pendingSpecExceptionMessage);
}; };
// TODO: Still needed? // TODO: Still needed?
jasmine.Env.prototype.currentRunner = function() { Env.prototype.currentRunner = function() {
return this.topSuite; return this.topSuite;
}; };
jasmine.Env.prototype.compareRegExps_ = function(a, b, mismatchKeys, mismatchValues) { Env.prototype.compareRegExps_ = function(a, b, mismatchKeys, mismatchValues) {
if (a.source != b.source) if (a.source != b.source)
mismatchValues.push("expected pattern /" + b.source + "/ is not equal to the pattern /" + a.source + "/"); mismatchValues.push("expected pattern /" + b.source + "/ is not equal to the pattern /" + a.source + "/");
@@ -353,7 +352,7 @@
return (mismatchValues.length === 0); return (mismatchValues.length === 0);
}; };
jasmine.Env.prototype.compareObjects_ = function(a, b, mismatchKeys, mismatchValues) { Env.prototype.compareObjects_ = function(a, b, mismatchKeys, mismatchValues) {
if (a.__Jasmine_been_here_before__ === b && b.__Jasmine_been_here_before__ === a) { if (a.__Jasmine_been_here_before__ === b && b.__Jasmine_been_here_before__ === a) {
return true; return true;
} }
@@ -362,7 +361,7 @@
b.__Jasmine_been_here_before__ = a; b.__Jasmine_been_here_before__ = a;
var hasKey = function(obj, keyName) { var hasKey = function(obj, keyName) {
return obj !== null && !jasmine.util.isUndefined(obj[keyName]); return obj !== null && !j$.util.isUndefined(obj[keyName]);
}; };
for (var property in b) { for (var property in b) {
@@ -378,11 +377,11 @@
for (property in b) { for (property in b) {
if (property == '__Jasmine_been_here_before__') continue; if (property == '__Jasmine_been_here_before__') continue;
if (!this.equals_(a[property], b[property], mismatchKeys, mismatchValues)) { if (!this.equals_(a[property], b[property], mismatchKeys, mismatchValues)) {
mismatchValues.push("'" + property + "' was '" + (b[property] ? jasmine.util.htmlEscape(b[property].toString()) : b[property]) + "' in expected, but was '" + (a[property] ? jasmine.util.htmlEscape(a[property].toString()) : a[property]) + "' in actual."); mismatchValues.push("'" + property + "' was '" + (b[property] ? j$.util.htmlEscape(b[property].toString()) : b[property]) + "' in expected, but was '" + (a[property] ? j$.util.htmlEscape(a[property].toString()) : a[property]) + "' in actual.");
} }
} }
if (jasmine.isArray_(a) && jasmine.isArray_(b) && a.length != b.length) { if (j$.isArray_(a) && j$.isArray_(b) && a.length != b.length) {
mismatchValues.push("arrays were not the same length"); mismatchValues.push("arrays were not the same length");
} }
@@ -391,25 +390,25 @@
return (mismatchKeys.length === 0 && mismatchValues.length === 0); return (mismatchKeys.length === 0 && mismatchValues.length === 0);
}; };
jasmine.Env.prototype.equals_ = function(a, b, mismatchKeys, mismatchValues) { Env.prototype.equals_ = function(a, b, mismatchKeys, mismatchValues) {
mismatchKeys = mismatchKeys || []; mismatchKeys = mismatchKeys || [];
mismatchValues = mismatchValues || []; mismatchValues = mismatchValues || [];
for (var i = 0; i < this.equalityTesters_.length; i++) { for (var i = 0; i < this.equalityTesters_.length; i++) {
var equalityTester = this.equalityTesters_[i]; var equalityTester = this.equalityTesters_[i];
var result = equalityTester(a, b, this, mismatchKeys, mismatchValues); var result = equalityTester(a, b, this, mismatchKeys, mismatchValues);
if (!jasmine.util.isUndefined(result)) { if (!j$.util.isUndefined(result)) {
return result; return result;
} }
} }
if (a === b) return true; if (a === b) return true;
if (jasmine.util.isUndefined(a) || a === null || jasmine.util.isUndefined(b) || b === null) { if (j$.util.isUndefined(a) || a === null || j$.util.isUndefined(b) || b === null) {
return (jasmine.util.isUndefined(a) && jasmine.util.isUndefined(b)); return (j$.util.isUndefined(a) && j$.util.isUndefined(b));
} }
if (jasmine.isDomNode(a) && jasmine.isDomNode(b)) { if (j$.isDomNode(a) && j$.isDomNode(b)) {
return a === b; return a === b;
} }
@@ -425,19 +424,19 @@
return b.jasmineMatches(a); return b.jasmineMatches(a);
} }
if (a instanceof jasmine.Matchers.ObjectContaining) { if (a instanceof j$.Matchers.ObjectContaining) {
return a.matches(b); return a.matches(b);
} }
if (b instanceof jasmine.Matchers.ObjectContaining) { if (b instanceof j$.Matchers.ObjectContaining) {
return b.matches(a); return b.matches(a);
} }
if (jasmine.isString_(a) && jasmine.isString_(b)) { if (j$.isString_(a) && j$.isString_(b)) {
return (a == b); return (a == b);
} }
if (jasmine.isNumber_(a) && jasmine.isNumber_(b)) { if (j$.isNumber_(a) && j$.isNumber_(b)) {
return (a == b); return (a == b);
} }
@@ -453,8 +452,8 @@
return (a === b); return (a === b);
}; };
jasmine.Env.prototype.contains_ = function(haystack, needle) { Env.prototype.contains_ = function(haystack, needle) {
if (jasmine.isArray_(haystack)) { if (j$.isArray_(haystack)) {
for (var i = 0; i < haystack.length; i++) { for (var i = 0; i < haystack.length; i++) {
if (this.equals_(haystack[i], needle)) return true; if (this.equals_(haystack[i], needle)) return true;
} }
@@ -463,7 +462,9 @@
return haystack.indexOf(needle) >= 0; return haystack.indexOf(needle) >= 0;
}; };
jasmine.Env.prototype.addEqualityTester = function(equalityTester) { Env.prototype.addEqualityTester = function(equalityTester) {
this.equalityTesters_.push(equalityTester); this.equalityTesters_.push(equalityTester);
}; };
}());
return Env;
};

View File

@@ -1,21 +1,25 @@
jasmine.ExceptionFormatter = function() { getJasmineRequireObj().ExceptionFormatter = function() {
this.message = function(error) { function ExceptionFormatter() {
var message = error.name + this.message = function(error) {
': ' + var message = error.name +
error.message; ': ' +
error.message;
if (error.fileName || error.sourceURL) { if (error.fileName || error.sourceURL) {
message += " in " + (error.fileName || error.sourceURL); message += " in " + (error.fileName || error.sourceURL);
} }
if (error.line || error.lineNumber) { if (error.line || error.lineNumber) {
message += " (line " + (error.line || error.lineNumber) + ")"; message += " (line " + (error.line || error.lineNumber) + ")";
} }
return message; return message;
}; };
this.stack = function(error) { this.stack = function(error) {
return error ? error.stack : null; return error ? error.stack : null;
}; };
}; }
return ExceptionFormatter;
};

View File

@@ -1,41 +1,45 @@
//TODO: expectation result may make more sense as a presentation of an expectation. //TODO: expectation result may make more sense as a presentation of an expectation.
jasmine.buildExpectationResult = function(options) { getJasmineRequireObj().buildExpectationResult = function() {
var messageFormatter = options.messageFormatter || function() {}, function buildExpectationResult(options) {
stackFormatter = options.stackFormatter || function() {}; var messageFormatter = options.messageFormatter || function() {},
stackFormatter = options.stackFormatter || function() {};
return { return {
matcherName: options.matcherName, matcherName: options.matcherName,
expected: options.expected, expected: options.expected,
actual: options.actual, actual: options.actual,
message: message(), message: message(),
stack: stack(), stack: stack(),
passed: options.passed passed: options.passed
}; };
function message() { function message() {
if (options.passed) { if (options.passed) {
return "Passed."; return "Passed.";
} else if (options.message) { } else if (options.message) {
return options.message; return options.message;
} else if (options.error) { } else if (options.error) {
return messageFormatter(options.error); return messageFormatter(options.error);
} }
return "";
}
function stack() {
if (options.passed) {
return ""; return "";
} }
var error = options.error; function stack() {
if (!error) { if (options.passed) {
try { return "";
throw new Error(message());
} catch (e) {
error = e;
} }
var error = options.error;
if (!error) {
try {
throw new Error(message());
} catch (e) {
error = e;
}
}
return stackFormatter(error);
} }
return stackFormatter(error);
} }
return buildExpectationResult;
}; };

View File

@@ -1,55 +1,59 @@
jasmine.JsApiReporter = function(jasmine) { getJasmineRequireObj().JsApiReporter = function() {
this.jasmine = jasmine || {}; function JsApiReporter(jasmine) { // TODO: this doesn't appear to be used
this.started = false; this.jasmine = jasmine || {};
this.finished = false; this.started = false;
this.finished = false;
var status = 'loaded'; var status = 'loaded';
this.jasmineStarted = function() { this.jasmineStarted = function() {
this.started = true; this.started = true;
status = 'started'; status = 'started';
}; };
this.jasmineDone = function() { this.jasmineDone = function() {
this.finished = true; this.finished = true;
status = 'done'; status = 'done';
}; };
this.status = function() { this.status = function() {
return status; return status;
}; };
var suites = {}; var suites = {};
this.suiteStarted = function(result) { this.suiteStarted = function(result) {
storeSuite(result); storeSuite(result);
}; };
this.suiteDone = function(result) { this.suiteDone = function(result) {
storeSuite(result); storeSuite(result);
}; };
function storeSuite(result) {
suites[result.id] = result;
}
this.suites = function() {
return suites;
};
var specs = [];
this.specStarted = function(result) { };
this.specDone = function(result) {
specs.push(result);
};
this.specResults = function(index, length) {
return specs.slice(index, index + length);
};
this.specs = function() {
return specs;
};
function storeSuite(result) {
suites[result.id] = result;
} }
this.suites = function() { return JsApiReporter;
return suites; };
};
var specs = [];
this.specStarted = function(result) { };
this.specDone = function(result) {
specs.push(result);
};
this.specResults = function(index, length) {
return specs.slice(index, index + length);
};
this.specs = function() {
return specs;
};
};

View File

@@ -1,304 +1,303 @@
/** getJasmineRequireObj().Matchers = function(j$) {
* @constructor function Matchers(env, actual, spec, opt_isNot) {
* @param {jasmine.Env} env //TODO: true dependency: equals, contains
* @param actual this.env = env;
* @param {jasmine.Spec} spec this.actual = actual;
*/ this.spec = spec;
jasmine.Matchers = function(env, actual, spec, opt_isNot) { this.isNot = opt_isNot || false;
//TODO: true dependency: equals, contains
this.env = env;
this.actual = actual;
this.spec = spec;
this.isNot = opt_isNot || false;
};
jasmine.Matchers.wrapInto_ = function(prototype, matchersClass) {
for (var methodName in prototype) {
var orig = prototype[methodName];
matchersClass.prototype[methodName] = jasmine.Matchers.matcherFn_(methodName, orig);
} }
};
jasmine.Matchers.matcherFn_ = function(matcherName, matcherFunction) { Matchers.wrapInto_ = function(prototype, matchersClass) {
return function() { for (var methodName in prototype) {
var matcherArgs = jasmine.util.argsToArray(arguments); var orig = prototype[methodName];
var result = matcherFunction.apply(this, arguments); matchersClass.prototype[methodName] = Matchers.matcherFn_(methodName, orig);
}
};
if (this.isNot) { Matchers.matcherFn_ = function(matcherName, matcherFunction) {
result = !result; return function() {
var matcherArgs = j$.util.argsToArray(arguments);
var result = matcherFunction.apply(this, arguments);
if (this.isNot) {
result = !result;
}
var message;
if (!result) {
if (this.message) {
message = this.message.apply(this, arguments);
if (j$.isArray_(message)) {
message = message[this.isNot ? 1 : 0];
}
} else {
var englishyPredicate = matcherName.replace(/[A-Z]/g, function(s) { return ' ' + s.toLowerCase(); });
message = "Expected " + j$.pp(this.actual) + (this.isNot ? " not " : " ") + englishyPredicate;
if (matcherArgs.length > 0) {
for (var i = 0; i < matcherArgs.length; i++) {
if (i > 0) message += ",";
message += " " + j$.pp(matcherArgs[i]);
}
}
message += ".";
}
}
this.spec.addExpectationResult(result, {
matcherName: matcherName,
passed: result,
expected: matcherArgs.length > 1 ? matcherArgs : matcherArgs[0],
actual: this.actual,
message: message
});
return void 0;
};
};
Matchers.prototype.toBe = function(expected) {
return this.actual === expected;
};
Matchers.prototype.toNotBe = function(expected) {
return this.actual !== expected;
};
Matchers.prototype.toEqual = function(expected) {
return this.env.equals_(this.actual, expected);
};
Matchers.prototype.toNotEqual = function(expected) {
return !this.env.equals_(this.actual, expected);
};
Matchers.prototype.toMatch = function(expected) {
return new RegExp(expected).test(this.actual);
};
Matchers.prototype.toNotMatch = function(expected) {
return !(new RegExp(expected).test(this.actual));
};
Matchers.prototype.toBeDefined = function() {
return !j$.util.isUndefined(this.actual);
};
Matchers.prototype.toBeUndefined = function() {
return j$.util.isUndefined(this.actual);
};
Matchers.prototype.toBeNull = function() {
return (this.actual === null);
};
Matchers.prototype.toBeNaN = function() {
this.message = function() {
return [ "Expected " + j$.pp(this.actual) + " to be NaN." ];
};
return (this.actual !== this.actual);
};
Matchers.prototype.toBeTruthy = function() {
return !!this.actual;
};
Matchers.prototype.toBeFalsy = function() {
return !this.actual;
};
Matchers.prototype.toHaveBeenCalled = function() {
if (arguments.length > 0) {
throw new Error('toHaveBeenCalled does not take arguments, use toHaveBeenCalledWith');
} }
var message; if (!j$.isSpy(this.actual)) {
if (!result) { throw new Error('Expected a spy, but got ' + j$.pp(this.actual) + '.');
if (this.message) { }
message = this.message.apply(this, arguments);
if (jasmine.isArray_(message)) { this.message = function() {
message = message[this.isNot ? 1 : 0]; return [
} "Expected spy " + this.actual.identity + " to have been called.",
"Expected spy " + this.actual.identity + " not to have been called."
];
};
return this.actual.wasCalled;
};
// TODO: kill this for 2.0
Matchers.prototype.wasCalled = Matchers.prototype.toHaveBeenCalled;
Matchers.prototype.wasNotCalled = function() {
if (arguments.length > 0) {
throw new Error('wasNotCalled does not take arguments');
}
if (!j$.isSpy(this.actual)) {
throw new Error('Expected a spy, but got ' + j$.pp(this.actual) + '.');
}
this.message = function() {
return [
"Expected spy " + this.actual.identity + " to not have been called.",
"Expected spy " + this.actual.identity + " to have been called."
];
};
return !this.actual.wasCalled;
};
Matchers.prototype.toHaveBeenCalledWith = function() {
var expectedArgs = j$.util.argsToArray(arguments);
if (!j$.isSpy(this.actual)) {
throw new Error('Expected a spy, but got ' + j$.pp(this.actual) + '.');
}
this.message = function() {
var invertedMessage = "Expected spy " + this.actual.identity + " not to have been called with " + j$.pp(expectedArgs) + " but it was.";
var positiveMessage = "";
if (this.actual.callCount === 0) {
positiveMessage = "Expected spy " + this.actual.identity + " to have been called with " + j$.pp(expectedArgs) + " but it was never called.";
} else { } else {
var englishyPredicate = matcherName.replace(/[A-Z]/g, function(s) { return ' ' + s.toLowerCase(); }); positiveMessage = "Expected spy " + this.actual.identity + " to have been called with " + j$.pp(expectedArgs) + " but actual calls were " + j$.pp(this.actual.argsForCall).replace(/^\[ | \]$/g, '');
message = "Expected " + jasmine.pp(this.actual) + (this.isNot ? " not " : " ") + englishyPredicate; }
if (matcherArgs.length > 0) { return [positiveMessage, invertedMessage];
for (var i = 0; i < matcherArgs.length; i++) { };
if (i > 0) message += ",";
message += " " + jasmine.pp(matcherArgs[i]); return this.env.contains_(this.actual.argsForCall, expectedArgs);
} };
}
message += "."; // TODO: kill for 2.0
Matchers.prototype.wasCalledWith = Matchers.prototype.toHaveBeenCalledWith;
// TODO: kill for 2.0
Matchers.prototype.wasNotCalledWith = function() {
var expectedArgs = j$.util.argsToArray(arguments);
if (!j$.isSpy(this.actual)) {
throw new Error('Expected a spy, but got ' + j$.pp(this.actual) + '.');
}
this.message = function() {
return [
"Expected spy not to have been called with " + j$.pp(expectedArgs) + " but it was",
"Expected spy to have been called with " + j$.pp(expectedArgs) + " but it was"
];
};
return !this.env.contains_(this.actual.argsForCall, expectedArgs);
};
Matchers.prototype.toContain = function(expected) {
return this.env.contains_(this.actual, expected);
};
Matchers.prototype.toNotContain = function(expected) {
return !this.env.contains_(this.actual, expected);
};
Matchers.prototype.toBeLessThan = function(expected) {
return this.actual < expected;
};
Matchers.prototype.toBeGreaterThan = function(expected) {
return this.actual > expected;
};
Matchers.prototype.toBeCloseTo = function(expected, precision) {
if (precision !== 0) {
precision = precision || 2;
}
return Math.abs(expected - this.actual) < (Math.pow(10, -precision) / 2);
};
Matchers.prototype.toThrow = function(expected) {
var result = false;
var exception, exceptionMessage;
if (typeof this.actual != 'function') {
throw new Error('Actual is not a function');
}
try {
this.actual();
} catch (e) {
exception = e;
}
if (exception) {
exceptionMessage = exception.message || exception;
result = (j$.util.isUndefined(expected) || this.env.equals_(exceptionMessage, expected.message || expected) || (j$.isA_("RegExp", expected) && expected.test(exceptionMessage)));
}
var not = this.isNot ? "not " : "";
var regexMatch = j$.isA_("RegExp", expected) ? " an exception matching" : "";
this.message = function() {
if (exception) {
return ["Expected function " + not + "to throw" + regexMatch, expected ? expected.message || expected : "an exception", ", but it threw", exceptionMessage].join(' ');
} else {
return "Expected function to throw an exception.";
}
};
return result;
};
Matchers.Any = function(expectedClass) {
this.expectedClass = expectedClass;
};
Matchers.Any.prototype.jasmineMatches = function(other) {
if (this.expectedClass == String) {
return typeof other == 'string' || other instanceof String;
}
if (this.expectedClass == Number) {
return typeof other == 'number' || other instanceof Number;
}
if (this.expectedClass == Function) {
return typeof other == 'function' || other instanceof Function;
}
if (this.expectedClass == Object) {
return typeof other == 'object';
}
return other instanceof this.expectedClass;
};
Matchers.Any.prototype.jasmineToString = function() {
return '<jasmine.any(' + this.expectedClass + ')>';
};
Matchers.ObjectContaining = function(sample) {
this.sample = sample;
};
Matchers.ObjectContaining.prototype.jasmineMatches = function(other, mismatchKeys, mismatchValues) {
mismatchKeys = mismatchKeys || [];
mismatchValues = mismatchValues || [];
var env = j$.getEnv();
var hasKey = function(obj, keyName) {
return obj !== null && !j$.util.isUndefined(obj[keyName]);
};
for (var property in this.sample) {
if (!hasKey(other, property) && hasKey(this.sample, property)) {
mismatchKeys.push("expected has key '" + property + "', but missing from actual.");
}
else if (!env.equals_(this.sample[property], other[property], mismatchKeys, mismatchValues)) {
mismatchValues.push("'" + property + "' was '" + (other[property] ? j$.util.htmlEscape(other[property].toString()) : other[property]) + "' in expected, but was '" + (this.sample[property] ? j$.util.htmlEscape(this.sample[property].toString()) : this.sample[property]) + "' in actual.");
} }
} }
this.spec.addExpectationResult(result, { return (mismatchKeys.length === 0 && mismatchValues.length === 0);
matcherName: matcherName,
passed: result,
expected: matcherArgs.length > 1 ? matcherArgs : matcherArgs[0],
actual: this.actual,
message: message
});
return void 0;
};
};
jasmine.Matchers.prototype.toBe = function(expected) {
return this.actual === expected;
};
jasmine.Matchers.prototype.toNotBe = function(expected) {
return this.actual !== expected;
};
jasmine.Matchers.prototype.toEqual = function(expected) {
return this.env.equals_(this.actual, expected);
};
jasmine.Matchers.prototype.toNotEqual = function(expected) {
return !this.env.equals_(this.actual, expected);
};
jasmine.Matchers.prototype.toMatch = function(expected) {
return new RegExp(expected).test(this.actual);
};
jasmine.Matchers.prototype.toNotMatch = function(expected) {
return !(new RegExp(expected).test(this.actual));
};
jasmine.Matchers.prototype.toBeDefined = function() {
return !jasmine.util.isUndefined(this.actual);
};
jasmine.Matchers.prototype.toBeUndefined = function() {
return jasmine.util.isUndefined(this.actual);
};
jasmine.Matchers.prototype.toBeNull = function() {
return (this.actual === null);
};
jasmine.Matchers.prototype.toBeNaN = function() {
this.message = function() {
return [ "Expected " + jasmine.pp(this.actual) + " to be NaN." ];
}; };
return (this.actual !== this.actual); Matchers.ObjectContaining.prototype.jasmineToString = function() {
}; return "<jasmine.objectContaining(" + j$.pp(this.sample) + ")>";
jasmine.Matchers.prototype.toBeTruthy = function() {
return !!this.actual;
};
jasmine.Matchers.prototype.toBeFalsy = function() {
return !this.actual;
};
jasmine.Matchers.prototype.toHaveBeenCalled = function() {
if (arguments.length > 0) {
throw new Error('toHaveBeenCalled does not take arguments, use toHaveBeenCalledWith');
}
if (!jasmine.isSpy(this.actual)) {
throw new Error('Expected a spy, but got ' + jasmine.pp(this.actual) + '.');
}
this.message = function() {
return [
"Expected spy " + this.actual.identity + " to have been called.",
"Expected spy " + this.actual.identity + " not to have been called."
];
}; };
return this.actual.wasCalled; return Matchers;
};
// TODO: kill this for 2.0
jasmine.Matchers.prototype.wasCalled = jasmine.Matchers.prototype.toHaveBeenCalled;
jasmine.Matchers.prototype.wasNotCalled = function() {
if (arguments.length > 0) {
throw new Error('wasNotCalled does not take arguments');
}
if (!jasmine.isSpy(this.actual)) {
throw new Error('Expected a spy, but got ' + jasmine.pp(this.actual) + '.');
}
this.message = function() {
return [
"Expected spy " + this.actual.identity + " to not have been called.",
"Expected spy " + this.actual.identity + " to have been called."
];
};
return !this.actual.wasCalled;
};
jasmine.Matchers.prototype.toHaveBeenCalledWith = function() {
var expectedArgs = jasmine.util.argsToArray(arguments);
if (!jasmine.isSpy(this.actual)) {
throw new Error('Expected a spy, but got ' + jasmine.pp(this.actual) + '.');
}
this.message = function() {
var invertedMessage = "Expected spy " + this.actual.identity + " not to have been called with " + jasmine.pp(expectedArgs) + " but it was.";
var positiveMessage = "";
if (this.actual.callCount === 0) {
positiveMessage = "Expected spy " + this.actual.identity + " to have been called with " + jasmine.pp(expectedArgs) + " but it was never called.";
} else {
positiveMessage = "Expected spy " + this.actual.identity + " to have been called with " + jasmine.pp(expectedArgs) + " but actual calls were " + jasmine.pp(this.actual.argsForCall).replace(/^\[ | \]$/g, '');
}
return [positiveMessage, invertedMessage];
};
return this.env.contains_(this.actual.argsForCall, expectedArgs);
};
// TODO: kill for 2.0
jasmine.Matchers.prototype.wasCalledWith = jasmine.Matchers.prototype.toHaveBeenCalledWith;
// TODO: kill for 2.0
jasmine.Matchers.prototype.wasNotCalledWith = function() {
var expectedArgs = jasmine.util.argsToArray(arguments);
if (!jasmine.isSpy(this.actual)) {
throw new Error('Expected a spy, but got ' + jasmine.pp(this.actual) + '.');
}
this.message = function() {
return [
"Expected spy not to have been called with " + jasmine.pp(expectedArgs) + " but it was",
"Expected spy to have been called with " + jasmine.pp(expectedArgs) + " but it was"
];
};
return !this.env.contains_(this.actual.argsForCall, expectedArgs);
};
jasmine.Matchers.prototype.toContain = function(expected) {
return this.env.contains_(this.actual, expected);
};
jasmine.Matchers.prototype.toNotContain = function(expected) {
return !this.env.contains_(this.actual, expected);
};
jasmine.Matchers.prototype.toBeLessThan = function(expected) {
return this.actual < expected;
};
jasmine.Matchers.prototype.toBeGreaterThan = function(expected) {
return this.actual > expected;
};
jasmine.Matchers.prototype.toBeCloseTo = function(expected, precision) {
if (precision !== 0) {
precision = precision || 2;
}
return Math.abs(expected - this.actual) < (Math.pow(10, -precision) / 2);
};
jasmine.Matchers.prototype.toThrow = function(expected) {
var result = false;
var exception, exceptionMessage;
if (typeof this.actual != 'function') {
throw new Error('Actual is not a function');
}
try {
this.actual();
} catch (e) {
exception = e;
}
if (exception) {
exceptionMessage = exception.message || exception;
result = (jasmine.util.isUndefined(expected) || this.env.equals_(exceptionMessage, expected.message || expected) || (jasmine.isA_("RegExp", expected) && expected.test(exceptionMessage)));
}
var not = this.isNot ? "not " : "";
var regexMatch = jasmine.isA_("RegExp", expected) ? " an exception matching" : "";
this.message = function() {
if (exception) {
return ["Expected function " + not + "to throw" + regexMatch, expected ? expected.message || expected : "an exception", ", but it threw", exceptionMessage].join(' ');
} else {
return "Expected function to throw an exception.";
}
};
return result;
};
jasmine.Matchers.Any = function(expectedClass) {
this.expectedClass = expectedClass;
};
jasmine.Matchers.Any.prototype.jasmineMatches = function(other) {
if (this.expectedClass == String) {
return typeof other == 'string' || other instanceof String;
}
if (this.expectedClass == Number) {
return typeof other == 'number' || other instanceof Number;
}
if (this.expectedClass == Function) {
return typeof other == 'function' || other instanceof Function;
}
if (this.expectedClass == Object) {
return typeof other == 'object';
}
return other instanceof this.expectedClass;
};
jasmine.Matchers.Any.prototype.jasmineToString = function() {
return '<jasmine.any(' + this.expectedClass + ')>';
};
jasmine.Matchers.ObjectContaining = function(sample) {
this.sample = sample;
};
jasmine.Matchers.ObjectContaining.prototype.jasmineMatches = function(other, mismatchKeys, mismatchValues) {
mismatchKeys = mismatchKeys || [];
mismatchValues = mismatchValues || [];
var env = jasmine.getEnv();
var hasKey = function(obj, keyName) {
return obj !== null && !jasmine.util.isUndefined(obj[keyName]);
};
for (var property in this.sample) {
if (!hasKey(other, property) && hasKey(this.sample, property)) {
mismatchKeys.push("expected has key '" + property + "', but missing from actual.");
}
else if (!env.equals_(this.sample[property], other[property], mismatchKeys, mismatchValues)) {
mismatchValues.push("'" + property + "' was '" + (other[property] ? jasmine.util.htmlEscape(other[property].toString()) : other[property]) + "' in expected, but was '" + (this.sample[property] ? jasmine.util.htmlEscape(this.sample[property].toString()) : this.sample[property]) + "' in actual.");
}
}
return (mismatchKeys.length === 0 && mismatchValues.length === 0);
};
jasmine.Matchers.ObjectContaining.prototype.jasmineToString = function() {
return "<jasmine.objectContaining(" + jasmine.pp(this.sample) + ")>";
}; };

View File

@@ -1,122 +1,127 @@
jasmine.PrettyPrinter = function() { getJasmineRequireObj().StringPrettyPrinter = function(j$) {
this.ppNestLevel_ = 0;
};
jasmine.PrettyPrinter.prototype.format = function(value) { function PrettyPrinter() {
this.ppNestLevel_++; this.ppNestLevel_ = 0;
try { }
if (jasmine.util.isUndefined(value)) {
this.emitScalar('undefined'); PrettyPrinter.prototype.format = function(value) {
} else if (value === null) { this.ppNestLevel_++;
this.emitScalar('null'); try {
} else if (value === jasmine.getGlobal()) { if (j$.util.isUndefined(value)) {
this.emitScalar('<global>'); this.emitScalar('undefined');
} else if (value.jasmineToString) { } else if (value === null) {
this.emitScalar(value.jasmineToString()); this.emitScalar('null');
} else if (typeof value === 'string') { } else if (value === j$.getGlobal()) {
this.emitString(value); this.emitScalar('<global>');
} else if (jasmine.isSpy(value)) { } else if (value.jasmineToString) {
this.emitScalar("spy on " + value.identity); this.emitScalar(value.jasmineToString());
} else if (value instanceof RegExp) { } else if (typeof value === 'string') {
this.emitScalar(value.toString()); this.emitString(value);
} else if (typeof value === 'function') { } else if (j$.isSpy(value)) {
this.emitScalar('Function'); this.emitScalar("spy on " + value.identity);
} else if (typeof value.nodeType === 'number') { } else if (value instanceof RegExp) {
this.emitScalar('HTMLNode'); this.emitScalar(value.toString());
} else if (value instanceof Date) { } else if (typeof value === 'function') {
this.emitScalar('Date(' + value + ')'); this.emitScalar('Function');
} else if (value.__Jasmine_been_here_before__) { } else if (typeof value.nodeType === 'number') {
this.emitScalar('<circular reference: ' + (jasmine.isArray_(value) ? 'Array' : 'Object') + '>'); this.emitScalar('HTMLNode');
} else if (jasmine.isArray_(value) || typeof value == 'object') { } else if (value instanceof Date) {
value.__Jasmine_been_here_before__ = true; this.emitScalar('Date(' + value + ')');
if (jasmine.isArray_(value)) { } else if (value.__Jasmine_been_here_before__) {
this.emitArray(value); this.emitScalar('<circular reference: ' + (j$.isArray_(value) ? 'Array' : 'Object') + '>');
} else if (j$.isArray_(value) || typeof value == 'object') {
value.__Jasmine_been_here_before__ = true;
if (j$.isArray_(value)) {
this.emitArray(value);
} else {
this.emitObject(value);
}
delete value.__Jasmine_been_here_before__;
} else { } else {
this.emitObject(value); this.emitScalar(value.toString());
} }
delete value.__Jasmine_been_here_before__; } finally {
} else { this.ppNestLevel_--;
this.emitScalar(value.toString());
} }
} finally { };
this.ppNestLevel_--;
}
};
jasmine.PrettyPrinter.prototype.iterateObject = function(obj, fn) { PrettyPrinter.prototype.iterateObject = function(obj, fn) {
for (var property in obj) { for (var property in obj) {
if (!obj.hasOwnProperty(property)) continue; if (!obj.hasOwnProperty(property)) continue;
if (property == '__Jasmine_been_here_before__') continue; if (property == '__Jasmine_been_here_before__') continue;
fn(property, obj.__lookupGetter__ ? (!jasmine.util.isUndefined(obj.__lookupGetter__(property)) && fn(property, obj.__lookupGetter__ ? (!j$.util.isUndefined(obj.__lookupGetter__(property)) &&
obj.__lookupGetter__(property) !== null) : false); obj.__lookupGetter__(property) !== null) : false);
}
};
jasmine.PrettyPrinter.prototype.emitArray = jasmine.unimplementedMethod_;
jasmine.PrettyPrinter.prototype.emitObject = jasmine.unimplementedMethod_;
jasmine.PrettyPrinter.prototype.emitScalar = jasmine.unimplementedMethod_;
jasmine.PrettyPrinter.prototype.emitString = jasmine.unimplementedMethod_;
jasmine.StringPrettyPrinter = function() {
jasmine.PrettyPrinter.call(this);
this.string = '';
};
jasmine.util.inherit(jasmine.StringPrettyPrinter, jasmine.PrettyPrinter);
jasmine.StringPrettyPrinter.prototype.emitScalar = function(value) {
this.append(value);
};
jasmine.StringPrettyPrinter.prototype.emitString = function(value) {
this.append("'" + value + "'");
};
jasmine.StringPrettyPrinter.prototype.emitArray = function(array) {
if (this.ppNestLevel_ > jasmine.MAX_PRETTY_PRINT_DEPTH) {
this.append("Array");
return;
}
this.append('[ ');
for (var i = 0; i < array.length; i++) {
if (i > 0) {
this.append(', ');
} }
this.format(array[i]); };
PrettyPrinter.prototype.emitArray = j$.unimplementedMethod_;
PrettyPrinter.prototype.emitObject = j$.unimplementedMethod_;
PrettyPrinter.prototype.emitScalar = j$.unimplementedMethod_;
PrettyPrinter.prototype.emitString = j$.unimplementedMethod_;
function StringPrettyPrinter() {
PrettyPrinter.call(this);
this.string = '';
} }
this.append(' ]'); j$.util.inherit(StringPrettyPrinter, PrettyPrinter);
};
jasmine.StringPrettyPrinter.prototype.emitObject = function(obj) { StringPrettyPrinter.prototype.emitScalar = function(value) {
if (this.ppNestLevel_ > jasmine.MAX_PRETTY_PRINT_DEPTH) { this.append(value);
this.append("Object"); };
return;
}
var self = this; StringPrettyPrinter.prototype.emitString = function(value) {
this.append('{ '); this.append("'" + value + "'");
var first = true; };
this.iterateObject(obj, function(property, isGetter) { StringPrettyPrinter.prototype.emitArray = function(array) {
if (first) { if (this.ppNestLevel_ > j$.MAX_PRETTY_PRINT_DEPTH) {
first = false; this.append("Array");
} else { return;
self.append(', ');
} }
self.append(property); this.append('[ ');
self.append(' : '); for (var i = 0; i < array.length; i++) {
if (isGetter) { if (i > 0) {
self.append('<getter>'); this.append(', ');
} else { }
self.format(obj[property]); this.format(array[i]);
} }
}); this.append(' ]');
};
this.append(' }'); StringPrettyPrinter.prototype.emitObject = function(obj) {
if (this.ppNestLevel_ > j$.MAX_PRETTY_PRINT_DEPTH) {
this.append("Object");
return;
}
var self = this;
this.append('{ ');
var first = true;
this.iterateObject(obj, function(property, isGetter) {
if (first) {
first = false;
} else {
self.append(', ');
}
self.append(property);
self.append(' : ');
if (isGetter) {
self.append('<getter>');
} else {
self.format(obj[property]);
}
});
this.append(' }');
};
StringPrettyPrinter.prototype.append = function(value) {
this.string += value;
};
return StringPrettyPrinter;
}; };
jasmine.StringPrettyPrinter.prototype.append = function(value) {
this.string += value;
};

View File

@@ -1,40 +1,45 @@
jasmine.QueueRunner = function(attrs) { getJasmineRequireObj().QueueRunner = function() {
this.fns = attrs.fns || [];
this.onComplete = attrs.onComplete || function() {};
this.encourageGC = attrs.encourageGC || function(fn) {fn();};
this.onException = attrs.onException || function() {};
this.catchException = attrs.catchException || function() { return true; };
};
jasmine.QueueRunner.prototype.execute = function() { function QueueRunner(attrs) {
this.run(this.fns, 0); this.fns = attrs.fns || [];
}; this.onComplete = attrs.onComplete || function() {};
this.encourageGC = attrs.encourageGC || function(fn) {fn();};
jasmine.QueueRunner.prototype.run = function(fns, index) { this.onException = attrs.onException || function() {};
if (index >= fns.length) { this.catchException = attrs.catchException || function() { return true; };
this.encourageGC(this.onComplete);
return;
} }
var fn = fns[index]; QueueRunner.prototype.execute = function() {
var self = this; this.run(this.fns, 0);
if (fn.length > 0) { };
attempt(function() { fn.call(self, function() { self.run(fns, index + 1); }); });
} else {
attempt(function() { fn.call(self); });
self.run(fns, index + 1);
}
function attempt(fn) { QueueRunner.prototype.run = function(fns, index) {
try { if (index >= fns.length) {
fn(); this.encourageGC(this.onComplete);
} catch (e) { return;
self.onException(e); }
if (!self.catchException(e)) {
//TODO: set a var when we catch an exception and var fn = fns[index];
//use a finally block to close the loop in a nice way.. var self = this;
throw e; if (fn.length > 0) {
attempt(function() { fn.call(self, function() { self.run(fns, index + 1); }); });
} else {
attempt(function() { fn.call(self); });
self.run(fns, index + 1);
}
function attempt(fn) {
try {
fn();
} catch (e) {
self.onException(e);
if (!self.catchException(e)) {
//TODO: set a var when we catch an exception and
//use a finally block to close the loop in a nice way..
throw e;
}
} }
} }
} };
return QueueRunner;
}; };

View File

@@ -1,30 +1,35 @@
jasmine.ReportDispatcher = function(methods) { getJasmineRequireObj().ReportDispatcher = function() {
function ReportDispatcher(methods) {
var dispatchedMethods = methods || []; var dispatchedMethods = methods || [];
for (var i = 0; i < dispatchedMethods.length; i++) { for (var i = 0; i < dispatchedMethods.length; i++) {
var method = dispatchedMethods[i]; var method = dispatchedMethods[i];
this[method] = function(m) { this[method] = function(m) {
return function() { return function() {
dispatch(m, arguments); dispatch(m, arguments);
}; };
}(method); }(method);
} }
var reporters = []; var reporters = [];
this.addReporter = function(reporter) { this.addReporter = function(reporter) {
reporters.push(reporter); reporters.push(reporter);
}; };
return this; return this;
function dispatch(method, args) { function dispatch(method, args) {
for (var i = 0; i < reporters.length; i++) { for (var i = 0; i < reporters.length; i++) {
var reporter = reporters[i]; var reporter = reporters[i];
if (reporter[method]) { if (reporter[method]) {
reporter[method].apply(reporter, args); reporter[method].apply(reporter, args);
}
} }
} }
} }
};
return ReportDispatcher;
};

View File

@@ -1,118 +1,126 @@
jasmine.Spec = function(attrs) { getJasmineRequireObj().Spec = function() {
this.encounteredExpectations = false; function Spec(attrs) {
this.expectationFactory = attrs.expectationFactory; this.encounteredExpectations = false;
this.resultCallback = attrs.resultCallback || function() {}; this.expectationFactory = attrs.expectationFactory;
this.id = attrs.id; this.resultCallback = attrs.resultCallback || function() {};
this.description = attrs.description || ''; this.id = attrs.id;
this.fn = attrs.fn; this.description = attrs.description || '';
this.beforeFns = attrs.beforeFns || function() {}; this.fn = attrs.fn;
this.afterFns = attrs.afterFns || function() {}; this.beforeFns = attrs.beforeFns || function() {};
this.catchingExceptions = attrs.catchingExceptions; this.afterFns = attrs.afterFns || function() {};
this.onStart = attrs.onStart || function() {}; this.catchingExceptions = attrs.catchingExceptions;
this.exceptionFormatter = attrs.exceptionFormatter || function() {}; this.onStart = attrs.onStart || function() {};
this.getSpecName = attrs.getSpecName || function() { return ''; }; this.exceptionFormatter = attrs.exceptionFormatter || function() {};
this.expectationResultFactory = attrs.expectationResultFactory || function() { }; this.getSpecName = attrs.getSpecName || function() { return ''; };
this.queueRunner = attrs.queueRunner || function() {}; this.expectationResultFactory = attrs.expectationResultFactory || function() { };
this.catchingExceptions = attrs.catchingExceptions || function() { return true; }; this.queueRunner = attrs.queueRunner || function() {};
this.catchingExceptions = attrs.catchingExceptions || function() { return true; };
if (!this.fn) { if (!this.fn) {
this.pend(); this.pend();
}
this.result = {
id: this.id,
description: this.description,
fullName: this.getFullName(),
status: this.status(),
failedExpectations: []
};
};
jasmine.Spec.prototype.addExpectationResult = function(passed, data) {
this.encounteredExpectations = true;
if (passed) {
return;
}
this.result.failedExpectations.push(this.expectationResultFactory(data));
};
jasmine.Spec.prototype.expect = function(actual) {
return this.expectationFactory(actual, this);
};
jasmine.Spec.prototype.execute = function(onComplete) {
var self = this;
this.onStart(this);
if (this.markedPending || this.disabled) {
complete();
return;
}
var befores = this.beforeFns() || [],
afters = this.afterFns() || [];
var allFns = befores.concat(this.fn).concat(afters);
this.queueRunner({
fns: allFns,
onException: function(e) {
if (jasmine.Spec.isPendingSpecException(e)) {
self.pend();
return;
}
self.addExpectationResult(false, {
matcherName: "",
passed: false,
expected: "",
actual: "",
error: e
});
},
onComplete: complete
});
function complete() {
self.result.status = self.status();
self.resultCallback(self.result);
if (onComplete) {
onComplete();
} }
}
};
jasmine.Spec.prototype.disable = function() { this.result = {
this.disabled = true; id: this.id,
}; description: this.description,
fullName: this.getFullName(),
jasmine.Spec.prototype.pend = function() { status: this.status(),
this.markedPending = true; failedExpectations: []
}; };
jasmine.Spec.prototype.status = function() {
if (this.disabled) {
return 'disabled';
} }
if (this.markedPending || !this.encounteredExpectations) { Spec.prototype.addExpectationResult = function(passed, data) {
return 'pending'; this.encounteredExpectations = true;
} if (passed) {
return;
}
this.result.failedExpectations.push(this.expectationResultFactory(data));
};
if (this.result.failedExpectations.length > 0) { Spec.prototype.expect = function(actual) {
return 'failed'; return this.expectationFactory(actual, this);
} else { };
return 'passed';
} Spec.prototype.execute = function(onComplete) {
var self = this;
this.onStart(this);
if (this.markedPending || this.disabled) {
complete();
return;
}
var befores = this.beforeFns() || [],
afters = this.afterFns() || [];
var allFns = befores.concat(this.fn).concat(afters);
this.queueRunner({
fns: allFns,
onException: function(e) {
if (Spec.isPendingSpecException(e)) {
self.pend();
return;
}
self.addExpectationResult(false, {
matcherName: "",
passed: false,
expected: "",
actual: "",
error: e
});
},
onComplete: complete
});
function complete() {
self.result.status = self.status();
self.resultCallback(self.result);
if (onComplete) {
onComplete();
}
}
};
Spec.prototype.disable = function() {
this.disabled = true;
};
Spec.prototype.pend = function() {
this.markedPending = true;
};
Spec.prototype.status = function() {
if (this.disabled) {
return 'disabled';
}
if (this.markedPending || !this.encounteredExpectations) {
return 'pending';
}
if (this.result.failedExpectations.length > 0) {
return 'failed';
} else {
return 'passed';
}
};
Spec.prototype.getFullName = function() {
return this.getSpecName(this);
};
Spec.pendingSpecExceptionMessage = "=> marked Pending";
Spec.isPendingSpecException = function(e) {
return e.toString().indexOf(Spec.pendingSpecExceptionMessage) !== -1;
};
return Spec;
}; };
jasmine.Spec.prototype.getFullName = function() { if (typeof window == void 0 && typeof exports == "object") {
return this.getSpecName(this); exports.Spec = jasmineRequire.Spec;
}; }
jasmine.Spec.pendingSpecExceptionMessage = "=> marked Pending";
jasmine.Spec.isPendingSpecException = function(e) {
return e.toString().indexOf(jasmine.Spec.pendingSpecExceptionMessage) !== -1;
};

View File

@@ -1,99 +1,107 @@
jasmine.Suite = function(attrs) { getJasmineRequireObj().Suite = function() {
this.env = attrs.env; function Suite(attrs) {
this.id = attrs.id; this.env = attrs.env;
this.parentSuite = attrs.parentSuite; this.id = attrs.id;
this.description = attrs.description; this.parentSuite = attrs.parentSuite;
this.onStart = attrs.onStart || function() {}; this.description = attrs.description;
this.completeCallback = attrs.completeCallback || function() {}; this.onStart = attrs.onStart || function() {};
this.resultCallback = attrs.resultCallback || function() {}; this.completeCallback = attrs.completeCallback || function() {};
this.encourageGC = attrs.encourageGC || function(fn) {fn();}; this.resultCallback = attrs.resultCallback || function() {};
this.encourageGC = attrs.encourageGC || function(fn) {fn();};
this.beforeFns = []; this.beforeFns = [];
this.afterFns = []; this.afterFns = [];
this.queueRunner = attrs.queueRunner || function() {}; this.queueRunner = attrs.queueRunner || function() {};
this.disabled = false; this.disabled = false;
this.children_ = []; // TODO: rename this.children_ = []; // TODO: rename
this.suites = []; // TODO: needed? this.suites = []; // TODO: needed?
this.specs = []; // TODO: needed? this.specs = []; // TODO: needed?
this.result = { this.result = {
id: this.id, id: this.id,
status: this.disabled ? 'disabled' : '', status: this.disabled ? 'disabled' : '',
description: this.description, description: this.description,
fullName: this.getFullName() fullName: this.getFullName()
};
};
jasmine.Suite.prototype.getFullName = function() {
var fullName = this.description;
for (var parentSuite = this.parentSuite; parentSuite; parentSuite = parentSuite.parentSuite) {
if (parentSuite.parentSuite) {
fullName = parentSuite.description + ' ' + fullName;
}
}
return fullName;
};
jasmine.Suite.prototype.disable = function() {
this.disabled = true;
};
jasmine.Suite.prototype.beforeEach = function(fn) {
this.beforeFns.unshift(fn);
};
jasmine.Suite.prototype.afterEach = function(fn) {
this.afterFns.unshift(fn);
};
jasmine.Suite.prototype.addSpec = function(spec) {
this.children_.push(spec);
this.specs.push(spec); // TODO: needed?
};
jasmine.Suite.prototype.addSuite = function(suite) {
suite.parentSuite = this;
this.children_.push(suite);
this.suites.push(suite); // TODO: needed?
};
jasmine.Suite.prototype.children = function() {
return this.children_;
};
jasmine.Suite.prototype.execute = function(onComplete) {
var self = this;
if (this.disabled) {
complete();
return;
}
var allFns = [],
children = this.children_;
for (var i = 0; i < children.length; i++) {
allFns.push(wrapChild(children[i]));
}
this.onStart(this);
this.queueRunner({
fns: allFns,
onComplete: complete
});
function complete() {
self.resultCallback(self.result);
if (onComplete) {
onComplete();
}
}
function wrapChild(child) {
return function (done) {
child.execute(done);
}; };
} }
Suite.prototype.getFullName = function() {
var fullName = this.description;
for (var parentSuite = this.parentSuite; parentSuite; parentSuite = parentSuite.parentSuite) {
if (parentSuite.parentSuite) {
fullName = parentSuite.description + ' ' + fullName;
}
}
return fullName;
};
Suite.prototype.disable = function() {
this.disabled = true;
};
Suite.prototype.beforeEach = function(fn) {
this.beforeFns.unshift(fn);
};
Suite.prototype.afterEach = function(fn) {
this.afterFns.unshift(fn);
};
Suite.prototype.addSpec = function(spec) {
this.children_.push(spec);
this.specs.push(spec); // TODO: needed?
};
Suite.prototype.addSuite = function(suite) {
suite.parentSuite = this;
this.children_.push(suite);
this.suites.push(suite); // TODO: needed?
};
Suite.prototype.children = function() {
return this.children_;
};
Suite.prototype.execute = function(onComplete) {
var self = this;
if (this.disabled) {
complete();
return;
}
var allFns = [],
children = this.children_;
for (var i = 0; i < children.length; i++) {
allFns.push(wrapChild(children[i]));
}
this.onStart(this);
this.queueRunner({
fns: allFns,
onComplete: complete
});
function complete() {
self.resultCallback(self.result);
if (onComplete) {
onComplete();
}
}
function wrapChild(child) {
return function(done) {
child.execute(done);
};
}
};
return Suite;
}; };
if (typeof window == void 0 && typeof exports == "object") {
exports.Suite = jasmineRequire.Suite;
}

View File

@@ -1,144 +1,139 @@
var jasmine = {}; getJasmineRequireObj().base = function(j$) {
j$.unimplementedMethod_ = function() {
throw new Error("unimplemented method");
};
// TODO: do we need this now that we have boot.js? j$.DEFAULT_UPDATE_INTERVAL = 250;
if (typeof window == "undefined" && typeof exports == "object") { j$.MAX_PRETTY_PRINT_DEPTH = 40;
exports.jasmine = jasmine; j$.DEFAULT_TIMEOUT_INTERVAL = 5000;
}
jasmine.unimplementedMethod_ = function() { j$.getGlobal = function() {
throw new Error("unimplemented method"); function getGlobal() {
}; return this;
}
jasmine.DEFAULT_UPDATE_INTERVAL = 250; return getGlobal();
jasmine.MAX_PRETTY_PRINT_DEPTH = 40; };
jasmine.DEFAULT_TIMEOUT_INTERVAL = 5000;
jasmine.getGlobal = function() { j$.getEnv = function(options) {
function getGlobal() { var env = j$.currentEnv_ = j$.currentEnv_ || new j$.Env(options);
//jasmine. singletons in here (setTimeout blah blah).
return env;
};
j$.isArray_ = function(value) {
return j$.isA_("Array", value);
};
j$.isString_ = function(value) {
return j$.isA_("String", value);
};
j$.isNumber_ = function(value) {
return j$.isA_("Number", value);
};
j$.isA_ = function(typeName, value) {
return Object.prototype.toString.apply(value) === '[object ' + typeName + ']';
};
j$.pp = function(value) {
var stringPrettyPrinter = new j$.StringPrettyPrinter();
stringPrettyPrinter.format(value);
return stringPrettyPrinter.string;
};
j$.isDomNode = function(obj) {
return obj.nodeType > 0;
};
j$.any = function(clazz) {
return new j$.Matchers.Any(clazz);
};
j$.objectContaining = function(sample) {
return new j$.Matchers.ObjectContaining(sample);
};
j$.Spy = function(name) {
this.identity = name || 'unknown';
this.isSpy = true;
this.plan = function() {
};
this.mostRecentCall = {};
this.argsForCall = [];
this.calls = [];
};
j$.Spy.prototype.andCallThrough = function() {
this.plan = this.originalValue;
return this; return this;
}
return getGlobal();
};
jasmine.getEnv = function(options) {
var env = jasmine.currentEnv_ = jasmine.currentEnv_ || new jasmine.Env(options);
//jasmine. singletons in here (setTimeout blah blah).
return env;
};
jasmine.isArray_ = function(value) {
return jasmine.isA_("Array", value);
};
jasmine.isString_ = function(value) {
return jasmine.isA_("String", value);
};
jasmine.isNumber_ = function(value) {
return jasmine.isA_("Number", value);
};
jasmine.isA_ = function(typeName, value) {
return Object.prototype.toString.apply(value) === '[object ' + typeName + ']';
};
jasmine.pp = function(value) {
var stringPrettyPrinter = new jasmine.StringPrettyPrinter();
stringPrettyPrinter.format(value);
return stringPrettyPrinter.string;
};
jasmine.isDomNode = function(obj) {
return obj.nodeType > 0;
};
jasmine.any = function(clazz) {
return new jasmine.Matchers.Any(clazz);
};
jasmine.objectContaining = function (sample) {
return new jasmine.Matchers.ObjectContaining(sample);
};
jasmine.Spy = function(name) {
this.identity = name || 'unknown';
this.isSpy = true;
this.plan = function() {
};
this.mostRecentCall = {};
this.argsForCall = [];
this.calls = [];
};
jasmine.Spy.prototype.andCallThrough = function() {
this.plan = this.originalValue;
return this;
};
jasmine.Spy.prototype.andReturn = function(value) {
this.plan = function() {
return value;
};
return this;
};
jasmine.Spy.prototype.andThrow = function(exceptionMsg) {
this.plan = function() {
throw exceptionMsg;
};
return this;
};
jasmine.Spy.prototype.andCallFake = function(fakeFunc) {
this.plan = fakeFunc;
return this;
};
jasmine.Spy.prototype.reset = function() {
this.wasCalled = false;
this.callCount = 0;
this.argsForCall = [];
this.calls = [];
this.mostRecentCall = {};
};
jasmine.createSpy = function(name) {
var spyObj = function() {
spyObj.wasCalled = true;
spyObj.callCount++;
var args = jasmine.util.argsToArray(arguments);
spyObj.mostRecentCall.object = this;
spyObj.mostRecentCall.args = args;
spyObj.argsForCall.push(args);
spyObj.calls.push({object: this, args: args});
return spyObj.plan.apply(this, arguments);
}; };
var spy = new jasmine.Spy(name); j$.Spy.prototype.andReturn = function(value) {
this.plan = function() {
return value;
};
return this;
};
for (var prop in spy) { j$.Spy.prototype.andThrow = function(exceptionMsg) {
spyObj[prop] = spy[prop]; this.plan = function() {
} throw exceptionMsg;
};
return this;
};
spyObj.reset(); j$.Spy.prototype.andCallFake = function(fakeFunc) {
this.plan = fakeFunc;
return this;
};
return spyObj; j$.Spy.prototype.reset = function() {
}; this.wasCalled = false;
this.callCount = 0;
jasmine.isSpy = function(putativeSpy) { this.argsForCall = [];
return putativeSpy && putativeSpy.isSpy; this.calls = [];
}; this.mostRecentCall = {};
};
jasmine.createSpyObj = function(baseName, methodNames) {
if (!jasmine.isArray_(methodNames) || methodNames.length === 0) { j$.createSpy = function(name) {
throw new Error('createSpyObj requires a non-empty array of method names to create spies for');
} var spyObj = function() {
var obj = {}; spyObj.wasCalled = true;
for (var i = 0; i < methodNames.length; i++) { spyObj.callCount++;
obj[methodNames[i]] = jasmine.createSpy(baseName + '.' + methodNames[i]); var args = j$.util.argsToArray(arguments);
} spyObj.mostRecentCall.object = this;
return obj; spyObj.mostRecentCall.args = args;
spyObj.argsForCall.push(args);
spyObj.calls.push({object: this, args: args});
return spyObj.plan.apply(this, arguments);
};
var spy = new j$.Spy(name);
for (var prop in spy) {
spyObj[prop] = spy[prop];
}
spyObj.reset();
return spyObj;
};
j$.isSpy = function(putativeSpy) {
return putativeSpy && putativeSpy.isSpy;
};
j$.createSpyObj = function(baseName, methodNames) {
if (!j$.isArray_(methodNames) || methodNames.length === 0) {
throw new Error('createSpyObj requires a non-empty array of method names to create spies for');
}
var obj = {};
for (var i = 0; i < methodNames.length; i++) {
obj[methodNames[i]] = j$.createSpy(baseName + '.' + methodNames[i]);
}
return obj;
};
}; };

30
src/core/requireCore.js Normal file
View File

@@ -0,0 +1,30 @@
function getJasmineRequireObj() {
if (typeof module !== "undefined" && module.exports) {
return exports;
} else {
window.jasmineRequire = window.jasmineRequire || {};
return window.jasmineRequire;
}
}
getJasmineRequireObj().core = function(jRequire) {
j$ = {};
jRequire.base(j$);
j$.util = jRequire.util();
j$.Clock = jRequire.Clock();
j$.DelayedFunctionScheduler = jRequire.DelayedFunctionScheduler();
j$.Env = jRequire.Env(j$);
j$.ExceptionFormatter = jRequire.ExceptionFormatter();
j$.buildExpectationResult = jRequire.buildExpectationResult();
j$.JsApiReporter = jRequire.JsApiReporter();
j$.Matchers = jRequire.Matchers(j$);
j$.StringPrettyPrinter = jRequire.StringPrettyPrinter(j$);
j$.QueueRunner = jRequire.QueueRunner();
j$.ReportDispatcher = jRequire.ReportDispatcher();
j$.Spec = jRequire.Spec();
j$.Suite = jRequire.Suite();
j$.version = jRequire.version();
return j$;
};

View File

@@ -1,52 +1,57 @@
jasmine.util = {}; getJasmineRequireObj().util = function() {
jasmine.util.inherit = function(childClass, parentClass) { var util = {};
var subclass = function() {
util.inherit = function(childClass, parentClass) {
var subclass = function() {
};
subclass.prototype = parentClass.prototype;
childClass.prototype = new subclass();
}; };
subclass.prototype = parentClass.prototype;
childClass.prototype = new subclass(); util.formatException = function(e) {
}; var lineNumber;
if (e.line) {
jasmine.util.formatException = function(e) { lineNumber = e.line;
var lineNumber; }
if (e.line) { else if (e.lineNumber) {
lineNumber = e.line; lineNumber = e.lineNumber;
} }
else if (e.lineNumber) {
lineNumber = e.lineNumber; var file;
}
if (e.sourceURL) {
var file; file = e.sourceURL;
}
if (e.sourceURL) { else if (e.fileName) {
file = e.sourceURL; file = e.fileName;
} }
else if (e.fileName) {
file = e.fileName; var message = (e.name && e.message) ? (e.name + ': ' + e.message) : e.toString();
}
if (file && lineNumber) {
var message = (e.name && e.message) ? (e.name + ': ' + e.message) : e.toString(); message += ' in ' + file + ' (line ' + lineNumber + ')';
}
if (file && lineNumber) {
message += ' in ' + file + ' (line ' + lineNumber + ')'; return message;
} };
return message; util.htmlEscape = function(str) {
}; if (!str) return str;
return str.replace(/&/g, '&amp;')
jasmine.util.htmlEscape = function(str) { .replace(/</g, '&lt;')
if (!str) return str; .replace(/>/g, '&gt;');
return str.replace(/&/g, '&amp;') };
.replace(/</g, '&lt;')
.replace(/>/g, '&gt;'); util.argsToArray = function(args) {
}; var arrayOfArgs = [];
for (var i = 0; i < args.length; i++) arrayOfArgs.push(args[i]);
jasmine.util.argsToArray = function(args) { return arrayOfArgs;
var arrayOfArgs = []; };
for (var i = 0; i < args.length; i++) arrayOfArgs.push(args[i]);
return arrayOfArgs; util.isUndefined = function(obj) {
}; return obj === void 0;
};
jasmine.util.isUndefined = function(obj) {
return obj === void 0; return util;
}; };

View File

@@ -1,243 +1,247 @@
jasmine.HtmlReporter = function(options) { jasmineRequire.HtmlReporter = function() {
var env = options.env || {}, function HtmlReporter(options) {
getContainer = options.getContainer, var env = options.env || {},
now = options.now || function() { return new Date().getTime();}, getContainer = options.getContainer,
createElement = options.createElement, now = options.now || function() { return new Date().getTime();},
createTextNode = options.createTextNode, createElement = options.createElement,
results = [], createTextNode = options.createTextNode,
startTime, results = [],
specsExecuted = 0, startTime,
failureCount = 0, specsExecuted = 0,
pendingSpecCount = 0, failureCount = 0,
htmlReporterMain, pendingSpecCount = 0,
symbols; htmlReporterMain,
symbols;
this.initialize = function() { this.initialize = function() {
htmlReporterMain = createDom("div", {className: "html-reporter"}, htmlReporterMain = createDom("div", {className: "html-reporter"},
createDom("div", {className: "banner"}, createDom("div", {className: "banner"},
createDom("span", {className: "title"}, "Jasmine"), createDom("span", {className: "title"}, "Jasmine"),
createDom("span", {className: "version"}, jasmine.version) createDom("span", {className: "version"}, jasmine.version)
), ),
createDom("ul", {className: "symbol-summary"}), createDom("ul", {className: "symbol-summary"}),
createDom("div", {className: "alert"}), createDom("div", {className: "alert"}),
createDom("div", {className: "results"}, createDom("div", {className: "results"},
createDom("div", {className: "failures"}) createDom("div", {className: "failures"})
)
);
getContainer().appendChild(htmlReporterMain);
symbols = find(".symbol-summary")[0];
};
var totalSpecsDefined;
this.jasmineStarted = function(options) {
totalSpecsDefined = options.totalSpecsDefined || 0;
startTime = now();
};
var summary = createDom("div", {className: "summary"});
var topResults = new jasmine.ResultsNode({}, "", null),
currentParent = topResults;
this.suiteStarted = function(result) {
currentParent.addChild(result, "suite");
currentParent = currentParent.last();
};
this.suiteDone = function(result) {
if (currentParent == topResults) {
return;
}
currentParent = currentParent.parent;
};
this.specStarted = function(result) {
currentParent.addChild(result, "spec");
};
var failures = [];
this.specDone = function(result) {
if (result.status != "disabled") {
specsExecuted++;
}
symbols.appendChild(createDom("li", {
className: result.status,
id: "spec_" + result.id,
title: result.fullName}
));
if (result.status == "failed") {
failureCount++;
var failure =
createDom("div", {className: "spec-detail failed"},
createDom("a", {className: "description", title: result.fullName, href: specHref(result)}, result.fullName),
createDom("div", {className: "messages"})
);
var messages = failure.childNodes[1];
for (var i = 0; i < result.failedExpectations.length; i++) {
var expectation = result.failedExpectations[i];
messages.appendChild(createDom("div", {className: "result-message"}, expectation.message));
messages.appendChild(createDom("div", {className: "stack-trace"}, expectation.stack));
}
failures.push(failure);
}
if(result.status == "pending") {
pendingSpecCount++;
}
};
this.jasmineDone = function() {
var elapsed = now() - startTime;
var banner = find(".banner")[0];
banner.appendChild(createDom("span", {className: "duration"}, "finished in " + elapsed / 1000 + "s"));
var alert = find(".alert")[0];
alert.appendChild(createDom("span", { className: "exceptions" },
createDom("label", { className: "label", 'for': "raise-exceptions" }, "raise exceptions"),
createDom("input", {
className: "raise",
id: "raise-exceptions",
type: "checkbox"
})
));
var checkbox = find("input")[0];
checkbox.checked = !env.catchingExceptions();
checkbox.onclick = options.onRaiseExceptionsClick;
if (specsExecuted < totalSpecsDefined) {
var skippedMessage = "Ran " + specsExecuted + " of " + totalSpecsDefined + " specs - run all";
alert.appendChild(
createDom("span", {className: "bar skipped"},
createDom("a", {href: "?", title: "Run all specs"}, skippedMessage)
) )
); );
} getContainer().appendChild(htmlReporterMain);
var statusBarMessage = "" + pluralize("spec", specsExecuted) + ", " + pluralize("failure", failureCount);
if(pendingSpecCount) { statusBarMessage += ", " + pluralize("pending spec", pendingSpecCount); }
var statusBarClassName = "bar " + ((failureCount > 0) ? "failed" : "passed"); symbols = find(".symbol-summary")[0];
alert.appendChild(createDom("span", {className: statusBarClassName}, statusBarMessage)); };
var results = find(".results")[0]; var totalSpecsDefined;
results.appendChild(summary); this.jasmineStarted = function(options) {
totalSpecsDefined = options.totalSpecsDefined || 0;
startTime = now();
};
summaryList(topResults, summary); var summary = createDom("div", {className: "summary"});
function summaryList(resultsTree, domParent) { var topResults = new jasmine.ResultsNode({}, "", null),
var specListNode; currentParent = topResults;
for (var i = 0; i < resultsTree.children.length; i++) {
var resultNode = resultsTree.children[i]; this.suiteStarted = function(result) {
if (resultNode.type == "suite") { currentParent.addChild(result, "suite");
var suiteListNode = createDom("ul", {className: "suite", id: "suite-" + resultNode.result.id}, currentParent = currentParent.last();
createDom("li", {className: "suite-detail"}, };
createDom("a", {href: specHref(resultNode.result)}, resultNode.result.description)
) this.suiteDone = function(result) {
if (currentParent == topResults) {
return;
}
currentParent = currentParent.parent;
};
this.specStarted = function(result) {
currentParent.addChild(result, "spec");
};
var failures = [];
this.specDone = function(result) {
if (result.status != "disabled") {
specsExecuted++;
}
symbols.appendChild(createDom("li", {
className: result.status,
id: "spec_" + result.id,
title: result.fullName}
));
if (result.status == "failed") {
failureCount++;
var failure =
createDom("div", {className: "spec-detail failed"},
createDom("a", {className: "description", title: result.fullName, href: specHref(result)}, result.fullName),
createDom("div", {className: "messages"})
); );
var messages = failure.childNodes[1];
summaryList(resultNode, suiteListNode); for (var i = 0; i < result.failedExpectations.length; i++) {
domParent.appendChild(suiteListNode); var expectation = result.failedExpectations[i];
messages.appendChild(createDom("div", {className: "result-message"}, expectation.message));
messages.appendChild(createDom("div", {className: "stack-trace"}, expectation.stack));
} }
if (resultNode.type == "spec") {
if (domParent.getAttribute("class") != "specs") { failures.push(failure);
specListNode = createDom("ul", {className: "specs"}); }
domParent.appendChild(specListNode);
if (result.status == "pending") {
pendingSpecCount++;
}
};
this.jasmineDone = function() {
var elapsed = now() - startTime;
var banner = find(".banner")[0];
banner.appendChild(createDom("span", {className: "duration"}, "finished in " + elapsed / 1000 + "s"));
var alert = find(".alert")[0];
alert.appendChild(createDom("span", { className: "exceptions" },
createDom("label", { className: "label", 'for': "raise-exceptions" }, "raise exceptions"),
createDom("input", {
className: "raise",
id: "raise-exceptions",
type: "checkbox"
})
));
var checkbox = find("input")[0];
checkbox.checked = !env.catchingExceptions();
checkbox.onclick = options.onRaiseExceptionsClick;
if (specsExecuted < totalSpecsDefined) {
var skippedMessage = "Ran " + specsExecuted + " of " + totalSpecsDefined + " specs - run all";
alert.appendChild(
createDom("span", {className: "bar skipped"},
createDom("a", {href: "?", title: "Run all specs"}, skippedMessage)
)
);
}
var statusBarMessage = "" + pluralize("spec", specsExecuted) + ", " + pluralize("failure", failureCount);
if (pendingSpecCount) { statusBarMessage += ", " + pluralize("pending spec", pendingSpecCount); }
var statusBarClassName = "bar " + ((failureCount > 0) ? "failed" : "passed");
alert.appendChild(createDom("span", {className: statusBarClassName}, statusBarMessage));
var results = find(".results")[0];
results.appendChild(summary);
summaryList(topResults, summary);
function summaryList(resultsTree, domParent) {
var specListNode;
for (var i = 0; i < resultsTree.children.length; i++) {
var resultNode = resultsTree.children[i];
if (resultNode.type == "suite") {
var suiteListNode = createDom("ul", {className: "suite", id: "suite-" + resultNode.result.id},
createDom("li", {className: "suite-detail"},
createDom("a", {href: specHref(resultNode.result)}, resultNode.result.description)
)
);
summaryList(resultNode, suiteListNode);
domParent.appendChild(suiteListNode);
}
if (resultNode.type == "spec") {
if (domParent.getAttribute("class") != "specs") {
specListNode = createDom("ul", {className: "specs"});
domParent.appendChild(specListNode);
}
specListNode.appendChild(
createDom("li", {
className: resultNode.result.status,
id: "spec-" + resultNode.result.id
},
createDom("a", {href: specHref(resultNode.result)}, resultNode.result.description)
)
);
} }
specListNode.appendChild(
createDom("li", {
className: resultNode.result.status,
id: "spec-" + resultNode.result.id
},
createDom("a", {href: specHref(resultNode.result)}, resultNode.result.description)
)
);
} }
} }
}
if (failures.length) { if (failures.length) {
alert.appendChild( alert.appendChild(
createDom('span', {className: "menu bar spec-list"}, createDom('span', {className: "menu bar spec-list"},
createDom("span", {}, "Spec List | "), createDom("span", {}, "Spec List | "),
createDom('a', {className: "failures-menu", href: "#"}, "Failures"))); createDom('a', {className: "failures-menu", href: "#"}, "Failures")));
alert.appendChild( alert.appendChild(
createDom('span', {className: "menu bar failure-list"}, createDom('span', {className: "menu bar failure-list"},
createDom('a', {className: "spec-list-menu", href: "#"}, "Spec List"), createDom('a', {className: "spec-list-menu", href: "#"}, "Spec List"),
createDom("span", {}, " | Failures "))); createDom("span", {}, " | Failures ")));
find(".failures-menu")[0].onclick = function() {
setMenuModeTo('failure-list');
};
find(".spec-list-menu")[0].onclick = function() {
setMenuModeTo('spec-list');
};
find(".failures-menu")[0].onclick = function() {
setMenuModeTo('failure-list'); setMenuModeTo('failure-list');
};
find(".spec-list-menu")[0].onclick = function() {
setMenuModeTo('spec-list');
};
setMenuModeTo('failure-list'); var failureNode = find(".failures")[0];
for (var i = 0; i < failures.length; i++) {
var failureNode = find(".failures")[0]; failureNode.appendChild(failures[i]);
for (var i = 0; i < failures.length; i++) {
failureNode.appendChild(failures[i]);
}
}
};
return this;
function find(selector) {
if (selector.match(/^\./)) {
var className = selector.substring(1);
return getContainer().getElementsByClassName(className);
} else {
return getContainer().getElementsByTagName(selector);
}
}
function createDom(type, attrs, childrenVarArgs) {
var el = createElement(type);
for (var i = 2; i < arguments.length; i++) {
var child = arguments[i];
if (typeof child === 'string') {
el.appendChild(createTextNode(child));
} else {
if (child) {
el.appendChild(child);
} }
} }
} };
for (var attr in attrs) { return this;
if (attr == "className") {
el[attr] = attrs[attr]; function find(selector) {
if (selector.match(/^\./)) {
var className = selector.substring(1);
return getContainer().getElementsByClassName(className);
} else { } else {
el.setAttribute(attr, attrs[attr]); return getContainer().getElementsByTagName(selector);
} }
} }
return el; function createDom(type, attrs, childrenVarArgs) {
var el = createElement(type);
for (var i = 2; i < arguments.length; i++) {
var child = arguments[i];
if (typeof child === 'string') {
el.appendChild(createTextNode(child));
} else {
if (child) {
el.appendChild(child);
}
}
}
for (var attr in attrs) {
if (attr == "className") {
el[attr] = attrs[attr];
} else {
el.setAttribute(attr, attrs[attr]);
}
}
return el;
}
function pluralize(singular, count) {
var word = (count == 1 ? singular : singular + "s");
return "" + count + " " + word;
}
function specHref(result) {
return "?spec=" + encodeURIComponent(result.fullName);
}
function setMenuModeTo(mode) {
htmlReporterMain.setAttribute("class", "html-reporter " + mode);
}
} }
function pluralize(singular, count) { return HtmlReporter;
var word = (count == 1 ? singular : singular + "s"); };
return "" + count + " " + word;
}
function specHref(result) {
return "?spec=" + encodeURIComponent(result.fullName);
}
function setMenuModeTo(mode) {
htmlReporterMain.setAttribute("class", "html-reporter " + mode);
}
};

View File

@@ -1,7 +1,11 @@
jasmine.HtmlSpecFilter = function(options) { jasmineRequire.HtmlSpecFilter = function() {
var filterPattern = new RegExp(options && options.filterString()); function HtmlSpecFilter(options) {
var filterPattern = new RegExp(options && options.filterString());
this.matches = function(specName) { this.matches = function(specName) {
return filterPattern.test(specName); return filterPattern.test(specName);
}; };
}
return HtmlSpecFilter;
}; };

View File

@@ -1,43 +1,47 @@
jasmine.QueryString = function(options) { jasmineRequire.QueryString = function() {
function QueryString(options) {
this.setParam = function(key, value) { this.setParam = function(key, value) {
var paramMap = queryStringToParamMap(); var paramMap = queryStringToParamMap();
paramMap[key] = value; paramMap[key] = value;
options.getWindowLocation().search = toQueryString(paramMap); options.getWindowLocation().search = toQueryString(paramMap);
}; };
this.getParam = function(key) { this.getParam = function(key) {
return queryStringToParamMap()[key]; return queryStringToParamMap()[key];
}; };
return this; return this;
function toQueryString(paramMap) { function toQueryString(paramMap) {
var qStrPairs = []; var qStrPairs = [];
for (var prop in paramMap) { for (var prop in paramMap) {
qStrPairs.push(encodeURIComponent(prop) + "=" + encodeURIComponent(paramMap[prop])); qStrPairs.push(encodeURIComponent(prop) + "=" + encodeURIComponent(paramMap[prop]));
}
return "?" + qStrPairs.join('&');
}
function queryStringToParamMap() {
var paramStr = options.getWindowLocation().search.substring(1),
params = [],
paramMap = {};
if (paramStr.length > 0) {
params = paramStr.split('&');
for (var i = 0; i < params.length; i++) {
var p = params[i].split('=');
var value = decodeURIComponent(p[1]);
if (value === "true" || value === "false") {
value = JSON.parse(value);
}
paramMap[decodeURIComponent(p[0])] = value;
} }
return "?" + qStrPairs.join('&');
}
function queryStringToParamMap() {
var paramStr = options.getWindowLocation().search.substring(1),
params = [],
paramMap = {};
if (paramStr.length > 0) {
params = paramStr.split('&');
for (var i = 0; i < params.length; i++) {
var p = params[i].split('=');
var value = decodeURIComponent(p[1]);
if (value === "true" || value === "false") {
value = JSON.parse(value);
}
paramMap[decodeURIComponent(p[0])] = value;
}
}
return paramMap;
} }
return paramMap;
} }
return QueryString;
}; };

View File

@@ -1,15 +1,19 @@
jasmine.ResultsNode = function(result, type, parent) { jasmineRequire.ResultsNode = function() {
this.result = result; function ResultsNode(result, type, parent) {
this.type = type; this.result = result;
this.parent = parent; this.type = type;
this.parent = parent;
this.children = []; this.children = [];
this.addChild = function(result, type) { this.addChild = function(result, type) {
this.children.push(new jasmine.ResultsNode(result, type, this)); this.children.push(new ResultsNode(result, type, this));
}; };
this.last = function() { this.last = function() {
return this.children[this.children.length-1]; return this.children[this.children.length - 1];
}; };
}
return ResultsNode;
}; };

6
src/html/requireHtml.js Normal file
View File

@@ -0,0 +1,6 @@
jasmineRequire.html = function(j$) {
j$.ResultsNode = jasmineRequire.ResultsNode();
j$.HtmlReporter = jasmineRequire.HtmlReporter();
j$.QueryString = jasmineRequire.QueryString();
j$.HtmlSpecFilter = jasmineRequire.HtmlSpecFilter();
};

View File

@@ -1 +1,3 @@
jasmine.version = "<%= version %>"; getJasmineRequireObj().version = function() {
return "<%= version %>";
};