Have iit have higher priority then ddesrcibe

This commit is contained in:
Misko Hevery 2011-03-29 11:47:43 -07:00
parent 498ad0a3be
commit b2dc2ce0b5

View file

@ -6,14 +6,14 @@
var rootDescribes = new Describes(window); var rootDescribes = new Describes(window);
var describePath = []; var describePath = [];
rootDescribes.collectMode(); rootDescribes.collectMode();
var jasmineTest = TestCase('Jasmine Adapter Tests', null, 'jasmine test case'); var jasmineTest = TestCase('Jasmine Adapter Tests', null, 'jasmine test case');
var jasminePlugin = { var jasminePlugin = {
name:'jasmine', name:'jasmine',
runTestConfiguration: function(testRunConfiguration, onTestDone, onTestRunConfigurationComplete){ runTestConfiguration: function(testRunConfiguration, onTestDone, onTestRunConfigurationComplete){
if (testRunConfiguration.testCaseInfo_.template_ !== jasmineTest) return; if (testRunConfiguration.testCaseInfo_.template_ !== jasmineTest) return;
var jasmineEnv = jasmine.currentEnv_ = new jasmine.Env(); var jasmineEnv = jasmine.currentEnv_ = new jasmine.Env();
rootDescribes.playback(); rootDescribes.playback();
var specLog = jstestdriver.console.log_ = []; var specLog = jstestdriver.console.log_ = [];
@ -45,24 +45,24 @@
if (!resultItems[i].passed()) { if (!resultItems[i].passed()) {
state = resultItems[i].message.match(/AssertionError:/) ? 'error' : 'failed'; state = resultItems[i].message.match(/AssertionError:/) ? 'error' : 'failed';
messages.push({ messages.push({
message: resultItems[i].toString(), message: resultItems[i].toString(),
name: resultItems[i].trace.name, name: resultItems[i].trace.name,
stack: formatStack(resultItems[i].trace.stack) stack: formatStack(resultItems[i].trace.stack)
}); });
} }
} }
onTestDone( onTestDone(
new jstestdriver.TestResult( new jstestdriver.TestResult(
suite.getFullName(), suite.getFullName(),
spec.description, spec.description,
state, state,
jstestdriver.angular.toJson(messages), jstestdriver.angular.toJson(messages),
specLog.join('\n'), specLog.join('\n'),
end - start)); end - start));
}, },
reportSuiteResults: function(suite) {}, reportSuiteResults: function(suite) {},
reportRunnerResults: function(runner) { reportRunnerResults: function(runner) {
onTestRunConfigurationComplete(); onTestRunConfigurationComplete();
} }
@ -93,13 +93,17 @@
var describes = {}; var describes = {};
var beforeEachs = {}; var beforeEachs = {};
var afterEachs = {}; var afterEachs = {};
var exclusive; // Here we store:
// 0: everyone runs
// 1: run everything under ddescribe
// 2: run only iits (ignore ddescribe)
var exclusive = 0;
var collectMode = true; var collectMode = true;
intercept('describe', describes); intercept('describe', describes);
intercept('xdescribe', describes); intercept('xdescribe', describes);
intercept('beforeEach', beforeEachs); intercept('beforeEach', beforeEachs);
intercept('afterEach', afterEachs); intercept('afterEach', afterEachs);
function intercept(functionName, collection){ function intercept(functionName, collection){
window[functionName] = function(desc, fn){ window[functionName] = function(desc, fn){
if (collectMode) { if (collectMode) {
@ -112,11 +116,15 @@
}; };
} }
window.ddescribe = function(name, fn){ window.ddescribe = function(name, fn){
exclusive = true; if (exclusive < 1) {
console.log('ddescribe', name); exclusive = 1; // run ddescribe only
}
window.describe(name, function(){ window.describe(name, function(){
var oldIt = window.it; var oldIt = window.it;
window.it = window.iit; window.it = function(name, fn){
fn.exclusive = 1; // run anything under ddescribe
jasmine.getEnv().it(name, fn);
};
try { try {
fn.call(this); fn.call(this);
} finally { } finally {
@ -125,34 +133,33 @@
}); });
}; };
window.iit = function(name, fn){ window.iit = function(name, fn){
exclusive = fn.exclusive = true; exclusive = fn.exclusive = 2; // run only iits
console.log(fn);
jasmine.getEnv().it(name, fn); jasmine.getEnv().it(name, fn);
}; };
this.collectMode = function() { this.collectMode = function() {
collectMode = true; collectMode = true;
exclusive = false; exclusive = 0; // run everything
}; };
this.playback = function(){ this.playback = function(){
collectMode = false; collectMode = false;
playback(beforeEachs); playback(beforeEachs);
playback(afterEachs); playback(afterEachs);
playback(describes); playback(describes);
function playback(set) { function playback(set) {
for ( var name in set) { for ( var name in set) {
set[name](); set[name]();
} }
} }
}; };
this.isExclusive = function(spec) { this.isExclusive = function(spec) {
if (exclusive) { if (exclusive) {
var blocks = spec.queue.blocks; var blocks = spec.queue.blocks;
for ( var i = 0; i < blocks.length; i++) { for ( var i = 0; i < blocks.length; i++) {
if (blocks[i].func.exclusive) { if (blocks[i].func.exclusive >= exclusive) {
return true; return true;
} }
} }
@ -161,7 +168,7 @@
return true; return true;
}; };
} }
})(window); })(window);
// Patch Jasmine for proper stack traces // Patch Jasmine for proper stack traces