stylus-source 0.28.2 → 0.29.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. data/VERSION +1 -1
  2. data/vendor/Readme.md +1 -1
  3. data/vendor/lib/functions/index.js +75 -1
  4. data/vendor/lib/functions/url.js +11 -12
  5. data/vendor/lib/lexer.js +2 -1
  6. data/vendor/lib/stylus.js +1 -1
  7. data/vendor/lib/visitor/compiler.js +1 -1
  8. data/vendor/lib/visitor/evaluator.js +2 -0
  9. data/vendor/node_modules/cssom/package.json +0 -3
  10. data/vendor/node_modules/mocha/History.md +21 -0
  11. data/vendor/node_modules/mocha/Makefile +2 -2
  12. data/vendor/node_modules/mocha/_mocha.js +141 -48
  13. data/vendor/node_modules/mocha/bin/_mocha +53 -61
  14. data/vendor/node_modules/mocha/bin/mocha +3 -0
  15. data/vendor/node_modules/mocha/lib/interfaces/bdd.js +23 -6
  16. data/vendor/node_modules/mocha/lib/mocha.js +55 -4
  17. data/vendor/node_modules/mocha/lib/reporters/base.js +5 -5
  18. data/vendor/node_modules/mocha/lib/reporters/dot.js +5 -4
  19. data/vendor/node_modules/mocha/lib/reporters/html.js +25 -12
  20. data/vendor/node_modules/mocha/lib/reporters/landing.js +2 -2
  21. data/vendor/node_modules/mocha/lib/reporters/min.js +2 -2
  22. data/vendor/node_modules/mocha/lib/reporters/nyan.js +6 -6
  23. data/vendor/node_modules/mocha/lib/reporters/progress.js +1 -1
  24. data/vendor/node_modules/mocha/lib/reporters/xunit.js +5 -1
  25. data/vendor/node_modules/mocha/lib/runnable.js +1 -1
  26. data/vendor/node_modules/mocha/lib/runner.js +3 -3
  27. data/vendor/node_modules/mocha/lib/suite.js +7 -1
  28. data/vendor/node_modules/mocha/lib/utils.js +1 -1
  29. data/vendor/node_modules/mocha/mocha.css +18 -1
  30. data/vendor/node_modules/mocha/mocha.js +141 -48
  31. data/vendor/node_modules/mocha/package.json +6 -3
  32. data/vendor/node_modules/mocha/test.js +3 -5
  33. data/vendor/node_modules/should/History.md +11 -0
  34. data/vendor/node_modules/should/Readme.md +22 -10
  35. data/vendor/node_modules/should/lib/should.js +70 -62
  36. data/vendor/node_modules/should/package.json +5 -2
  37. data/vendor/node_modules/should/test/should.test.js +64 -0
  38. data/vendor/package.json +1 -1
  39. data/vendor/testing/foo.css +3 -0
  40. data/vendor/testing/index.js +1 -0
  41. data/vendor/testing/small.styl +12 -10
  42. metadata +3 -16
  43. data/vendor/node_modules/mocha/editors/JavaScript mocha.tmbundle/Snippets/bdd - after each.tmSnippet +0 -16
  44. data/vendor/node_modules/mocha/editors/JavaScript mocha.tmbundle/Snippets/bdd - after.tmSnippet +0 -16
  45. data/vendor/node_modules/mocha/editors/JavaScript mocha.tmbundle/Snippets/bdd - before each.tmSnippet +0 -16
  46. data/vendor/node_modules/mocha/editors/JavaScript mocha.tmbundle/Snippets/bdd - before.tmSnippet +0 -16
  47. data/vendor/node_modules/mocha/editors/JavaScript mocha.tmbundle/Snippets/bdd - it.tmSnippet +0 -16
  48. data/vendor/node_modules/mocha/editors/JavaScript mocha.tmbundle/Snippets/untitled.tmSnippet +0 -16
  49. data/vendor/node_modules/mocha/editors/JavaScript mocha.tmbundle/info.plist +0 -19
  50. data/vendor/node_modules/mocha/support/compile.js +0 -154
  51. data/vendor/node_modules/mocha/support/foot.js +0 -1
  52. data/vendor/node_modules/mocha/support/head.js +0 -2
  53. data/vendor/node_modules/mocha/support/tail.js +0 -150
  54. data/vendor/node_modules/mocha/support/template.html +0 -16
