Skip to content
This repository has been archived by the owner on Apr 30, 2024. It is now read-only.

Commit

Permalink
chore(jstd): upgraded to v1.3.3c
Browse files Browse the repository at this point in the history
  • Loading branch information
mhevery committed Oct 11, 2011
1 parent 708ea44 commit d3fcfbd
Show file tree
Hide file tree
Showing 4 changed files with 184 additions and 180 deletions.
361 changes: 182 additions & 179 deletions jasmine-jstd-adapter/JasmineAdapter.js
@@ -1,186 +1,189 @@
/**
* @fileoverview Jasmine JsTestDriver Adapter.
* @author misko@hevery.com (Misko Hevery)
* @author olmo.maldonado@gmail.com (Olmo Maldonado)
*/
(function(window) {
var rootDescribes = new Describes(window);
var describePath = [];
rootDescribes.collectMode();

var jasmineTest = TestCase('Jasmine Adapter Tests', null, 'jasmine test case');

var jasminePlugin = {
name:'jasmine',
runTestConfiguration: function(testRunConfiguration, onTestDone, onTestRunConfigurationComplete){
if (testRunConfiguration.testCaseInfo_.template_ !== jasmineTest) return;

var jasmineEnv = jasmine.currentEnv_ = new jasmine.Env();
rootDescribes.playback();
var specLog = jstestdriver.console.log_ = [];
var start;
jasmineEnv.specFilter = function(spec) {
return rootDescribes.isExclusive(spec);
};
jasmineEnv.reporter = {
log: function(str){
specLog.push(str);
},

reportRunnerStarting: function(runner) { },

reportSpecStarting: function(spec) {
specLog = jstestdriver.console.log_ = [];
start = new Date().getTime();
},

reportSpecResults: function(spec) {
var suite = spec.suite;
var results = spec.results();
if (results.skipped) return;
var end = new Date().getTime();
var messages = [];
var resultItems = results.getItems();
var state = 'passed';
for ( var i = 0; i < resultItems.length; i++) {
if (!resultItems[i].passed()) {
state = resultItems[i].message.match(/AssertionError:/) ? 'error' : 'failed';
messages.push({
message: resultItems[i].toString(),
name: resultItems[i].trace.name,
stack: formatStack(resultItems[i].trace.stack)
});
}
}
onTestDone(
new jstestdriver.TestResult(
suite.getFullName(),
spec.description,
state,
jstestdriver.angular.toJson(messages),
specLog.join('\n'),
end - start));
},

reportSuiteResults: function(suite) {},

reportRunnerResults: function(runner) {
onTestRunConfigurationComplete();
}
};
jasmineEnv.execute();
return true;
},
onTestsFinish: function(){
jasmine.currentEnv_ = null;
rootDescribes.collectMode();
}
};
jstestdriver.pluginRegistrar.register(jasminePlugin);

function formatStack(stack) {
var lines = (stack||'').split(/\r?\n/);
var frames = [];
for (i = 0; i < lines.length; i++) {
if (!lines[i].match(/\/jasmine[\.-]/)) {
frames.push(lines[i].replace(/https?:\/\/\w+(:\d+)?\/test\//, '').replace(/^\s*/, ' '));
}
}
return frames.join('\n');
}

function noop(){}
function Describes(window){
var describes = {};
var beforeEachs = {};
var afterEachs = {};
// Here we store:
// 0: everyone runs
// 1: run everything under ddescribe
// 2: run only iits (ignore ddescribe)
var exclusive = 0;
var collectMode = true;
intercept('describe', describes);
intercept('xdescribe', describes);
intercept('beforeEach', beforeEachs);
intercept('afterEach', afterEachs);

function intercept(functionName, collection){
window[functionName] = function(desc, fn){
if (collectMode) {
collection[desc] = function(){
jasmine.getEnv()[functionName](desc, fn);
};
} else {
jasmine.getEnv()[functionName](desc, fn);
}
};
}
window.ddescribe = function(name, fn){
if (exclusive < 1) {
exclusive = 1; // run ddescribe only
}
window.describe(name, function(){
var oldIt = window.it;
window.it = function(name, fn){
fn.exclusive = 1; // run anything under ddescribe
jasmine.getEnv().it(name, fn);
};
try {
fn.call(this);
} finally {
window.it = oldIt;
};
});
};
window.iit = function(name, fn){
exclusive = fn.exclusive = 2; // run only iits
jasmine.getEnv().it(name, fn);
};


this.collectMode = function() {
collectMode = true;
exclusive = 0; // run everything
};
this.playback = function(){
collectMode = false;
playback(beforeEachs);
playback(afterEachs);
playback(describes);

function playback(set) {
for ( var name in set) {
set[name]();
}
}
};

this.isExclusive = function(spec) {
if (exclusive) {
var blocks = spec.queue.blocks;
for ( var i = 0; i < blocks.length; i++) {
if (blocks[i].func.exclusive >= exclusive) {
return true;
}
}
return false;
}
return true;
};
}

})(window);
(function(){

// Patch Jasmine for proper stack traces
jasmine.Spec.prototype.fail = function (e) {
var expectationResult = new jasmine.ExpectationResult({
passed: false,
message: e ? jasmine.util.formatException(e) : 'Exception'
});
// PATCH
if (e) {
expectationResult.trace = e;
}
this.results_.addResult(expectationResult);

var Env = function(onTestDone, onComplete){
jasmine.Env.call(this);

this.specFilter = function(spec){
if (!this.exclusive) return true;
var blocks = spec.queue.blocks, l = blocks.length;
for (var i = 0; i < l; i++) if (blocks[i].func.exclusive >= this.exclusive) return true;
return false;
};

this.reporter = new Reporter(onTestDone, onComplete);
};
jasmine.util.inherit(Env, jasmine.Env);

// Here we store:
// 0: everyone runs
// 1: run everything under ddescribe
// 2: run only iits (ignore ddescribe)
Env.prototype.exclusive = 0;


Env.prototype.execute = function(){
collectMode = false;
playback();
jasmine.Env.prototype.execute.call(this);
};


var Reporter = function(onTestDone, onComplete){
this.onTestDone = onTestDone;
this.onComplete = onComplete;
this.reset();
};
jasmine.util.inherit(Reporter, jasmine.Reporter);


Reporter.formatStack = function(stack) {
var line, lines = (stack || '').split(/\r?\n/), l = lines.length, frames = [];
for (var i = 0; i < l; i++){
line = lines[i];
if (line.match(/\/jasmine[\.-]/)) continue;
frames.push(line.replace(/https?:\/\/\w+(:\d+)?\/test\//, '').replace(/^\s*/, ' '));
}
return frames.join('\n');
};


Reporter.prototype.reset = function(){
this.specLog = jstestdriver.console.log_ = [];
};


Reporter.prototype.log = function(str){
this.specLog.push(str);
};


Reporter.prototype.reportSpecStarting = function(){
this.reset();
this.start = +new Date();
};


Reporter.prototype.reportSpecResults = function(spec){
var elapsed = +new Date() - this.start, results = spec.results();

if (results.skipped) return;

var item, state = 'passed', items = results.getItems(), l = items.length, messages = [];
for (var i = 0; i < l; i++){
item = items[i];
if (item.passed()) continue;
state = (item.message.indexOf('AssertionError:') != -1) ? 'error' : 'failed';
messages.push({
message: item + '',
name: item.trace.name,
stack: Reporter.formatStack(item.trace.stack)
});
}

this.onTestDone(new jstestdriver.TestResult(
spec.suite.getFullName(),
spec.description,
state,
jstestdriver.angular.toJson(messages),
this.specLog.join('\n'),
elapsed
));
};


Reporter.prototype.reportRunnerResults = function(){
this.onComplete();
};


var collectMode = true, intercepted = {};

describe = intercept('describe');
beforeEach = intercept('beforeEach');
afterEach = intercept('afterEach');

var JASMINE_TYPE = 'jasmine test case';
TestCase('Jasmine Adapter Tests', null, JASMINE_TYPE);

jstestdriver.pluginRegistrar.register({

name: 'jasmine',

getTestRunsConfigurationFor: function(testCaseInfos, expressions, testRunsConfiguration) {
for (var i = 0; i < testCaseInfos.length; i++) {
if (testCaseInfos[i].getType() == JASMINE_TYPE) {
testRunsConfiguration.push(new jstestdriver.TestRunConfiguration(testCaseInfos[i], []));
}
}
return false; // allow other TestCases to be collected.
},

runTestConfiguration: function(config, onTestDone, onComplete){
if (config.getTestCaseInfo().getType() != JASMINE_TYPE) return false;
(jasmine.currentEnv_ = new Env(onTestDone, onComplete)).execute();
return true;
},

onTestsFinish: function(){
jasmine.currentEnv_ = null;
collectMode = true;
}

});

function intercept(method){
var bucket = intercepted[method] = [], method = window[method];
return function(desc, fn){
if (collectMode) bucket.push(function(){ method(desc, fn); });
else method(desc, fn);
};
}

function playback(){
for (var method in intercepted){
var bucket = intercepted[method];
for (var i = 0, l = bucket.length; i < l; i++) bucket[i]();
}
}

})();

var ddescribe = function(name, fn){
var env = jasmine.getEnv();
if (!env.exclusive) env.exclusive = 1; // run ddescribe only
describe(name, function(){
var oldIt = it;
it = function(name, fn){
fn.exclusive = 1; // run anything under ddescribe
env.it(name, fn);
};

try {
fn.call(this);
} finally {
it = oldIt;
};
});
};

var iit = function(name, fn){
var env = jasmine.getEnv();
env.exclusive = fn.exclusive = 2; // run only iits
env.it(name, fn);
};

// Patch Jasmine for proper stack traces
jasmine.Spec.prototype.fail = function (e) {
var result = new jasmine.ExpectationResult({
passed: false,
message: e ? jasmine.util.formatException(e) : 'Exception'
});
if(e) result.trace = e;
this.results_.addResult(result);
};
1 change: 1 addition & 0 deletions jasmine-jstd-adapter/version.txt
@@ -0,0 +1 @@
19fc291bc225cac4e6e8c0437391cc2204dee282
Binary file modified jstestdriver/JsTestDriver.jar
Binary file not shown.
2 changes: 1 addition & 1 deletion jstestdriver/version.txt
@@ -1 +1 @@
1.3.2
1.3.3c

0 comments on commit d3fcfbd

Please sign in to comment.