Added node modules
This commit is contained in:
		
							
								
								
									
										91
									
								
								node_modules/should/lib/eql.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										91
									
								
								node_modules/should/lib/eql.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,91 @@ | ||||
|  | ||||
| // Taken from node's assert module, because it sucks | ||||
| // and exposes next to nothing useful. | ||||
|  | ||||
| module.exports = _deepEqual; | ||||
|  | ||||
| function _deepEqual(actual, expected) { | ||||
|   // 7.1. All identical values are equivalent, as determined by ===. | ||||
|   if (actual === expected) { | ||||
|     return true; | ||||
|  | ||||
|   } else if (Buffer.isBuffer(actual) && Buffer.isBuffer(expected)) { | ||||
|     if (actual.length != expected.length) return false; | ||||
|  | ||||
|     for (var i = 0; i < actual.length; i++) { | ||||
|       if (actual[i] !== expected[i]) return false; | ||||
|     } | ||||
|  | ||||
|     return true; | ||||
|  | ||||
|   // 7.2. If the expected value is a Date object, the actual value is | ||||
|   // equivalent if it is also a Date object that refers to the same time. | ||||
|   } else if (actual instanceof Date && expected instanceof Date) { | ||||
|     return actual.getTime() === expected.getTime(); | ||||
|  | ||||
|   // 7.3. Other pairs that do not both pass typeof value == "object", | ||||
|   // equivalence is determined by ==. | ||||
|   } else if (typeof actual != 'object' && typeof expected != 'object') { | ||||
|     return actual === expected; | ||||
|  | ||||
|   // 7.4. For all other Object pairs, including Array objects, equivalence is | ||||
|   // determined by having the same number of owned properties (as verified | ||||
|   // with Object.prototype.hasOwnProperty.call), the same set of keys | ||||
|   // (although not necessarily the same order), equivalent values for every | ||||
|   // corresponding key, and an identical "prototype" property. Note: this | ||||
|   // accounts for both named and indexed properties on Arrays. | ||||
|   } else { | ||||
|     return objEquiv(actual, expected); | ||||
|   } | ||||
| } | ||||
|  | ||||
| function isUndefinedOrNull (value) { | ||||
|   return value === null || value === undefined; | ||||
| } | ||||
|  | ||||
| function isArguments (object) { | ||||
|   return Object.prototype.toString.call(object) == '[object Arguments]'; | ||||
| } | ||||
|  | ||||
| function objEquiv (a, b) { | ||||
|   if (isUndefinedOrNull(a) || isUndefinedOrNull(b)) | ||||
|     return false; | ||||
|   // an identical "prototype" property. | ||||
|   if (a.prototype !== b.prototype) return false; | ||||
|   //~~~I've managed to break Object.keys through screwy arguments passing. | ||||
|   //   Converting to array solves the problem. | ||||
|   if (isArguments(a)) { | ||||
|     if (!isArguments(b)) { | ||||
|       return false; | ||||
|     } | ||||
|     a = pSlice.call(a); | ||||
|     b = pSlice.call(b); | ||||
|     return _deepEqual(a, b); | ||||
|   } | ||||
|   try{ | ||||
|     var ka = Object.keys(a), | ||||
|       kb = Object.keys(b), | ||||
|       key, i; | ||||
|   } catch (e) {//happens when one is a string literal and the other isn't | ||||
|     return false; | ||||
|   } | ||||
|   // having the same number of owned properties (keys incorporates hasOwnProperty) | ||||
|   if (ka.length != kb.length) | ||||
|     return false; | ||||
|   //the same set of keys (although not necessarily the same order), | ||||
|   ka.sort(); | ||||
|   kb.sort(); | ||||
|   //~~~cheap key test | ||||
|   for (i = ka.length - 1; i >= 0; i--) { | ||||
|     if (ka[i] != kb[i]) | ||||
|       return false; | ||||
|   } | ||||
|   //equivalent values for every corresponding key, and | ||||
|   //~~~possibly expensive deep test | ||||
|   for (i = ka.length - 1; i >= 0; i--) { | ||||
|     key = ka[i]; | ||||
|     if (!_deepEqual(a[key], b[key] )) | ||||
|        return false; | ||||
|   } | ||||
|   return true; | ||||
| } | ||||
							
								
								
									
										693
									
								
								node_modules/should/lib/should.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										693
									
								
								node_modules/should/lib/should.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,693 @@ | ||||