@@ -535,11 +535,6 @@ module.exports = function(suite){
535
535
 
536
536
  suite.on('pre-require', function(context){
537
537
 
538
- // noop variants
539
-
540
- context.xdescribe = function(){};
541
- context.xit = function(){};
542
-
543
538
  /**
544
539
  * Execute before running tests.
545
540
  */
@@ -572,6 +567,18 @@ module.exports = function(suite){
572
567
  suites[0].afterEach(fn);
573
568
  };
574
569
 
570
+ /**
571
+ * Pending describe.
572
+ */
573
+
574
+ context.xdescribe = context.xcontext = function(title, fn){
575
+ var suite = Suite.create(suites[0], title);
576
+ suite.pending = true;
577
+ suites.unshift(suite);
578
+ fn();
579
+ suites.shift();
580
+ };
581
+
575
582
  /**
576
583
  * Describe a "suite" with the given `title`
577
584
  * and callback `fn` containing nested suites
@@ -592,7 +599,17 @@ module.exports = function(suite){
592
599
  */
593
600
 
594
601
  context.it = context.specify = function(title, fn){
595
- suites[0].addTest(new Test(title, fn));
602
+ var suite = suites[0];
603
+ if (suite.pending) var fn = null;
604
+ suite.addTest(new Test(title, fn));
605
+ };
606
+
607
+ /**
608
+ * Pending test case.
609
+ */
610
+
611
+ context.xit = context.xspecify = function(title){
612
+ context.it(title);
596
613
  };
597
614
  });
598
615
  };
