mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
94 lines
2.5 KiB
JavaScript
94 lines
2.5 KiB
JavaScript
/**
|
|
* @fileoverview Jasmine JsTestDriver Adapter.
|
|
* @author ibolmo@gmail.com (Olmo Maldonado)
|
|
* @author misko@hevery.com (Misko Hevery)
|
|
*/
|
|
|
|
(function(describe, it, beforeEach, afterEach, addResult){
|
|
|
|
var frame = function(parent, name){
|
|
var caseName = '';
|
|
if (parent && parent.caseName) caseName = parent.caseName + ' ';
|
|
if (name) caseName += name;
|
|
|
|
var before = [],
|
|
after = [];
|
|
|
|
return {
|
|
name: name,
|
|
caseName: caseName,
|
|
parent: parent,
|
|
testCase: TestCase(caseName),
|
|
before: before,
|
|
after: after,
|
|
runBefore: function(){
|
|
if (parent) parent.runBefore.apply(this);
|
|
for (var i = 0, l = before.length; i < l; i++) before[i].apply(this);
|
|
},
|
|
runAfter: function(){
|
|
for (var i = 0, l = after.length; i < l; i++) after[i].apply(this);
|
|
if (parent) parent.runAfter.apply(this);
|
|
}
|
|
};
|
|
};
|
|
|
|
var currentFrame = frame(null, null);
|
|
|
|
jasmine.Env.prototype.describe = function(description, context){
|
|
currentFrame = frame(currentFrame, description);
|
|
var result = describe.call(this, description, context);
|
|
currentFrame = currentFrame.parent;
|
|
return result;
|
|
};
|
|
|
|
jasmine.Env.prototype.it = function(description, closure){
|
|
var result = it.call(this, description, closure),
|
|
currentSpec = this.currentSpec,
|
|
frame = this.jstdFrame = currentFrame,
|
|
name = 'test that it ' + description;
|
|
|
|
if (this.jstdFrame.testCase.prototype[name])
|
|
throw "Spec with name '" + description + "' already exists.";
|
|
|
|
this.jstdFrame.testCase.prototype[name] = function(){
|
|
jasmine.getEnv().currentSpec = currentSpec;
|
|
frame.runBefore.apply(currentSpec);
|
|
try {
|
|
currentSpec.queue.start();
|
|
} finally {
|
|
frame.runAfter.apply(currentSpec);
|
|
}
|
|
};
|
|
return result;
|
|
};
|
|
|
|
jasmine.Env.prototype.beforeEach = function(closure) {
|
|
beforeEach.call(this, closure);
|
|
currentFrame.before.push(closure);
|
|
};
|
|
|
|
jasmine.Env.prototype.afterEach = function(closure) {
|
|
afterEach.call(this, closure);
|
|
currentFrame.after.push(closure);
|
|
};
|
|
|
|
jasmine.NestedResults.prototype.addResult = function(result) {
|
|
addResult.call(this, result);
|
|
if (result.type != 'MessageResult' && !result.passed()) fail(result.message);
|
|
};
|
|
|
|
// @reesd - Disable the catch on exceptions when using JSTD, we want them to make it up to JSTD
|
|
jasmine.Block.prototype.execute = function(onComplete) {
|
|
try {
|
|
this.func.apply(this.spec);
|
|
} finally {
|
|
onComplete();
|
|
}
|
|
};
|
|
|
|
// Reset environment with overriden methods.
|
|
jasmine.currentEnv_ = null;
|
|
jasmine.getEnv();
|
|
|
|
})(jasmine.Env.prototype.describe, jasmine.Env.prototype.it, jasmine.Env.prototype.beforeEach, jasmine.Env.prototype.afterEach, jasmine.NestedResults.prototype.addResult);
|