aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorIgor Minar2011-10-18 16:21:02 -0700
committerIgor Minar2011-10-18 16:21:52 -0700
commite801faba2e1c28641166a61448df60a68ade3841 (patch)
tree2b2ca0446c4954dfd9f3cb571fbace53d3adc131 /lib
parentee6af9a97807e1f166da0f7b005f2133a86344d5 (diff)
downloadangular.js-e801faba2e1c28641166a61448df60a68ade3841.tar.bz2
chore(jstd adapter): switch to our version with backported fixes
sha of the version: da92db714142b49f9cf61db664e782bb0ccad80b
Diffstat (limited to 'lib')
-rw-r--r--lib/jasmine-jstd-adapter/JasmineAdapter.js371
-rw-r--r--lib/jasmine-jstd-adapter/version.txt1
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