teaspoon 0.7.9 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (163) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +382 -260
  3. data/app/assets/javascripts/teaspoon-angular.js +108 -26241
  4. data/app/assets/javascripts/teaspoon-jasmine.js +103 -2642
  5. data/app/assets/javascripts/teaspoon-mocha.js +109 -5416
  6. data/app/assets/javascripts/teaspoon-qunit.js +107 -2255
  7. data/app/assets/javascripts/teaspoon-teaspoon.js +0 -1
  8. data/app/assets/javascripts/teaspoon/angular.coffee +3 -1
  9. data/app/assets/javascripts/teaspoon/base/hook.coffee +21 -0
  10. data/app/assets/javascripts/teaspoon/base/reporters/html.coffee +26 -14
  11. data/app/assets/javascripts/teaspoon/base/reporters/html/progress_view.coffee +1 -1
  12. data/app/assets/javascripts/teaspoon/base/reporters/html/template.coffee +3 -3
  13. data/app/assets/javascripts/teaspoon/base/teaspoon.coffee +10 -1
  14. data/app/assets/javascripts/teaspoon/jasmine.coffee +3 -1
  15. data/app/assets/javascripts/teaspoon/mocha.coffee +3 -1
  16. data/app/assets/javascripts/teaspoon/mocha/reporters/html.coffee +1 -1
  17. data/app/assets/javascripts/teaspoon/qunit.coffee +3 -1
  18. data/app/assets/javascripts/teaspoon/qunit/reporters/html.coffee +1 -1
  19. data/app/assets/javascripts/teaspoon/teaspoon.coffee +0 -1
  20. data/app/assets/stylesheets/teaspoon.css +12 -8
  21. data/app/controllers/teaspoon/suite_controller.rb +32 -0
  22. data/app/views/teaspoon/suite/_body.html.erb +0 -0
  23. data/app/views/teaspoon/suite/_boot.html.erb +4 -0
  24. data/app/views/teaspoon/suite/_boot_require_js.html.erb +19 -0
  25. data/app/views/teaspoon/{spec/suites.html.erb → suite/index.html.erb} +6 -7
  26. data/app/views/teaspoon/suite/show.html.erb +19 -0
  27. data/bin/teaspoon +1 -1
  28. data/config/routes.rb +14 -4
  29. data/lib/generators/teaspoon/install/POST_INSTALL +2 -2
  30. data/lib/generators/teaspoon/install/install_generator.rb +22 -11
  31. data/lib/generators/teaspoon/install/templates/_body.html.erb +0 -0
  32. data/lib/generators/teaspoon/install/templates/_boot.html.erb +4 -0
  33. data/lib/generators/teaspoon/install/templates/jasmine/env.rb +11 -0
  34. data/lib/generators/teaspoon/install/templates/jasmine/env_comments.rb +182 -0
  35. data/lib/generators/teaspoon/install/templates/jasmine/spec_helper.coffee +8 -6
  36. data/lib/generators/teaspoon/install/templates/jasmine/spec_helper.js +8 -7
  37. data/lib/generators/teaspoon/install/templates/mocha/env.rb +11 -0
  38. data/lib/generators/teaspoon/install/templates/mocha/env_comments.rb +182 -0
  39. data/lib/generators/teaspoon/install/templates/mocha/spec_helper.coffee +13 -13
  40. data/lib/generators/teaspoon/install/templates/mocha/spec_helper.js +13 -13
  41. data/lib/generators/teaspoon/install/templates/qunit/env.rb +11 -0
  42. data/lib/generators/teaspoon/install/templates/qunit/env_comments.rb +182 -0
  43. data/lib/generators/teaspoon/install/templates/qunit/test_helper.coffee +6 -5
  44. data/lib/generators/teaspoon/install/templates/qunit/test_helper.js +6 -5
  45. data/lib/tasks/teaspoon.rake +9 -2
  46. data/lib/teaspoon.rb +4 -6
  47. data/lib/teaspoon/command_line.rb +116 -134
  48. data/lib/teaspoon/configuration.rb +144 -66
  49. data/lib/teaspoon/console.rb +70 -37
  50. data/lib/teaspoon/coverage.rb +42 -15
  51. data/lib/teaspoon/deprecated.rb +65 -0
  52. data/lib/teaspoon/drivers/base.rb +10 -0
  53. data/lib/teaspoon/drivers/phantomjs/runner.js +9 -11
  54. data/lib/teaspoon/drivers/phantomjs_driver.rb +21 -21
  55. data/lib/teaspoon/drivers/selenium_driver.rb +32 -13
  56. data/lib/teaspoon/engine.rb +32 -12
  57. data/lib/teaspoon/environment.rb +16 -12
  58. data/lib/teaspoon/exceptions.rb +41 -5
  59. data/lib/teaspoon/exporter.rb +52 -0
  60. data/lib/teaspoon/formatters/base.rb +171 -0
  61. data/lib/teaspoon/formatters/clean_formatter.rb +2 -4
  62. data/lib/teaspoon/formatters/documentation_formatter.rb +60 -0
  63. data/lib/teaspoon/formatters/dot_formatter.rb +12 -90
  64. data/lib/teaspoon/formatters/json_formatter.rb +36 -0
  65. data/lib/teaspoon/formatters/junit_formatter.rb +51 -32
  66. data/lib/teaspoon/formatters/modules/report_module.rb +76 -0
  67. data/lib/teaspoon/formatters/pride_formatter.rb +23 -27
  68. data/lib/teaspoon/formatters/snowday_formatter.rb +7 -11
  69. data/lib/teaspoon/formatters/swayze_or_oprah_formatter.rb +88 -64
  70. data/lib/teaspoon/formatters/tap_formatter.rb +18 -27
  71. data/lib/teaspoon/formatters/tap_y_formatter.rb +35 -45
  72. data/lib/teaspoon/formatters/teamcity_formatter.rb +69 -31
  73. data/lib/teaspoon/instrumentation.rb +33 -33
  74. data/lib/teaspoon/result.rb +2 -1
  75. data/lib/teaspoon/runner.rb +40 -28
  76. data/lib/teaspoon/server.rb +23 -25
  77. data/lib/teaspoon/suite.rb +52 -72
  78. data/lib/teaspoon/utility.rb +3 -14
  79. data/lib/teaspoon/version.rb +1 -1
  80. data/spec/dummy/app/assets/javascripts/integration/integration_spec.coffee +3 -0
  81. data/spec/dummy/app/assets/javascripts/integration/spec_helper.coffee +2 -0
  82. data/spec/dummy/config/application.rb +3 -0
  83. data/spec/features/console_reporter_spec.rb +48 -18
  84. data/spec/features/hooks_spec.rb +23 -41
  85. data/spec/features/html_reporter_spec.rb +38 -21
  86. data/spec/features/install_generator_spec.rb +34 -20
  87. data/spec/features/instrumentation_spec.rb +3 -2
  88. data/spec/fixtures/coverage.json +243 -0
  89. data/spec/javascripts/fixtures/_body.html.erb +1 -0
  90. data/spec/javascripts/jasmine_helper.coffee +1 -1
  91. data/spec/javascripts/teaspoon/base/fixture_spec.coffee +4 -4
  92. data/spec/javascripts/teaspoon/base/reporters/html_spec.coffee +9 -10
  93. data/spec/javascripts/teaspoon/mocha/reporters/html_mspec.coffee +0 -6
  94. data/spec/javascripts/teaspoon/phantomjs/runner_spec.coffee +5 -6
  95. data/spec/javascripts/turbolinks_helper.coffee +1 -1
  96. data/spec/spec_helper.rb +3 -4
  97. data/spec/teaspoon/command_line_spec.rb +139 -23
  98. data/spec/teaspoon/configuration_spec.rb +164 -46
  99. data/spec/teaspoon/console_spec.rb +142 -47
  100. data/spec/teaspoon/coverage_spec.rb +98 -28
  101. data/spec/teaspoon/drivers/base_spec.rb +5 -0
  102. data/spec/teaspoon/drivers/phantomjs_driver_spec.rb +32 -14
  103. data/spec/teaspoon/drivers/selenium_driver_spec.rb +32 -24
  104. data/spec/teaspoon/engine_spec.rb +8 -5
  105. data/spec/teaspoon/environment_spec.rb +56 -33
  106. data/spec/teaspoon/exceptions_spec.rb +57 -0
  107. data/spec/teaspoon/exporter_spec.rb +96 -0
  108. data/spec/teaspoon/formatters/base_spec.rb +259 -0
  109. data/spec/teaspoon/formatters/clean_formatter_spec.rb +37 -0
  110. data/spec/teaspoon/formatters/documentation_formatter_spec.rb +127 -0
  111. data/spec/teaspoon/formatters/dot_formatter_spec.rb +52 -56
  112. data/spec/teaspoon/formatters/json_formatter_spec.rb +77 -0
  113. data/spec/teaspoon/formatters/junit_formatter_spec.rb +72 -35
  114. data/spec/teaspoon/formatters/pride_formatter_spec.rb +37 -0
  115. data/spec/teaspoon/formatters/snowday_formatter_spec.rb +35 -0
  116. data/spec/teaspoon/formatters/tap_formatter_spec.rb +29 -81
  117. data/spec/teaspoon/formatters/tap_y_formatter_spec.rb +31 -141
  118. data/spec/teaspoon/formatters/teamcity_formatter_spec.rb +99 -42
  119. data/spec/teaspoon/instrumentation_spec.rb +44 -44
  120. data/spec/teaspoon/result_spec.rb +37 -0
  121. data/spec/teaspoon/runner_spec.rb +70 -59
  122. data/spec/teaspoon/server_spec.rb +34 -52
  123. data/spec/teaspoon/suite_spec.rb +42 -188
  124. data/spec/teaspoon_env.rb +39 -28
  125. data/vendor/assets/javascripts/{angular-scenario-1.0.5.js → angular/1.0.5.js} +0 -0
  126. data/vendor/assets/javascripts/{angular-scenario-1.0.5.MIT-LICENSE → angular/MIT-LICENSE} +0 -0
  127. data/vendor/assets/javascripts/{jasmine-1.3.1.js → jasmine/1.3.1.js} +0 -0
  128. data/vendor/assets/javascripts/jasmine/2.0.0.js +2412 -0
  129. data/vendor/assets/javascripts/{jasmine-1.3.1.MIT.LICENSE → jasmine/MIT.LICENSE} +0 -0
  130. data/vendor/assets/javascripts/{mocha-1.10.0.js → mocha/1.10.0.js} +1 -0
  131. data/vendor/assets/javascripts/mocha/1.17.1.js +5813 -0
  132. data/vendor/assets/javascripts/{mocha-1.10.1.MIT.LICENSE → mocha/MIT.LICENSE} +0 -0
  133. data/vendor/assets/javascripts/{qunit-1.12.0.js → qunit/1.12.0.js} +1 -1
  134. data/vendor/assets/javascripts/qunit/1.14.0.js +2288 -0
  135. data/vendor/assets/javascripts/{qunit-1.12.0.MIT.LICENSE → qunit/MIT.LICENSE} +0 -0
  136. data/vendor/assets/javascripts/support/chai.js +827 -385
  137. data/vendor/assets/javascripts/support/jasmine-jquery-1.7.0.js +720 -0
  138. data/vendor/assets/javascripts/support/jasmine-jquery-2.0.0.js +812 -0
  139. data/vendor/assets/javascripts/support/sinon-chai.js +17 -0
  140. data/vendor/assets/javascripts/support/sinon.js +1138 -643
  141. metadata +57 -36
  142. data/app/controllers/teaspoon/spec_controller.rb +0 -38
  143. data/app/helpers/teaspoon/spec_helper.rb +0 -36
  144. data/app/views/teaspoon/spec/_require_js.html.erb +0 -21
  145. data/app/views/teaspoon/spec/_standard.html.erb +0 -4
  146. data/app/views/teaspoon/spec/runner.html.erb +0 -19
  147. data/lib/generators/teaspoon/install/templates/env.rb +0 -38
  148. data/lib/generators/teaspoon/install/templates/jasmine/initializer.rb +0 -64
  149. data/lib/generators/teaspoon/install/templates/mocha/initializer.rb +0 -64
  150. data/lib/generators/teaspoon/install/templates/qunit/initializer.rb +0 -64
  151. data/lib/teaspoon/check_coverage.rb +0 -33
  152. data/lib/teaspoon/drivers/base_driver.rb +0 -10
  153. data/lib/teaspoon/exception_handling.rb +0 -18
  154. data/lib/teaspoon/formatters/base_formatter.rb +0 -63
  155. data/spec/dummy/config/initializers/teaspoon.rb +0 -41
  156. data/spec/teaspoon/check_coverage_spec.rb +0 -50
  157. data/spec/teaspoon/formatters/base_formatter_spec.rb +0 -45
  158. data/vendor/assets/javascripts/support/chai.MIT.LICENSE +0 -22
  159. data/vendor/assets/javascripts/support/expect.MIT.LICENSE +0 -22
  160. data/vendor/assets/javascripts/support/jasmine-jquery.MIT.LICENSE +0 -20
  161. data/vendor/assets/javascripts/support/jasmine-jquery.js +0 -659
  162. data/vendor/assets/javascripts/support/sinon-chai.MIT-ISH.LICENSE +0 -13
  163. data/vendor/assets/javascripts/support/sinon.BSD.LICENSE +0 -27