@@ -983,13 +1000,15 @@ Mocha.prototype.ui = function(name){
983
1000
  * @api private
984
1001
  */
985
1002
 
986
- Mocha.prototype.loadFiles = function(){
1003
+ Mocha.prototype.loadFiles = function(fn){
987
1004
  var suite = this.suite;
1005
+ var pending = this.files.length;
988
1006
  this.files.forEach(function(file){
989
1007
  file = path.resolve(file);
990
1008
  suite.emit('pre-require', global, file);
991
1009
  suite.emit('require', require(file), file);
992
1010
  suite.emit('post-require', global, file);
1011
+ --pending || (fn && fn());
993
1012
  });
994
1013
  };
995
1014
 
@@ -999,7 +1018,7 @@ Mocha.prototype.loadFiles = function(){
999
1018
  * @api private
1000
1019
  */
1001
1020
 
1002
- Mocha.prototype.growl = function(runner, reporter) {
1021
+ Mocha.prototype._growl = function(runner, reporter) {
1003
1022
  var notify = require('growl');
1004
1023
 
1005
1024
  runner.on('end', function(){
@@ -1032,6 +1051,55 @@ Mocha.prototype.grep = function(re){
1032
1051
  return this;
1033
1052
  };
1034
1053
 
1054
+ /**
1055
+ * Invert `.grep()` matches.
1056
+ *
1057
+ * @return {Mocha}
1058
+ * @api public
1059
+ */
1060
+
1061
+ Mocha.prototype.invert = function(){
1062
+ this.options.invert = true;
1063
+ return this;
1064
+ };
1065
+
1066
+ /**
1067
+ * Ignore global leaks.
1068
+ *
1069
+ * @return {Mocha}
1070
+ * @api public
1071
+ */
1072
+
1073
+ Mocha.prototype.ignoreLeaks = function(){
1074
+ this.options.ignoreLeaks = true;
1075
+ return this;
1076
+ };
1077
+
1078
+ /**
1079
+ * Enable growl support.
1080
+ *
1081
+ * @return {Mocha}
1082
+ * @api public
1083
+ */
1084
+
1085
+ Mocha.prototype.growl = function(){
1086
+ this.options.growl = true;
1087
+ return this;
1088
+ };
1089
+
1090
+ /**
1091
+ * Ignore `globals`.
1092
+ *
1093
+ * @param {Array} globals
1094
+ * @return {Mocha}
1095
+ * @api public
1096
+ */
1097
+
1098
+ Mocha.prototype.globals = function(globals){
1099
+ this.options.globals = globals;
1100
+ return this;
1101
+ };
1102
+
1035
1103
  /**
1036
1104
  * Run tests and invoke `fn()` when complete.
1037
1105
  *
@@ -1047,9 +1115,9 @@ Mocha.prototype.run = function(fn){
1047
1115
  var runner = new exports.Runner(suite);
1048
1116
  var reporter = new this._reporter(runner);
1049
1117
  runner.ignoreLeaks = options.ignoreLeaks;
1050
- if (options.grep) runner.grep(options.grep);
1118
+ if (options.grep) runner.grep(options.grep, options.invert);
1051
1119
  if (options.globals) runner.globals(options.globals);
1052
- if (options.growl) this.growl(runner, reporter);
1120
+ if (options.growl) this._growl(runner, reporter);
1053
1121
  return runner.run(fn);
1054
1122
  };
1055
1123
 
@@ -1132,7 +1200,7 @@ exports.colors = {
1132
1200
 
1133
1201
  var color = exports.color = function(type, str) {
1134
1202
  if (!exports.useColors) return str;
1135
- return '\033[' + exports.colors[type] + 'm' + str + '\033[0m';
1203
+ return '\u001b[' + exports.colors[type] + 'm' + str + '\u001b[0m';
1136
1204
  };
1137
1205
 
1138
1206
  /**
@@ -1155,19 +1223,19 @@ exports.window = {
1155
1223
 
1156
1224
  exports.cursor = {
1157
1225
  hide: function(){
1158
- process.stdout.write('\033[?25l');
1226
+ process.stdout.write('\u001b[?25l');
1159
1227
  },
1160
1228
 
1161
1229
  show: function(){
1162
- process.stdout.write('\033[?25h');
1230
+ process.stdout.write('\u001b[?25h');
1163
1231
  },
1164
1232
 
1165
1233
  deleteLine: function(){
1166
- process.stdout.write('\033[2K');
1234
+ process.stdout.write('\u001b[2K');
1167
1235
  },
1168
1236
 
1169
1237
  beginningOfLine: function(){
1170
- process.stdout.write('\033[0G');
1238
+ process.stdout.write('\u001b[0G');
1171
1239
  },
1172
1240
 
1173
1241
  CR: function(){
@@ -1502,6 +1570,7 @@ function Dot(runner) {
1502
1570
  var self = this
1503
1571
  , stats = this.stats
1504
1572
  , width = Base.window.width * .75 | 0
1573
+ , c = '․'
1505
1574
  , n = 0;
1506
1575
 
1507
1576
  runner.on('start', function(){
@@ -1509,21 +1578,21 @@ function Dot(runner) {
1509
1578
  });
1510
1579
 
1511
1580
  runner.on('pending', function(test){
1512
- process.stdout.write(color('pending', '.'));
1581
+ process.stdout.write(color('pending', c));
1513
1582
  });
1514
1583
 
1515
1584
  runner.on('pass', function(test){
1516
1585
  if (++n % width == 0) process.stdout.write('\n ');
1517
1586
  if ('slow' == test.speed) {
1518
- process.stdout.write(color('bright yellow', '.'));
1587
+ process.stdout.write(color('bright yellow', c));
1519
1588
  } else {
1520
- process.stdout.write(color(test.speed, '.'));
1589
+ process.stdout.write(color(test.speed, c));
1521
1590
  }
1522
1591
  });
1523
1592
 
1524
1593
  runner.on('fail', function(test, err){
1525
1594
  if (++n % width == 0) process.stdout.write('\n ');
1526
- process.stdout.write(color('fail', '.'));
1595
+ process.stdout.write(color('fail', c));
1527
1596
  });
1528
1597
 
1529
1598
  runner.on('end', function(){
@@ -1628,8 +1697,8 @@ exports = module.exports = HTML;
1628
1697
 
1629
1698
  var statsTemplate = '<ul id="stats">'
1630
1699
  + '<li class="progress"><canvas width="40" height="40"></canvas></li>'
1631
- + '<li class="passes">passes: <em>0</em></li>'
1632
- + '<li class="failures">failures: <em>0</em></li>'
1700
+ + '<li class="passes"><a href="#">passes:</a> <em>0</em></li>'
1701
+ + '<li class="failures"><a href="#">failures:</a> <em>0</em></li>'
1633
1702
  + '<li class="duration">duration: <em>0</em>s</li>'
1634
1703
  + '</ul>';
1635
1704
 
@@ -1650,7 +1719,9 @@ function HTML(runner) {
1650
1719
  , stat = fragment(statsTemplate)
1651
1720
  , items = stat.getElementsByTagName('li')
1652
1721
  , passes = items[1].getElementsByTagName('em')[0]
1722
+ , passesLink = items[1].getElementsByTagName('a')[0]
1653
1723
  , failures = items[2].getElementsByTagName('em')[0]
1724
+ , failuresLink = items[2].getElementsByTagName('a')[0]
1654
1725
  , duration = items[3].getElementsByTagName('em')[0]
1655
1726
  , canvas = stat.getElementsByTagName('canvas')[0]
1656
1727
  , report = fragment('<ul id="report"></ul>')
@@ -1665,6 +1736,18 @@ function HTML(runner) {
1665
1736
 
1666
1737
  if (!root) return error('#mocha div missing, add it to your document');
1667
1738
 
1739
+ // pass toggle
1740
+ on(passesLink, 'click', function () {
1741
+ var className = /pass/.test(report.className) ? '' : ' pass';
1742
+ report.className = report.className.replace(/fail|pass/g, '') + className;
1743
+ });
1744
+
1745
+ // failure toggle
1746
+ on(failuresLink, 'click', function () {
1747
+ var className = /fail/.test(report.className) ? '' : ' fail';
1748
+ report.className = report.className.replace(/fail|pass/g, '') + className;
1749
+ });
1750
+
1668
1751
  root.appendChild(stat);
1669
1752
  root.appendChild(report);
1670
1753
 
@@ -1732,17 +1815,16 @@ function HTML(runner) {
1732
1815
  }
1733
1816
 
1734
1817
  // toggle code
1735
- var h2 = el.getElementsByTagName('h2')[0];
1736
-
1737
- on(h2, 'click', function(){
1738
- pre.style.display = 'none' == pre.style.display
1739
- ? 'block'
1740
- : 'none';
1741
- });
1742
-
1743
- // code
1744
1818
  // TODO: defer
1745
1819
  if (!test.pending) {
1820
+ var h2 = el.getElementsByTagName('h2')[0];
1821
+
1822
+ on(h2, 'click', function(){
1823
+ pre.style.display = 'none' == pre.style.display
1824
+ ? 'inline-block'
1825
+ : 'none';
1826
+ });
1827
+
1746
1828
  var pre = fragment('<pre><code>%e</code></pre>', utils.clean(test.fn.toString()));
1747
1829
  el.appendChild(pre);
1748
1830
  pre.style.display = 'none';
@@ -1802,6 +1884,7 @@ function on(el, event, fn) {
1802
1884
  el.attachEvent('on' + event, fn);
1803
1885
  }
1804
1886
  }
1887
+
1805
1888
  }); // module: reporters/html.js
1806
1889
 
1807
1890
  require.register("reporters/index.js", function(module, exports, require){
@@ -2192,14 +2275,14 @@ function Landing(runner) {
2192
2275
  }
2193
2276
 
2194
2277
  // render landing strip
2195
- stream.write('\033[4F\n\n');
2278
+ stream.write('\u001b[4F\n\n');
2196
2279
  stream.write(runway());
2197
2280
  stream.write('\n ');
2198
2281
  stream.write(color('runway', Array(col).join('⋅')));
2199
2282
  stream.write(plane)
2200
2283
  stream.write(color('runway', Array(width - col).join('⋅') + '\n'));
2201
2284
  stream.write(runway());
2202
- stream.write('\033[0m');
2285
+ stream.write('\u001b[0m');
2203
2286
  });
2204
2287
 
2205
2288
  runner.on('end', function(){
@@ -2409,9 +2492,9 @@ function Min(runner) {
2409
2492
 
2410
2493
  runner.on('start', function(){
2411
2494
  // clear screen
2412
- process.stdout.write('\033[2J');
2495
+ process.stdout.write('\u001b[2J');
2413
2496
  // set cursor position
2414
- process.stdout.write('\033[1;3H');
2497
+ process.stdout.write('\u001b[1;3H');
2415
2498
  });
2416
2499
 
2417
2500
  runner.on('end', this.epilogue.bind(this));
@@ -2516,7 +2599,7 @@ NyanCat.prototype.drawScoreboard = function(){
2516
2599
 
2517
2600
  function draw(color, n) {
2518
2601
  write(' ');
2519
- write('\033[' + color + 'm' + n + '\033[0m');
2602
+ write('\u001b[' + color + 'm' + n + '\u001b[0m');
2520
2603
  write('\n');
2521
2604
  }
2522
2605
 
@@ -2555,7 +2638,7 @@ NyanCat.prototype.drawRainbow = function(){
2555
2638
  var self = this;
2556
2639
 
2557
2640
  this.trajectories.forEach(function(line, index) {
2558
- write('\033[' + self.scoreboardWidth + 'C');
2641
+ write('\u001b[' + self.scoreboardWidth + 'C');
2559
2642
  write(line.join(''));
2560
2643
  write('\n');
2561
2644
  });
@@ -2575,7 +2658,7 @@ NyanCat.prototype.drawNyanCat = function(status) {
2575
2658
  var startWidth = this.scoreboardWidth + this.trajectories[0].length;
2576
2659
 
2577
2660
  [0, 1, 2, 3].forEach(function(index) {
2578
- write('\033[' + startWidth + 'C');
2661
+ write('\u001b[' + startWidth + 'C');
2579
2662
 
2580
2663
  switch (index) {
2581
2664
  case 0:
@@ -2623,7 +2706,7 @@ NyanCat.prototype.drawNyanCat = function(status) {
2623
2706
  */
2624
2707
 
2625
2708
  NyanCat.prototype.cursorUp = function(n) {
2626
- write('\033[' + n + 'A');
2709
+ write('\u001b[' + n + 'A');
2627
2710
  };
2628
2711
 
2629
2712
  /**
@@ -2634,7 +2717,7 @@ NyanCat.prototype.cursorUp = function(n) {
2634
2717
  */
2635
2718
 
2636
2719
  NyanCat.prototype.cursorDown = function(n) {
2637
- write('\033[' + n + 'B');
2720
+ write('\u001b[' + n + 'B');
2638
2721
  };
2639
2722
 
2640
2723
  /**
@@ -2670,7 +2753,7 @@ NyanCat.prototype.generateColors = function(){
2670
2753
  NyanCat.prototype.rainbowify = function(str){
2671
2754
  var color = this.rainbowColors[this.colorIndex % this.rainbowColors.length];
2672
2755
  this.colorIndex += 1;
2673
- return '\033[38;5;' + color + 'm' + str + '\033[0m';
2756
+ return '\u001b[38;5;' + color + 'm' + str + '\u001b[0m';
2674
2757
  };
2675
2758
 
2676
2759
  /**
@@ -2754,7 +2837,7 @@ function Progress(runner, options) {
2754
2837
  , i = width - n;
2755
2838
 
2756
2839
  cursor.CR();
2757
- process.stdout.write('\033[J');
2840
+ process.stdout.write('\u001b[J');
2758
2841
  process.stdout.write(color('progress', ' ' + options.open));
2759
2842
  process.stdout.write(Array(n).join(options.complete));
2760
2843
  process.stdout.write(Array(i).join(options.incomplete));
@@ -3051,7 +3134,11 @@ function XUnit(runner) {
3051
3134
  , tests = []
3052
3135
  , self = this;
3053
3136
 
3054
- runner.on('test end', function(test){
3137
+ runner.on('pass', function(test){
3138
+ tests.push(test);
3139
+ });
3140
+
3141
+ runner.on('fail', function(test){
3055
3142
  tests.push(test);
3056
3143
  });
3057
3144
 
@@ -3136,7 +3223,7 @@ require.register("runnable.js", function(module, exports, require){
3136
3223
  */
3137
3224
 
3138
3225
  var EventEmitter = require('browser/events').EventEmitter
3139
- , debug = require('browser/debug')('runnable');
3226
+ , debug = require('browser/debug')('mocha:runnable');
3140
3227
 
3141
3228
  /**
3142
3229
  * Save timer references to avoid Sinon interfering (see GH-237).
@@ -3332,7 +3419,7 @@ require.register("runner.js", function(module, exports, require){
3332
3419
  */
3333
3420
 
3334
3421
  var EventEmitter = require('browser/events').EventEmitter
3335
- , debug = require('browser/debug')('runner')
3422
+ , debug = require('browser/debug')('mocha:runner')
3336
3423
  , Test = require('./test')
3337
3424
  , utils = require('./utils')
3338
3425
  , filter = utils.filter
@@ -3741,9 +3828,9 @@ Runner.prototype.runSuite = function(suite, fn){
3741
3828
  */
3742
3829
 
3743
3830
  Runner.prototype.uncaught = function(err){
3744
- debug('uncaught exception');
3831
+ debug('uncaught exception %s', err.message);
3745
3832
  var runnable = this.currentRunnable;
3746
- if ('failed' == runnable.state) return;
3833
+ if (!runnable || 'failed' == runnable.state) return;
3747
3834
  runnable.clearTimeout();
3748
3835
  err.uncaught = true;
3749
3836
  this.fail(runnable, err);
@@ -3825,7 +3912,7 @@ require.register("suite.js", function(module, exports, require){
3825
3912
  */
3826
3913
 
3827
3914
  var EventEmitter = require('browser/events').EventEmitter
3828
- , debug = require('browser/debug')('suite')
3915
+ , debug = require('browser/debug')('mocha:suite')
3829
3916
  , utils = require('./utils')
3830
3917
  , Hook = require('./hook');
3831
3918
 
@@ -3851,6 +3938,7 @@ exports = module.exports = Suite;
3851
3938
  exports.create = function(parent, title){
3852
3939
  var suite = new Suite(title, parent.ctx);
3853
3940
  suite.parent = parent;
3941
+ if (parent.pending) suite.pending = true;
3854
3942
  title = suite.fullTitle();
3855
3943
  parent.addSuite(suite);
3856
3944
  return suite;
@@ -3870,6 +3958,7 @@ function Suite(title, ctx) {
3870
3958
  this.ctx = ctx;
3871
3959
  this.suites = [];
3872
3960
  this.tests = [];
3961
+ this.pending = false;
3873
3962
  this._beforeEach = [];
3874
3963
  this._beforeAll = [];
3875
3964
  this._afterEach = [];
@@ -3943,6 +4032,7 @@ Suite.prototype.bail = function(bail){
3943
4032
  */
3944
4033
 
3945
4034
  Suite.prototype.beforeAll = function(fn){
4035
+ if (this.pending) return this;
3946
4036
  var hook = new Hook('"before all" hook', fn);
3947
4037
  hook.parent = this;
3948
4038
  hook.timeout(this.timeout());
@@ -3961,6 +4051,7 @@ Suite.prototype.beforeAll = function(fn){
3961
4051
  */
3962
4052
 
3963
4053
  Suite.prototype.afterAll = function(fn){
4054
+ if (this.pending) return this;
3964
4055
  var hook = new Hook('"after all" hook', fn);
3965
4056
  hook.parent = this;
3966
4057
  hook.timeout(this.timeout());
@@ -3979,6 +4070,7 @@ Suite.prototype.afterAll = function(fn){
3979
4070
  */
3980
4071
 
3981
4072
  Suite.prototype.beforeEach = function(fn){
4073
+ if (this.pending) return this;
3982
4074
  var hook = new Hook('"before each" hook', fn);
3983
4075
  hook.parent = this;
3984
4076
  hook.timeout(this.timeout());
@@ -3997,6 +4089,7 @@ Suite.prototype.beforeEach = function(fn){
3997
4089
  */
3998
4090
 
3999
4091
  Suite.prototype.afterEach = function(fn){
4092
+ if (this.pending) return this;
4000
4093
  var hook = new Hook('"after each" hook', fn);
4001
4094
  hook.parent = this;
4002
4095
  hook.timeout(this.timeout());
@@ -4136,7 +4229,7 @@ require.register("utils.js", function(module, exports, require){
4136
4229
  var fs = require('browser/fs')
4137
4230
  , path = require('browser/path')
4138
4231
  , join = path.join
4139
- , debug = require('browser/debug')('watch');
4232
+ , debug = require('browser/debug')('mocha:watch');
4140
4233
 
4141
4234
  /**
4142
4235
  * Ignored directories.
@@ -11,15 +11,15 @@ var program = require('commander')
11
11
  , vm = require('vm')
12
12
  , resolve = path.resolve
13
13
  , exists = fs.existsSync || path.existsSync
14
- , mocha = require('../')
15
- , utils = mocha.utils
16
- , reporters = mocha.reporters
17
- , interfaces = mocha.interfaces
18
- , Context = mocha.Context
19
- , Runner = mocha.Runner
20
- , Suite = mocha.Suite
14
+ , Mocha = require('../')
15
+ , utils = Mocha.utils
16
+ , reporters = Mocha.reporters
17
+ , interfaces = Mocha.interfaces
18
+ , Base = reporters.Base
21
19
  , join = path.join
22
- , cwd = process.cwd();
20
+ , basename = path.basename
21
+ , cwd = process.cwd()
22
+ , mocha = new Mocha;
23
23
 
24
24
  /**
25
25
  * Save timer references to avoid Sinon interfering (see GH-237).
@@ -55,7 +55,7 @@ var images = {
55
55
  // options
56
56
 
57
57
  program
58
- .version(require('../package').version)
58
+ .version(JSON.parse(fs.readFileSync(__dirname + '/../package.json', 'utf8')).version)
59
59
  .usage('[debug] [options] [files]')
60
60
  .option('-r, --require <name>', 'require the given module')
61
61
  .option('-R, --reporter <name>', 'specify the reporter to use', 'dot')
@@ -173,10 +173,11 @@ Error.stackTraceLimit = Infinity; // TODO: config
173
173
 
174
174
  // reporter
175
175
 
176
- var suite = new Suite('', new Context)
177
- , Base = require('../lib/reporters/base')
178
- , ui = interfaces[program.ui](suite)
179
- , Reporter;
176
+ mocha.reporter(program.reporter);
177
+
178
+ // interface
179
+
180
+ mocha.ui(program.ui);
180
181
 
181
182
  // load reporter
182
183
 
@@ -207,11 +208,31 @@ if (program.slow) Base.slow = program.slow;
207
208
 
208
209
  // --timeout
209
210
 
210
- if (program.timeout) suite.timeout(program.timeout);
211
+ if (program.timeout) mocha.suite.timeout(program.timeout);
211
212
 
212
213
  // --bail
213
214
 
214
- suite.bail(program.bail);
215
+ mocha.suite.bail(program.bail);
216
+
217
+ // --grep
218
+
219
+ if (program.grep) mocha.grep(new RegExp(utils.escapeRegexp(program.grep)));
220
+
221
+ // --invert
222
+
223
+ if (program.invert) mocha.invert();
224
+
225
+ // --ignore-leaks
226
+
227
+ if (program.ignoreLeaks) mocha.ignoreLeaks();
228
+
229
+ // --growl
230
+
231
+ if (program.growl) mocha.growl();
232
+
233
+ // --globals
234
+
235
+ mocha.globals(globals);
215
236
 
216
237
  // custom compiler support
217
238
 
@@ -259,21 +280,20 @@ if (program.watch) {
259
280
  });
260
281
 
261
282
  var frames = [
262
- ' \033[96m◜ \033[90mwatching\033[0m'
263
- , ' \033[96m◠ \033[90mwatching\033[0m'
264
- , ' \033[96m◝ \033[90mwatching\033[0m'
265
- , ' \033[96m◞ \033[90mwatching\033[0m'
266
- , ' \033[96m◡ \033[90mwatching\033[0m'
267
- , ' \033[96m◟ \033[90mwatching\033[0m'
283
+ ' \u001b[96m◜ \u001b[90mwatching\u001b[0m'
284
+ , ' \u001b[96m◠ \u001b[90mwatching\u001b[0m'
285
+ , ' \u001b[96m◝ \u001b[90mwatching\u001b[0m'
286
+ , ' \u001b[96m◞ \u001b[90mwatching\u001b[0m'
287
+ , ' \u001b[96m◡ \u001b[90mwatching\u001b[0m'
288
+ , ' \u001b[96m◟ \u001b[90mwatching\u001b[0m'
268
289
  ];
269
290
 
270
291
  var watchFiles = utils.files(cwd);
271
292
 
272
293
  function loadAndRun() {
273
- load(files, function(){
274
- run(suite, function(){
275
- play(frames);
276
- });
294
+ mocha.files = files;
295
+ mocha.run(function(){
296
+ play(frames);
277
297
  });
278
298
  }
279
299
 
@@ -288,8 +308,8 @@ if (program.watch) {
288
308
  utils.watch(watchFiles, function(){
289
309
  purge();
290
310
  stop()
291
- suite = suite.clone();
292
- ui = interfaces[program.ui](suite);
311
+ mocha.suite = mocha.suite.clone();
312
+ mocha.ui(program.ui);
293
313
  loadAndRun();
294
314
  });
295
315
 
@@ -298,36 +318,8 @@ if (program.watch) {
298
318
 
299
319
  // load
300
320
 
301
- load(files, function(){
302
- run(suite, process.exit);
303
- });
304
-
305
- // require test files before
306
- // running the root suite
307
-
308
- function load(files, fn) {
309
- var pending = files.length;
310
- files.forEach(function(file){
311
- delete require.cache[file];
312
- suite.emit('pre-require', global, file);
313
- suite.emit('require', require(file), file);
314
- suite.emit('post-require', global, file);
315
- --pending || fn();
316
- });
317
- }
318
-
319
- // run the given suite
320
-
321
- function run(suite, fn) {
322
- suite.emit('run');
323
- var runner = new Runner(suite);
324
- runner.globals(globals);
325
- if (program.ignoreLeaks) runner.ignoreLeaks = true;
326
- if (program.grep) runner.grep(new RegExp(utils.escapeRegexp(program.grep)), program.invert);
327
- var reporter = new Reporter(runner);
328
- if (program.growl) growl(runner, reporter);
329
- runner.run(fn);
330
- }
321
+ mocha.files = files;
322
+ mocha.run(process.exit);
331
323
 
332
324
  // enable growl notifications
333
325
 
@@ -362,7 +354,7 @@ function list(str) {
362
354
  */
363
355
 
364
356
  function hideCursor(){
365
- process.stdout.write('\033[?25l');
357
+ process.stdout.write('\u001b[?25l');
366
358
  };
367
359
 
368
360
  /**
@@ -370,7 +362,7 @@ function hideCursor(){
370
362
  */
371
363
 
372
364
  function showCursor(){
373
- process.stdout.write('\033[?25h');
365
+ process.stdout.write('\u001b[?25h');
374
366
  };
375
367
 
376
368
  /**
@@ -378,7 +370,7 @@ function showCursor(){
378
370
  */
379
371
 
380
372
  function stop() {
381
- process.stdout.write('\033[2K');
373
+ process.stdout.write('\u001b[2K');
382
374
  clearInterval(play.timer);
383
375
  }
384
376
 
@@ -400,7 +392,7 @@ function lookupFiles(path, recursive) {
400
392
  if (recursive) files = files.concat(lookupFiles(file, recursive));
401
393
  return
402
394
  }
403
- if (!stat.isFile() || !re.test(file)) return;
395
+ if (!stat.isFile() || !re.test(file) || basename(file)[0] == '.') return;
404
396
  files.push(file);
405
397
  });
406
398
 
@@ -22,6 +22,9 @@ process.argv.slice(2).forEach(function (arg) {
22
22
  case '--expose-gc':
23
23
  args.unshift('--expose-gc');
24
24
  break;
25
+ case '--harmony-proxies':
26
+ args.unshift('--harmony-proxies');
27
+ break;
25
28
  default:
26
29
  if (0 == arg.indexOf('--trace')) args.unshift(arg);
27
30
  else args.push(arg);