From e801faba2e1c28641166a61448df60a68ade3841 Mon Sep 17 00:00:00 2001 From: Igor Minar Date: Tue, 18 Oct 2011 16:21:02 -0700 Subject: chore(jstd adapter): switch to our version with backported fixes sha of the version: da92db714142b49f9cf61db664e782bb0ccad80b --- lib/jasmine-jstd-adapter/JasmineAdapter.js | 371 +++++++++++++++-------------- lib/jasmine-jstd-adapter/version.txt | 1 + 2 files changed, 191 insertions(+), 181 deletions(-) create mode 100644 lib/jasmine-jstd-adapter/version.txt (limited to 'lib') diff --git a/lib/jasmine-jstd-adapter/JasmineAdapter.js b/lib/jasmine-jstd-adapter/JasmineAdapter.js index 370de8b7..3b0fb2d7 100644 --- a/lib/jasmine-jstd-adapter/JasmineAdapter.js +++ b/lib/jasmine-jstd-adapter/JasmineAdapter.js @@ -1,189 +1,198 @@ /** * @fileoverview Jasmine JsTestDriver Adapter. * @author misko@hevery.com (Misko Hevery) - * @author olmo.maldonado@gmail.com (Olmo Maldonado) */ -(function(){ - - -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); -}; +(function(window) { + var rootDescribes = new Describes(window); + var describePath = []; + rootDescribes.collectMode(); + + var JASMINE_TYPE = 'jasmine test case'; + TestCase('Jasmine Adapter Tests', null, JASMINE_TYPE); + + var jasminePlugin = { + 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; + }, + + runTestConfiguration: function(testRunConfiguration, onTestDone, onTestRunConfigurationComplete){ + if (testRunConfiguration.getTestCaseInfo().getType() != JASMINE_TYPE) return false; + + 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); // 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); + var expectationResult = new jasmine.ExpectationResult({ + passed: false, + message: e ? jasmine.util.formatException(e) : 'Exception' + }); + // PATCH + if (e) { + expectationResult.trace = e; + } + this.results_.addResult(expectationResult); }; + diff --git a/lib/jasmine-jstd-adapter/version.txt b/lib/jasmine-jstd-adapter/version.txt new file mode 100644 index 00000000..17445432 --- /dev/null +++ b/lib/jasmine-jstd-adapter/version.txt @@ -0,0 +1 @@ +da92db714142b49f9cf61db664e782bb0ccad80b -- cgit v1.2.3