@@ -27,10 +27,14 @@
27
27
  // perform real require()
28
28
  // by invoking the module's
29
29
  // registered function
30
- if (!module.exports) {
31
- module.exports = {};
32
- module.client = module.component = true;
33
- module.call(this, module.exports, require.relative(resolved), module);
30
+ if (!module._resolving && !module.exports) {
31
+ var mod = {};
32
+ mod.exports = {};
33
+ mod.client = mod.component = true;
34
+ module._resolving = true;
35
+ module.call(this, mod.exports, require.relative(resolved), mod);
36
+ delete module._resolving;
37
+ module.exports = mod.exports;
34
38
  }
35
39
 
36
40
  return module.exports;
@@ -64,7 +68,6 @@
64
68
 
65
69
  require.resolve = function(path) {
66
70
  if (path.charAt(0) === '/') path = path.slice(1);
67
- var index = path + '/index.js';
68
71
 
69
72
  var paths = [
70
73
  path,
@@ -77,10 +80,7 @@
77
80
  for (var i = 0; i < paths.length; i++) {
78
81
  var path = paths[i];
79
82
  if (require.modules.hasOwnProperty(path)) return path;
80
- }
81
-
82
- if (require.aliases.hasOwnProperty(index)) {
83
- return require.aliases[index];
83
+ if (require.aliases.hasOwnProperty(path)) return require.aliases[path];
84
84
  }
85
85
  };
86
86
 
@@ -200,287 +200,745 @@
200
200
 
201
201
  return localRequire;
202
202
  };
203
- require.register("chai/index.js", function(exports, require, module){
204
- module.exports = require('./lib/chai');
205
-
206
- });
207
- require.register("chai/lib/chai.js", function(exports, require, module){
203
+ require.register("chaijs-assertion-error/index.js", function(exports, require, module){
208
204
  /*!
209
- * chai
210
- * Copyright(c) 2011-2013 Jake Luer <jake@alogicalparadox.com>
205
+ * assertion-error
206
+ * Copyright(c) 2013 Jake Luer <jake@qualiancy.com>
211
207
  * MIT Licensed
212
208
  */
213
209
 
214
- var used = []
215
- , exports = module.exports = {};
210
+ /*!
211
+ * Return a function that will copy properties from
212
+ * one object to another excluding any originally
213
+ * listed. Returned function will create a new `{}`.
214
+ *
215
+ * @param {String} excluded properties ...
216
+ * @return {Function}
217
+ */
218
+
219
+ function exclude () {
220
+ var excludes = [].slice.call(arguments);
221
+
222
+ function excludeProps (res, obj) {
223
+ Object.keys(obj).forEach(function (key) {
224
+ if (!~excludes.indexOf(key)) res[key] = obj[key];
225
+ });
226
+ }
227
+
228
+ return function extendExclude () {
229
+ var args = [].slice.call(arguments)
230
+ , i = 0
231
+ , res = {};
232
+
233
+ for (; i < args.length; i++) {
234
+ excludeProps(res, args[i]);
235
+ }
236
+
237
+ return res;
238
+ };
239
+ };
216
240
 
217
241
  /*!
218
- * Chai version
242
+ * Primary Exports
243
+ */
244
+
245
+ module.exports = AssertionError;
246
+
247
+ /**
248
+ * ### AssertionError
249
+ *
250
+ * An extension of the JavaScript `Error` constructor for
251
+ * assertion and validation scenarios.
252
+ *
253
+ * @param {String} message
254
+ * @param {Object} properties to include (optional)
255
+ * @param {callee} start stack function (optional)
219
256
  */
220
257
 
221
- exports.version = '1.6.1';
258
+ function AssertionError (message, _props, ssf) {
259
+ var extend = exclude('name', 'message', 'stack', 'constructor', 'toJSON')
260
+ , props = extend(_props || {});
261
+
262
+ // default values
263
+ this.message = message || 'Unspecified AssertionError';
264
+ this.showDiff = false;
265
+
266
+ // copy from properties
267
+ for (var key in props) {
268
+ this[key] = props[key];
269
+ }
270
+
271
+ // capture stack trace
272
+ ssf = ssf || arguments.callee;
273
+ if (ssf && Error.captureStackTrace) {
274
+ Error.captureStackTrace(this, ssf);
275
+ }
276
+ }
222
277
 
223
278
  /*!
224
- * Primary `Assertion` prototype
279
+ * Inherit from Error.prototype
225
280
  */
226
281
 
227
- exports.Assertion = require('./chai/assertion');
282
+ AssertionError.prototype = Object.create(Error.prototype);
228
283
 
229
284
  /*!
230
- * Assertion Error
285
+ * Statically set name
231
286
  */
232
287
 
233
- exports.AssertionError = require('./chai/error');
288
+ AssertionError.prototype.name = 'AssertionError';
234
289
 
235
290
  /*!
236
- * Utils for plugins (not exported)
291
+ * Ensure correct constructor
237
292
  */
238
293
 
239
- var util = require('./chai/utils');
294
+ AssertionError.prototype.constructor = AssertionError;
240
295
 
241
296
  /**
242
- * # .use(function)
243
- *
244
- * Provides a way to extend the internals of Chai
297
+ * Allow errors to be converted to JSON for static transfer.
245
298
  *
246
- * @param {Function}
247
- * @returns {this} for chaining
248
- * @api public
299
+ * @param {Boolean} include stack (default: `true`)
300
+ * @return {Object} object that can be `JSON.stringify`
249
301
  */
250
302
 
251
- exports.use = function (fn) {
252
- if (!~used.indexOf(fn)) {
253
- fn(this, util);
254
- used.push(fn);
303
+ AssertionError.prototype.toJSON = function (stack) {
304
+ var extend = exclude('constructor', 'toJSON', 'stack')
305
+ , props = extend({ name: this.name }, this);
306
+
307
+ // include stack if exists and not turned off
308
+ if (false !== stack && this.stack) {
309
+ props.stack = this.stack;
255
310
  }
256
311
 
257
- return this;
312
+ return props;
258
313
  };
259
314
 
315
+ });
316
+ require.register("chaijs-type-detect/lib/type.js", function(exports, require, module){
260
317
  /*!
261
- * Core Assertions
318
+ * type-detect
319
+ * Copyright(c) 2013 jake luer <jake@alogicalparadox.com>
320
+ * MIT Licensed
262
321
  */
263
322
 
264
- var core = require('./chai/core/assertions');
265
- exports.use(core);
266
-
267
323
  /*!
268
- * Expect interface
324
+ * Primary Exports
269
325
  */
270
326
 
271
- var expect = require('./chai/interface/expect');
272
- exports.use(expect);
327
+ var exports = module.exports = getType;
273
328
 
274
329
  /*!
275
- * Should interface
330
+ * Detectable javascript natives
276
331
  */
277
332
 
278
- var should = require('./chai/interface/should');
279
- exports.use(should);
333
+ var natives = {
334
+ '[object Array]': 'array'
335
+ , '[object RegExp]': 'regexp'
336
+ , '[object Function]': 'function'
337
+ , '[object Arguments]': 'arguments'
338
+ , '[object Date]': 'date'
339
+ };
280
340
 
281
- /*!
282
- * Assert interface
341
+ /**
342
+ * ### typeOf (obj)
343
+ *
344
+ * Use several different techniques to determine
345
+ * the type of object being tested.
346
+ *
347
+ *
348
+ * @param {Mixed} object
349
+ * @return {String} object type
350
+ * @api public
283
351
  */
284
352
 
285
- var assert = require('./chai/interface/assert');
286
- exports.use(assert);
353
+ function getType (obj) {
354
+ var str = Object.prototype.toString.call(obj);
355
+ if (natives[str]) return natives[str];
356
+ if (obj === null) return 'null';
357
+ if (obj === undefined) return 'undefined';
358
+ if (obj === Object(obj)) return 'object';
359
+ return typeof obj;
360
+ }
361
+
362
+ exports.Library = Library;
363
+
364
+ /**
365
+ * ### Library
366
+ *
367
+ * Create a repository for custom type detection.
368
+ *
369
+ * ```js
370
+ * var lib = new type.Library;
371
+ * ```
372
+ *
373
+ */
374
+
375
+ function Library () {
376
+ this.tests = {};
377
+ }
378
+
379
+ /**
380
+ * #### .of (obj)
381
+ *
382
+ * Expose replacement `typeof` detection to the library.
383
+ *
384
+ * ```js
385
+ * if ('string' === lib.of('hello world')) {
386
+ * // ...
387
+ * }
388
+ * ```
389
+ *
390
+ * @param {Mixed} object to test
391
+ * @return {String} type
392
+ */
393
+
394
+ Library.prototype.of = getType;
395
+
396
+ /**
397
+ * #### .define (type, test)
398
+ *
399
+ * Add a test to for the `.test()` assertion.
400
+ *
401
+ * Can be defined as a regular expression:
402
+ *
403
+ * ```js
404
+ * lib.define('int', /^[0-9]+$/);
405
+ * ```
406
+ *
407
+ * ... or as a function:
408
+ *
409
+ * ```js
410
+ * lib.define('bln', function (obj) {
411
+ * if ('boolean' === lib.of(obj)) return true;
412
+ * var blns = [ 'yes', 'no', 'true', 'false', 1, 0 ];
413
+ * if ('string' === lib.of(obj)) obj = obj.toLowerCase();
414
+ * return !! ~blns.indexOf(obj);
415
+ * });
416
+ * ```
417
+ *
418
+ * @param {String} type
419
+ * @param {RegExp|Function} test
420
+ * @api public
421
+ */
422
+
423
+ Library.prototype.define = function (type, test) {
424
+ if (arguments.length === 1) return this.tests[type];
425
+ this.tests[type] = test;
426
+ return this;
427
+ };
428
+
429
+ /**
430
+ * #### .test (obj, test)
431
+ *
432
+ * Assert that an object is of type. Will first
433
+ * check natives, and if that does not pass it will
434
+ * use the user defined custom tests.
435
+ *
436
+ * ```js
437
+ * assert(lib.test('1', 'int'));
438
+ * assert(lib.test('yes', 'bln'));
439
+ * ```
440
+ *
441
+ * @param {Mixed} object
442
+ * @param {String} type
443
+ * @return {Boolean} result
444
+ * @api public
445
+ */
446
+
447
+ Library.prototype.test = function (obj, type) {
448
+ if (type === getType(obj)) return true;
449
+ var test = this.tests[type];
450
+
451
+ if (test && 'regexp' === getType(test)) {
452
+ return test.test(obj);
453
+ } else if (test && 'function' === getType(test)) {
454
+ return test(obj);
455
+ } else {
456
+ throw new ReferenceError('Type test "' + type + '" not defined or invalid.');
457
+ }
458
+ };
287
459
 
288
460
  });
289
- require.register("chai/lib/chai/assertion.js", function(exports, require, module){
461
+ require.register("chaijs-deep-eql/lib/eql.js", function(exports, require, module){
290
462
  /*!
291
- * chai
292
- * http://chaijs.com
293
- * Copyright(c) 2011-2013 Jake Luer <jake@alogicalparadox.com>
463
+ * deep-eql
464
+ * Copyright(c) 2013 Jake Luer <jake@alogicalparadox.com>
294
465
  * MIT Licensed
295
466
  */
296
467
 
297
468
  /*!
298
- * Module dependencies.
469
+ * Module dependencies
299
470
  */
300
471
 
301
- var AssertionError = require('./error')
302
- , util = require('./utils')
303
- , flag = util.flag;
472
+ var type = require('type-detect');
304
473
 
305
474
  /*!
306
- * Module export.
475
+ * Buffer.isBuffer browser shim
307
476
  */
308
477
 
309
- module.exports = Assertion;
310
-
478
+ var Buffer;
479
+ try { Buffer = require('buffer').Buffer; }
480
+ catch(ex) {
481
+ Buffer = {};
482
+ Buffer.isBuffer = function() { return false; }
483
+ }
311
484
 
312
485
  /*!
313
- * Assertion Constructor
486
+ * Primary Export
487
+ */
488
+
489
+ module.exports = deepEqual;
490
+
491
+ /**
492
+ * Assert super-strict (egal) equality between
493
+ * two objects of any type.
314
494
  *
315
- * Creates object for chaining.
495
+ * @param {Mixed} a
496
+ * @param {Mixed} b
497
+ * @param {Array} memoised (optional)
498
+ * @return {Boolean} equal match
499
+ */
500
+
501
+ function deepEqual(a, b, m) {
502
+ if (sameValue(a, b)) {
503
+ return true;
504
+ } else if ('date' === type(a)) {
505
+ return dateEqual(a, b);
506
+ } else if ('regexp' === type(a)) {
507
+ return regexpEqual(a, b);
508
+ } else if (Buffer.isBuffer(a)) {
509
+ return bufferEqual(a, b);
510
+ } else if ('arguments' === type(a)) {
511
+ return argumentsEqual(a, b, m);
512
+ } else if (!typeEqual(a, b)) {
513
+ return false;
514
+ } else if (('object' !== type(a) && 'object' !== type(b))
515
+ && ('array' !== type(a) && 'array' !== type(b))) {
516
+ return sameValue(a, b);
517
+ } else {
518
+ return objectEqual(a, b, m);
519
+ }
520
+ }
521
+
522
+ /*!
523
+ * Strict (egal) equality test. Ensures that NaN always
524
+ * equals NaN and `-0` does not equal `+0`.
316
525
  *
317
- * @api private
526
+ * @param {Mixed} a
527
+ * @param {Mixed} b
528
+ * @return {Boolean} equal match
318
529
  */
319
530
 
320
- function Assertion (obj, msg, stack) {
321
- flag(this, 'ssfi', stack || arguments.callee);
322
- flag(this, 'object', obj);
323
- flag(this, 'message', msg);
531
+ function sameValue(a, b) {
532
+ if (a === b) return a !== 0 || 1 / a === 1 / b;
533
+ return a !== a && b !== b;
324
534
  }
325
535
 
326
536
  /*!
327
- * ### Assertion.includeStack
537
+ * Compare the types of two given objects and
538
+ * return if they are equal. Note that an Array
539
+ * has a type of `array` (not `object`) and arguments
540
+ * have a type of `arguments` (not `array`/`object`).
328
541
  *
329
- * User configurable property, influences whether stack trace
330
- * is included in Assertion error message. Default of false
331
- * suppresses stack trace in the error message
542
+ * @param {Mixed} a
543
+ * @param {Mixed} b
544
+ * @return {Boolean} result
545
+ */
546
+
547
+ function typeEqual(a, b) {
548
+ return type(a) === type(b);
549
+ }
550
+
551
+ /*!
552
+ * Compare two Date objects by asserting that
553
+ * the time values are equal using `saveValue`.
332
554
  *
333
- * Assertion.includeStack = true; // enable stack on error
555
+ * @param {Date} a
556
+ * @param {Date} b
557
+ * @return {Boolean} result
558
+ */
559
+
560
+ function dateEqual(a, b) {
561
+ if ('date' !== type(b)) return false;
562
+ return sameValue(a.getTime(), b.getTime());
563
+ }
564
+
565
+ /*!
566
+ * Compare two regular expressions by converting them
567
+ * to string and checking for `sameValue`.
334
568
  *
335
- * @api public
569
+ * @param {RegExp} a
570
+ * @param {RegExp} b
571
+ * @return {Boolean} result
336
572
  */
337
573
 
338
- Assertion.includeStack = false;
574
+ function regexpEqual(a, b) {
575
+ if ('regexp' !== type(b)) return false;
576
+ return sameValue(a.toString(), b.toString());
577
+ }
339
578
 
340
579
  /*!
341
- * ### Assertion.showDiff
580
+ * Assert deep equality of two `arguments` objects.
581
+ * Unfortunately, these must be sliced to arrays
582
+ * prior to test to ensure no bad behavior.
342
583
  *
343
- * User configurable property, influences whether or not
344
- * the `showDiff` flag should be included in the thrown
345
- * AssertionErrors. `false` will always be `false`; `true`
346
- * will be true when the assertion has requested a diff
347
- * be shown.
584
+ * @param {Arguments} a
585
+ * @param {Arguments} b
586
+ * @param {Array} memoize (optional)
587
+ * @return {Boolean} result
588
+ */
589
+
590
+ function argumentsEqual(a, b, m) {
591
+ if ('arguments' !== type(b)) return false;
592
+ a = [].slice.call(a);
593
+ b = [].slice.call(b);
594
+ return deepEqual(a, b, m);
595
+ }
596
+
597
+ /*!
598
+ * Get enumerable properties of a given object.
348
599
  *
349
- * @api public
600
+ * @param {Object} a
601
+ * @return {Array} property names
350
602
  */
351
603
 
352
- Assertion.showDiff = true;
604
+ function enumerable(a) {
605
+ var res = [];
606
+ for (var key in a) res.push(key);
607
+ return res;
608
+ }
353
609
 
354
- Assertion.addProperty = function (name, fn) {
355
- util.addProperty(this.prototype, name, fn);
356
- };
610
+ /*!
611
+ * Simple equality for flat iterable objects
612
+ * such as Arrays or Node.js buffers.
613
+ *
614
+ * @param {Iterable} a
615
+ * @param {Iterable} b
616
+ * @return {Boolean} result
617
+ */
357
618
 
358
- Assertion.addMethod = function (name, fn) {
359
- util.addMethod(this.prototype, name, fn);
360
- };
619
+ function iterableEqual(a, b) {
620
+ if (a.length !== b.length) return false;
361
621
 
362
- Assertion.addChainableMethod = function (name, fn, chainingBehavior) {
363
- util.addChainableMethod(this.prototype, name, fn, chainingBehavior);
364
- };
622
+ var i = 0;
623
+ var match = true;
365
624
 
366
- Assertion.overwriteProperty = function (name, fn) {
367
- util.overwriteProperty(this.prototype, name, fn);
368
- };
625
+ for (; i < a.length; i++) {
626
+ if (a[i] !== b[i]) {
627
+ match = false;
628
+ break;
629
+ }
630
+ }
369
631
 
370
- Assertion.overwriteMethod = function (name, fn) {
371
- util.overwriteMethod(this.prototype, name, fn);
372
- };
632
+ return match;
633
+ }
373
634
 
374
635
  /*!
375
- * ### .assert(expression, message, negateMessage, expected, actual)
636
+ * Extension to `iterableEqual` specifically
637
+ * for Node.js Buffers.
376
638
  *
377
- * Executes an expression and check expectations. Throws AssertionError for reporting if test doesn't pass.
378
- *
379
- * @name assert
380
- * @param {Philosophical} expression to be tested
381
- * @param {String} message to display if fails
382
- * @param {String} negatedMessage to display if negated expression fails
383
- * @param {Mixed} expected value (remember to check for negation)
384
- * @param {Mixed} actual (optional) will default to `this.obj`
385
- * @api private
639
+ * @param {Buffer} a
640
+ * @param {Mixed} b
641
+ * @return {Boolean} result
386
642
  */
387
643
 
388
- Assertion.prototype.assert = function (expr, msg, negateMsg, expected, _actual, showDiff) {
389
- var ok = util.test(this, arguments);
390
- if (true !== showDiff) showDiff = false;
391
- if (true !== Assertion.showDiff) showDiff = false;
392
-
393
- if (!ok) {
394
- var msg = util.getMessage(this, arguments)
395
- , actual = util.getActual(this, arguments);
396
- throw new AssertionError({
397
- message: msg
398
- , actual: actual
399
- , expected: expected
400
- , stackStartFunction: (Assertion.includeStack) ? this.assert : flag(this, 'ssfi')
401
- , showDiff: showDiff
402
- });
403
- }
404
- };
644
+ function bufferEqual(a, b) {
645
+ if (!Buffer.isBuffer(b)) return false;
646
+ return iterableEqual(a, b);
647
+ }
405
648
 
406
649
  /*!
407
- * ### ._obj
650
+ * Block for `objectEqual` ensuring non-existing
651
+ * values don't get in.
408
652
  *
409
- * Quick reference to stored `actual` value for plugin developers.
653
+ * @param {Mixed} object
654
+ * @return {Boolean} result
655
+ */
656
+
657
+ function isValue(a) {
658
+ return a !== null && a !== undefined;
659
+ }
660
+
661
+ /*!
662
+ * Recursively check the equality of two objects.
663
+ * Once basic sameness has been established it will
664
+ * defer to `deepEqual` for each enumerable key
665
+ * in the object.
410
666
  *
411
- * @api private
667
+ * @param {Mixed} a
668
+ * @param {Mixed} b
669
+ * @return {Boolean} result
412
670
  */
413
671
 
414
- Object.defineProperty(Assertion.prototype, '_obj',
415
- { get: function () {
416
- return flag(this, 'object');
672
+ function objectEqual(a, b, m) {
673
+ if (!isValue(a) || !isValue(b)) {
674
+ return false;
675
+ }
676
+
677
+ if (a.prototype !== b.prototype) {
678
+ return false;
679
+ }
680
+
681
+ var i;
682
+ if (m) {
683
+ for (i = 0; i < m.length; i++) {
684
+ if ((m[i][0] === a && m[i][1] === b)
685
+ || (m[i][0] === b && m[i][1] === a)) {
686
+ return true;
687
+ }
417
688
  }
418
- , set: function (val) {
419
- flag(this, 'object', val);
689
+ } else {
690
+ m = [];
691
+ }
692
+
693
+ try {
694
+ var ka = enumerable(a);
695
+ var kb = enumerable(b);
696
+ } catch (ex) {
697
+ return false;
698
+ }
699
+
700
+ ka.sort();
701
+ kb.sort();
702
+
703
+ if (!iterableEqual(ka, kb)) {
704
+ return false;
705
+ }
706
+
707
+ m.push([ a, b ]);
708
+
709
+ var key;
710
+ for (i = ka.length - 1; i >= 0; i--) {
711
+ key = ka[i];
712
+ if (!deepEqual(a[key], b[key], m)) {
713
+ return false;
420
714
  }
421
- });
715
+ }
716
+
717
+ return true;
718
+ }
719
+
720
+ });
721
+ require.register("chai/index.js", function(exports, require, module){
722
+ module.exports = require('./lib/chai');
422
723
 
423
724
  });
424
- require.register("chai/lib/chai/error.js", function(exports, require, module){
725
+ require.register("chai/lib/chai.js", function(exports, require, module){
425
726
  /*!
426
727
  * chai
427
- * Copyright(c) 2011-2013 Jake Luer <jake@alogicalparadox.com>
728
+ * Copyright(c) 2011-2014 Jake Luer <jake@alogicalparadox.com>
428
729
  * MIT Licensed
429
730
  */
430
731
 
732
+ var used = []
733
+ , exports = module.exports = {};
734
+
431
735
  /*!
432
- * Main export
736
+ * Chai version
433
737
  */
434
738
 
435
- module.exports = AssertionError;
739
+ exports.version = '1.8.1';
740
+
741
+ /*!
742
+ * Assertion Error
743
+ */
744
+
745
+ exports.AssertionError = require('assertion-error');
746
+
747
+ /*!
748
+ * Utils for plugins (not exported)
749
+ */
750
+
751
+ var util = require('./chai/utils');
436
752
 
437
753
  /**
438
- * # AssertionError (constructor)
439
- *
440
- * Create a new assertion error based on the Javascript
441
- * `Error` prototype.
754
+ * # .use(function)
442
755
  *
443
- * **Options**
444
- * - message
445
- * - actual
446
- * - expected
447
- * - operator
448
- * - startStackFunction
756
+ * Provides a way to extend the internals of Chai
449
757
  *
450
- * @param {Object} options
758
+ * @param {Function}
759
+ * @returns {this} for chaining
451
760
  * @api public
452
761
  */
453
762
 
454
- function AssertionError (options) {
455
- options = options || {};
456
- this.message = options.message;
457
- this.actual = options.actual;
458
- this.expected = options.expected;
459
- this.operator = options.operator;
460
- this.showDiff = options.showDiff;
461
-
462
- if (options.stackStartFunction && Error.captureStackTrace) {
463
- var stackStartFunction = options.stackStartFunction;
464
- Error.captureStackTrace(this, stackStartFunction);
763
+ exports.use = function (fn) {
764
+ if (!~used.indexOf(fn)) {
765
+ fn(this, util);
766
+ used.push(fn);
465
767
  }
466
- }
768
+
769
+ return this;
770
+ };
467
771
 
468
772
  /*!
469
- * Inherit from Error
773
+ * Primary `Assertion` prototype
470
774
  */
471
775
 
472
- AssertionError.prototype = Object.create(Error.prototype);
473
- AssertionError.prototype.name = 'AssertionError';
474
- AssertionError.prototype.constructor = AssertionError;
776
+ var assertion = require('./chai/assertion');
777
+ exports.use(assertion);
475
778
 
476
- /**
477
- * # toString()
478
- *
479
- * Override default to string method
779
+ /*!
780
+ * Core Assertions
781
+ */
782
+
783
+ var core = require('./chai/core/assertions');
784
+ exports.use(core);
785
+
786
+ /*!
787
+ * Expect interface
788
+ */
789
+
790
+ var expect = require('./chai/interface/expect');
791
+ exports.use(expect);
792
+
793
+ /*!
794
+ * Should interface
795
+ */
796
+
797
+ var should = require('./chai/interface/should');
798
+ exports.use(should);
799
+
800
+ /*!
801
+ * Assert interface
480
802
  */
481
803
 
482
- AssertionError.prototype.toString = function() {
483
- return this.message;
804
+ var assert = require('./chai/interface/assert');
805
+ exports.use(assert);
806
+
807
+ });
808
+ require.register("chai/lib/chai/assertion.js", function(exports, require, module){
809
+ /*!
810
+ * chai
811
+ * http://chaijs.com
812
+ * Copyright(c) 2011-2014 Jake Luer <jake@alogicalparadox.com>
813
+ * MIT Licensed
814
+ */
815
+
816
+ module.exports = function (_chai, util) {
817
+ /*!
818
+ * Module dependencies.
819
+ */
820
+
821
+ var AssertionError = _chai.AssertionError
822
+ , flag = util.flag;
823
+
824
+ /*!
825
+ * Module export.
826
+ */
827
+
828
+ _chai.Assertion = Assertion;
829
+
830
+ /*!
831
+ * Assertion Constructor
832
+ *
833
+ * Creates object for chaining.
834
+ *
835
+ * @api private
836
+ */
837
+
838
+ function Assertion (obj, msg, stack) {
839
+ flag(this, 'ssfi', stack || arguments.callee);
840
+ flag(this, 'object', obj);
841
+ flag(this, 'message', msg);
842
+ }
843
+
844
+ /*!
845
+ * ### Assertion.includeStack
846
+ *
847
+ * User configurable property, influences whether stack trace
848
+ * is included in Assertion error message. Default of false
849
+ * suppresses stack trace in the error message
850
+ *
851
+ * Assertion.includeStack = true; // enable stack on error
852
+ *
853
+ * @api public
854
+ */
855
+
856
+ Assertion.includeStack = false;
857
+
858
+ /*!
859
+ * ### Assertion.showDiff
860
+ *
861
+ * User configurable property, influences whether or not
862
+ * the `showDiff` flag should be included in the thrown
863
+ * AssertionErrors. `false` will always be `false`; `true`
864
+ * will be true when the assertion has requested a diff
865
+ * be shown.
866
+ *
867
+ * @api public
868
+ */
869
+
870
+ Assertion.showDiff = true;
871
+
872
+ Assertion.addProperty = function (name, fn) {
873
+ util.addProperty(this.prototype, name, fn);
874
+ };
875
+
876
+ Assertion.addMethod = function (name, fn) {
877
+ util.addMethod(this.prototype, name, fn);
878
+ };
879
+
880
+ Assertion.addChainableMethod = function (name, fn, chainingBehavior) {
881
+ util.addChainableMethod(this.prototype, name, fn, chainingBehavior);
882
+ };
883
+
884
+ Assertion.overwriteProperty = function (name, fn) {
885
+ util.overwriteProperty(this.prototype, name, fn);
886
+ };
887
+
888
+ Assertion.overwriteMethod = function (name, fn) {
889
+ util.overwriteMethod(this.prototype, name, fn);
890
+ };
891
+
892
+ Assertion.overwriteChainableMethod = function (name, fn, chainingBehavior) {
893
+ util.overwriteChainableMethod(this.prototype, name, fn, chainingBehavior);
894
+ };
895
+
896
+ /*!
897
+ * ### .assert(expression, message, negateMessage, expected, actual)
898
+ *
899
+ * Executes an expression and check expectations. Throws AssertionError for reporting if test doesn't pass.
900
+ *
901
+ * @name assert
902
+ * @param {Philosophical} expression to be tested
903
+ * @param {String} message to display if fails
904
+ * @param {String} negatedMessage to display if negated expression fails
905
+ * @param {Mixed} expected value (remember to check for negation)
906
+ * @param {Mixed} actual (optional) will default to `this.obj`
907
+ * @api private
908
+ */
909
+
910
+ Assertion.prototype.assert = function (expr, msg, negateMsg, expected, _actual, showDiff) {
911
+ var ok = util.test(this, arguments);
912
+ if (true !== showDiff) showDiff = false;
913
+ if (true !== Assertion.showDiff) showDiff = false;
914
+
915
+ if (!ok) {
916
+ var msg = util.getMessage(this, arguments)
917
+ , actual = util.getActual(this, arguments);
918
+ throw new AssertionError(msg, {
919
+ actual: actual
920
+ , expected: expected
921
+ , showDiff: showDiff
922
+ }, (Assertion.includeStack) ? this.assert : flag(this, 'ssfi'));
923
+ }
924
+ };
925
+
926
+ /*!
927
+ * ### ._obj
928
+ *
929
+ * Quick reference to stored `actual` value for plugin developers.
930
+ *
931
+ * @api private
932
+ */
933
+
934
+ Object.defineProperty(Assertion.prototype, '_obj',
935
+ { get: function () {
936
+ return flag(this, 'object');
937
+ }
938
+ , set: function (val) {
939
+ flag(this, 'object', val);
940
+ }
941
+ });
484
942
  };
485
943
 
486
944
  });
@@ -488,7 +946,7 @@
488
946
  /*!
489
947
  * chai
490
948
  * http://chaijs.com
491
- * Copyright(c) 2011-2013 Jake Luer <jake@alogicalparadox.com>
949
+ * Copyright(c) 2011-2014 Jake Luer <jake@alogicalparadox.com>
492
950
  * MIT Licensed
493
951
  */
494
952
 
@@ -500,7 +958,7 @@
500
958
  /**
501
959
  * ### Language Chains
502
960
  *
503
- * The following are provide as chainable getters to
961
+ * The following are provided as chainable getters to
504
962
  * improve the readability of your assertions. They
505
963
  * do not provide an testing capability unless they
506
964
  * have been overwritten by a plugin.
@@ -513,6 +971,7 @@
513
971
  * - is
514
972
  * - that
515
973
  * - and
974
+ * - has
516
975
  * - have
517
976
  * - with
518
977
  * - at
@@ -524,7 +983,7 @@
524
983
  */
525
984
 
526
985
  [ 'to', 'be', 'been'
527
- , 'is', 'and', 'have'
986
+ , 'is', 'and', 'has', 'have'
528
987
  , 'with', 'that', 'at'
529
988
  , 'of', 'same' ].forEach(function (chain) {
530
989
  Assertion.addProperty(chain, function () {
@@ -632,9 +1091,21 @@
632
1091
 
633
1092
  function include (val, msg) {
634
1093
  if (msg) flag(this, 'message', msg);
635
- var obj = flag(this, 'object')
1094
+ var obj = flag(this, 'object');
1095
+
1096
+ if (_.type(val) === 'object') {
1097
+ if (!flag(this, 'negate')) {
1098
+ for (var k in val) new Assertion(obj).property(k, val[k]);
1099
+ return;
1100
+ }
1101
+ var subset = {}
1102
+ for (var k in val) subset[k] = obj[k]
1103
+ var expected = _.eql(subset, val);
1104
+ } else {
1105
+ var expected = obj && ~obj.indexOf(val)
1106
+ }
636
1107
  this.assert(
637
- ~obj.indexOf(val)
1108
+ expected
638
1109
  , 'expected #{this} to include ' + _.inspect(val)
639
1110
  , 'expected #{this} to not include ' + _.inspect(val));
640
1111
  }
@@ -731,8 +1202,8 @@
731
1202
  *
732
1203
  * Asserts that the target is `undefined`.
733
1204
  *
734
- * expect(undefined).to.be.undefined;
735
- * expect(null).to.not.be.undefined;
1205
+ * expect(undefined).to.be.undefined;
1206
+ * expect(null).to.not.be.undefined;
736
1207
  *
737
1208
  * @name undefined
738
1209
  * @api public
@@ -1489,6 +1960,7 @@
1489
1960
  * @param {String|RegExp} expected error message
1490
1961
  * @param {String} message _optional_
1491
1962
  * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Error_types
1963
+ * @returns error for chaining (null if no error)
1492
1964
  * @api public
1493
1965
  */
1494
1966
 
@@ -1513,7 +1985,10 @@
1513
1985
  constructor = null;
1514
1986
  errMsg = null;
1515
1987
  } else if (typeof constructor === 'function') {
1516
- name = (new constructor()).name;
1988
+ name = constructor.prototype.name || constructor.name;
1989
+ if (name === 'Error' && constructor !== Error) {
1990
+ name = (new constructor()).name;
1991
+ }
1517
1992
  } else {
1518
1993
  constructor = null;
1519
1994
  }
@@ -1527,12 +2002,14 @@
1527
2002
  err === desiredError
1528
2003
  , 'expected #{this} to throw #{exp} but #{act} was thrown'
1529
2004
  , 'expected #{this} to not throw #{exp}'
1530
- , desiredError
1531
- , err
2005
+ , (desiredError instanceof Error ? desiredError.toString() : desiredError)
2006
+ , (err instanceof Error ? err.toString() : err)
1532
2007
  );
1533
2008
 
2009
+ flag(this, 'object', err);
1534
2010
  return this;
1535
2011
  }
2012
+
1536
2013
  // next, check constructor
1537
2014
  if (constructor) {
1538
2015
  this.assert(
@@ -1540,11 +2017,15 @@
1540
2017
  , 'expected #{this} to throw #{exp} but #{act} was thrown'
1541
2018
  , 'expected #{this} to not throw #{exp} but #{act} was thrown'
1542
2019
  , name
1543
- , err
2020
+ , (err instanceof Error ? err.toString() : err)
1544
2021
  );
1545
2022
 
1546
- if (!errMsg) return this;
2023
+ if (!errMsg) {
2024
+ flag(this, 'object', err);
2025
+ return this;
2026
+ }
1547
2027
  }
2028
+
1548
2029
  // next, check message
1549
2030
  var message = 'object' === _.type(err) && "message" in err
1550
2031
  ? err.message
@@ -1559,6 +2040,7 @@
1559
2040
  , message
1560
2041
  );
1561
2042
 
2043
+ flag(this, 'object', err);
1562
2044
  return this;
1563
2045
  } else if ((message != null) && errMsg && 'string' === typeof errMsg) {
1564
2046
  this.assert(
@@ -1569,6 +2051,7 @@
1569
2051
  , message
1570
2052
  );
1571
2053
 
2054
+ flag(this, 'object', err);
1572
2055
  return this;
1573
2056
  } else {
1574
2057
  thrown = true;
@@ -1591,9 +2074,11 @@
1591
2074
  thrown === true
1592
2075
  , 'expected #{this} to throw ' + expectedThrown + actuallyGot
1593
2076
  , 'expected #{this} to not throw ' + expectedThrown + actuallyGot
1594
- , desiredError
1595
- , thrownError
2077
+ , (desiredError instanceof Error ? desiredError.toString() : desiredError)
2078
+ , (thrownError instanceof Error ? thrownError.toString() : thrownError)
1596
2079
  );
2080
+
2081
+ flag(this, 'object', thrownError);
1597
2082
  };
1598
2083
 
1599
2084
  Assertion.addMethod('throw', assertThrows);
@@ -1612,8 +2097,8 @@
1612
2097
  * To check if a constructor will respond to a static function,
1613
2098
  * set the `itself` flag.
1614
2099
  *
1615
- * Klass.baz = function(){};
1616
- * expect(Klass).itself.to.respondTo('baz');
2100
+ * Klass.baz = function(){};
2101
+ * expect(Klass).itself.to.respondTo('baz');
1617
2102
  *
1618
2103
  * @name respondTo
1619
2104
  * @param {String} method
@@ -1641,12 +2126,12 @@
1641
2126
  *
1642
2127
  * Sets the `itself` flag, later used by the `respondTo` assertion.
1643
2128
  *
1644
- * function Foo() {}
1645
- * Foo.bar = function() {}
1646
- * Foo.prototype.baz = function() {}
2129
+ * function Foo() {}
2130
+ * Foo.bar = function() {}
2131
+ * Foo.prototype.baz = function() {}
1647
2132
  *
1648
- * expect(Foo).itself.to.respondTo('bar');
1649
- * expect(Foo).itself.not.to.respondTo('baz');
2133
+ * expect(Foo).itself.to.respondTo('bar');
2134
+ * expect(Foo).itself.not.to.respondTo('baz');
1650
2135
  *
1651
2136
  * @name itself
1652
2137
  * @api public
@@ -1712,16 +2197,16 @@
1712
2197
  }
1713
2198
 
1714
2199
  /**
1715
- * ### .members
2200
+ * ### .members(set)
1716
2201
  *
1717
2202
  * Asserts that the target is a superset of `set`,
1718
2203
  * or that the target and `set` have the same members.
1719
2204
  *
1720
- * expect([1, 2, 3]).to.include.members([3, 2]);
1721
- * expect([1, 2, 3]).to.not.include.members([3, 2, 8]);
2205
+ * expect([1, 2, 3]).to.include.members([3, 2]);
2206
+ * expect([1, 2, 3]).to.not.include.members([3, 2, 8]);
1722
2207
  *
1723
- * expect([4, 2]).to.have.members([2, 4]);
1724
- * expect([5, 2]).to.not.have.members([5, 2, 1]);
2208
+ * expect([4, 2]).to.have.members([2, 4]);
2209
+ * expect([5, 2]).to.not.have.members([5, 2, 1]);
1725
2210
  *
1726
2211
  * @name members
1727
2212
  * @param {Array} set
@@ -1760,7 +2245,7 @@
1760
2245
  require.register("chai/lib/chai/interface/assert.js", function(exports, require, module){
1761
2246
  /*!
1762
2247
  * chai
1763
- * Copyright(c) 2011-2013 Jake Luer <jake@alogicalparadox.com>
2248
+ * Copyright(c) 2011-2014 Jake Luer <jake@alogicalparadox.com>
1764
2249
  * MIT Licensed
1765
2250
  */
1766
2251
 
@@ -1815,13 +2300,12 @@
1815
2300
  */
1816
2301
 
1817
2302
  assert.fail = function (actual, expected, message, operator) {
1818
- throw new chai.AssertionError({
2303
+ message = message || 'assert.fail()';
2304
+ throw new chai.AssertionError(message, {
1819
2305
  actual: actual
1820
2306
  , expected: expected
1821
- , message: message
1822
2307
  , operator: operator
1823
- , stackStartFunction: assert.fail
1824
- });
2308
+ }, assert.fail);
1825
2309
  };
1826
2310
 
1827
2311
  /**
@@ -1842,6 +2326,24 @@
1842
2326
  new Assertion(val, msg).is.ok;
1843
2327
  };
1844
2328
 
2329
+ /**
2330
+ * ### .notOk(object, [message])
2331
+ *
2332
+ * Asserts that `object` is falsy.
2333
+ *
2334
+ * assert.notOk('everything', 'this will fail');
2335
+ * assert.notOk(false, 'this will pass');
2336
+ *
2337
+ * @name notOk
2338
+ * @param {Mixed} object to test
2339
+ * @param {String} message
2340
+ * @api public
2341
+ */
2342
+
2343
+ assert.notOk = function (val, msg) {
2344
+ new Assertion(val, msg).is.not.ok;
2345
+ };
2346
+
1845
2347
  /**
1846
2348
  * ### .equal(actual, expected, [message])
1847
2349
  *
@@ -2399,18 +2901,7 @@
2399
2901
  */
2400
2902
 
2401
2903
  assert.include = function (exp, inc, msg) {
2402
- var obj = new Assertion(exp, msg);
2403
-
2404
- if (Array.isArray(exp)) {
2405
- obj.to.include(inc);
2406
- } else if ('string' === typeof exp) {
2407
- obj.to.contain.string(inc);
2408
- } else {
2409
- throw new chai.AssertionError({
2410
- message: 'expected an array or string'
2411
- , stackStartFunction: assert.include
2412
- });
2413
- }
2904
+ new Assertion(exp, msg).include(inc);
2414
2905
  };
2415
2906
 
2416
2907
  /**
@@ -2430,18 +2921,7 @@
2430
2921
  */
2431
2922
 
2432
2923
  assert.notInclude = function (exp, inc, msg) {
2433
- var obj = new Assertion(exp, msg);
2434
-
2435
- if (Array.isArray(exp)) {
2436
- obj.to.not.include(inc);
2437
- } else if ('string' === typeof exp) {
2438
- obj.to.not.contain.string(inc);
2439
- } else {
2440
- throw new chai.AssertionError({
2441
- message: 'expected an array or string'
2442
- , stackStartFunction: assert.include
2443
- });
2444
- }
2924
+ new Assertion(exp, msg).not.include(inc);
2445
2925
  };
2446
2926
 
2447
2927
  /**
@@ -2685,7 +3165,8 @@
2685
3165
  errt = null;
2686
3166
  }
2687
3167
 
2688
- new Assertion(fn, msg).to.Throw(errt, errs);
3168
+ var assertErr = new Assertion(fn, msg).to.Throw(errt, errs);
3169
+ return flag(assertErr, 'object');
2689
3170
  };
2690
3171
 
2691
3172
  /**
@@ -2823,7 +3304,7 @@
2823
3304
  require.register("chai/lib/chai/interface/expect.js", function(exports, require, module){
2824
3305
  /*!
2825
3306
  * chai
2826
- * Copyright(c) 2011-2013 Jake Luer <jake@alogicalparadox.com>
3307
+ * Copyright(c) 2011-2014 Jake Luer <jake@alogicalparadox.com>
2827
3308
  * MIT Licensed
2828
3309
  */
2829
3310
 
@@ -2838,7 +3319,7 @@
2838
3319
  require.register("chai/lib/chai/interface/should.js", function(exports, require, module){
2839
3320
  /*!
2840
3321
  * chai
2841
- * Copyright(c) 2011-2013 Jake Luer <jake@alogicalparadox.com>
3322
+ * Copyright(c) 2011-2014 Jake Luer <jake@alogicalparadox.com>
2842
3323
  * MIT Licensed
2843
3324
  */
2844
3325
 
@@ -2917,7 +3398,7 @@
2917
3398
  require.register("chai/lib/chai/utils/addChainableMethod.js", function(exports, require, module){
2918
3399
  /*!
2919
3400
  * Chai - addChainingMethod utility
2920
- * Copyright(c) 2012-2013 Jake Luer <jake@alogicalparadox.com>
3401
+ * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
2921
3402
  * MIT Licensed
2922
3403
  */
2923
3404
 
@@ -2972,15 +3453,27 @@
2972
3453
  */
2973
3454
 
2974
3455
  module.exports = function (ctx, name, method, chainingBehavior) {
2975
- if (typeof chainingBehavior !== 'function')
3456
+ if (typeof chainingBehavior !== 'function') {
2976
3457
  chainingBehavior = function () { };
3458
+ }
3459
+
3460
+ var chainableBehavior = {
3461
+ method: method
3462
+ , chainingBehavior: chainingBehavior
3463
+ };
3464
+
3465
+ // save the methods so we can overwrite them later, if we need to.
3466
+ if (!ctx.__methods) {
3467
+ ctx.__methods = {};
3468
+ }
3469
+ ctx.__methods[name] = chainableBehavior;
2977
3470
 
2978
3471
  Object.defineProperty(ctx, name,
2979
3472
  { get: function () {
2980
- chainingBehavior.call(this);
3473
+ chainableBehavior.chainingBehavior.call(this);
2981
3474
 
2982
3475
  var assert = function () {
2983
- var result = method.apply(this, arguments);
3476
+ var result = chainableBehavior.method.apply(this, arguments);
2984
3477
  return result === undefined ? this : result;
2985
3478
  };
2986
3479
 
@@ -3014,7 +3507,7 @@
3014
3507
  require.register("chai/lib/chai/utils/addMethod.js", function(exports, require, module){
3015
3508
  /*!
3016
3509
  * Chai - addMethod utility
3017
- * Copyright(c) 2012-2013 Jake Luer <jake@alogicalparadox.com>
3510
+ * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
3018
3511
  * MIT Licensed
3019
3512
  */
3020
3513
 
@@ -3054,7 +3547,7 @@
3054
3547
  require.register("chai/lib/chai/utils/addProperty.js", function(exports, require, module){
3055
3548
  /*!
3056
3549
  * Chai - addProperty utility
3057
- * Copyright(c) 2012-2013 Jake Luer <jake@alogicalparadox.com>
3550
+ * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
3058
3551
  * MIT Licensed
3059
3552
  */
3060
3553
 
@@ -3093,141 +3586,11 @@
3093
3586
  });
3094
3587
  };
3095
3588
 
3096
- });
3097
- require.register("chai/lib/chai/utils/eql.js", function(exports, require, module){
3098
- // This is (almost) directly from Node.js assert
3099
- // https://github.com/joyent/node/blob/f8c335d0caf47f16d31413f89aa28eda3878e3aa/lib/assert.js
3100
-
3101
- module.exports = _deepEqual;
3102
-
3103
- var getEnumerableProperties = require('./getEnumerableProperties');
3104
-
3105
- // for the browser
3106
- var Buffer;
3107
- try {
3108
- Buffer = require('buffer').Buffer;
3109
- } catch (ex) {
3110
- Buffer = {
3111
- isBuffer: function () { return false; }
3112
- };
3113
- }
3114
-
3115
- function _deepEqual(actual, expected, memos) {
3116
-
3117
- // 7.1. All identical values are equivalent, as determined by ===.
3118
- if (actual === expected) {
3119
- return true;
3120
-
3121
- } else if (Buffer.isBuffer(actual) && Buffer.isBuffer(expected)) {
3122
- if (actual.length != expected.length) return false;
3123
-
3124
- for (var i = 0; i < actual.length; i++) {
3125
- if (actual[i] !== expected[i]) return false;
3126
- }
3127
-
3128
- return true;
3129
-
3130
- // 7.2. If the expected value is a Date object, the actual value is
3131
- // equivalent if it is also a Date object that refers to the same time.
3132
- } else if (actual instanceof Date && expected instanceof Date) {
3133
- return actual.getTime() === expected.getTime();
3134
-
3135
- // 7.3. Other pairs that do not both pass typeof value == 'object',
3136
- // equivalence is determined by ==.
3137
- } else if (typeof actual != 'object' && typeof expected != 'object') {
3138
- return actual === expected;
3139
-
3140
- } else if (actual instanceof RegExp && expected instanceof RegExp){
3141
- return actual.toString() === expected.toString();
3142
-
3143
- // 7.4. For all other Object pairs, including Array objects, equivalence is
3144
- // determined by having the same number of owned properties (as verified
3145
- // with Object.prototype.hasOwnProperty.call), the same set of keys
3146
- // (although not necessarily the same order), equivalent values for every
3147
- // corresponding key, and an identical 'prototype' property. Note: this
3148
- // accounts for both named and indexed properties on Arrays.
3149
- } else {
3150
- return objEquiv(actual, expected, memos);
3151
- }
3152
- }
3153
-
3154
- function isUndefinedOrNull(value) {
3155
- return value === null || value === undefined;
3156
- }
3157
-
3158
- function isArguments(object) {
3159
- return Object.prototype.toString.call(object) == '[object Arguments]';
3160
- }
3161
-
3162
- function objEquiv(a, b, memos) {
3163
- if (isUndefinedOrNull(a) || isUndefinedOrNull(b))
3164
- return false;
3165
-
3166
- // an identical 'prototype' property.
3167
- if (a.prototype !== b.prototype) return false;
3168
-
3169
- // check if we have already compared a and b
3170
- var i;
3171
- if (memos) {
3172
- for(i = 0; i < memos.length; i++) {
3173
- if ((memos[i][0] === a && memos[i][1] === b) ||
3174
- (memos[i][0] === b && memos[i][1] === a))
3175
- return true;
3176
- }
3177
- } else {
3178
- memos = [];
3179
- }
3180
-
3181
- //~~~I've managed to break Object.keys through screwy arguments passing.
3182
- // Converting to array solves the problem.
3183
- if (isArguments(a)) {
3184
- if (!isArguments(b)) {
3185
- return false;
3186
- }
3187
- a = pSlice.call(a);
3188
- b = pSlice.call(b);
3189
- return _deepEqual(a, b, memos);
3190
- }
3191
- try {
3192
- var ka = getEnumerableProperties(a),
3193
- kb = getEnumerableProperties(b),
3194
- key;
3195
- } catch (e) {//happens when one is a string literal and the other isn't
3196
- return false;
3197
- }
3198
-
3199
- // having the same number of owned properties (keys incorporates
3200
- // hasOwnProperty)
3201
- if (ka.length != kb.length)
3202
- return false;
3203
-
3204
- //the same set of keys (although not necessarily the same order),
3205
- ka.sort();
3206
- kb.sort();
3207
- //~~~cheap key test
3208
- for (i = ka.length - 1; i >= 0; i--) {
3209
- if (ka[i] != kb[i])
3210
- return false;
3211
- }
3212
-
3213
- // remember objects we have compared to guard against circular references
3214
- memos.push([ a, b ]);
3215
-
3216
- //equivalent values for every corresponding key, and
3217
- //~~~possibly expensive deep test
3218
- for (i = ka.length - 1; i >= 0; i--) {
3219
- key = ka[i];
3220
- if (!_deepEqual(a[key], b[key], memos)) return false;
3221
- }
3222
-
3223
- return true;
3224
- }
3225
-
3226
3589
  });
3227
3590
  require.register("chai/lib/chai/utils/flag.js", function(exports, require, module){
3228
3591
  /*!
3229
3592
  * Chai - flag utility
3230
- * Copyright(c) 2012-2013 Jake Luer <jake@alogicalparadox.com>
3593
+ * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
3231
3594
  * MIT Licensed
3232
3595
  */
3233
3596
 
@@ -3262,7 +3625,7 @@
3262
3625
  require.register("chai/lib/chai/utils/getActual.js", function(exports, require, module){
3263
3626
  /*!
3264
3627
  * Chai - getActual utility
3265
- * Copyright(c) 2012-2013 Jake Luer <jake@alogicalparadox.com>
3628
+ * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
3266
3629
  * MIT Licensed
3267
3630
  */
3268
3631
 
@@ -3284,7 +3647,7 @@
3284
3647
  require.register("chai/lib/chai/utils/getEnumerableProperties.js", function(exports, require, module){
3285
3648
  /*!
3286
3649
  * Chai - getEnumerableProperties utility
3287
- * Copyright(c) 2012-2013 Jake Luer <jake@alogicalparadox.com>
3650
+ * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
3288
3651
  * MIT Licensed
3289
3652
  */
3290
3653
 
@@ -3312,7 +3675,7 @@
3312
3675
  require.register("chai/lib/chai/utils/getMessage.js", function(exports, require, module){
3313
3676
  /*!
3314
3677
  * Chai - message composition utility
3315
- * Copyright(c) 2012-2013 Jake Luer <jake@alogicalparadox.com>
3678
+ * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
3316
3679
  * MIT Licensed
3317
3680
  */
3318
3681
 
@@ -3332,7 +3695,7 @@
3332
3695
  * and template tags. Template tags will return
3333
3696
  * a stringified inspection of the object referenced.
3334
3697
  *
3335
- * Messsage template tags:
3698
+ * Message template tags:
3336
3699
  * - `#{this}` current asserted object
3337
3700
  * - `#{act}` actual value
3338
3701
  * - `#{exp}` expected value
@@ -3364,7 +3727,7 @@
3364
3727
  require.register("chai/lib/chai/utils/getName.js", function(exports, require, module){
3365
3728
  /*!
3366
3729
  * Chai - getName utility
3367
- * Copyright(c) 2012-2013 Jake Luer <jake@alogicalparadox.com>
3730
+ * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
3368
3731
  * MIT Licensed
3369
3732
  */
3370
3733
 
@@ -3387,7 +3750,7 @@
3387
3750
  require.register("chai/lib/chai/utils/getPathValue.js", function(exports, require, module){
3388
3751
  /*!
3389
3752
  * Chai - getPathValue utility
3390
- * Copyright(c) 2012-2013 Jake Luer <jake@alogicalparadox.com>
3753
+ * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
3391
3754
  * @see https://github.com/logicalparadox/filtr
3392
3755
  * MIT Licensed
3393
3756
  */
@@ -3492,7 +3855,7 @@
3492
3855
  require.register("chai/lib/chai/utils/getProperties.js", function(exports, require, module){
3493
3856
  /*!
3494
3857
  * Chai - getProperties utility
3495
- * Copyright(c) 2012-2013 Jake Luer <jake@alogicalparadox.com>
3858
+ * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
3496
3859
  * MIT Licensed
3497
3860
  */
3498
3861
 
@@ -3592,7 +3955,7 @@
3592
3955
  * Deep equal utility
3593
3956
  */
3594
3957
 
3595
- exports.eql = require('./eql');
3958
+ exports.eql = require('deep-eql');
3596
3959
 
3597
3960
  /*!
3598
3961
  * Deep path value
@@ -3636,6 +3999,12 @@
3636
3999
 
3637
4000
  exports.addChainableMethod = require('./addChainableMethod');
3638
4001
 
4002
+ /*!
4003
+ * Overwrite chainable method
4004
+ */
4005
+
4006
+ exports.overwriteChainableMethod = require('./overwriteChainableMethod');
4007
+
3639
4008
 
3640
4009
  });
3641
4010
  require.register("chai/lib/chai/utils/inspect.js", function(exports, require, module){
@@ -3706,7 +4075,11 @@
3706
4075
  value.inspect !== exports.inspect &&
3707
4076
  // Also filter out any prototype objects using the circular check.
3708
4077
  !(value.constructor && value.constructor.prototype === value)) {
3709
- return value.inspect(recurseTimes);
4078
+ var ret = value.inspect(recurseTimes);
4079
+ if (typeof ret !== 'string') {
4080
+ ret = formatValue(ctx, ret, recurseTimes);
4081
+ }
4082
+ return ret;
3710
4083
  }
3711
4084
 
3712
4085
  // Primitive types cannot have properties
@@ -3960,7 +4333,7 @@
3960
4333
  require.register("chai/lib/chai/utils/objDisplay.js", function(exports, require, module){
3961
4334
  /*!
3962
4335
  * Chai - flag utility
3963
- * Copyright(c) 2012-2013 Jake Luer <jake@alogicalparadox.com>
4336
+ * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
3964
4337
  * MIT Licensed
3965
4338
  */
3966
4339
 
@@ -4011,7 +4384,7 @@
4011
4384
  require.register("chai/lib/chai/utils/overwriteMethod.js", function(exports, require, module){
4012
4385
  /*!
4013
4386
  * Chai - overwriteMethod utility
4014
- * Copyright(c) 2012-2013 Jake Luer <jake@alogicalparadox.com>
4387
+ * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
4015
4388
  * MIT Licensed
4016
4389
  */
4017
4390
 
@@ -4065,7 +4438,7 @@
4065
4438
  require.register("chai/lib/chai/utils/overwriteProperty.js", function(exports, require, module){
4066
4439
  /*!
4067
4440
  * Chai - overwriteProperty utility
4068
- * Copyright(c) 2012-2013 Jake Luer <jake@alogicalparadox.com>
4441
+ * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
4069
4442
  * MIT Licensed
4070
4443
  */
4071
4444
 
@@ -4118,11 +4491,67 @@
4118
4491
  });
4119
4492
  };
4120
4493
 
4494
+ });
4495
+ require.register("chai/lib/chai/utils/overwriteChainableMethod.js", function(exports, require, module){
4496
+ /*!
4497
+ * Chai - overwriteChainableMethod utility
4498
+ * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
4499
+ * MIT Licensed
4500
+ */
4501
+
4502
+ /**
4503
+ * ### overwriteChainableMethod (ctx, name, fn)
4504
+ *
4505
+ * Overwites an already existing chainable method
4506
+ * and provides access to the previous function or
4507
+ * property. Must return functions to be used for
4508
+ * name.
4509
+ *
4510
+ * utils.overwriteChainableMethod(chai.Assertion.prototype, 'length',
4511
+ * function (_super) {
4512
+ * }
4513
+ * , function (_super) {
4514
+ * }
4515
+ * );
4516
+ *
4517
+ * Can also be accessed directly from `chai.Assertion`.
4518
+ *
4519
+ * chai.Assertion.overwriteChainableMethod('foo', fn, fn);
4520
+ *
4521
+ * Then can be used as any other assertion.
4522
+ *
4523
+ * expect(myFoo).to.have.length(3);
4524
+ * expect(myFoo).to.have.length.above(3);
4525
+ *
4526
+ * @param {Object} ctx object whose method / property is to be overwritten
4527
+ * @param {String} name of method / property to overwrite
4528
+ * @param {Function} method function that returns a function to be used for name
4529
+ * @param {Function} chainingBehavior function that returns a function to be used for property
4530
+ * @name overwriteChainableMethod
4531
+ * @api public
4532
+ */
4533
+
4534
+ module.exports = function (ctx, name, method, chainingBehavior) {
4535
+ var chainableBehavior = ctx.__methods[name];
4536
+
4537
+ var _chainingBehavior = chainableBehavior.chainingBehavior;
4538
+ chainableBehavior.chainingBehavior = function () {
4539
+ var result = chainingBehavior(_chainingBehavior).call(this);
4540
+ return result === undefined ? this : result;
4541
+ };
4542
+
4543
+ var _method = chainableBehavior.method;
4544
+ chainableBehavior.method = function () {
4545
+ var result = method(_method).apply(this, arguments);
4546
+ return result === undefined ? this : result;
4547
+ };
4548
+ };
4549
+
4121
4550
  });
4122
4551
  require.register("chai/lib/chai/utils/test.js", function(exports, require, module){
4123
4552
  /*!
4124
4553
  * Chai - test utility
4125
- * Copyright(c) 2012-2013 Jake Luer <jake@alogicalparadox.com>
4554
+ * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
4126
4555
  * MIT Licensed
4127
4556
  */
4128
4557
 
@@ -4151,7 +4580,7 @@
4151
4580
  require.register("chai/lib/chai/utils/transferFlags.js", function(exports, require, module){
4152
4581
  /*!
4153
4582
  * Chai - transferFlags utility
4154
- * Copyright(c) 2012-2013 Jake Luer <jake@alogicalparadox.com>
4583
+ * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
4155
4584
  * MIT Licensed
4156
4585
  */
4157
4586
 
@@ -4198,7 +4627,7 @@
4198
4627
  require.register("chai/lib/chai/utils/type.js", function(exports, require, module){
4199
4628
  /*!
4200
4629
  * Chai - type utility
4201
- * Copyright(c) 2012-2013 Jake Luer <jake@alogicalparadox.com>
4630
+ * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
4202
4631
  * MIT Licensed
4203
4632
  */
4204
4633
 
@@ -4243,12 +4672,25 @@
4243
4672
  };
4244
4673
 
4245
4674
  });
4246
- require.alias("chai/index.js", "chai/index.js");
4247
4675
 
4248
- if (typeof exports == "object") {
4676
+
4677
+
4678
+
4679
+ require.alias("chaijs-assertion-error/index.js", "chai/deps/assertion-error/index.js");
4680
+ require.alias("chaijs-assertion-error/index.js", "chai/deps/assertion-error/index.js");
4681
+ require.alias("chaijs-assertion-error/index.js", "assertion-error/index.js");
4682
+ require.alias("chaijs-assertion-error/index.js", "chaijs-assertion-error/index.js");
4683
+ require.alias("chaijs-deep-eql/lib/eql.js", "chai/deps/deep-eql/lib/eql.js");
4684
+ require.alias("chaijs-deep-eql/lib/eql.js", "chai/deps/deep-eql/index.js");
4685
+ require.alias("chaijs-deep-eql/lib/eql.js", "deep-eql/index.js");
4686
+ require.alias("chaijs-type-detect/lib/type.js", "chaijs-deep-eql/deps/type-detect/lib/type.js");
4687
+ require.alias("chaijs-type-detect/lib/type.js", "chaijs-deep-eql/deps/type-detect/index.js");
4688
+ require.alias("chaijs-type-detect/lib/type.js", "chaijs-type-detect/index.js");
4689
+ require.alias("chaijs-deep-eql/lib/eql.js", "chaijs-deep-eql/index.js");
4690
+ require.alias("chai/index.js", "chai/index.js");if (typeof exports == "object") {
4249
4691
  module.exports = require("chai");
4250
4692
  } else if (typeof define == "function" && define.amd) {
4251
- define(function(){ return require("chai"); });
4693
+ define([], function(){ return require("chai"); });
4252
4694
  } else {
4253
4695
  this["chai"] = require("chai");
4254
4696
  }})();