| /*! | ||||
|  * Should | ||||
|  * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca> | ||||
|  * MIT Licensed | ||||
|  */ | ||||
|  | ||||
| /** | ||||
|  * Module dependencies. | ||||
|  */ | ||||
|  | ||||
| var util = require('util') | ||||
|   , http = require('http') | ||||
|   , assert = require('assert') | ||||
|   , AssertionError = assert.AssertionError | ||||
|   , statusCodes = http.STATUS_CODES | ||||
|   , eql = require('./eql') | ||||
|   , i = util.inspect; | ||||
|  | ||||
| /** | ||||
|  * Expose assert as should. | ||||
|  *  | ||||
|  * This allows you to do things like below | ||||
|  * without require()ing the assert module. | ||||
|  * | ||||
|  *    should.equal(foo.bar, undefined); | ||||
|  * | ||||
|  */ | ||||
|  | ||||
| exports = module.exports = assert; | ||||
|  | ||||
| /** | ||||
|  * Library version. | ||||
|  */ | ||||
|  | ||||
| exports.version = '0.5.1'; | ||||
|  | ||||
| /** | ||||
|  * Assert _obj_ exists, with optional message. | ||||
|  * | ||||
|  * @param {Mixed} obj | ||||
|  * @param {String} msg | ||||
|  * @api public | ||||
|  */ | ||||
|   | ||||
| exports.exist = function(obj, msg){ | ||||
|   if (null == obj) { | ||||
|     throw new AssertionError({ | ||||
|         message: msg || ('expected ' + i(obj) + ' to exist') | ||||
|       , stackStartFunction: should.exist | ||||
|     }); | ||||
|   } | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * Asserts _obj_ does not exist, with optional message. | ||||
|  * | ||||
|  * @param {Mixed} obj | ||||
|  * @param {String} msg | ||||
|  * @api public | ||||
|  */ | ||||
|  | ||||
| exports.not = {}; | ||||
| exports.not.exist = function(obj, msg){ | ||||
|   if (null != obj) { | ||||
|     throw new AssertionError({ | ||||
|         message: msg || ('expected ' + i(obj) + ' to not exist') | ||||
|       , stackStartFunction: should.not.exist | ||||
|     }); | ||||
|   } | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * Expose api via `Object#should`. | ||||
|  * | ||||
|  * @api public | ||||
|  */ | ||||
|  | ||||
| Object.defineProperty(Object.prototype, 'should', { | ||||
|   set: function(){}, | ||||
|   get: function(){ | ||||
|     return new Assertion(this); | ||||
|   }, | ||||
|   configurable: true | ||||
| }); | ||||
|  | ||||
| /** | ||||
|  * Initialize a new `Assertion` with the given _obj_. | ||||
|  * | ||||
|  * @param {Mixed} obj | ||||
|  * @api private | ||||
|  */ | ||||
|  | ||||
| var Assertion = exports.Assertion = function Assertion(obj) { | ||||
|   this.obj = obj; | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * Prototype. | ||||
|  */ | ||||
|  | ||||
| Assertion.prototype = { | ||||
|  | ||||
|   /** | ||||
|    * HACK: prevents double require() from failing. | ||||
|    */ | ||||
|    | ||||
|   exports: exports, | ||||
|  | ||||
|   /** | ||||
|    * Assert _expr_ with the given _msg_ and _negatedMsg_. | ||||
|    * | ||||
|    * @param {Boolean} expr | ||||
|    * @param {String} msg | ||||
|    * @param {String} negatedMsg | ||||
|    * @api private | ||||
|    */ | ||||
|  | ||||
|   assert: function(expr, msg, negatedMsg){ | ||||
|     var msg = this.negate ? negatedMsg : msg | ||||
|       , ok = this.negate ? !expr : expr; | ||||
|     if (!ok) { | ||||
|       throw new AssertionError({ | ||||
|           message: msg | ||||
|         , stackStartFunction: this.assert | ||||
|       }); | ||||
|     } | ||||
|   }, | ||||
|  | ||||
|   /** | ||||
|    * Dummy getter. | ||||
|    * | ||||
|    * @api public | ||||
|    */ | ||||
|    | ||||
|   get an() { | ||||
|     return this; | ||||
|   }, | ||||
|    | ||||
|   /** | ||||
|    * Dummy getter. | ||||
|    * | ||||
|    * @api public | ||||
|    */ | ||||
|    | ||||
|   get and() { | ||||
|     return this; | ||||
|   }, | ||||
|    | ||||
|   /** | ||||
|    * Dummy getter. | ||||
|    * | ||||
|    * @api public | ||||
|    */ | ||||
|    | ||||
|   get be() { | ||||
|     return this; | ||||
|   }, | ||||
|  | ||||
|   /** | ||||
|    * Dummy getter. | ||||
|    * | ||||
|    * @api public | ||||
|    */ | ||||
|    | ||||
|   get have() { | ||||
|     return this; | ||||
|   }, | ||||
|    | ||||
|   /** | ||||
|    * Dummy getter. | ||||
|    * | ||||
|    * @api public | ||||
|    */ | ||||
|    | ||||
|   get with() { | ||||
|     return this; | ||||
|   }, | ||||
|    | ||||
|   /** | ||||
|    * Negation modifier. | ||||
|    * | ||||
|    * @api public | ||||
|    */ | ||||
|    | ||||
|   get not() { | ||||
|     this.negate = true; | ||||
|     return this; | ||||
|   }, | ||||
|    | ||||
|   /** | ||||
|    * Get object inspection string. | ||||
|    * | ||||
|    * @return {String} | ||||
|    * @api private | ||||
|    */ | ||||
|    | ||||
|   get inspect() { | ||||
|     return i(this.obj); | ||||
|   }, | ||||
|  | ||||
|   /** | ||||
|    * Assert instanceof `Arguments`. | ||||
|    * | ||||
|    * @api public | ||||
|    */ | ||||
|  | ||||
|   get arguments() { | ||||
|     this.assert( | ||||
|         '[object Arguments]' == Object.prototype.toString.call(this.obj) | ||||
|       , 'expected ' + this.inspect + ' to be arguments' | ||||
|       , 'expected ' + this.inspect + ' to not be arguments'); | ||||
|     return this; | ||||
|   }, | ||||
|  | ||||
|   /** | ||||
|    * Assert that an object is empty aka length of 0. | ||||
|    * | ||||
|    * @api public | ||||
|    */ | ||||
|    | ||||
|   get empty() { | ||||
|     this.obj.should.have.property('length'); | ||||
|     this.assert( | ||||
|         0 === this.obj.length | ||||
|       , 'expected ' + this.inspect + ' to be empty' | ||||
|       , 'expected ' + this.inspect + ' not to be empty'); | ||||
|     return this; | ||||
|   }, | ||||
|  | ||||
|   /** | ||||
|    * Assert ok. | ||||
|    * | ||||
|    * @api public | ||||
|    */ | ||||
|    | ||||
|   get ok() { | ||||
|     this.assert( | ||||
|         this.obj | ||||
|       , 'expected ' + this.inspect + ' to be truthy' | ||||
|       , 'expected ' + this.inspect + ' to be falsey'); | ||||
|     return this; | ||||
|   }, | ||||
|    | ||||
|   /** | ||||
|    * Assert true. | ||||
|    * | ||||
|    * @api public | ||||
|    */ | ||||
|    | ||||
|   get true() { | ||||
|     this.assert( | ||||
|         true === this.obj | ||||
|       , 'expected ' + this.inspect + ' to be true' | ||||
|       , 'expected ' + this.inspect + ' not to be true'); | ||||
|     return this; | ||||
|   }, | ||||
|    | ||||
|   /** | ||||
|    * Assert false. | ||||
|    * | ||||
|    * @api public | ||||
|    */ | ||||
|    | ||||
|   get false() { | ||||
|     this.assert( | ||||
|         false === this.obj | ||||
|       , 'expected ' + this.inspect + ' to be false' | ||||
|       , 'expected ' + this.inspect + ' not to be false'); | ||||
|     return this; | ||||
|   }, | ||||
|    | ||||
|   /** | ||||
|    * Assert equal.  | ||||
|    * | ||||
|    * @param {Mixed} val | ||||
|    * @param {String} description | ||||
|    * @api public | ||||
|    */ | ||||
|    | ||||
|   eql: function(val, desc){ | ||||
|     this.assert( | ||||
|         eql(val, this.obj) | ||||
|       , 'expected ' + this.inspect + ' to equal ' + i(val) + (desc ? " | " + desc : "") | ||||
|       , 'expected ' + this.inspect + ' to not equal ' + i(val) + (desc ? " | " + desc : "")); | ||||
|     return this; | ||||
|   }, | ||||
|    | ||||
|   /** | ||||
|    * Assert strict equal.  | ||||
|    * | ||||
|    * @param {Mixed} val | ||||
|    * @param {String} description | ||||
|    * @api public | ||||
|    */ | ||||
|    | ||||
|   equal: function(val, desc){ | ||||
|     this.assert( | ||||
|         val === this.obj | ||||
|       , 'expected ' + this.inspect + ' to equal ' + i(val) + (desc ? " | " + desc : "") | ||||
|       , 'expected ' + this.inspect + ' to not equal ' + i(val) + (desc ? " | " + desc : "")); | ||||
|     return this; | ||||
|   }, | ||||
|    | ||||
|   /** | ||||
|    * Assert within start to finish (inclusive).  | ||||
|    * | ||||
|    * @param {Number} start | ||||
|    * @param {Number} finish | ||||
|    * @param {String} description | ||||
|    * @api public | ||||
|    */ | ||||
|    | ||||
|   within: function(start, finish, desc){ | ||||
|     var range = start + '..' + finish; | ||||
|     this.assert( | ||||
|         this.obj >= start && this.obj <= finish | ||||
|       , 'expected ' + this.inspect + ' to be within ' + range + (desc ? " | " + desc : "") | ||||
|       , 'expected ' + this.inspect + ' to not be within ' + range + (desc ? " | " + desc : "")); | ||||
|     return this; | ||||
|   }, | ||||
|    | ||||
|   /** | ||||
|    * Assert typeof.  | ||||
|    * | ||||
|    * @param {Mixed} type | ||||
|    * @param {String} description | ||||
|    * @api public | ||||
|    */ | ||||
|    | ||||
|   a: function(type, desc){ | ||||
|     this.assert( | ||||
|         type == typeof this.obj | ||||
|       , 'expected ' + this.inspect + ' to be a ' + type + (desc ? " | " + desc : "") | ||||
|       , 'expected ' + this.inspect + ' not to be a ' + type  + (desc ? " | " + desc : "")); | ||||
|     return this; | ||||
|   }, | ||||
|    | ||||
|   /** | ||||
|    * Assert instanceof.  | ||||
|    * | ||||
|    * @param {Function} constructor | ||||
|    * @param {String} description | ||||
|    * @api public | ||||
|    */ | ||||
|    | ||||
|   instanceof: function(constructor, desc){ | ||||
|     var name = constructor.name; | ||||
|     this.assert( | ||||
|         this.obj instanceof constructor | ||||
|       , 'expected ' + this.inspect + ' to be an instance of ' + name + (desc ? " | " + desc : "") | ||||
|       , 'expected ' + this.inspect + ' not to be an instance of ' + name + (desc ? " | " + desc : "")); | ||||
|     return this; | ||||
|   }, | ||||
|  | ||||
|   /** | ||||
|    * Assert numeric value above _n_. | ||||
|    * | ||||
|    * @param {Number} n | ||||
|    * @param {String} description | ||||
|    * @api public | ||||
|    */ | ||||
|    | ||||
|   above: function(n, desc){ | ||||
|     this.assert( | ||||
|         this.obj > n | ||||
|       , 'expected ' + this.inspect + ' to be above ' + n + (desc ? " | " + desc : "") | ||||
|       , 'expected ' + this.inspect + ' to be below ' + n + (desc ? " | " + desc : "")); | ||||
|     return this; | ||||
|   }, | ||||
|    | ||||
|   /** | ||||
|    * Assert numeric value below _n_. | ||||
|    * | ||||
|    * @param {Number} n | ||||
|    * @param {String} description | ||||
|    * @api public | ||||
|    */ | ||||
|    | ||||
|   below: function(n, desc){ | ||||
|     this.assert( | ||||
|         this.obj < n | ||||
|       , 'expected ' + this.inspect + ' to be below ' + n + (desc ? " | " + desc : "") | ||||
|       , 'expected ' + this.inspect + ' to be above ' + n + (desc ? " | " + desc : "")); | ||||
|     return this; | ||||
|   }, | ||||
|    | ||||
|   /** | ||||
|    * Assert string value matches _regexp_. | ||||
|    * | ||||
|    * @param {RegExp} regexp | ||||
|    * @param {String} description | ||||
|    * @api public | ||||
|    */ | ||||
|    | ||||
|   match: function(regexp, desc){ | ||||
|     this.assert( | ||||
|         regexp.exec(this.obj) | ||||
|       , 'expected ' + this.inspect + ' to match ' + regexp + (desc ? " | " + desc : "") | ||||
|       , 'expected ' + this.inspect + ' not to match ' + regexp + (desc ? " | " + desc : "")); | ||||
|     return this; | ||||
|   }, | ||||
|    | ||||
|   /** | ||||
|    * Assert property "length" exists and has value of _n_. | ||||
|    * | ||||
|    * @param {Number} n | ||||
|    * @param {String} description | ||||
|    * @api public | ||||
|    */ | ||||
|    | ||||
|   length: function(n, desc){ | ||||
|     this.obj.should.have.property('length'); | ||||
|     var len = this.obj.length; | ||||
|     this.assert( | ||||
|         n == len | ||||
|       , 'expected ' + this.inspect + ' to have a length of ' + n + ' but got ' + len + (desc ? " | " + desc : "") | ||||
|       , 'expected ' + this.inspect + ' to not have a length of ' + len + (desc ? " | " + desc : "")); | ||||
|     return this; | ||||
|   }, | ||||
|  | ||||
|   /** | ||||
|    * Assert property _name_ exists, with optional _val_. | ||||
|    * | ||||
|    * @param {String} name | ||||
|    * @param {Mixed} val | ||||
|    * @param {String} description | ||||
|    * @api public | ||||
|    */ | ||||
|    | ||||
|   property: function(name, val, desc){ | ||||
|     if (this.negate && undefined !== val) { | ||||
|       if (undefined === this.obj[name]) { | ||||
|         throw new Error(this.inspect + ' has no property ' + i(name) + (desc ? " | " + desc : "")); | ||||
|       } | ||||
|     } else { | ||||
|       this.assert( | ||||
|           undefined !== this.obj[name] | ||||
|         , 'expected ' + this.inspect + ' to have a property ' + i(name) + (desc ? " | " + desc : "") | ||||
|         , 'expected ' + this.inspect + ' to not have a property ' + i(name) + (desc ? " | " + desc : "")); | ||||
|     } | ||||
|      | ||||
|     if (undefined !== val) { | ||||
|       this.assert( | ||||
|           val === this.obj[name] | ||||
|         , 'expected ' + this.inspect + ' to have a property ' + i(name) | ||||
|           + ' of ' + i(val) + ', but got ' + i(this.obj[name]) + (desc ? " | " + desc : "") | ||||
|         , 'expected ' + this.inspect + ' to not have a property ' + i(name) + ' of ' + i(val) + (desc ? " | " + desc : "")); | ||||
|     } | ||||
|  | ||||
|     this.obj = this.obj[name]; | ||||
|     return this; | ||||
|   }, | ||||
|    | ||||
|   /** | ||||
|    * Assert own property _name_ exists. | ||||
|    * | ||||
|    * @param {String} name | ||||
|    * @param {String} description | ||||
|    * @api public | ||||
|    */ | ||||
|    | ||||
|   ownProperty: function(name, desc){ | ||||
|     this.assert( | ||||
|         this.obj.hasOwnProperty(name) | ||||
|       , 'expected ' + this.inspect + ' to have own property ' + i(name) + (desc ? " | " + desc : "") | ||||
|       , 'expected ' + this.inspect + ' to not have own property ' + i(name) + (desc ? " | " + desc : "")); | ||||
|     return this; | ||||
|   }, | ||||
|  | ||||
|   /** | ||||
|    * Assert that `obj` is present via `.indexOf()`. | ||||
|    * | ||||
|    * @param {Mixed} obj | ||||
|    * @param {String} description | ||||
|    * @api public | ||||
|    */ | ||||
|  | ||||
|   include: function(obj, desc){ | ||||
|     this.assert( | ||||
|         ~this.obj.indexOf(obj) | ||||
|       , 'expected ' + this.inspect + ' to include ' + i(obj) + (desc ? " | " + desc : "") | ||||
|       , 'expected ' + this.inspect + ' to not include ' + i(obj) + (desc ? " | " + desc : "")); | ||||
|  | ||||
|     return this; | ||||
|   }, | ||||
|    | ||||
|   /** | ||||
|    * Assert that an object equal to `obj` is present. | ||||
|    * | ||||
|    * @param {Array} obj | ||||
|    * @param {String} description | ||||
|    * @api public | ||||
|    */ | ||||
|  | ||||
|   includeEql: function(obj, desc){ | ||||
|     this.assert( | ||||
|       this.obj.some(function(item) { return eql(obj, item); }) | ||||
|       , 'expected ' + this.inspect + ' to include an object equal to ' + i(obj) + (desc ? " | " + desc : "") | ||||
|       , 'expected ' + this.inspect + ' to not include an object equal to ' + i(obj) + (desc ? " | " + desc : "")); | ||||
|     return this; | ||||
|   }, | ||||
|  | ||||
|   /** | ||||
|    * Assert that the array contains _obj_. | ||||
|    * | ||||
|    * @param {Mixed} obj | ||||
|    * @api public | ||||
|    */ | ||||
|  | ||||
|   contain: function(obj){ | ||||
|     console.warn('should.contain() is deprecated, use should.include()'); | ||||
|     this.obj.should.be.an.instanceof(Array); | ||||
|     this.assert( | ||||
|         ~this.obj.indexOf(obj) | ||||
|       , 'expected ' + this.inspect + ' to contain ' + i(obj) | ||||
|       , 'expected ' + this.inspect + ' to not contain ' + i(obj)); | ||||
|     return this; | ||||
|   }, | ||||
|    | ||||
|   /** | ||||
|    * Assert exact keys or inclusion of keys by using | ||||
|    * the `.include` modifier. | ||||
|    * | ||||
|    * @param {Array|String ...} keys | ||||
|    * @api public | ||||
|    */ | ||||
|    | ||||
|   keys: function(keys){ | ||||
|     var str | ||||
|       , ok = true; | ||||
|  | ||||
|     keys = keys instanceof Array | ||||
|       ? keys | ||||
|       : Array.prototype.slice.call(arguments); | ||||
|  | ||||
|     if (!keys.length) throw new Error('keys required'); | ||||
|  | ||||
|     var actual = Object.keys(this.obj) | ||||
|       , len = keys.length; | ||||
|  | ||||
|     // make sure they're all present | ||||
|     ok = keys.every(function(key){ | ||||
|       return ~actual.indexOf(key); | ||||
|     }); | ||||
|  | ||||
|     // matching length | ||||
|     ok = ok && keys.length == actual.length; | ||||
|  | ||||
|     // key string | ||||
|     if (len > 1) { | ||||
|       keys = keys.map(function(key){ | ||||
|         return i(key); | ||||
|       }); | ||||
|       var last = keys.pop(); | ||||
|       str = keys.join(', ') + ', and ' + last; | ||||
|     } else { | ||||
|       str = i(keys[0]); | ||||
|     } | ||||
|  | ||||
|     // message | ||||
|     str = 'have ' + (len > 1 ? 'keys ' : 'key ') + str; | ||||
|  | ||||
|     this.assert( | ||||
|         ok | ||||
|       , 'expected ' + this.inspect + ' to ' + str | ||||
|       , 'expected ' + this.inspect + ' to not ' + str); | ||||
|  | ||||
|     return this; | ||||
|   }, | ||||
|    | ||||
|   /** | ||||
|    * Assert that header `field` has the given `val`.  | ||||
|    * | ||||
|    * @param {String} field | ||||
|    * @param {String} val | ||||
|    * @return {Assertion} for chaining | ||||
|    * @api public | ||||
|    */ | ||||
|  | ||||
|   header: function(field, val){ | ||||
|     this.obj.should | ||||
|       .have.property('headers').and | ||||
|       .have.property(field.toLowerCase(), val); | ||||
|     return this; | ||||
|   }, | ||||
|    | ||||
|   /** | ||||
|    * Assert `.statusCode` of `code`. | ||||
|    * | ||||
|    * @param {Number} code | ||||
|    * @return {Assertion} for chaining | ||||
|    * @api public | ||||
|    */ | ||||
|  | ||||
|   status:  function(code){ | ||||
|     this.obj.should.have.property('statusCode'); | ||||
|     var status = this.obj.statusCode; | ||||
|  | ||||
|     this.assert( | ||||
|         code == status | ||||
|       , 'expected response code of ' + code + ' ' + i(statusCodes[code]) | ||||
|         + ', but got ' + status + ' ' + i(statusCodes[status]) | ||||
|       , 'expected to not respond with ' + code + ' ' + i(statusCodes[code])); | ||||
|  | ||||
|     return this; | ||||
|   }, | ||||
|  | ||||
|   /** | ||||
|    * Assert that this response has content-type: application/json. | ||||
|    * | ||||
|    * @return {Assertion} for chaining | ||||
|    * @api public | ||||
|    */ | ||||
|  | ||||
|   get json() { | ||||
|     this.obj.should.have.property('headers'); | ||||
|     this.obj.headers.should.have.property('content-type'); | ||||
|     this.obj.headers['content-type'].should.include('application/json'); | ||||
|   }, | ||||
|  | ||||
|   /** | ||||
|    * Assert that this response has content-type: text/html. | ||||
|    * | ||||
|    * @return {Assertion} for chaining | ||||
|    * @api public | ||||
|    */ | ||||
|  | ||||
|   get html() { | ||||
|     this.obj.should.have.property('headers'); | ||||
|     this.obj.headers.should.have.property('content-type'); | ||||
|     this.obj.headers['content-type'].should.include('text/html'); | ||||
|   }, | ||||
|  | ||||
|   /** | ||||
|    * Assert that this function will or will not | ||||
|    * throw an exception. | ||||
|    * | ||||
|    * @return {Assertion} for chaining | ||||
|    * @api public | ||||
|    */ | ||||
|  | ||||
|   throw: function(message){ | ||||
|     var fn = this.obj | ||||
|       , err = {} | ||||
|       , errorInfo = '' | ||||
|       , ok = true; | ||||
|  | ||||
|     try { | ||||
|       fn(); | ||||
|       ok = false; | ||||
|     } catch (e) { | ||||
|       err = e; | ||||
|     } | ||||
|  | ||||
|     if (ok) { | ||||
|       if ('string' == typeof message) { | ||||
|         ok = message == err.message; | ||||
|       } else if (message instanceof RegExp) { | ||||
|         ok = message.test(err.message); | ||||
|       } | ||||
|  | ||||
|       if (message && !ok) { | ||||
|         if ('string' == typeof message) { | ||||
|           errorInfo = " with a message matching '" + message + "', but got '" + err.message + "'"; | ||||
|         } else { | ||||
|           errorInfo = " with a message matching " + message + ", but got '" + err.message + "'"; | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     this.assert( | ||||
|         ok | ||||
|       , 'expected an exception to be thrown' + errorInfo | ||||
|       , 'expected no exception to be thrown, got "' + err.message + '"'); | ||||
|  | ||||
|     return this; | ||||
|   } | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * Aliases. | ||||
|  */ | ||||
|  | ||||
| (function alias(name, as){ | ||||
|   Assertion.prototype[as] = Assertion.prototype[name]; | ||||
|   return alias; | ||||
| }) | ||||
| ('length', 'lengthOf') | ||||
| ('keys', 'key') | ||||
| ('ownProperty', 'haveOwnProperty') | ||||
| ('above', 'greaterThan') | ||||
| ('below', 'lessThan'); | ||||
|  | ||||
		Reference in New Issue
	
	Block a user