share usercontext for full suite

This commit is contained in:
Gregg Van Hove and Sheel Choksi
2014-03-03 11:57:32 -08:00
parent ec5695acc1
commit e17a2cb1e0
5 changed files with 84 additions and 3 deletions

View File

@@ -236,6 +236,60 @@ describe("Env integration", function() {
env.execute(); env.execute();
}); });
it("calls associated beforeAlls/afterAlls with the cascaded 'this'", function(done) {
var env = new j$.Env();
env.addReporter({jasmineDone: done});
env.describe("with beforeAll and afterAll", function() {
env.beforeAll(function() {
this.x = 1;
});
env.it("has an x at the root", function() {
expect(this.x).toBe(1);
});
env.describe("child that deletes", function() {
env.beforeAll(function() {
expect(this.x).toBe(1);
delete this.x;
});
env.it("has no x", function() {
expect(this.x).not.toBeDefined();
});
});
env.describe("child should still have x", function() {
env.beforeAll(function(innerDone) {
expect(this.x).toBe(1);
innerDone();
});
env.it("has an x", function() {
expect(this.x).toBe(1);
delete this.x;
});
env.it("still has an x", function() {
expect(this.x).toBe(1);
});
env.it("adds a y", function() {
this.y = 2;
expect(this.y).toBe(2);
});
env.it("doesn't have y that was added in sibling", function() {
expect(this.y).not.toBeDefined();
});
});
});
env.execute();
});
it("Allows specifying which specs and suites to run", function(done) { it("Allows specifying which specs and suites to run", function(done) {
var env = new j$.Env(), var env = new j$.Env(),
calls = [], calls = [],

View File

@@ -272,6 +272,7 @@ getJasmineRequireObj().Env = function(j$) {
description: description, description: description,
expectationResultFactory: expectationResultFactory, expectationResultFactory: expectationResultFactory,
queueRunnerFactory: queueRunnerFactory, queueRunnerFactory: queueRunnerFactory,
userContext: function() { return suite.clonedSharedUserContext(); },
fn: fn fn: fn
}); });

View File

@@ -17,7 +17,7 @@ getJasmineRequireObj().QueueRunner = function(j$) {
this.onException = attrs.onException || function() {}; this.onException = attrs.onException || function() {};
this.catchException = attrs.catchException || function() { return true; }; this.catchException = attrs.catchException || function() { return true; };
this.enforceTimeout = attrs.enforceTimeout || function() { return false; }; this.enforceTimeout = attrs.enforceTimeout || function() { return false; };
this.userContext = {}; this.userContext = attrs.userContext || {};
this.timer = attrs.timeout || {setTimeout: setTimeout, clearTimeout: clearTimeout}; this.timer = attrs.timeout || {setTimeout: setTimeout, clearTimeout: clearTimeout};
} }

View File

@@ -7,6 +7,7 @@ getJasmineRequireObj().Spec = function(j$) {
this.fn = attrs.fn; this.fn = attrs.fn;
this.beforeFns = attrs.beforeFns || function() { return []; }; this.beforeFns = attrs.beforeFns || function() { return []; };
this.afterFns = attrs.afterFns || function() { return []; }; this.afterFns = attrs.afterFns || function() { return []; };
this.userContext = attrs.userContext || function() { return {}; };
this.onStart = attrs.onStart || function() {}; this.onStart = attrs.onStart || function() {};
this.exceptionFormatter = attrs.exceptionFormatter || function() {}; this.exceptionFormatter = attrs.exceptionFormatter || function() {};
this.getSpecName = attrs.getSpecName || function() { return ''; }; this.getSpecName = attrs.getSpecName || function() { return ''; };
@@ -53,7 +54,8 @@ getJasmineRequireObj().Spec = function(j$) {
fns: allFns, fns: allFns,
onException: onException, onException: onException,
onComplete: complete, onComplete: complete,
enforceTimeout: function() { return true; } enforceTimeout: function() { return true; },
userContext: this.userContext()
}); });
function onException(e) { function onException(e) {

View File

@@ -86,7 +86,8 @@ getJasmineRequireObj().Suite = function() {
this.queueRunner({ this.queueRunner({
fns: allFns, fns: allFns,
onComplete: complete onComplete: complete,
userContext: this.sharedUserContext()
}); });
function complete() { function complete() {
@@ -113,6 +114,29 @@ getJasmineRequireObj().Suite = function() {
return foundActive; return foundActive;
}; };
Suite.prototype.sharedUserContext = function() {
if (!this.sharedContext) {
this.sharedContext = this.parentSuite ? clone(this.parentSuite.sharedUserContext()) : {};
}
return this.sharedContext;
};
Suite.prototype.clonedSharedUserContext = function() {
return clone(this.sharedUserContext());
};
function clone(obj) {
var clonedObj = {};
for (var prop in obj) {
if (obj.hasOwnProperty(prop)) {
clonedObj[prop] = obj[prop];
}
}
return clonedObj;
}
return Suite; return Suite;
}; };