diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/jasmine-jstd-adapter/JasmineAdapter.js | 371 | ||||
| -rw-r--r-- | lib/jasmine-jstd-adapter/version.txt | 1 | 
2 files changed, 191 insertions, 181 deletions
| 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 | 
