Added node modules
This commit is contained in:
		
							
								
								
									
										6
									
								
								node_modules/mocha/lib/browser/debug.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								node_modules/mocha/lib/browser/debug.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | ||||
|  | ||||
| module.exports = function(type){ | ||||
|   return function(){ | ||||
|      | ||||
|   } | ||||
| }; | ||||
							
								
								
									
										178
									
								
								node_modules/mocha/lib/browser/events.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										178
									
								
								node_modules/mocha/lib/browser/events.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,178 @@ | ||||
|  | ||||
| /** | ||||
|  * Module exports. | ||||
|  */ | ||||
|  | ||||
| exports.EventEmitter = EventEmitter; | ||||
|  | ||||
| /** | ||||
|  * Check if `obj` is an array. | ||||
|  */ | ||||
|  | ||||
| function isArray(obj) { | ||||
|   return '[object Array]' == {}.toString.call(obj); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Event emitter constructor. | ||||
|  * | ||||
|  * @api public. | ||||
|  */ | ||||
|  | ||||
| function EventEmitter(){}; | ||||
|  | ||||
| /** | ||||
|  * Adds a listener. | ||||
|  * | ||||
|  * @api public | ||||
|  */ | ||||
|  | ||||
| EventEmitter.prototype.on = function (name, fn) { | ||||
|   if (!this.$events) { | ||||
|     this.$events = {}; | ||||
|   } | ||||
|  | ||||
|   if (!this.$events[name]) { | ||||
|     this.$events[name] = fn; | ||||
|   } else if (isArray(this.$events[name])) { | ||||
|     this.$events[name].push(fn); | ||||
|   } else { | ||||
|     this.$events[name] = [this.$events[name], fn]; | ||||
|   } | ||||
|  | ||||
|   return this; | ||||
| }; | ||||
|  | ||||
| EventEmitter.prototype.addListener = EventEmitter.prototype.on; | ||||
|  | ||||
| /** | ||||
|  * Adds a volatile listener. | ||||
|  * | ||||
|  * @api public | ||||
|  */ | ||||
|  | ||||
| EventEmitter.prototype.once = function (name, fn) { | ||||
|   var self = this; | ||||
|  | ||||
|   function on () { | ||||
|     self.removeListener(name, on); | ||||
|     fn.apply(this, arguments); | ||||
|   }; | ||||
|  | ||||
|   on.listener = fn; | ||||
|   this.on(name, on); | ||||
|  | ||||
|   return this; | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * Removes a listener. | ||||
|  * | ||||
|  * @api public | ||||
|  */ | ||||
|  | ||||
| EventEmitter.prototype.removeListener = function (name, fn) { | ||||
|   if (this.$events && this.$events[name]) { | ||||
|     var list = this.$events[name]; | ||||
|  | ||||
|     if (isArray(list)) { | ||||
|       var pos = -1; | ||||
|  | ||||
|       for (var i = 0, l = list.length; i < l; i++) { | ||||
|         if (list[i] === fn || (list[i].listener && list[i].listener === fn)) { | ||||
|           pos = i; | ||||
|           break; | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       if (pos < 0) { | ||||
|         return this; | ||||
|       } | ||||
|  | ||||
|       list.splice(pos, 1); | ||||
|  | ||||
|       if (!list.length) { | ||||
|         delete this.$events[name]; | ||||
|       } | ||||
|     } else if (list === fn || (list.listener && list.listener === fn)) { | ||||
|       delete this.$events[name]; | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   return this; | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * Removes all listeners for an event. | ||||
|  * | ||||
|  * @api public | ||||
|  */ | ||||
|  | ||||
| EventEmitter.prototype.removeAllListeners = function (name) { | ||||
|   if (name === undefined) { | ||||
|     this.$events = {}; | ||||
|     return this; | ||||
|   } | ||||
|  | ||||
|   if (this.$events && this.$events[name]) { | ||||
|     this.$events[name] = null; | ||||
|   } | ||||
|  | ||||
|   return this; | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * Gets all listeners for a certain event. | ||||
|  * | ||||
|  * @api publci | ||||
|  */ | ||||
|  | ||||
| EventEmitter.prototype.listeners = function (name) { | ||||
|   if (!this.$events) { | ||||
|     this.$events = {}; | ||||
|   } | ||||
|  | ||||
|   if (!this.$events[name]) { | ||||
|     this.$events[name] = []; | ||||
|   } | ||||
|  | ||||
|   if (!isArray(this.$events[name])) { | ||||
|     this.$events[name] = [this.$events[name]]; | ||||
|   } | ||||
|  | ||||
|   return this.$events[name]; | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * Emits an event. | ||||
|  * | ||||
|  * @api public | ||||
|  */ | ||||
|  | ||||
| EventEmitter.prototype.emit = function (name) { | ||||
|   if (!this.$events) { | ||||
|     return false; | ||||
|   } | ||||
|  | ||||
|   var handler = this.$events[name]; | ||||
|  | ||||
|   if (!handler) { | ||||
|     return false; | ||||
|   } | ||||
|  | ||||
|   var args = [].slice.call(arguments, 1); | ||||
|  | ||||
|   if ('function' == typeof handler) { | ||||
|     handler.apply(this, args); | ||||
|   } else if (isArray(handler)) { | ||||
|     var listeners = handler.slice(); | ||||
|  | ||||
|     for (var i = 0, l = listeners.length; i < l; i++) { | ||||
|       listeners[i].apply(this, args); | ||||
|     } | ||||
|   } else { | ||||
|     return false; | ||||
|   } | ||||
|  | ||||
|   return true; | ||||
| }; | ||||
							
								
								
									
										0
									
								
								node_modules/mocha/lib/browser/fs.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								node_modules/mocha/lib/browser/fs.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
								
								
									
										0
									
								
								node_modules/mocha/lib/browser/path.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								node_modules/mocha/lib/browser/path.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
								
								
									
										125
									
								
								node_modules/mocha/lib/browser/progress.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										125
									
								
								node_modules/mocha/lib/browser/progress.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,125 @@ | ||||
|  | ||||
| /** | ||||
|  * Expose `Progress`. | ||||
|  */ | ||||
|  | ||||
| module.exports = Progress; | ||||
|  | ||||
| /** | ||||
|  * Initialize a new `Progress` indicator. | ||||
|  */ | ||||
|  | ||||
| function Progress() { | ||||
|   this.percent = 0; | ||||
|   this.size(0); | ||||
|   this.fontSize(11); | ||||
|   this.font('helvetica, arial, sans-serif'); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Set progress size to `n`. | ||||
|  * | ||||
|  * @param {Number} n | ||||
|  * @return {Progress} for chaining | ||||
|  * @api public | ||||
|  */ | ||||
|  | ||||
| Progress.prototype.size = function(n){ | ||||
|   this._size = n; | ||||
|   return this; | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * Set text to `str`. | ||||
|  * | ||||
|  * @param {String} str | ||||
|  * @return {Progress} for chaining | ||||
|  * @api public | ||||
|  */ | ||||
|  | ||||
| Progress.prototype.text = function(str){ | ||||
|   this._text = str; | ||||
|   return this; | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * Set font size to `n`. | ||||
|  * | ||||
|  * @param {Number} n | ||||
|  * @return {Progress} for chaining | ||||
|  * @api public | ||||
|  */ | ||||
|  | ||||
| Progress.prototype.fontSize = function(n){ | ||||
|   this._fontSize = n; | ||||
|   return this; | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * Set font `family`. | ||||
|  * | ||||
|  * @param {String} family | ||||
|  * @return {Progress} for chaining | ||||
|  */ | ||||
|  | ||||
| Progress.prototype.font = function(family){ | ||||
|   this._font = family; | ||||
|   return this; | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * Update percentage to `n`. | ||||
|  * | ||||
|  * @param {Number} n | ||||
|  * @return {Progress} for chaining | ||||
|  */ | ||||
|  | ||||
| Progress.prototype.update = function(n){ | ||||
|   this.percent = n; | ||||
|   return this; | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * Draw on `ctx`. | ||||
|  * | ||||
|  * @param {CanvasRenderingContext2d} ctx | ||||
|  * @return {Progress} for chaining | ||||
|  */ | ||||
|  | ||||
| Progress.prototype.draw = function(ctx){ | ||||
|   var percent = Math.min(this.percent, 100) | ||||
|     , size = this._size | ||||
|     , half = size / 2 | ||||
|     , x = half | ||||
|     , y = half | ||||
|     , rad = half - 1 | ||||
|     , fontSize = this._fontSize; | ||||
|  | ||||
|   ctx.font = fontSize + 'px ' + this._font; | ||||
|  | ||||
|   var angle = Math.PI * 2 * (percent / 100); | ||||
|   ctx.clearRect(0, 0, size, size); | ||||
|  | ||||
|   // outer circle | ||||
|   ctx.strokeStyle = '#9f9f9f'; | ||||
|   ctx.beginPath(); | ||||
|   ctx.arc(x, y, rad, 0, angle, false); | ||||
|   ctx.stroke(); | ||||
|  | ||||
|   // inner circle | ||||
|   ctx.strokeStyle = '#eee'; | ||||
|   ctx.beginPath(); | ||||
|   ctx.arc(x, y, rad - 1, 0, angle, true); | ||||
|   ctx.stroke(); | ||||
|  | ||||
|   // text | ||||
|   var text = this._text || (percent | 0) + '%' | ||||
|     , w = ctx.measureText(text).width; | ||||
|  | ||||
|   ctx.fillText( | ||||
|       text | ||||
|     , x - w / 2 + 1 | ||||
|     , y + fontSize / 2 - 1); | ||||
|  | ||||
|   return this; | ||||
| }; | ||||
							
								
								
									
										8
									
								
								node_modules/mocha/lib/browser/tty.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								node_modules/mocha/lib/browser/tty.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | ||||
|  | ||||
| exports.isatty = function(){ | ||||
|   return true; | ||||
| }; | ||||
|  | ||||
| exports.getWindowSize = function(){ | ||||
|   return [window.innerHeight, window.innerWidth]; | ||||
| }; | ||||
							
								
								
									
										30
									
								
								node_modules/mocha/lib/hook.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								node_modules/mocha/lib/hook.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,30 @@ | ||||
|  | ||||
| /** | ||||
|  * Module dependencies. | ||||
|  */ | ||||
|  | ||||
| var Runnable = require('./runnable'); | ||||
|  | ||||
| /** | ||||
|  * Expose `Hook`. | ||||
|  */ | ||||
|  | ||||
| module.exports = Hook; | ||||
|  | ||||
| /** | ||||
|  * Initialize a new `Hook` with the given `title` and callback `fn`. | ||||
|  * | ||||
|  * @param {String} title | ||||
|  * @param {Function} fn | ||||
|  * @api private | ||||
|  */ | ||||
|  | ||||
| function Hook(title, fn) { | ||||
|   Runnable.call(this, title, fn); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Inherit from `Runnable.prototype`. | ||||
|  */ | ||||
|  | ||||
| Hook.prototype.__proto__ = Runnable.prototype; | ||||
							
								
								
									
										86
									
								
								node_modules/mocha/lib/interfaces/bdd.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										86
									
								
								node_modules/mocha/lib/interfaces/bdd.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,86 @@ | ||||
|  | ||||
| /** | ||||
|  * Module dependencies. | ||||
|  */ | ||||
|  | ||||
| var Suite = require('../suite') | ||||
|   , Test = require('../test'); | ||||
|  | ||||
| /** | ||||
|  * BDD-style interface: | ||||
|  *  | ||||
|  *      describe('Array', function(){ | ||||
|  *        describe('#indexOf()', function(){ | ||||
|  *          it('should return -1 when not present', function(){ | ||||
|  * | ||||
|  *          }); | ||||
|  * | ||||
|  *          it('should return the index when present', function(){ | ||||
|  * | ||||
|  *          }); | ||||
|  *        }); | ||||
|  *      }); | ||||
|  *  | ||||
|  */ | ||||
|  | ||||
| module.exports = function(suite){ | ||||
|   var suites = [suite]; | ||||
|  | ||||
|   suite.on('pre-require', function(context){ | ||||
|  | ||||
|     /** | ||||
|      * Execute before running tests. | ||||
|      */ | ||||
|  | ||||
|     context.before = function(fn){ | ||||
|       suites[0].beforeAll(fn); | ||||
|     }; | ||||
|  | ||||
|     /** | ||||
|      * Execute after running tests. | ||||
|      */ | ||||
|  | ||||
|     context.after = function(fn){ | ||||
|       suites[0].afterAll(fn); | ||||
|     }; | ||||
|  | ||||
|     /** | ||||
|      * Execute before each test case. | ||||
|      */ | ||||
|  | ||||
|     context.beforeEach = function(fn){ | ||||
|       suites[0].beforeEach(fn); | ||||
|     }; | ||||
|  | ||||
|     /** | ||||
|      * Execute after each test case. | ||||
|      */ | ||||
|  | ||||
|     context.afterEach = function(fn){ | ||||
|       suites[0].afterEach(fn); | ||||
|     }; | ||||
|  | ||||
|     /** | ||||
|      * Describe a "suite" with the given `title` | ||||
|      * and callback `fn` containing nested suites | ||||
|      * and/or tests. | ||||
|      */ | ||||
|    | ||||
|     context.describe = function(title, fn){ | ||||
|       var suite = Suite.create(suites[0], title); | ||||
|       suites.unshift(suite); | ||||
|       fn(); | ||||
|       suites.shift(); | ||||
|     }; | ||||
|  | ||||
|     /** | ||||
|      * Describe a specification or test-case | ||||
|      * with the given `title` and callback `fn` | ||||
|      * acting as a thunk. | ||||
|      */ | ||||
|  | ||||
|     context.it = function(title, fn){ | ||||
|       suites[0].addTest(new Test(title, fn)); | ||||
|     }; | ||||
|   }); | ||||
| }; | ||||
							
								
								
									
										60
									
								
								node_modules/mocha/lib/interfaces/exports.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								node_modules/mocha/lib/interfaces/exports.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,60 @@ | ||||
|  | ||||
| /** | ||||
|  * Module dependencies. | ||||
|  */ | ||||
|  | ||||
| var Suite = require('../suite') | ||||
|   , Test = require('../test'); | ||||
|  | ||||
| /** | ||||
|  * TDD-style interface: | ||||
|  *  | ||||
|  *     exports.Array = { | ||||
|  *       '#indexOf()': { | ||||
|  *         'should return -1 when the value is not present': function(){ | ||||
|  *            | ||||
|  *         }, | ||||
|  * | ||||
|  *         'should return the correct index when the value is present': function(){ | ||||
|  *            | ||||
|  *         } | ||||
|  *       } | ||||
|  *     }; | ||||
|  *  | ||||
|  */ | ||||
|  | ||||
| module.exports = function(suite){ | ||||
|   var suites = [suite]; | ||||
|  | ||||
|   suite.on('require', visit); | ||||
|  | ||||
|   function visit(obj) { | ||||
|     var suite; | ||||
|     for (var key in obj) { | ||||
|       if ('function' == typeof obj[key]) { | ||||
|         var fn = obj[key]; | ||||
|         switch (key) { | ||||
|           case 'before': | ||||
|             suites[0].beforeAll(fn); | ||||
|             break; | ||||
|           case 'after': | ||||
|             suites[0].afterAll(fn); | ||||
|             break; | ||||
|           case 'beforeEach': | ||||
|             suites[0].beforeEach(fn); | ||||
|             break; | ||||
|           case 'afterEach': | ||||
|             suites[0].afterEach(fn); | ||||
|             break; | ||||
|           default: | ||||
|             suites[0].addTest(new Test(key, fn)); | ||||
|         } | ||||
|       } else { | ||||
|         var suite = Suite.create(suites[0], key); | ||||
|         suites.unshift(suite); | ||||
|         visit(obj[key]); | ||||
|         suites.shift(); | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| }; | ||||
							
								
								
									
										5
									
								
								node_modules/mocha/lib/interfaces/index.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								node_modules/mocha/lib/interfaces/index.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | ||||
|  | ||||
| exports.bdd = require('./bdd'); | ||||
| exports.tdd = require('./tdd'); | ||||
| exports.qunit = require('./qunit'); | ||||
| exports.exports = require('./exports'); | ||||
							
								
								
									
										91
									
								
								node_modules/mocha/lib/interfaces/qunit.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										91
									
								
								node_modules/mocha/lib/interfaces/qunit.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,91 @@ | ||||
|  | ||||
| /** | ||||
|  * Module dependencies. | ||||
|  */ | ||||
|  | ||||
| var Suite = require('../suite') | ||||
|   , Test = require('../test'); | ||||
|  | ||||
| /** | ||||
|  * QUnit-style interface: | ||||
|  *  | ||||
|  *     suite('Array'); | ||||
|  *      | ||||
|  *     test('#length', function(){ | ||||
|  *       var arr = [1,2,3]; | ||||
|  *       ok(arr.length == 3); | ||||
|  *     }); | ||||
|  *      | ||||
|  *     test('#indexOf()', function(){ | ||||
|  *       var arr = [1,2,3]; | ||||
|  *       ok(arr.indexOf(1) == 0); | ||||
|  *       ok(arr.indexOf(2) == 1); | ||||
|  *       ok(arr.indexOf(3) == 2); | ||||
|  *     }); | ||||
|  *      | ||||
|  *     suite('String'); | ||||
|  *      | ||||
|  *     test('#length', function(){ | ||||
|  *       ok('foo'.length == 3); | ||||
|  *     }); | ||||
|  *  | ||||
|  */ | ||||
|  | ||||
| module.exports = function(suite){ | ||||
|   var suites = [suite]; | ||||
|  | ||||
|   suite.on('pre-require', function(context){ | ||||
|  | ||||
|     /** | ||||
|      * Execute before running tests. | ||||
|      */ | ||||
|  | ||||
|     context.before = function(fn){ | ||||
|       suites[0].beforeAll(fn); | ||||
|     }; | ||||
|  | ||||
|     /** | ||||
|      * Execute after running tests. | ||||
|      */ | ||||
|  | ||||
|     context.after = function(fn){ | ||||
|       suites[0].afterAll(fn); | ||||
|     }; | ||||
|  | ||||
|     /** | ||||
|      * Execute before each test case. | ||||
|      */ | ||||
|  | ||||
|     context.beforeEach = function(fn){ | ||||
|       suites[0].beforeEach(fn); | ||||
|     }; | ||||
|  | ||||
|     /** | ||||
|      * Execute after each test case. | ||||
|      */ | ||||
|  | ||||
|     context.afterEach = function(fn){ | ||||
|       suites[0].afterEach(fn); | ||||
|     }; | ||||
|  | ||||
|     /** | ||||
|      * Describe a "suite" with the given `title`. | ||||
|      */ | ||||
|    | ||||
|     context.suite = function(title){ | ||||
|       if (suites.length > 1) suites.shift(); | ||||
|       var suite = Suite.create(suites[0], title); | ||||
|       suites.unshift(suite); | ||||
|     }; | ||||
|  | ||||
|     /** | ||||
|      * Describe a specification or test-case | ||||
|      * with the given `title` and callback `fn` | ||||
|      * acting as a thunk. | ||||
|      */ | ||||
|  | ||||
|     context.test = function(title, fn){ | ||||
|       suites[0].addTest(new Test(title, fn)); | ||||
|     }; | ||||
|   }); | ||||
| }; | ||||
							
								
								
									
										94
									
								
								node_modules/mocha/lib/interfaces/tdd.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										94
									
								
								node_modules/mocha/lib/interfaces/tdd.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,94 @@ | ||||
|  | ||||
| /** | ||||
|  * Module dependencies. | ||||
|  */ | ||||
|  | ||||
| var Suite = require('../suite') | ||||
|   , Test = require('../test'); | ||||
|  | ||||
| /** | ||||
|  * TDD-style interface: | ||||
|  * | ||||
|  *      suite('Array', function(){ | ||||
|  *        suite('#indexOf()', function(){ | ||||
|  *          suiteSetup(function(){ | ||||
|  * | ||||
|  *          }); | ||||
|  *           | ||||
|  *          test('should return -1 when not present', function(){ | ||||
|  * | ||||
|  *          }); | ||||
|  * | ||||
|  *          test('should return the index when present', function(){ | ||||
|  * | ||||
|  *          }); | ||||
|  * | ||||
|  *          suiteTeardown(function(){ | ||||
|  * | ||||
|  *          }); | ||||
|  *        }); | ||||
|  *      }); | ||||
|  * | ||||
|  */ | ||||
|  | ||||
| module.exports = function(suite){ | ||||
|   var suites = [suite]; | ||||
|  | ||||
|   suite.on('pre-require', function(context){ | ||||
|  | ||||
|     /** | ||||
|      * Execute before each test case. | ||||
|      */ | ||||
|  | ||||
|     context.setup = function(fn){ | ||||
|       suites[0].beforeEach(fn); | ||||
|     }; | ||||
|  | ||||
|     /** | ||||
|      * Execute after each test case. | ||||
|      */ | ||||
|  | ||||
|     context.teardown = function(fn){ | ||||
|       suites[0].afterEach(fn); | ||||
|     }; | ||||
|  | ||||
|     /** | ||||
|      * Execute before the suite. | ||||
|      */ | ||||
|  | ||||
|     context.suiteSetup = function(fn){ | ||||
|       suites[0].beforeAll(fn); | ||||
|     }; | ||||
|  | ||||
|     /** | ||||
|      * Execute after the suite. | ||||
|      */ | ||||
|  | ||||
|     context.suiteTeardown = function(fn){ | ||||
|       suites[0].afterAll(fn); | ||||
|     }; | ||||
|  | ||||
|     /** | ||||
|      * Describe a "suite" with the given `title` | ||||
|      * and callback `fn` containing nested suites | ||||
|      * and/or tests. | ||||
|      */ | ||||
|  | ||||
|     context.suite = function(title, fn){ | ||||
|       var suite = Suite.create(suites[0], title); | ||||
|       suites.unshift(suite); | ||||
|       fn(); | ||||
|       suites.shift(); | ||||
|     }; | ||||
|  | ||||
|     /** | ||||
|      * Describe a specification or test-case | ||||
|      * with the given `title` and callback `fn` | ||||
|      * acting as a thunk. | ||||
|      */ | ||||
|  | ||||
|     context.test = function(title, fn){ | ||||
|       suites[0].addTest(new Test(title, fn)); | ||||
|     }; | ||||
|   }); | ||||
| }; | ||||
							
								
								
									
										21
									
								
								node_modules/mocha/lib/mocha.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								node_modules/mocha/lib/mocha.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,21 @@ | ||||
|  | ||||
| /*! | ||||
|  * mocha | ||||
|  * Copyright(c) 2011 TJ Holowaychuk <tj@vision-media.ca> | ||||
|  * MIT Licensed | ||||
|  */ | ||||
|  | ||||
| /** | ||||
|  * Library version. | ||||
|  */ | ||||
|  | ||||
| exports.version = '0.12.0'; | ||||
|  | ||||
| exports.utils = require('./utils'); | ||||
| exports.interfaces = require('./interfaces'); | ||||
| exports.reporters = require('./reporters'); | ||||
| exports.Runnable = require('./runnable'); | ||||
| exports.Runner = require('./runner'); | ||||
| exports.Suite = require('./suite'); | ||||
| exports.Hook = require('./hook'); | ||||
| exports.Test = require('./test'); | ||||
							
								
								
									
										236
									
								
								node_modules/mocha/lib/reporters/base.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										236
									
								
								node_modules/mocha/lib/reporters/base.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,236 @@ | ||||
|  | ||||
| /** | ||||
|  * Module dependencies. | ||||
|  */ | ||||
|  | ||||
| var tty = require('tty'); | ||||
|  | ||||
| /** | ||||
|  * Check if both stdio streams are associated with a tty. | ||||
|  */ | ||||
|  | ||||
| var isatty = tty.isatty(1) && tty.isatty(2); | ||||
|  | ||||
| /** | ||||
|  * Expose `Base`. | ||||
|  */ | ||||
|  | ||||
| exports = module.exports = Base; | ||||
|  | ||||
| /** | ||||
|  * Enable coloring by default. | ||||
|  */ | ||||
|  | ||||
| exports.useColors = isatty; | ||||
|  | ||||
| /** | ||||
|  * Default color map. | ||||
|  */ | ||||
|  | ||||
| exports.colors = { | ||||
|     'pass': 90 | ||||
|   , 'fail': 31 | ||||
|   , 'bright pass': 92 | ||||
|   , 'bright fail': 91 | ||||
|   , 'bright yellow': 93 | ||||
|   , 'pending': 36 | ||||
|   , 'suite': 0 | ||||
|   , 'error title': 0 | ||||
|   , 'error message': 31 | ||||
|   , 'error stack': 90 | ||||
|   , 'checkmark': 32 | ||||
|   , 'fast': 90 | ||||
|   , 'medium': 33 | ||||
|   , 'slow': 31 | ||||
|   , 'green': 32 | ||||
|   , 'light': 90 | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * Color `str` with the given `type`, | ||||
|  * allowing colors to be disabled, | ||||
|  * as well as user-defined color | ||||
|  * schemes. | ||||
|  * | ||||
|  * @param {String} type | ||||
|  * @param {String} str | ||||
|  * @return {String} | ||||
|  * @api private | ||||
|  */ | ||||
|  | ||||
| var color = exports.color = function(type, str) { | ||||
|   if (!exports.useColors) return str; | ||||
|   return '\033[' + exports.colors[type] + 'm' + str + '\033[0m'; | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * Expose term window size, with some | ||||
|  * defaults for when stderr is not a tty. | ||||
|  */ | ||||
|  | ||||
| exports.window = { | ||||
|   width: isatty | ||||
|     ? process.stdout.getWindowSize | ||||
|       ? process.stdout.getWindowSize(1)[0] | ||||
|       : tty.getWindowSize()[1] | ||||
|     : 75 | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * Expose some basic cursor interactions | ||||
|  * that are common among reporters. | ||||
|  */ | ||||
|  | ||||
| exports.cursor = { | ||||
|   hide: function(){ | ||||
|     process.stdout.write('\033[?25l'); | ||||
|   }, | ||||
|  | ||||
|   show: function(){ | ||||
|     process.stdout.write('\033[?25h'); | ||||
|   }, | ||||
|  | ||||
|   deleteLine: function(){ | ||||
|     process.stdout.write('\033[2K'); | ||||
|   }, | ||||
|  | ||||
|   beginningOfLine: function(){ | ||||
|     process.stdout.write('\033[0G'); | ||||
|   }, | ||||
|  | ||||
|   CR: function(){ | ||||
|     exports.cursor.deleteLine(); | ||||
|     exports.cursor.beginningOfLine(); | ||||
|   } | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * A test is considered slow if it | ||||
|  * exceeds the following value in milliseconds. | ||||
|  */ | ||||
|  | ||||
| exports.slow = 75; | ||||
|  | ||||
| /** | ||||
|  * Outut the given `failures` as a list. | ||||
|  * | ||||
|  * @param {Array} failures | ||||
|  * @api public | ||||
|  */ | ||||
|  | ||||
| exports.list = function(failures){ | ||||
|   console.error(); | ||||
|   failures.forEach(function(test, i){ | ||||
|     // format | ||||
|     var fmt = color('error title', '  %s) %s:\n') | ||||
|       + color('error message', '     %s') | ||||
|       + color('error stack', '\n%s\n'); | ||||
|  | ||||
|     // msg | ||||
|     var err = test.err | ||||
|       , message = err.message || '' | ||||
|       , stack = err.stack || message | ||||
|       , index = stack.indexOf(message) + message.length | ||||
|       , msg = stack.slice(0, index); | ||||
|  | ||||
|     // indent stack trace without msg | ||||
|     stack = stack.slice(index + 1) | ||||
|       .replace(/^/gm, '  '); | ||||
|  | ||||
|     console.error(fmt, (i + 1), test.fullTitle(), msg, stack); | ||||
|   }); | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * Initialize a new `Base` reporter. | ||||
|  * | ||||
|  * All other reporters generally | ||||
|  * inherit from this reporter, providing | ||||
|  * stats such as test duration, number | ||||
|  * of tests passed / failed etc. | ||||
|  * | ||||
|  * @param {Runner} runner | ||||
|  * @api public | ||||
|  */ | ||||
|  | ||||
| function Base(runner) { | ||||
|   var self = this | ||||
|     , stats = this.stats = { suites: 0, tests: 0, passes: 0, failures: 0 } | ||||
|     , failures = this.failures = []; | ||||
|  | ||||
|   if (!runner) return; | ||||
|   this.runner = runner; | ||||
|  | ||||
|   runner.on('start', function(){ | ||||
|     stats.start = new Date; | ||||
|   }); | ||||
|  | ||||
|   runner.on('suite', function(suite){ | ||||
|     stats.suites = stats.suites || 0; | ||||
|     suite.root || stats.suites++; | ||||
|   }); | ||||
|  | ||||
|   runner.on('test end', function(test){ | ||||
|     stats.tests = stats.tests || 0; | ||||
|     stats.tests++; | ||||
|   }); | ||||
|  | ||||
|   runner.on('pass', function(test){ | ||||
|     stats.passes = stats.passes || 0; | ||||
|  | ||||
|     var medium = exports.slow / 2; | ||||
|     test.speed = test.duration > exports.slow | ||||
|       ? 'slow' | ||||
|       : test.duration > medium | ||||
|         ? 'medium' | ||||
|         : 'fast'; | ||||
|  | ||||
|     stats.passes++; | ||||
|   }); | ||||
|  | ||||
|   runner.on('fail', function(test, err){ | ||||
|     stats.failures = stats.failures || 0; | ||||
|     stats.failures++; | ||||
|     test.err = err; | ||||
|     failures.push(test); | ||||
|   }); | ||||
|  | ||||
|   runner.on('end', function(){ | ||||
|     stats.end = new Date; | ||||
|     stats.duration = new Date - stats.start; | ||||
|   }); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Output common epilogue used by many of | ||||
|  * the bundled reporters. | ||||
|  * | ||||
|  * @api public | ||||
|  */ | ||||
|  | ||||
| Base.prototype.epilogue = function(){ | ||||
|   var stats = this.stats | ||||
|     , fmt; | ||||
|  | ||||
|   console.log(); | ||||
|  | ||||
|   // failure | ||||
|   if (stats.failures) { | ||||
|     fmt = color('bright fail', '  ✖') | ||||
|       + color('fail', ' %d of %d tests failed') | ||||
|       + color('light', ':') | ||||
|  | ||||
|     console.error(fmt, stats.failures, this.runner.total); | ||||
|     Base.list(this.failures); | ||||
|     console.error(); | ||||
|     return; | ||||
|   } | ||||
|  | ||||
|   // pass | ||||
|   fmt = color('bright pass', '  ✔') | ||||
|     + color('green', ' %d tests complete') | ||||
|     + color('light', ' (%dms)'); | ||||
|  | ||||
|   console.log(fmt, stats.tests || 0, stats.duration); | ||||
|   console.log(); | ||||
| }; | ||||
							
								
								
									
										74
									
								
								node_modules/mocha/lib/reporters/doc.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								node_modules/mocha/lib/reporters/doc.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,74 @@ | ||||
|  | ||||
| /** | ||||
|  * Module dependencies. | ||||
|  */ | ||||
|  | ||||
| var Base = require('./base') | ||||
|   , utils = require('../utils'); | ||||
|  | ||||
| /** | ||||
|  * Expose `Doc`. | ||||
|  */ | ||||
|  | ||||
| exports = module.exports = Doc; | ||||
|  | ||||
| /** | ||||
|  * Initialize a new `Doc` reporter. | ||||
|  * | ||||
|  * @param {Runner} runner | ||||
|  * @api public | ||||
|  */ | ||||
|  | ||||
| function Doc(runner) { | ||||
|   Base.call(this, runner); | ||||
|  | ||||
|   var self = this | ||||
|     , stats = this.stats | ||||
|     , total = runner.total | ||||
|     , indents = 2; | ||||
|  | ||||
|   function indent() { | ||||
|     return Array(indents).join('  '); | ||||
|   } | ||||
|  | ||||
|   runner.on('suite', function(suite){ | ||||
|     if (suite.root) return; | ||||
|     ++indents; | ||||
|     console.log('%s<section class="suite">', indent()); | ||||
|     ++indents; | ||||
|     console.log('%s<h1>%s</h1>', indent(), suite.title); | ||||
|     console.log('%s<dl>', indent()); | ||||
|   }); | ||||
|  | ||||
|   runner.on('suite end', function(suite){ | ||||
|     if (suite.root) return; | ||||
|     console.log('%s</dl>', indent()); | ||||
|     --indents; | ||||
|     console.log('%s</section>', indent()); | ||||
|     --indents; | ||||
|   }); | ||||
|  | ||||
|   runner.on('pass', function(test){ | ||||
|     console.log('%s  <dt>%s</dt>', indent(), test.title); | ||||
|     var code = utils.escape(clean(test.fn.toString())); | ||||
|     console.log('%s  <dd><pre><code>%s</code></pre></dd>', indent(), code); | ||||
|   }); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Strip the function definition from `str`, | ||||
|  * and re-indent for pre whitespace. | ||||
|  */ | ||||
|  | ||||
| function clean(str) { | ||||
|   str = str | ||||
|     .replace(/^function *\(.*\) *{/, '') | ||||
|     .replace(/\s+\}$/, ''); | ||||
|  | ||||
|   var spaces = str.match(/^\n?( *)/)[1].length | ||||
|     , re = new RegExp('^ {' + spaces + '}', 'gm'); | ||||
|  | ||||
|   str = str.replace(re, ''); | ||||
|  | ||||
|   return str; | ||||
| } | ||||
							
								
								
									
										62
									
								
								node_modules/mocha/lib/reporters/dot.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								node_modules/mocha/lib/reporters/dot.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,62 @@ | ||||
|  | ||||
| /** | ||||
|  * Module dependencies. | ||||
|  */ | ||||
|  | ||||
| var Base = require('./base') | ||||
|   , color = Base.color; | ||||
|  | ||||
| /** | ||||
|  * Expose `Dot`. | ||||
|  */ | ||||
|  | ||||
| exports = module.exports = Dot; | ||||
|  | ||||
| /** | ||||
|  * Initialize a new `Dot` matrix test reporter. | ||||
|  * | ||||
|  * @param {Runner} runner | ||||
|  * @api public | ||||
|  */ | ||||
|  | ||||
| function Dot(runner) { | ||||
|   Base.call(this, runner); | ||||
|  | ||||
|   var self = this | ||||
|     , stats = this.stats | ||||
|     , width = Base.window.width * .75 | 0 | ||||
|     , n = 0; | ||||
|  | ||||
|   runner.on('start', function(){ | ||||
|     process.stdout.write('\n  '); | ||||
|   }); | ||||
|  | ||||
|   runner.on('pending', function(test){ | ||||
|     process.stdout.write(color('pending', '.')); | ||||
|   }); | ||||
|  | ||||
|   runner.on('pass', function(test){ | ||||
|     if (++n % width == 0) process.stdout.write('\n  '); | ||||
|     if ('slow' == test.speed) { | ||||
|       process.stdout.write(color('bright yellow', '.')); | ||||
|     } else { | ||||
|       process.stdout.write(color(test.speed, '.')); | ||||
|     } | ||||
|   }); | ||||
|  | ||||
|   runner.on('fail', function(test, err){ | ||||
|     if (++n % width == 0) process.stdout.write('\n  '); | ||||
|     process.stdout.write(color('fail', '.')); | ||||
|   }); | ||||
|  | ||||
|   runner.on('end', function(){ | ||||
|     console.log(); | ||||
|     self.epilogue(); | ||||
|   }); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Inherit from `Base.prototype`. | ||||
|  */ | ||||
|  | ||||
| Dot.prototype.__proto__ = Base.prototype; | ||||
							
								
								
									
										154
									
								
								node_modules/mocha/lib/reporters/html.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										154
									
								
								node_modules/mocha/lib/reporters/html.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,154 @@ | ||||
|  | ||||
| /** | ||||
|  * Module dependencies. | ||||
|  */ | ||||
|  | ||||
| var Base = require('./base') | ||||
|   , utils = require('../utils') | ||||
|   , Progress = require('../browser/progress') | ||||
|   , escape = utils.escape; | ||||
|  | ||||
| /** | ||||
|  * Expose `Doc`. | ||||
|  */ | ||||
|  | ||||
| exports = module.exports = HTML; | ||||
|  | ||||
| /** | ||||
|  * Stats template. | ||||
|  */ | ||||
|  | ||||
| var statsTemplate = '<ul id="stats">' | ||||
|   + '<li class="progress"><canvas width="40" height="40"></canvas></li>' | ||||
|   + '<li class="passes">passes: <em>0</em></li>' | ||||
|   + '<li class="failures">failures: <em>0</em></li>' | ||||
|   + '<li class="duration">duration: <em>0</em>s</li>' | ||||
|   + '</ul>'; | ||||
|  | ||||
| /** | ||||
|  * Initialize a new `Doc` reporter. | ||||
|  * | ||||
|  * @param {Runner} runner | ||||
|  * @api public | ||||
|  */ | ||||
|  | ||||
| function HTML(runner) { | ||||
|   Base.call(this, runner); | ||||
|  | ||||
|   // TODO: clean up | ||||
|  | ||||
|   var self = this | ||||
|     , stats = this.stats | ||||
|     , total = runner.total | ||||
|     , root = $('#mocha') | ||||
|     , stack = [root] | ||||
|     , stat = $(statsTemplate).appendTo(root) | ||||
|     , canvas = stat.find('canvas').get(0) | ||||
|     , progress | ||||
|     , ctx | ||||
|  | ||||
|   if (canvas.getContext) { | ||||
|     ctx = canvas.getContext('2d'); | ||||
|     progress = new Progress; | ||||
|   } | ||||
|  | ||||
|   if (!root.length) return error('#mocha div missing, add it to your document'); | ||||
|  | ||||
|   if (progress) progress.size(40); | ||||
|  | ||||
|   runner.on('suite', function(suite){ | ||||
|     if (suite.root) return; | ||||
|  | ||||
|     // suite | ||||
|     var el = $('<div class="suite"><h1>' + suite.title + '</h1></div>'); | ||||
|  | ||||
|     // container | ||||
|     stack[0].append(el); | ||||
|     stack.unshift($('<div>')); | ||||
|     el.append(stack[0]); | ||||
|   }); | ||||
|  | ||||
|   runner.on('suite end', function(suite){ | ||||
|     if (suite.root) return; | ||||
|     stack.shift(); | ||||
|   }); | ||||
|  | ||||
|   runner.on('fail', function(test, err){ | ||||
|     if (err.uncaught) runner.emit('test end', test); | ||||
|   }); | ||||
|  | ||||
|   runner.on('test end', function(test){ | ||||
|     // TODO: add to stats | ||||
|     var percent = stats.tests / total * 100 | 0; | ||||
|  | ||||
|     if (progress) { | ||||
|       progress.update(percent).draw(ctx); | ||||
|     } | ||||
|  | ||||
|     // update stats | ||||
|     var ms = new Date - stats.start; | ||||
|     stat.find('.passes em').text(stats.passes); | ||||
|     stat.find('.failures em').text(stats.failures); | ||||
|     stat.find('.duration em').text((ms / 1000).toFixed(2)); | ||||
|  | ||||
|     // test | ||||
|     if (test.passed) { | ||||
|       var el = $('<div class="test pass"><h2>' + escape(test.title) + '</h2></div>') | ||||
|     } else if (test.pending) { | ||||
|       var el = $('<div class="test pass pending"><h2>' + escape(test.title) + '</h2></div>') | ||||
|     } else { | ||||
|       var el = $('<div class="test fail"><h2>' + escape(test.title) + '</h2></div>'); | ||||
|       var str = test.err.stack || test.err; | ||||
|  | ||||
|       // <=IE7 stringifies to [Object Error]. Since it can be overloaded, we | ||||
|       // check for the result of the stringifying. | ||||
|       if ('[object Error]' == str) str = test.err.message; | ||||
|  | ||||
|       $('<pre class="error">' + escape(str) + '</pre>').appendTo(el); | ||||
|     } | ||||
|  | ||||
|     // toggle code | ||||
|     el.find('h2').toggle(function(){ | ||||
|       pre && pre.slideDown('fast'); | ||||
|     }, function(){ | ||||
|       pre && pre.slideUp('fast'); | ||||
|     }); | ||||
|  | ||||
|     // code | ||||
|     // TODO: defer | ||||
|     if (!test.pending) { | ||||
|       var code = escape(clean(test.fn.toString())); | ||||
|       var pre = $('<pre><code>' + code + '</code></pre>'); | ||||
|       pre.appendTo(el).hide(); | ||||
|     } | ||||
|     stack[0].append(el); | ||||
|   }); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Display error `msg`. | ||||
|  */ | ||||
|  | ||||
| function error(msg) { | ||||
|   $('<div id="error">' + msg + '</div>').appendTo('body'); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Strip the function definition from `str`, | ||||
|  * and re-indent for pre whitespace. | ||||
|  */ | ||||
|  | ||||
| function clean(str) { | ||||
|   str = str | ||||
|     .replace(/^function *\(.*\) *{/, '') | ||||
|     .replace(/\s+\}$/, ''); | ||||
|  | ||||
|   var spaces = str.match(/^\n?( *)/)[1].length | ||||
|     , re = new RegExp('^ {' + spaces + '}', 'gm'); | ||||
|  | ||||
|   str = str | ||||
|     .replace(re, '') | ||||
|     .replace(/^\s+/, ''); | ||||
|  | ||||
|   return str; | ||||
| } | ||||
							
								
								
									
										13
									
								
								node_modules/mocha/lib/reporters/index.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								node_modules/mocha/lib/reporters/index.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | ||||
|  | ||||
| exports.Base = require('./base'); | ||||
| exports.Dot = require('./dot'); | ||||
| exports.Doc = require('./doc'); | ||||
| exports.TAP = require('./tap'); | ||||
| exports.JSON = require('./json'); | ||||
| exports.HTML = require('./html'); | ||||
| exports.List = require('./list'); | ||||
| exports.Spec = require('./spec'); | ||||
| exports.Progress = require('./progress'); | ||||
| exports.Landing = require('./landing'); | ||||
| exports.JSONStream = require('./json-stream'); | ||||
| exports.XUnit = require('./xunit') | ||||
							
								
								
									
										61
									
								
								node_modules/mocha/lib/reporters/json-stream.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								node_modules/mocha/lib/reporters/json-stream.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,61 @@ | ||||
|  | ||||
| /** | ||||
|  * Module dependencies. | ||||
|  */ | ||||
|  | ||||
| var Base = require('./base') | ||||
|   , color = Base.color; | ||||
|  | ||||
| /** | ||||
|  * Expose `List`. | ||||
|  */ | ||||
|  | ||||
| exports = module.exports = List; | ||||
|  | ||||
| /** | ||||
|  * Initialize a new `List` test reporter. | ||||
|  * | ||||
|  * @param {Runner} runner | ||||
|  * @api public | ||||
|  */ | ||||
|  | ||||
| function List(runner) { | ||||
|   Base.call(this, runner); | ||||
|  | ||||
|   var self = this | ||||
|     , stats = this.stats | ||||
|     , total = runner.total; | ||||
|  | ||||
|   runner.on('start', function(){ | ||||
|     console.log(JSON.stringify(['start', { total: total }])); | ||||
|   }); | ||||
|  | ||||
|   runner.on('pass', function(test){ | ||||
|     console.log(JSON.stringify(['pass', clean(test)])); | ||||
|   }); | ||||
|  | ||||
|   runner.on('fail', function(test, err){ | ||||
|     console.log(JSON.stringify(['fail', clean(test)])); | ||||
|   }); | ||||
|  | ||||
|   runner.on('end', function(){ | ||||
|     process.stdout.write(JSON.stringify(['end', self.stats])); | ||||
|   }); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Return a plain-object representation of `test` | ||||
|  * free of cyclic properties etc. | ||||
|  * | ||||
|  * @param {Object} test | ||||
|  * @return {Object} | ||||
|  * @api private | ||||
|  */ | ||||
|  | ||||
| function clean(test) { | ||||
|   return { | ||||
|       title: test.title | ||||
|     , fullTitle: test.fullTitle() | ||||
|     , duration: test.duration | ||||
|   } | ||||
| } | ||||
							
								
								
									
										70
									
								
								node_modules/mocha/lib/reporters/json.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										70
									
								
								node_modules/mocha/lib/reporters/json.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,70 @@ | ||||
|  | ||||
| /** | ||||
|  * Module dependencies. | ||||
|  */ | ||||
|  | ||||
| var Base = require('./base') | ||||
|   , cursor = Base.cursor | ||||
|   , color = Base.color; | ||||
|  | ||||
| /** | ||||
|  * Expose `JSON`. | ||||
|  */ | ||||
|  | ||||
| exports = module.exports = JSONReporter; | ||||
|  | ||||
| /** | ||||
|  * Initialize a new `JSON` reporter. | ||||
|  * | ||||
|  * @param {Runner} runner | ||||
|  * @api public | ||||
|  */ | ||||
|  | ||||
| function JSONReporter(runner) { | ||||
|   var self = this; | ||||
|   Base.call(this, runner); | ||||
|  | ||||
|   var tests = [] | ||||
|     , failures = [] | ||||
|     , passes = []; | ||||
|  | ||||
|   runner.on('test end', function(test){ | ||||
|     tests.push(test); | ||||
|   }); | ||||
|  | ||||
|   runner.on('pass', function(test){ | ||||
|     passes.push(test); | ||||
|   }); | ||||
|  | ||||
|   runner.on('fail', function(test){ | ||||
|     failures.push(test); | ||||
|   }); | ||||
|  | ||||
|   runner.on('end', function(){ | ||||
|     var obj = { | ||||
|         stats: self.stats | ||||
|       , tests: tests.map(clean) | ||||
|       , failures: failures.map(clean) | ||||
|       , passes: passes.map(clean) | ||||
|     }; | ||||
|  | ||||
|     process.stdout.write(JSON.stringify(obj)); | ||||
|   }); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Return a plain-object representation of `test` | ||||
|  * free of cyclic properties etc. | ||||
|  * | ||||
|  * @param {Object} test | ||||
|  * @return {Object} | ||||
|  * @api private | ||||
|  */ | ||||
|  | ||||
| function clean(test) { | ||||
|   return { | ||||
|       title: test.title | ||||
|     , fullTitle: test.fullTitle() | ||||
|     , duration: test.duration | ||||
|   } | ||||
| } | ||||
							
								
								
									
										97
									
								
								node_modules/mocha/lib/reporters/landing.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										97
									
								
								node_modules/mocha/lib/reporters/landing.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,97 @@ | ||||
|  | ||||
| /** | ||||
|  * Module dependencies. | ||||
|  */ | ||||
|  | ||||
| var Base = require('./base') | ||||
|   , cursor = Base.cursor | ||||
|   , color = Base.color; | ||||
|  | ||||
| /** | ||||
|  * Expose `Landing`. | ||||
|  */ | ||||
|  | ||||
| exports = module.exports = Landing; | ||||
|  | ||||
| /** | ||||
|  * Airplane color. | ||||
|  */ | ||||
|  | ||||
| Base.colors.plane = 0; | ||||
|  | ||||
| /** | ||||
|  * Airplane crash color. | ||||
|  */ | ||||
|  | ||||
| Base.colors['plane crash'] = 31; | ||||
|  | ||||
| /** | ||||
|  * Runway color. | ||||
|  */ | ||||
|  | ||||
| Base.colors.runway = 90; | ||||
|  | ||||
| /** | ||||
|  * Initialize a new `Landing` reporter. | ||||
|  * | ||||
|  * @param {Runner} runner | ||||
|  * @api public | ||||
|  */ | ||||
|  | ||||
| function Landing(runner) { | ||||
|   Base.call(this, runner); | ||||
|  | ||||
|   var self = this | ||||
|     , stats = this.stats | ||||
|     , width = Base.window.width * .75 | 0 | ||||
|     , total = runner.total | ||||
|     , stream = process.stdout | ||||
|     , plane = color('plane', '✈') | ||||
|     , crashed = -1 | ||||
|     , n = 0; | ||||
|  | ||||
|   function runway() { | ||||
|     var buf = Array(width).join('-'); | ||||
|     return '  ' + color('runway', buf); | ||||
|   } | ||||
|  | ||||
|   runner.on('start', function(){ | ||||
|     stream.write('\n  '); | ||||
|     cursor.hide(); | ||||
|   }); | ||||
|  | ||||
|   runner.on('test end', function(test){ | ||||
|     // check if the plane crashed | ||||
|     var col = -1 == crashed | ||||
|       ? width * ++n / total | 0 | ||||
|       : crashed; | ||||
|  | ||||
|     // show the crash | ||||
|     if (test.failed) { | ||||
|       plane = color('plane crash', '✈'); | ||||
|       crashed = col; | ||||
|     } | ||||
|  | ||||
|     // render landing strip | ||||
|     stream.write('\033[4F\n\n'); | ||||
|     stream.write(runway()); | ||||
|     stream.write('\n  '); | ||||
|     stream.write(color('runway', Array(col).join('⋅'))); | ||||
|     stream.write(plane) | ||||
|     stream.write(color('runway', Array(width - col).join('⋅') + '\n')); | ||||
|     stream.write(runway()); | ||||
|     stream.write('\033[0m'); | ||||
|   }); | ||||
|  | ||||
|   runner.on('end', function(){ | ||||
|     cursor.show(); | ||||
|     console.log(); | ||||
|     self.epilogue(); | ||||
|   }); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Inherit from `Base.prototype`. | ||||
|  */ | ||||
|  | ||||
| Landing.prototype.__proto__ = Base.prototype; | ||||
							
								
								
									
										64
									
								
								node_modules/mocha/lib/reporters/list.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								node_modules/mocha/lib/reporters/list.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,64 @@ | ||||
|  | ||||
| /** | ||||
|  * Module dependencies. | ||||
|  */ | ||||
|  | ||||
| var Base = require('./base') | ||||
|   , cursor = Base.cursor | ||||
|   , color = Base.color; | ||||
|  | ||||
| /** | ||||
|  * Expose `List`. | ||||
|  */ | ||||
|  | ||||
| exports = module.exports = List; | ||||
|  | ||||
| /** | ||||
|  * Initialize a new `List` test reporter. | ||||
|  * | ||||
|  * @param {Runner} runner | ||||
|  * @api public | ||||
|  */ | ||||
|  | ||||
| function List(runner) { | ||||
|   Base.call(this, runner); | ||||
|  | ||||
|   var self = this | ||||
|     , stats = this.stats | ||||
|     , n = 0; | ||||
|  | ||||
|   runner.on('start', function(){ | ||||
|     console.log(); | ||||
|   }); | ||||
|  | ||||
|   runner.on('test', function(test){ | ||||
|     process.stdout.write(color('pass', '    ' + test.fullTitle() + ': ')); | ||||
|   }); | ||||
|  | ||||
|   runner.on('pending', function(test){ | ||||
|     var fmt = color('checkmark', '  -') | ||||
|       + color('pending', ' %s'); | ||||
|     console.log(fmt, test.fullTitle()); | ||||
|   }); | ||||
|  | ||||
|   runner.on('pass', function(test){ | ||||
|     var fmt = color('checkmark', '  ✓') | ||||
|       + color('pass', ' %s: ') | ||||
|       + color(test.speed, '%dms'); | ||||
|     cursor.CR(); | ||||
|     console.log(fmt, test.fullTitle(), test.duration); | ||||
|   }); | ||||
|  | ||||
|   runner.on('fail', function(test, err){ | ||||
|     cursor.CR(); | ||||
|     console.log(color('fail', '  %d) %s'), ++n, test.fullTitle()); | ||||
|   }); | ||||
|  | ||||
|   runner.on('end', self.epilogue.bind(self)); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Inherit from `Base.prototype`. | ||||
|  */ | ||||
|  | ||||
| List.prototype.__proto__ = Base.prototype; | ||||
							
								
								
									
										85
									
								
								node_modules/mocha/lib/reporters/progress.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										85
									
								
								node_modules/mocha/lib/reporters/progress.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,85 @@ | ||||
|  | ||||
| /** | ||||
|  * Module dependencies. | ||||
|  */ | ||||
|  | ||||
| var Base = require('./base') | ||||
|   , cursor = Base.cursor | ||||
|   , color = Base.color; | ||||
|  | ||||
| /** | ||||
|  * Expose `Progress`. | ||||
|  */ | ||||
|  | ||||
| exports = module.exports = Progress; | ||||
|  | ||||
| /** | ||||
|  * General progress bar color. | ||||
|  */ | ||||
|  | ||||
| Base.colors.progress = 90; | ||||
|  | ||||
| /** | ||||
|  * Initialize a new `Progress` bar test reporter. | ||||
|  * | ||||
|  * @param {Runner} runner | ||||
|  * @param {Object} options | ||||
|  * @api public | ||||
|  */ | ||||
|  | ||||
| function Progress(runner, options) { | ||||
|   Base.call(this, runner); | ||||
|  | ||||
|   var self = this | ||||
|     , options = options || {} | ||||
|     , stats = this.stats | ||||
|     , width = Base.window.width * .50 | 0 | ||||
|     , total = runner.total | ||||
|     , complete = 0 | ||||
|     , max = Math.max; | ||||
|  | ||||
|   // default chars | ||||
|   options.open = options.open || '['; | ||||
|   options.complete = options.complete || '▬'; | ||||
|   options.incomplete = options.incomplete || '⋅'; | ||||
|   options.close = options.close || ']'; | ||||
|   options.verbose = false; | ||||
|  | ||||
|   // tests started | ||||
|   runner.on('start', function(){ | ||||
|     console.log(); | ||||
|     cursor.hide(); | ||||
|   }); | ||||
|  | ||||
|   // tests complete | ||||
|   runner.on('test end', function(){ | ||||
|     var incomplete = total - complete | ||||
|       , percent = complete++ / total | ||||
|       , n = width * percent | 0 | ||||
|       , i = width - n; | ||||
|  | ||||
|     cursor.CR(); | ||||
|     process.stdout.write('\033[J'); | ||||
|     process.stdout.write(color('progress', '  ' + options.open)); | ||||
|     process.stdout.write(Array(n).join(options.complete)); | ||||
|     process.stdout.write(Array(i).join(options.incomplete)); | ||||
|     process.stdout.write(color('progress', options.close)); | ||||
|     if (options.verbose) { | ||||
|       process.stdout.write(color('progress', ' ' + complete + ' of ' + total)); | ||||
|     } | ||||
|   }); | ||||
|  | ||||
|   // tests are complete, output some stats | ||||
|   // and the failures if any | ||||
|   runner.on('end', function(){ | ||||
|     cursor.show(); | ||||
|     console.log(); | ||||
|     self.epilogue(); | ||||
|   }); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Inherit from `Base.prototype`. | ||||
|  */ | ||||
|  | ||||
| Progress.prototype.__proto__ = Base.prototype; | ||||
							
								
								
									
										87
									
								
								node_modules/mocha/lib/reporters/spec.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										87
									
								
								node_modules/mocha/lib/reporters/spec.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,87 @@ | ||||
|  | ||||
| /** | ||||
|  * Module dependencies. | ||||
|  */ | ||||
|  | ||||
| var Base = require('./base') | ||||
|   , cursor = Base.cursor | ||||
|   , color = Base.color; | ||||
|  | ||||
| /** | ||||
|  * Expose `Spec`. | ||||
|  */ | ||||
|  | ||||
| exports = module.exports = Spec; | ||||
|  | ||||
| /** | ||||
|  * Initialize a new `Spec` test reporter. | ||||
|  * | ||||
|  * @param {Runner} runner | ||||
|  * @api public | ||||
|  */ | ||||
|  | ||||
| function Spec(runner) { | ||||
|   Base.call(this, runner); | ||||
|  | ||||
|   var self = this | ||||
|     , stats = this.stats | ||||
|     , indents = 0 | ||||
|     , n = 0; | ||||
|  | ||||
|   function indent() { | ||||
|     return Array(indents).join('  ') | ||||
|   } | ||||
|  | ||||
|   runner.on('start', function(){ | ||||
|     console.log(); | ||||
|   }); | ||||
|  | ||||
|   runner.on('suite', function(suite){ | ||||
|     ++indents; | ||||
|     console.log(color('suite', '%s%s'), indent(), suite.title); | ||||
|   }); | ||||
|  | ||||
|   runner.on('suite end', function(suite){ | ||||
|     --indents; | ||||
|     if (1 == indents) console.log(); | ||||
|   }); | ||||
|  | ||||
|   runner.on('test', function(test){ | ||||
|     process.stdout.write(indent() + color('pass', '  ◦ ' + test.title + ': ')); | ||||
|   }); | ||||
|  | ||||
|   runner.on('pending', function(test){ | ||||
|     var fmt = indent() + color('pending', '  - %s'); | ||||
|     console.log(fmt, test.title); | ||||
|   }); | ||||
|  | ||||
|   runner.on('pass', function(test){ | ||||
|     if ('fast' == test.speed) { | ||||
|       var fmt = indent() | ||||
|         + color('checkmark', '  ✓') | ||||
|         + color('pass', ' %s '); | ||||
|       cursor.CR(); | ||||
|       console.log(fmt, test.title); | ||||
|     } else { | ||||
|       var fmt = indent() | ||||
|         + color('checkmark', '  ✓') | ||||
|         + color('pass', ' %s ') | ||||
|         + color(test.speed, '(%dms)'); | ||||
|       cursor.CR(); | ||||
|       console.log(fmt, test.title, test.duration); | ||||
|     } | ||||
|   }); | ||||
|  | ||||
|   runner.on('fail', function(test, err){ | ||||
|     cursor.CR(); | ||||
|     console.log(indent() + color('fail', '  %d) %s'), ++n, test.title); | ||||
|   }); | ||||
|  | ||||
|   runner.on('end', self.epilogue.bind(self)); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Inherit from `Base.prototype`. | ||||
|  */ | ||||
|  | ||||
| Spec.prototype.__proto__ = Base.prototype; | ||||
							
								
								
									
										63
									
								
								node_modules/mocha/lib/reporters/tap.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								node_modules/mocha/lib/reporters/tap.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,63 @@ | ||||
|  | ||||
| /** | ||||
|  * Module dependencies. | ||||
|  */ | ||||
|  | ||||
| var Base = require('./base') | ||||
|   , cursor = Base.cursor | ||||
|   , color = Base.color; | ||||
|  | ||||
| /** | ||||
|  * Expose `TAP`. | ||||
|  */ | ||||
|  | ||||
| exports = module.exports = TAP; | ||||
|  | ||||
| /** | ||||
|  * Initialize a new `TAP` reporter. | ||||
|  * | ||||
|  * @param {Runner} runner | ||||
|  * @api public | ||||
|  */ | ||||
|  | ||||
| function TAP(runner) { | ||||
|   Base.call(this, runner); | ||||
|  | ||||
|   var self = this | ||||
|     , stats = this.stats | ||||
|     , total = runner.total | ||||
|     , n = 1; | ||||
|  | ||||
|   runner.on('start', function(){ | ||||
|     console.log('%d..%d', 1, total); | ||||
|   }); | ||||
|  | ||||
|   runner.on('test end', function(){ | ||||
|     ++n; | ||||
|   }); | ||||
|  | ||||
|   runner.on('pending', function(test){ | ||||
|     console.log('ok %d %s # SKIP -', n, title(test)); | ||||
|   }); | ||||
|  | ||||
|   runner.on('pass', function(test){ | ||||
|     console.log('ok %d %s', n, title(test)); | ||||
|   }); | ||||
|  | ||||
|   runner.on('fail', function(test, err){ | ||||
|     console.log('not ok %d %s', n, title(test)); | ||||
|     console.log(err.stack.replace(/^/gm, '  ')); | ||||
|   }); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Return a TAP-safe title of `test` | ||||
|  * | ||||
|  * @param {Object} test | ||||
|  * @return {String} | ||||
|  * @api private | ||||
|  */ | ||||
|  | ||||
| function title(test) { | ||||
|   return test.fullTitle().replace(/#/g, ''); | ||||
| } | ||||
							
								
								
									
										56
									
								
								node_modules/mocha/lib/reporters/teamcity.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								node_modules/mocha/lib/reporters/teamcity.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,56 @@ | ||||
|  | ||||
| /** | ||||
|  * Module dependencies. | ||||
|  */ | ||||
|  | ||||
| var Base = require('./base'); | ||||
|  | ||||
| /** | ||||
|  * Expose `Teamcity`. | ||||
|  */ | ||||
|  | ||||
| exports = module.exports = Teamcity; | ||||
|  | ||||
| /** | ||||
|  * Initialize a new `Teamcity` reporter. | ||||
|  * | ||||
|  * @param {Runner} runner | ||||
|  * @api public | ||||
|  */ | ||||
|  | ||||
| function Teamcity(runner) { | ||||
|   Base.call(this, runner); | ||||
|   var stats = this.stats; | ||||
|  | ||||
|   runner.on('start', function() { | ||||
|     console.log("##teamcity[testSuiteStarted name='mocha.suite']"); | ||||
|   }); | ||||
|  | ||||
|   runner.on('test', function(test) { | ||||
|     console.log("##teamcity[testStarted name='%s']", escape(test.fullTitle())); | ||||
|   }); | ||||
|  | ||||
|   runner.on('fail', function(test, err) { | ||||
|     console.log("##teamcity[testFailed name='%s' message='%s']", escape(test.fullTitle()), escape(err.message)); | ||||
|   }); | ||||
|  | ||||
|   runner.on('pending', function(test) { | ||||
|     console.log("##teamcity[testIgnored name='%s' message='pending']", escape(test.fullTitle())); | ||||
|   }); | ||||
|  | ||||
|   runner.on('test end', function(test) { | ||||
|     console.log("##teamcity[testFinished name='%s' duration='%s']", escape(test.fullTitle()), test.duration); | ||||
|   }); | ||||
|  | ||||
|   runner.on('end', function() { | ||||
|     console.log("##teamcity[testSuiteFinished name='mocha.suite' duration='%s']", stats.duration); | ||||
|   }); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Escape the given `str`. | ||||
|  */ | ||||
|  | ||||
| function escape(str) { | ||||
|   return str.replace(/'/g, "|'"); | ||||
| } | ||||
							
								
								
									
										101
									
								
								node_modules/mocha/lib/reporters/xunit.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										101
									
								
								node_modules/mocha/lib/reporters/xunit.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,101 @@ | ||||
|  | ||||
| /** | ||||
|  * Module dependencies. | ||||
|  */ | ||||
|  | ||||
| var Base = require('./base') | ||||
|   , utils = require('../utils') | ||||
|   , escape = utils.escape; | ||||
|  | ||||
| /** | ||||
|  * Expose `XUnit`. | ||||
|  */ | ||||
|  | ||||
| exports = module.exports = XUnit; | ||||
|  | ||||
| /** | ||||
|  * Initialize a new `XUnit` reporter. | ||||
|  * | ||||
|  * @param {Runner} runner | ||||
|  * @api public | ||||
|  */ | ||||
|  | ||||
| function XUnit(runner) { | ||||
|   Base.call(this, runner); | ||||
|   var stats = this.stats | ||||
|     , tests = [] | ||||
|     , self = this; | ||||
|  | ||||
|   runner.on('test end', function(test){ | ||||
|     tests.push(test); | ||||
|   }); | ||||
|  | ||||
|   runner.on('end', function(){ | ||||
|     console.log(tag('testsuite', { | ||||
|         name: 'Mocha Tests' | ||||
|       , tests: stats.tests | ||||
|       , failures: stats.failures | ||||
|       , errors: stats.failures | ||||
|       , skip: stats.tests - stats.failures - stats.passes | ||||
|       , timestamp: (new Date).toUTCString() | ||||
|       , time: stats.duration / 1000 | ||||
|     }, false)); | ||||
|  | ||||
|     tests.forEach(test); | ||||
|     console.log('</testsuite>');     | ||||
|   }); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Inherit from `Base.prototype`. | ||||
|  */ | ||||
|  | ||||
| XUnit.prototype.__proto__ = Base.prototype; | ||||
|  | ||||
| /** | ||||
|  * Output tag for the given `test.` | ||||
|  */ | ||||
|  | ||||
| function test(test) { | ||||
|   var attrs = { | ||||
|       classname: test.parent.fullTitle() | ||||
|     , name: test.title | ||||
|     , time: test.duration / 1000 | ||||
|   }; | ||||
|  | ||||
|   if (test.failed) { | ||||
|     var err = test.err; | ||||
|     attrs.message = escape(err.message); | ||||
|     console.log(tag('testcase', attrs, false, tag('failure', attrs, false, cdata(err.stack)))); | ||||
|   } else if (test.pending) { | ||||
|     console.log(tag('testcase', attrs, false, tag('skipped', {}, true))); | ||||
|   } else { | ||||
|     console.log(tag('testcase', attrs, true) ); | ||||
|   } | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * HTML tag helper. | ||||
|  */ | ||||
|  | ||||
| function tag(name, attrs, close, content) { | ||||
|   var end = close ? '/>' : '>' | ||||
|     , pairs = [] | ||||
|     , tag; | ||||
|  | ||||
|   for (var key in attrs) { | ||||
|     pairs.push(key + '="' + escape(attrs[key]) + '"'); | ||||
|   } | ||||
|  | ||||
|   tag = '<' + name + (pairs.length ? ' ' + pairs.join(' ') : '') + end; | ||||
|   if (content) tag += content + '</' + name + end; | ||||
|   return tag; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Return cdata escaped CDATA `str`. | ||||
|  */ | ||||
|  | ||||
| function cdata(str) { | ||||
|   return '<![CDATA[' + escape(str) + ']]>'; | ||||
| } | ||||
							
								
								
									
										163
									
								
								node_modules/mocha/lib/runnable.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										163
									
								
								node_modules/mocha/lib/runnable.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,163 @@ | ||||
|  | ||||
| /** | ||||
|  * Module dependencies. | ||||
|  */ | ||||
|  | ||||
| var EventEmitter = require('events').EventEmitter | ||||
|   , debug = require('debug')('runnable'); | ||||
|  | ||||
| /** | ||||
|  * Expose `Runnable`. | ||||
|  */ | ||||
|  | ||||
| module.exports = Runnable; | ||||
|  | ||||
| /** | ||||
|  * Initialize a new `Runnable` with the given `title` and callback `fn`. | ||||
|  * | ||||
|  * @param {String} title | ||||
|  * @param {Function} fn | ||||
|  * @api private | ||||
|  */ | ||||
|  | ||||
| function Runnable(title, fn) { | ||||
|   this.title = title; | ||||
|   this.fn = fn; | ||||
|   this.async = fn && fn.length; | ||||
|   this.sync = ! this.async; | ||||
|   this._timeout = 2000; | ||||
|   this.timedOut = false; | ||||
|   this.context = this; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Inherit from `EventEmitter.prototype`. | ||||
|  */ | ||||
|  | ||||
| Runnable.prototype.__proto__ = EventEmitter.prototype; | ||||
|  | ||||
| /** | ||||
|  * Set & get timeout `ms`. | ||||
|  * | ||||
|  * @param {Number} ms | ||||
|  * @return {Runnable|Number} ms or self | ||||
|  * @api private | ||||
|  */ | ||||
|  | ||||
| Runnable.prototype.timeout = function(ms){ | ||||
|   if (0 == arguments.length) return this._timeout; | ||||
|   debug('timeout %d', ms); | ||||
|   this._timeout = ms; | ||||
|   if (this.timer) this.resetTimeout(); | ||||
|   return this; | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * Return the full title generated by recursively | ||||
|  * concatenating the parent's full title. | ||||
|  * | ||||
|  * @return {String} | ||||
|  * @api public | ||||
|  */ | ||||
|  | ||||
| Runnable.prototype.fullTitle = function(){ | ||||
|   return this.parent.fullTitle() + ' ' + this.title; | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * Clear the timeout. | ||||
|  * | ||||
|  * @api private | ||||
|  */ | ||||
|  | ||||
| Runnable.prototype.clearTimeout = function(){ | ||||
|   clearTimeout(this.timer); | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * Reset the timeout. | ||||
|  * | ||||
|  * @api private | ||||
|  */ | ||||
|  | ||||
| Runnable.prototype.resetTimeout = function(){ | ||||
|   var self = this | ||||
|     , ms = this.timeout(); | ||||
|  | ||||
|   this.clearTimeout(); | ||||
|   if (ms) { | ||||
|     this.timer = setTimeout(function(){ | ||||
|       self.callback(new Error('timeout of ' + ms + 'ms exceeded')); | ||||
|       self.timedOut = true; | ||||
|     }, ms); | ||||
|   } | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * Run the test and invoke `fn(err)`. | ||||
|  * | ||||
|  * @param {Function} fn | ||||
|  * @api private | ||||
|  */ | ||||
|  | ||||
| Runnable.prototype.run = function(fn){ | ||||
|   var self = this | ||||
|     , ms = this.timeout() | ||||
|     , start = new Date | ||||
|     , ctx = this.context | ||||
|     , finished | ||||
|     , emitted; | ||||
|  | ||||
|   // timeout | ||||
|   if (this.async) { | ||||
|     if (ms) { | ||||
|       this.timer = setTimeout(function(){ | ||||
|         done(new Error('timeout of ' + ms + 'ms exceeded')); | ||||
|         self.timedOut = true; | ||||
|       }, ms); | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   // called multiple times | ||||
|   function multiple() { | ||||
|     if (emitted) return; | ||||
|     emitted = true; | ||||
|     self.emit('error', new Error('done() called multiple times')); | ||||
|   } | ||||
|  | ||||
|   // finished | ||||
|   function done(err) { | ||||
|     if (self.timedOut) return; | ||||
|     if (finished) return multiple(); | ||||
|     self.clearTimeout(); | ||||
|     self.duration = new Date - start; | ||||
|     finished = true; | ||||
|     fn(err); | ||||
|   } | ||||
|  | ||||
|   // for .resetTimeout() | ||||
|   this.callback = done; | ||||
|  | ||||
|   // async | ||||
|   if (this.async) { | ||||
|     try { | ||||
|       this.fn.call(ctx, function(err){ | ||||
|         if (err instanceof Error) return done(err); | ||||
|         if (null != err) return done(new Error('done() invoked with non-Error: ' + err)); | ||||
|         done(); | ||||
|       }); | ||||
|     } catch (err) { | ||||
|       done(err); | ||||
|     } | ||||
|     return; | ||||
|   } | ||||
|    | ||||
|   // sync | ||||
|   try { | ||||
|     if (!this.pending) this.fn.call(ctx); | ||||
|     this.duration = new Date - start; | ||||
|     fn(); | ||||
|   } catch (err) { | ||||
|     fn(err); | ||||
|   } | ||||
| }; | ||||
							
								
								
									
										432
									
								
								node_modules/mocha/lib/runner.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										432
									
								
								node_modules/mocha/lib/runner.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,432 @@ | ||||
|  | ||||
| /** | ||||
|  * Module dependencies. | ||||
|  */ | ||||
|  | ||||
| var EventEmitter = require('events').EventEmitter | ||||
|   , debug = require('debug')('runner') | ||||
|   , Test = require('./test') | ||||
|   , utils = require('./utils') | ||||
|   , noop = function(){}; | ||||
|  | ||||
| /** | ||||
|  * Expose `Runner`. | ||||
|  */ | ||||
|  | ||||
| module.exports = Runner; | ||||
|  | ||||
| /** | ||||
|  * Initialize a `Runner` for the given `suite`. | ||||
|  * | ||||
|  * Events: | ||||
|  * | ||||
|  *   - `start`  execution started | ||||
|  *   - `end`  execution complete | ||||
|  *   - `suite`  (suite) test suite execution started | ||||
|  *   - `suite end`  (suite) all tests (and sub-suites) have finished | ||||
|  *   - `test`  (test) test execution started | ||||
|  *   - `test end`  (test) test completed | ||||
|  *   - `hook`  (hook) hook execution started | ||||
|  *   - `hook end`  (hook) hook complete | ||||
|  *   - `pass`  (test) test passed | ||||
|  *   - `fail`  (test, err) test failed | ||||
|  * | ||||
|  * @api public | ||||
|  */ | ||||
|  | ||||
| function Runner(suite) { | ||||
|   var self = this; | ||||
|   this._globals = []; | ||||
|   this.suite = suite; | ||||
|   this.total = suite.total(); | ||||
|   this.failures = 0; | ||||
|   this.on('test end', function(test){ self.checkGlobals(test); }); | ||||
|   this.on('hook end', function(hook){ self.checkGlobals(hook); }); | ||||
|   this.grep(/.*/); | ||||
|   this.globals(utils.keys(global).concat(['errno'])); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Inherit from `EventEmitter.prototype`. | ||||
|  */ | ||||
|  | ||||
| Runner.prototype.__proto__ = EventEmitter.prototype; | ||||
|  | ||||
| /** | ||||
|  * Run tests with full titles matching `re`. | ||||
|  * | ||||
|  * @param {RegExp} re | ||||
|  * @return {Runner} for chaining | ||||
|  * @api public | ||||
|  */ | ||||
|  | ||||
| Runner.prototype.grep = function(re){ | ||||
|   debug('grep %s', re); | ||||
|   this._grep = re; | ||||
|   return this; | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * Allow the given `arr` of globals. | ||||
|  * | ||||
|  * @param {Array} arr | ||||
|  * @return {Runner} for chaining | ||||
|  * @api public | ||||
|  */ | ||||
|  | ||||
| Runner.prototype.globals = function(arr){ | ||||
|   if (0 == arguments.length) return this._globals; | ||||
|   debug('globals %j', arr); | ||||
|   utils.forEach(arr, function(arr){ | ||||
|     this._globals.push(arr); | ||||
|   }, this); | ||||
|   return this; | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * Check for global variable leaks. | ||||
|  * | ||||
|  * @api private | ||||
|  */ | ||||
|  | ||||
| Runner.prototype.checkGlobals = function(test){ | ||||
|   if (this.ignoreLeaks) return; | ||||
|  | ||||
|   var leaks = utils.filter(utils.keys(global), function(key){ | ||||
|     return !~utils.indexOf(this._globals, key) && (!global.navigator || 'onerror' !== key); | ||||
|   }, this); | ||||
|  | ||||
|   this._globals = this._globals.concat(leaks); | ||||
|  | ||||
|   if (leaks.length > 1) { | ||||
|     this.fail(test, new Error('global leaks detected: ' + leaks.join(', ') + '')); | ||||
|   } else if (leaks.length) { | ||||
|     this.fail(test, new Error('global leak detected: ' + leaks[0])); | ||||
|   } | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * Fail the given `test`. | ||||
|  * | ||||
|  * @param {Test} test | ||||
|  * @param {Error} err | ||||
|  * @api private | ||||
|  */ | ||||
|  | ||||
| Runner.prototype.fail = function(test, err){ | ||||
|   ++this.failures; | ||||
|   test.failed = true; | ||||
|   this.emit('fail', test, err); | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * Fail the given `hook` with `err`. | ||||
|  * | ||||
|  * Hook failures (currently) hard-end due | ||||
|  * to that fact that a failing hook will | ||||
|  * surely cause subsequent tests to fail, | ||||
|  * causing jumbled reporting. | ||||
|  * | ||||
|  * @param {Hook} hook | ||||
|  * @param {Error} err | ||||
|  * @api private | ||||
|  */ | ||||
|  | ||||
| Runner.prototype.failHook = function(hook, err){ | ||||
|   this.fail(hook, err); | ||||
|   this.emit('end'); | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * Run hook `name` callbacks and then invoke `fn()`. | ||||
|  * | ||||
|  * @param {String} name | ||||
|  * @param {Function} function | ||||
|  * @api private | ||||
|  */ | ||||
|  | ||||
| Runner.prototype.hook = function(name, fn){ | ||||
|   var suite = this.suite | ||||
|     , hooks = suite['_' + name] | ||||
|     , ms = suite._timeout | ||||
|     , self = this | ||||
|     , timer; | ||||
|  | ||||
|   function next(i) { | ||||
|     var hook = hooks[i]; | ||||
|     if (!hook) return fn(); | ||||
|     self.currentRunnable = hook; | ||||
|     hook.context = self.test; | ||||
|  | ||||
|     self.emit('hook', hook); | ||||
|  | ||||
|     hook.on('error', function(err){ | ||||
|       self.failHook(hook, err); | ||||
|     }); | ||||
|  | ||||
|     hook.run(function(err){ | ||||
|       hook.removeAllListeners('error'); | ||||
|       if (err) return self.failHook(hook, err); | ||||
|       self.emit('hook end', hook); | ||||
|       next(++i); | ||||
|     }); | ||||
|   } | ||||
|  | ||||
|   process.nextTick(function(){ | ||||
|     next(0); | ||||
|   }); | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * Run hook `name` for the given array of `suites` | ||||
|  * in order, and callback `fn(err)`. | ||||
|  * | ||||
|  * @param {String} name | ||||
|  * @param {Array} suites | ||||
|  * @param {Function} fn | ||||
|  * @api private | ||||
|  */ | ||||
|  | ||||
| Runner.prototype.hooks = function(name, suites, fn){ | ||||
|   var self = this | ||||
|     , orig = this.suite; | ||||
|  | ||||
|   function next(suite) { | ||||
|     self.suite = suite; | ||||
|  | ||||
|     if (!suite) { | ||||
|       self.suite = orig; | ||||
|       return fn(); | ||||
|     } | ||||
|  | ||||
|     self.hook(name, function(err){ | ||||
|       if (err) { | ||||
|         self.suite = orig; | ||||
|         return fn(err); | ||||
|       } | ||||
|  | ||||
|       next(suites.pop()); | ||||
|     }); | ||||
|   } | ||||
|  | ||||
|   next(suites.pop()); | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * Run hooks from the top level down. | ||||
|  * | ||||
|  * @param {String} name | ||||
|  * @param {Function} fn | ||||
|  * @api private | ||||
|  */ | ||||
|  | ||||
| Runner.prototype.hookUp = function(name, fn){ | ||||
|   var suites = [this.suite].concat(this.parents()).reverse(); | ||||
|   this.hooks(name, suites, fn); | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * Run hooks from the bottom up. | ||||
|  * | ||||
|  * @param {String} name | ||||
|  * @param {Function} fn | ||||
|  * @api private | ||||
|  */ | ||||
|  | ||||
| Runner.prototype.hookDown = function(name, fn){ | ||||
|   var suites = [this.suite].concat(this.parents()); | ||||
|   this.hooks(name, suites, fn); | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * Return an array of parent Suites from | ||||
|  * closest to furthest. | ||||
|  * | ||||
|  * @return {Array} | ||||
|  * @api private | ||||
|  */ | ||||
|  | ||||
| Runner.prototype.parents = function(){ | ||||
|   var suite = this.suite | ||||
|     , suites = []; | ||||
|   while (suite = suite.parent) suites.push(suite); | ||||
|   return suites; | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * Run the current test and callback `fn(err)`. | ||||
|  * | ||||
|  * @param {Function} fn | ||||
|  * @api private | ||||
|  */ | ||||
|  | ||||
| Runner.prototype.runTest = function(fn){ | ||||
|   var test = this.test | ||||
|     , self = this; | ||||
|  | ||||
|   try { | ||||
|     test.on('error', function(err){ | ||||
|       self.fail(test, err); | ||||
|     }); | ||||
|     test.run(fn); | ||||
|   } catch (err) { | ||||
|     fn(err); | ||||
|   } | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * Run tests in the given `suite` and invoke | ||||
|  * the callback `fn()` when complete. | ||||
|  * | ||||
|  * @param {Suite} suite | ||||
|  * @param {Function} fn | ||||
|  * @api private | ||||
|  */ | ||||
|  | ||||
| Runner.prototype.runTests = function(suite, fn){ | ||||
|   var self = this | ||||
|     , tests = suite.tests | ||||
|     , test; | ||||
|  | ||||
|   function next(err) { | ||||
|     // if we bail after first err | ||||
|     if (self.failures && suite._bail) return fn(); | ||||
|  | ||||
|     // next test | ||||
|     test = tests.shift(); | ||||
|  | ||||
|     // all done | ||||
|     if (!test) return fn(); | ||||
|  | ||||
|     // grep | ||||
|     if (!self._grep.test(test.fullTitle())) return next(); | ||||
|  | ||||
|     // pending | ||||
|     if (test.pending) { | ||||
|       self.emit('pending', test); | ||||
|       self.emit('test end', test); | ||||
|       return next(); | ||||
|     } | ||||
|  | ||||
|     // execute test and hook(s) | ||||
|     self.emit('test', self.test = test); | ||||
|     self.hookDown('beforeEach', function(){ | ||||
|       self.currentRunnable = self.test; | ||||
|       self.runTest(function(err){ | ||||
|         test = self.test; | ||||
|  | ||||
|         if (err) { | ||||
|           self.fail(test, err); | ||||
|           self.emit('test end', test); | ||||
|           return self.hookUp('afterEach', next); | ||||
|         } | ||||
|  | ||||
|         test.passed = true; | ||||
|         self.emit('pass', test); | ||||
|         self.emit('test end', test); | ||||
|         self.hookUp('afterEach', next); | ||||
|       }); | ||||
|     }); | ||||
|   } | ||||
|  | ||||
|   this.next = next; | ||||
|   next(); | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * Run the given `suite` and invoke the | ||||
|  * callback `fn()` when complete. | ||||
|  * | ||||
|  * @param {Suite} suite | ||||
|  * @param {Function} fn | ||||
|  * @api private | ||||
|  */ | ||||
|  | ||||
| Runner.prototype.runSuite = function(suite, fn){ | ||||
|   var self = this | ||||
|     , i = 0; | ||||
|  | ||||
|   debug('run suite %s', suite.fullTitle()); | ||||
|   this.emit('suite', this.suite = suite); | ||||
|  | ||||
|   function next() { | ||||
|     var curr = suite.suites[i++]; | ||||
|     if (!curr) return done(); | ||||
|     self.runSuite(curr, next); | ||||
|   } | ||||
|  | ||||
|   function done() { | ||||
|     self.suite = suite; | ||||
|     self.hook('afterAll', function(){ | ||||
|       self.emit('suite end', suite); | ||||
|       fn(); | ||||
|     }); | ||||
|   } | ||||
|  | ||||
|   this.hook('beforeAll', function(){ | ||||
|     self.runTests(suite, next); | ||||
|   }); | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * Handle uncaught exceptions. | ||||
|  * | ||||
|  * @param {Error} err | ||||
|  * @api private | ||||
|  */ | ||||
|  | ||||
| Runner.prototype.uncaught = function(err){ | ||||
|   debug('uncaught exception'); | ||||
|   var runnable = this.currentRunnable; | ||||
|   if (runnable.failed) return; | ||||
|   runnable.clearTimeout(); | ||||
|   err.uncaught = true; | ||||
|   this.fail(runnable, err); | ||||
|  | ||||
|   // recover from test | ||||
|   if ('test' == runnable.type) { | ||||
|     this.emit('test end', runnable); | ||||
|     this.hookUp('afterEach', this.next); | ||||
|     return; | ||||
|   } | ||||
|  | ||||
|   // bail on hooks | ||||
|   this.emit('end'); | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * Run the root suite and invoke `fn(failures)` | ||||
|  * on completion. | ||||
|  * | ||||
|  * @param {Function} fn | ||||
|  * @return {Runner} for chaining | ||||
|  * @api public | ||||
|  */ | ||||
|  | ||||
| Runner.prototype.run = function(fn){ | ||||
|   var self = this | ||||
|     , fn = fn || function(){}; | ||||
|  | ||||
|   debug('start'); | ||||
|  | ||||
|   // callback | ||||
|   this.on('end', function(){ | ||||
|     debug('end'); | ||||
|     process.removeListener('uncaughtException', this.uncaught); | ||||
|     fn(self.failures); | ||||
|   }); | ||||
|  | ||||
|   // run suites | ||||
|   this.emit('start'); | ||||
|   this.runSuite(this.suite, function(){ | ||||
|     debug('finished running'); | ||||
|     self.emit('end'); | ||||
|   }); | ||||
|  | ||||
|   // uncaught exception | ||||
|   process.on('uncaughtException', function(err){ | ||||
|     self.uncaught(err); | ||||
|   }); | ||||
|  | ||||
|   return this; | ||||
| }; | ||||
							
								
								
									
										238
									
								
								node_modules/mocha/lib/suite.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										238
									
								
								node_modules/mocha/lib/suite.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,238 @@ | ||||
|  | ||||
| /** | ||||
|  * Module dependencies. | ||||
|  */ | ||||
|  | ||||
| var EventEmitter = require('events').EventEmitter | ||||
|   , debug = require('debug')('suite') | ||||
|   , utils = require('./utils') | ||||
|   , Hook = require('./hook'); | ||||
|  | ||||
| /** | ||||
|  * Expose `Suite`. | ||||
|  */ | ||||
|  | ||||
| exports = module.exports = Suite; | ||||
|  | ||||
| /** | ||||
|  * Create a new `Suite` with the given `title` | ||||
|  * and parent `Suite`. When a suite with the | ||||
|  * same title is already present, that suite | ||||
|  * is returned to provide nicer reporter | ||||
|  * and more flexible meta-testing. | ||||
|  * | ||||
|  * @param {Suite} parent | ||||
|  * @param {String} title | ||||
|  * @return {Suite} | ||||
|  * @api public | ||||
|  */ | ||||
|  | ||||
| exports.create = function(parent, title){ | ||||
|   var suite = new Suite(title); | ||||
|   suite.parent = parent; | ||||
|   title = suite.fullTitle(); | ||||
|   parent.addSuite(suite); | ||||
|   return suite; | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * Initialize a new `Suite` with the given `title`. | ||||
|  * | ||||
|  * @param {String} title | ||||
|  * @api private | ||||
|  */ | ||||
|  | ||||
| function Suite(title) { | ||||
|   this.title = title; | ||||
|   this.suites = []; | ||||
|   this.tests = []; | ||||
|   this._beforeEach = []; | ||||
|   this._beforeAll = []; | ||||
|   this._afterEach = []; | ||||
|   this._afterAll = []; | ||||
|   this.root = !title; | ||||
|   this._timeout = 2000; | ||||
|   this._bail = false; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Inherit from `EventEmitter.prototype`. | ||||
|  */ | ||||
|  | ||||
| Suite.prototype.__proto__ = EventEmitter.prototype; | ||||
|  | ||||
| /** | ||||
|  * Return a clone of this `Suite`. | ||||
|  * | ||||
|  * @return {Suite} | ||||
|  * @api private | ||||
|  */ | ||||
|  | ||||
| Suite.prototype.clone = function(){ | ||||
|   var suite = new Suite(this.title); | ||||
|   debug('clone'); | ||||
|   suite.timeout(this.timeout()); | ||||
|   suite.bail(this.bail()); | ||||
|   return suite; | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * Set timeout `ms` or short-hand such as "2s". | ||||
|  * | ||||
|  * @param {Number|String} ms | ||||
|  * @return {Suite|Number} for chaining | ||||
|  * @api private | ||||
|  */ | ||||
|  | ||||
| Suite.prototype.timeout = function(ms){ | ||||
|   if (0 == arguments.length) return this._timeout; | ||||
|   if (String(ms).match(/s$/)) ms = parseFloat(ms) * 1000; | ||||
|   debug('timeout %d', ms); | ||||
|   this._timeout = parseInt(ms, 10); | ||||
|   return this; | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * Sets whether to bail after first error. | ||||
|  * | ||||
|  * @parma {Boolean} bail | ||||
|  * @return {Suite|Number} for chaining | ||||
|  * @api private | ||||
|  */ | ||||
|  | ||||
| Suite.prototype.bail = function(bail){ | ||||
|   if (0 == arguments.length) return this._bail; | ||||
|   debug('bail %s', bail); | ||||
|   this._bail = bail; | ||||
|   return this; | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * Run `fn(test[, done])` before running tests. | ||||
|  * | ||||
|  * @param {Function} fn | ||||
|  * @return {Suite} for chaining | ||||
|  * @api private | ||||
|  */ | ||||
|  | ||||
| Suite.prototype.beforeAll = function(fn){ | ||||
|   var hook = new Hook('"before all" hook', fn); | ||||
|   hook.parent = this; | ||||
|   hook.timeout(this.timeout()); | ||||
|   this._beforeAll.push(hook); | ||||
|   this.emit('beforeAll', hook); | ||||
|   return this; | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * Run `fn(test[, done])` after running tests. | ||||
|  * | ||||
|  * @param {Function} fn | ||||
|  * @return {Suite} for chaining | ||||
|  * @api private | ||||
|  */ | ||||
|  | ||||
| Suite.prototype.afterAll = function(fn){ | ||||
|   var hook = new Hook('"after all" hook', fn); | ||||
|   hook.parent = this; | ||||
|   hook.timeout(this.timeout()); | ||||
|   this._afterAll.push(hook); | ||||
|   this.emit('afterAll', hook); | ||||
|   return this; | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * Run `fn(test[, done])` before each test case. | ||||
|  * | ||||
|  * @param {Function} fn | ||||
|  * @return {Suite} for chaining | ||||
|  * @api private | ||||
|  */ | ||||
|  | ||||
| Suite.prototype.beforeEach = function(fn){ | ||||
|   var hook = new Hook('"before each" hook', fn); | ||||
|   hook.parent = this; | ||||
|   hook.timeout(this.timeout()); | ||||
|   this._beforeEach.push(hook); | ||||
|   this.emit('beforeEach', hook); | ||||
|   return this; | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * Run `fn(test[, done])` after each test case. | ||||
|  * | ||||
|  * @param {Function} fn | ||||
|  * @return {Suite} for chaining | ||||
|  * @api private | ||||
|  */ | ||||
|  | ||||
| Suite.prototype.afterEach = function(fn){ | ||||
|   var hook = new Hook('"after each" hook', fn); | ||||
|   hook.parent = this; | ||||
|   hook.timeout(this.timeout()); | ||||
|   this._afterEach.push(hook); | ||||
|   this.emit('afterEach', hook); | ||||
|   return this; | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * Add a test `suite`. | ||||
|  * | ||||
|  * @param {Suite} suite | ||||
|  * @return {Suite} for chaining | ||||
|  * @api private | ||||
|  */ | ||||
|  | ||||
| Suite.prototype.addSuite = function(suite){ | ||||
|   suite.parent = this; | ||||
|   suite.timeout(this.timeout()); | ||||
|   suite.bail(this.bail()); | ||||
|   this.suites.push(suite); | ||||
|   this.emit('suite', suite); | ||||
|   return this; | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * Add a `test` to this suite. | ||||
|  * | ||||
|  * @param {Test} test | ||||
|  * @return {Suite} for chaining | ||||
|  * @api private | ||||
|  */ | ||||
|  | ||||
| Suite.prototype.addTest = function(test){ | ||||
|   test.parent = this; | ||||
|   test.timeout(this.timeout()); | ||||
|   this.tests.push(test); | ||||
|   this.emit('test', test); | ||||
|   return this; | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * Return the full title generated by recursively | ||||
|  * concatenating the parent's full title. | ||||
|  * | ||||
|  * @return {String} | ||||
|  * @api public | ||||
|  */ | ||||
|  | ||||
| Suite.prototype.fullTitle = function(){ | ||||
|   if (this.parent) { | ||||
|     var full = this.parent.fullTitle(); | ||||
|     if (full) return full + ' ' + this.title; | ||||
|   } | ||||
|   return this.title; | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * Return the total number of tests. | ||||
|  * | ||||
|  * @return {Number} | ||||
|  * @api public | ||||
|  */ | ||||
|  | ||||
| Suite.prototype.total = function(){ | ||||
|   return utils.reduce(this.suites, function(sum, suite){ | ||||
|     return sum + suite.total(); | ||||
|   }, 0) + this.tests.length; | ||||
| }; | ||||
							
								
								
									
										32
									
								
								node_modules/mocha/lib/test.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								node_modules/mocha/lib/test.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,32 @@ | ||||
|  | ||||
| /** | ||||
|  * Module dependencies. | ||||
|  */ | ||||
|  | ||||
| var Runnable = require('./runnable'); | ||||
|  | ||||
| /** | ||||
|  * Expose `Test`. | ||||
|  */ | ||||
|  | ||||
| module.exports = Test; | ||||
|  | ||||
| /** | ||||
|  * Initialize a new `Test` with the given `title` and callback `fn`. | ||||
|  * | ||||
|  * @param {String} title | ||||
|  * @param {Function} fn | ||||
|  * @api private | ||||
|  */ | ||||
|  | ||||
| function Test(title, fn) { | ||||
|   Runnable.call(this, title, fn); | ||||
|   this.pending = !fn; | ||||
|   this.type = 'test'; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Inherit from `Runnable.prototype`. | ||||
|  */ | ||||
|  | ||||
| Test.prototype.__proto__ = Runnable.prototype; | ||||
							
								
								
									
										175
									
								
								node_modules/mocha/lib/utils.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										175
									
								
								node_modules/mocha/lib/utils.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,175 @@ | ||||
|  | ||||
| /** | ||||
|  * Module dependencies. | ||||
|  */ | ||||
|  | ||||
| var fs = require('fs') | ||||
|   , path = require('path') | ||||
|   , join = path.join | ||||
|   , debug = require('debug')('watch'); | ||||
|  | ||||
| /** | ||||
|  * Ignored directories. | ||||
|  */ | ||||
|  | ||||
| var ignore = ['node_modules', '.git']; | ||||
|  | ||||
| /** | ||||
|  * Escape special characters in the given string of html. | ||||
|  * | ||||
|  * @param  {String} html | ||||
|  * @return {String} | ||||
|  * @api private | ||||
|  */ | ||||
|  | ||||
| exports.escape = function(html) { | ||||
|   return String(html) | ||||
|     .replace(/&/g, '&') | ||||
|     .replace(/"/g, '"') | ||||
|     .replace(/</g, '<') | ||||
|     .replace(/>/g, '>'); | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * Array#forEach (<=IE8) | ||||
|  * | ||||
|  * @param {Array} array | ||||
|  * @param {Function} fn | ||||
|  * @param {Object} scope | ||||
|  * @api private | ||||
|  */ | ||||
|  | ||||
| exports.forEach = function(arr, fn, scope) { | ||||
|   for (var i = 0, l = arr.length; i < l; i++) | ||||
|     fn.call(scope, arr[i], i); | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * Array#indexOf (<=IE8) | ||||
|  * | ||||
|  * @parma {Array} arr | ||||
|  * @param {Object} obj to find index of | ||||
|  * @param {Number} start | ||||
|  * @api private | ||||
|  */ | ||||
|  | ||||
| exports.indexOf = function (arr, obj, start) { | ||||
|   for (var i = start || 0, l = arr.length; i < l; i++) { | ||||
|     if (arr[i] === obj) | ||||
|       return i; | ||||
|   } | ||||
|   return -1; | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * Array#reduce (<=IE8) | ||||
|  *  | ||||
|  * @param {Array} array | ||||
|  * @param {Function} fn | ||||
|  * @param {Object} initial value | ||||
|  * @param {Object} scope | ||||
|  * @api private | ||||
|  */ | ||||
|  | ||||
| exports.reduce = function(arr, fn, val, scope) { | ||||
|   var rval = val; | ||||
|  | ||||
|   for (var i = 0, l = arr.length; i < l; i++) { | ||||
|     rval = fn.call(scope, rval, arr[i], i, arr); | ||||
|   } | ||||
|  | ||||
|   return rval; | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * Array#filter (<=IE8) | ||||
|  * | ||||
|  * @param {Array} array | ||||
|  * @param {Function} fn | ||||
|  * @param {Object} scope | ||||
|  * @api private | ||||
|  */ | ||||
|  | ||||
| exports.filter = function(arr, fn, scope) { | ||||
|   var ret = []; | ||||
|  | ||||
|   for (var i = 0, l = arr.length; i < l; i++) { | ||||
|     var val = arr[i]; | ||||
|     if (fn.call(scope, val, i, arr)) | ||||
|       ret.push(val); | ||||
|   } | ||||
|  | ||||
|   return ret; | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * Object.keys (<=IE8) | ||||
|  * | ||||
|  * @param {Object} obj | ||||
|  * @return {Array} keys | ||||
|  * @api private | ||||
|  */ | ||||
|  | ||||
| exports.keys = Object.keys || function(obj) { | ||||
|   var keys = [] | ||||
|     , has = Object.prototype.hasOwnProperty // for `window` on <=IE8 | ||||
|  | ||||
|   for (var i in obj) { | ||||
|     if (has.call(obj, i)) { | ||||
|       keys.push(i); | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   return keys; | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * Watch the given `files` for changes | ||||
|  * and invoke `fn(file)` on modification. | ||||
|  * | ||||
|  * @param {Array} files | ||||
|  * @param {Function} fn | ||||
|  * @api private | ||||
|  */ | ||||
|  | ||||
| exports.watch = function(files, fn){ | ||||
|   var options = { interval: 100 }; | ||||
|   files.forEach(function(file){ | ||||
|     debug('file %s', file); | ||||
|     fs.watchFile(file, options, function(curr, prev){ | ||||
|       if (prev.mtime < curr.mtime) fn(file); | ||||
|     }); | ||||
|   }); | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * Ignored files. | ||||
|  */ | ||||
|  | ||||
| function ignored(path){ | ||||
|   return !~ignore.indexOf(path); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Lookup files in the given `dir`. | ||||
|  * | ||||
|  * @return {Array} | ||||
|  * @api public | ||||
|  */ | ||||
|  | ||||
| exports.files = function(dir, ret){ | ||||
|   ret = ret || []; | ||||
|  | ||||
|   fs.readdirSync(dir) | ||||
|   .filter(ignored) | ||||
|   .forEach(function(path){ | ||||
|     path = join(dir, path); | ||||
|     if (fs.statSync(path).isDirectory()) { | ||||
|       exports.files(path, ret); | ||||
|     } else if (path.match(/\.(js|coffee)$/)) { | ||||
|       ret.push(path); | ||||
|     } | ||||
|   }); | ||||
|  | ||||
|   return ret; | ||||
| }; | ||||
		Reference in New Issue
	
	Block a user