teabag 0.5.1 → 0.5.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (188) hide show
  1. data/app/assets/javascripts/teabag-jasmine.js +30 -15
  2. data/app/assets/javascripts/teabag-mocha.js +30 -14
  3. data/app/assets/javascripts/teabag-qunit.js +31 -15
  4. data/app/assets/javascripts/teabag-teabag.js +53 -0
  5. data/app/assets/javascripts/teabag/base/reporters/html.coffee +23 -49
  6. data/app/assets/javascripts/teabag/base/reporters/html/template.coffee +41 -0
  7. data/app/assets/javascripts/teabag/base/runner.coffee +1 -1
  8. data/app/assets/javascripts/teabag/jasmine.coffee +0 -1
  9. data/app/assets/javascripts/teabag/mocha.coffee +0 -1
  10. data/app/assets/javascripts/teabag/mocha/reporters/html.coffee +0 -1
  11. data/app/assets/javascripts/teabag/qunit.coffee +1 -2
  12. data/app/assets/javascripts/teabag/teabag.coffee +32 -0
  13. data/app/assets/stylesheets/teabag.css +94 -26
  14. data/app/controllers/teabag/spec_controller.rb +5 -1
  15. data/app/views/teabag/spec/{index.html.erb → runner.html.erb} +0 -0
  16. data/app/views/teabag/spec/suites.html.erb +40 -0
  17. data/config/routes.rb +3 -2
  18. data/lib/teabag/console.rb +2 -2
  19. data/lib/teabag/drivers/phantomjs/runner.coffee +1 -0
  20. data/lib/teabag/suite.rb +26 -16
  21. data/lib/teabag/version.rb +1 -1
  22. data/spec/dummy/app/assets/javascripts/integration/integration_spec.coffee +1 -1
  23. data/spec/dummy/config/application.rb +1 -27
  24. data/spec/dummy/config/boot.rb +5 -8
  25. data/spec/dummy/config/routes.rb +0 -1
  26. data/spec/dummy/log/development.log +67702 -0
  27. data/spec/dummy/log/test.log +1488 -0
  28. data/spec/dummy/tmp/cache/assets/BE1/2F0/sprockets%2F5d1a10a753437053978b5661a7513600 +0 -0
  29. data/spec/dummy/tmp/cache/assets/C13/B50/sprockets%2F431452d41e5087d2211162d23c63789b +0 -0
  30. data/spec/dummy/tmp/cache/assets/C35/A30/sprockets%2F29906bf540f7d2e081088494b2554989 +0 -0
  31. data/spec/dummy/tmp/cache/assets/C4E/9B0/sprockets%2Fa807397434c9262c3d62da3e91152184 +0 -0
  32. data/spec/dummy/tmp/cache/assets/C59/250/sprockets%2Fa80d3fe493d2476e58c4323996064512 +0 -0
  33. data/spec/dummy/tmp/cache/assets/C72/150/sprockets%2F4194031b4b51b6422c14ac697e3455e5 +0 -0
  34. data/spec/dummy/tmp/cache/assets/C75/D50/sprockets%2F5302968a40e08d2c011aa38666d273f6 +0 -0
  35. data/spec/dummy/tmp/cache/assets/C78/F80/sprockets%2F9161622ddd251097a4ab816b8220984c +0 -0
  36. data/spec/dummy/tmp/cache/assets/C7A/EC0/sprockets%2F5c16e4214f5662e1b27932a57c43491b +0 -0
  37. data/spec/dummy/tmp/cache/assets/C83/E90/sprockets%2F8be0bf09618c38257464f07790a4163b +0 -0
  38. data/spec/dummy/tmp/cache/assets/C89/700/sprockets%2F259935a7704fef0069303ea63fa89408 +0 -0
  39. data/spec/dummy/tmp/cache/assets/C8A/460/sprockets%2F77bffd9959420103906722b404ae8d59 +0 -0
  40. data/spec/dummy/tmp/cache/assets/C91/FA0/sprockets%2F2eb81283f5789ae91a69344552db3856 +0 -0
  41. data/spec/dummy/tmp/cache/assets/C9D/E90/sprockets%2F3045c9533f179d3e1c805d163ed002a0 +0 -0
  42. data/spec/dummy/tmp/cache/assets/CA6/2F0/sprockets%2F20040c18b672e4c4d2731a2a929d8b97 +0 -0
  43. data/spec/dummy/tmp/cache/assets/CA6/DF0/sprockets%2F7da83747ce56e49393b6b8726587f846 +0 -0
  44. data/spec/dummy/tmp/cache/assets/CA9/C40/sprockets%2F932b7e2cd1e067289ab51190800814df +0 -0
  45. data/spec/dummy/tmp/cache/assets/CAA/0C0/sprockets%2F057b0ce384f16d9202ae84473436cc35 +0 -0
  46. data/spec/dummy/tmp/cache/assets/CAD/410/sprockets%2F651414e5c7e86f05c5108dc71626b25c +0 -0
  47. data/spec/dummy/tmp/cache/assets/CAF/0F0/sprockets%2F6000e67cf3f2377f860c24da7c819701 +0 -0
  48. data/spec/dummy/tmp/cache/assets/CB0/700/sprockets%2F006af6bf0f6b55777b03c4615c853881 +0 -0
  49. data/spec/dummy/tmp/cache/assets/CB5/E60/sprockets%2Ff0f2b623b42840839e37f5ed055f5482 +0 -0
  50. data/spec/dummy/tmp/cache/assets/CBB/FA0/sprockets%2F74922109263bdc965b2e9567eec6d154 +0 -0
  51. data/spec/dummy/tmp/cache/assets/CBD/AF0/sprockets%2Fd687ec33822256e9444e8cd04f1b4873 +0 -0
  52. data/spec/dummy/tmp/cache/assets/CBF/630/sprockets%2F707d2db81468088470d476abff35388d +0 -0
  53. data/spec/dummy/tmp/cache/assets/CC2/EC0/sprockets%2F76bf80cb571ca530357f78db78167866 +0 -0
  54. data/spec/dummy/tmp/cache/assets/CC3/BA0/sprockets%2Fa717665e3657e376fa8d788940d6a22a +0 -0
  55. data/spec/dummy/tmp/cache/assets/CCC/DB0/sprockets%2F3998958d61cda73452466f5652ed81ef +0 -0
  56. data/spec/dummy/tmp/cache/assets/CCE/C50/sprockets%2Fe12774c2fea852112414bb379a71f31a +0 -0
  57. data/spec/dummy/tmp/cache/assets/CD1/620/sprockets%2F06a3eb05fcb4175a679d6084a06026a6 +0 -0
  58. data/spec/dummy/tmp/cache/assets/CD3/460/sprockets%2F7f3f6802b0b309ed142d0b671c9640c4 +0 -0
  59. data/spec/dummy/tmp/cache/assets/CD6/DD0/sprockets%2F301bd3b0e19eb866905681d03a891be3 +0 -0
  60. data/spec/dummy/tmp/cache/assets/CD9/9B0/sprockets%2Fdc1f0447e4c5c2f990750b2f722c5900 +0 -0
  61. data/spec/dummy/tmp/cache/assets/CD9/DD0/sprockets%2Fe5774759168a731da1c1149ecf0e1b03 +0 -0
  62. data/spec/dummy/tmp/cache/assets/CE0/090/sprockets%2F48d5d35ae87d0723318b8bc257fa2237 +0 -0
  63. data/spec/dummy/tmp/cache/assets/CE3/1F0/sprockets%2Fe69a515d3a9d14c669be8871012a7d07 +0 -0
  64. data/spec/dummy/tmp/cache/assets/CE4/190/sprockets%2F36c9ee4181433e33e07eb9748d218ae2 +0 -0
  65. data/spec/dummy/tmp/cache/assets/CE6/270/sprockets%2F2c98152560d18470fec8cf4c6829b4d0 +0 -0
  66. data/spec/dummy/tmp/cache/assets/CE6/7C0/sprockets%2Fa03a2c86ce6724be8542295e1cf24798 +0 -0
  67. data/spec/dummy/tmp/cache/assets/CE7/A60/sprockets%2Ff58eee249aa167d23f8220087bb46684 +0 -0
  68. data/spec/dummy/tmp/cache/assets/CE9/9E0/sprockets%2F135480d497ed7e4884462dc0ef0b80d7 +0 -0
  69. data/spec/dummy/tmp/cache/assets/CEB/090/sprockets%2F55dcd7ace406b77208c380d496e37864 +0 -0
  70. data/spec/dummy/tmp/cache/assets/CEB/680/sprockets%2F67f0794ef8c0576d5c7da34f4437305a +0 -0
  71. data/spec/dummy/tmp/cache/assets/CEB/B40/sprockets%2F1150bf8d912aa100a132251eefaf6045 +0 -0
  72. data/spec/dummy/tmp/cache/assets/CF1/C50/sprockets%2F57bd9ac92067ea01882feef075582758 +0 -0
  73. data/spec/dummy/tmp/cache/assets/CF3/3A0/sprockets%2F6571249b82eb52e7c7e035c692df9b69 +0 -0
  74. data/spec/dummy/tmp/cache/assets/CF4/6C0/sprockets%2F087d4a99adae6d6972937a2e57e93504 +0 -0
  75. data/spec/dummy/tmp/cache/assets/CF4/6F0/sprockets%2Fed96f92571224b862b84d7078b86ded3 +0 -0
  76. data/spec/dummy/tmp/cache/assets/CF7/F10/sprockets%2F8c45854ebd195b52cc42bf3f99996336 +0 -0
  77. data/spec/dummy/tmp/cache/assets/CF8/780/sprockets%2F8845b81ff27cdb57c835836c9f91a265 +0 -0
  78. data/spec/dummy/tmp/cache/assets/CFA/D20/sprockets%2Fb26796b39b3c5d6ed70be7989637a493 +0 -0
  79. data/spec/dummy/tmp/cache/assets/CFC/380/sprockets%2Fa7443cbd671446a589867dd5f4a4f989 +0 -0
  80. data/spec/dummy/tmp/cache/assets/D00/110/sprockets%2F6a6353b7723a8b21708e0fbfe04bd422 +0 -0
  81. data/spec/dummy/tmp/cache/assets/D00/F60/sprockets%2F42e279b52511c47d26c0adb125fd04e8 +0 -0
  82. data/spec/dummy/tmp/cache/assets/D03/630/sprockets%2F5d8da32dba6a7be70426a1d554773701 +0 -0
  83. data/spec/dummy/tmp/cache/assets/D04/170/sprockets%2F76ab1dc02e6c7618852708a1e05a2df3 +0 -0
  84. data/spec/dummy/tmp/cache/assets/D04/480/sprockets%2F8bd8f10500b21d2f9d94e4cd1401c936 +0 -0
  85. data/spec/dummy/tmp/cache/assets/D04/580/sprockets%2F18748d128c062c8eab0e22d35d41b19e +0 -0
  86. data/spec/dummy/tmp/cache/assets/D05/8D0/sprockets%2F319f8f235f452343f1ebf03cb262d23d +0 -0
  87. data/spec/dummy/tmp/cache/assets/D09/BF0/sprockets%2F9e6bca5d26f50d9484385d51ba04312c +0 -0
  88. data/spec/dummy/tmp/cache/assets/D0B/210/sprockets%2Fb95ce127097fba0e4019f633e91b730d +0 -0
  89. data/spec/dummy/tmp/cache/assets/D0E/570/sprockets%2F90fe371bf8091e88a712124d9cdae260 +0 -0
  90. data/spec/dummy/tmp/cache/assets/D15/750/sprockets%2F8effdd3e668a4036260a3e370f3b6657 +0 -0
  91. data/spec/dummy/tmp/cache/assets/D17/710/sprockets%2Ffa49fb6823d466e79a195e0cd71340c5 +0 -0
  92. data/spec/dummy/tmp/cache/assets/D1A/D30/sprockets%2F815a5177e9edba0c5c996182ef1b3675 +0 -0
  93. data/spec/dummy/tmp/cache/assets/D1B/730/sprockets%2Fcf6ce779d043d29aae915f599a413380 +0 -0
  94. data/spec/dummy/tmp/cache/assets/D1D/560/sprockets%2F1ca784ee7ba1922465147e7f8963eae5 +0 -0
  95. data/spec/dummy/tmp/cache/assets/D1E/AA0/sprockets%2F5c8741a556bc955cd36e61c88582b6dc +0 -0
  96. data/spec/dummy/tmp/cache/assets/D23/E70/sprockets%2F0c6d23a1282deab18acb51022a74489a +0 -0
  97. data/spec/dummy/tmp/cache/assets/D2D/060/sprockets%2F545ec7a363badb5e7106e5112b53b26d +0 -0
  98. data/spec/dummy/tmp/cache/assets/D2F/520/sprockets%2Fea2308e8add6880c1c4d47040ab710d7 +0 -0
  99. data/spec/dummy/tmp/cache/assets/D31/9C0/sprockets%2Fbd102a4f5a4985c3519dd6ab0295a1c6 +0 -0
  100. data/spec/dummy/tmp/cache/assets/D32/500/sprockets%2F6927df5a24d91c75d001e2b5600ab8be +0 -0
  101. data/spec/dummy/tmp/cache/assets/D35/7C0/sprockets%2Ff536a2606eaf7d542c0985104cb62baf +0 -0
  102. data/spec/dummy/tmp/cache/assets/D37/300/sprockets%2F2d0e503e6a7c7c7fdc9912501b2f6b43 +0 -0
  103. data/spec/dummy/tmp/cache/assets/D37/FF0/sprockets%2F96841ca4cfae32c515077f3f5fc303b2 +0 -0
  104. data/spec/dummy/tmp/cache/assets/D3C/840/sprockets%2Fc6202ec91d567a85bd3d46dc43ea9108 +0 -0
  105. data/spec/dummy/tmp/cache/assets/D44/E90/sprockets%2F05cfc0bf7c9938963d1d1c63248db80d +0 -0
  106. data/spec/dummy/tmp/cache/assets/D45/C30/sprockets%2Fcc744877558178a3adb77c441cadce70 +0 -0
  107. data/spec/dummy/tmp/cache/assets/D47/A90/sprockets%2Fe7ca382b607c595ea6505853f7fb63da +0 -0
  108. data/spec/dummy/tmp/cache/assets/D49/1F0/sprockets%2F773b56f87127c6605e7d1d3faf2b6af6 +0 -0
  109. data/spec/dummy/tmp/cache/assets/D49/A10/sprockets%2Fc4656bd995a6f297c26d19b13aadb963 +0 -0
  110. data/spec/dummy/tmp/cache/assets/D4A/580/sprockets%2F19b8d8a9a57850de79b6c099fb2d010e +0 -0
  111. data/spec/dummy/tmp/cache/assets/D50/D70/sprockets%2Fe2a3e6c95b11e0801a4eebae3a026026 +0 -0
  112. data/spec/dummy/tmp/cache/assets/D51/400/sprockets%2Ff5e433d8a31e80985b75ce598de236be +0 -0
  113. data/spec/dummy/tmp/cache/assets/D54/D80/sprockets%2F631327e25ec20edc723046cdec3bb1c0 +0 -0
  114. data/spec/dummy/tmp/cache/assets/D58/870/sprockets%2F3cef1ff075a050004b74ffa13c8c4f02 +0 -0
  115. data/spec/dummy/tmp/cache/assets/D5C/710/sprockets%2F9427d05cee2caa721241a25a9af1d08f +0 -0
  116. data/spec/dummy/tmp/cache/assets/D5C/CC0/sprockets%2Faa8bf6de211f2765b0a26f112b971f0c +0 -0
  117. data/spec/dummy/tmp/cache/assets/D5E/FA0/sprockets%2Fc81c371ae2d61a6aa1708262fba79e0d +0 -0
  118. data/spec/dummy/tmp/cache/assets/D61/1F0/sprockets%2F0c7a6176d2fc4db00bb9a74d36380fe1 +0 -0
  119. data/spec/dummy/tmp/cache/assets/D61/E60/sprockets%2F301aede3913de3c54c91b65cf2bd3381 +0 -0
  120. data/spec/dummy/tmp/cache/assets/D67/030/sprockets%2Fb8b36ba6104c8dbe6297b4e61e6d33b1 +0 -0
  121. data/spec/dummy/tmp/cache/assets/D67/BC0/sprockets%2F35d2c2b45981ade5a2db2a9c7f37a615 +0 -0
  122. data/spec/dummy/tmp/cache/assets/D67/C20/sprockets%2F0d30bf27e5f74bbd85f313cb8d3c4623 +0 -0
  123. data/spec/dummy/tmp/cache/assets/D69/F90/sprockets%2F6a0795b7b38bd7e6142cd1b88211dade +0 -0
  124. data/spec/dummy/tmp/cache/assets/D6A/7E0/sprockets%2F3a3b155b775b7d32b25abc8cb6bf9727 +0 -0
  125. data/spec/dummy/tmp/cache/assets/D6A/950/sprockets%2F429b1806cb7580ebf29f9a12c33cbea6 +0 -0
  126. data/spec/dummy/tmp/cache/assets/D6D/DA0/sprockets%2Fac936bf40b42227a2bf9d474ae9ec149 +0 -0
  127. data/spec/dummy/tmp/cache/assets/D6F/5B0/sprockets%2F5dcc801a7a6c340c5baf525839f9b8b6 +0 -0
  128. data/spec/dummy/tmp/cache/assets/D73/C00/sprockets%2F9cf4bfb486e4ab461e3f275a3d974c30 +0 -0
  129. data/spec/dummy/tmp/cache/assets/D77/B30/sprockets%2F946cf2f17c7eb41037f9ee08ad67ec40 +0 -0
  130. data/spec/dummy/tmp/cache/assets/D78/2F0/sprockets%2F3c61f8915b8f717b1de788e6ecad122c +0 -0
  131. data/spec/dummy/tmp/cache/assets/D78/870/sprockets%2F8f3a7d4fcd104fa8e47f552f6630a49e +0 -0
  132. data/spec/dummy/tmp/cache/assets/D78/F10/sprockets%2Fa2d995664d1a9bf976c1bfbbb90f8710 +0 -0
  133. data/spec/dummy/tmp/cache/assets/D79/B60/sprockets%2F5e6fb36a01166982ae9a59eced0a4f88 +0 -0
  134. data/spec/dummy/tmp/cache/assets/D7E/C10/sprockets%2F747c98c3cc7494a62dd882752adffb2b +0 -0
  135. data/spec/dummy/tmp/cache/assets/D80/390/sprockets%2Fe44158f578d9ffade083a07f54eab729 +0 -0
  136. data/spec/dummy/tmp/cache/assets/D93/BD0/sprockets%2Ff5e1b60201e08e3ddf8d3de5211f3d5e +0 -0
  137. data/spec/dummy/tmp/cache/assets/D9A/540/sprockets%2F60ad172ea82631ca9c666cfd4d95f1ab +0 -0
  138. data/spec/dummy/tmp/cache/assets/DA0/330/sprockets%2Fcbbb4de706387d50f48a72ee6c9c1b80 +0 -0
  139. data/spec/dummy/tmp/cache/assets/DA5/0A0/sprockets%2F7a4b5928cec69ab65afff309a04d6b47 +0 -0
  140. data/spec/dummy/tmp/cache/assets/DA8/C50/sprockets%2F0810627fddce930a399fc60d3be97fed +0 -0
  141. data/spec/dummy/tmp/cache/assets/DA9/BF0/sprockets%2Fc59f8f7bf494fe030610bc86bb7cc5e5 +0 -0
  142. data/spec/dummy/tmp/cache/assets/DAD/1F0/sprockets%2Fdf7609630657aee0ebe5ed61e929d5dd +0 -0
  143. data/spec/dummy/tmp/cache/assets/DAE/6C0/sprockets%2F77c7a8676aeefa73156c55dfcf51cc46 +0 -0
  144. data/spec/dummy/tmp/cache/assets/DB3/5D0/sprockets%2Fce1d4d75832c9bdeafd869f6f7b61725 +0 -0
  145. data/spec/dummy/tmp/cache/assets/DB3/D70/sprockets%2Fcc2f5e1f6eeb99c33881848cb1cde758 +0 -0
  146. data/spec/dummy/tmp/cache/assets/DB5/040/sprockets%2F9a9da5df88713663b9fbc945facca891 +0 -0
  147. data/spec/dummy/tmp/cache/assets/DB9/220/sprockets%2Fd2dc4f59e70e73984997ffca8ad7f4a0 +0 -0
  148. data/spec/dummy/tmp/cache/assets/DBC/A20/sprockets%2Fec46fb30cecc002128c61fb49cf30da8 +0 -0
  149. data/spec/dummy/tmp/cache/assets/DC4/860/sprockets%2Fa01a3cf460ff15daae0f928d0f85f52e +0 -0
  150. data/spec/dummy/tmp/cache/assets/DC4/CA0/sprockets%2Fdbcd5b5132f1ec3ff0e7e7db19190f03 +0 -0
  151. data/spec/dummy/tmp/cache/assets/DC7/A10/sprockets%2F84a8af0fcbf401864e1ae5bf092cba94 +0 -0
  152. data/spec/dummy/tmp/cache/assets/DD7/630/sprockets%2Ffa5eec4483c5be83deee04f5a5654a58 +0 -0
  153. data/spec/dummy/tmp/cache/assets/DDB/520/sprockets%2Faa365f7b98350c85b6acb09d5e9cbf9e +0 -0
  154. data/spec/dummy/tmp/cache/assets/DDD/A60/sprockets%2Fff948b6ffe44a3cc3d2d109a39f548fd +0 -0
  155. data/spec/dummy/tmp/cache/assets/DE4/140/sprockets%2F139e4ab85d1aacb22c115fa136afdc8a +0 -0
  156. data/spec/dummy/tmp/cache/assets/DF6/0E0/sprockets%2F85b10db6e1afe643aba6d396abdd77f0 +0 -0
  157. data/spec/dummy/tmp/cache/assets/DF7/E10/sprockets%2F25e4253aba9a9adcefb72552fb1ff0c8 +0 -0
  158. data/spec/dummy/tmp/cache/assets/DFC/C20/sprockets%2Fd9178ad7e3b401c9fceafd64ea2b50d6 +0 -0
  159. data/spec/dummy/tmp/cache/assets/DFC/C30/sprockets%2Fb50a07cb30b0bd0eec8e98e5de79d65d +0 -0
  160. data/spec/dummy/tmp/cache/assets/E02/6E0/sprockets%2F63d6a5cdb8cefa64ef76b5c6e0fd3720 +0 -0
  161. data/spec/dummy/tmp/cache/assets/E08/BB0/sprockets%2Fefac99af1af28543aef6fb607faa4973 +0 -0
  162. data/spec/dummy/tmp/cache/assets/E08/F20/sprockets%2F4fc5cdcd6974efe7adfe809b30bd6513 +0 -0
  163. data/spec/dummy/tmp/cache/assets/E0D/070/sprockets%2F0e7ef9a5978dcc6b1abce678ef836c0a +0 -0
  164. data/spec/dummy/tmp/cache/assets/E14/8E0/sprockets%2Fb8d902ffcf8758fde63d0fa579ba6d4e +0 -0
  165. data/spec/dummy/tmp/cache/assets/E16/D30/sprockets%2Fd69469e6e7439baacd8df989c0fdacc2 +0 -0
  166. data/spec/dummy/tmp/cache/assets/E2F/790/sprockets%2F7fac280deaa7ef20a77d5c9b5b9cfc34 +0 -0
  167. data/spec/dummy/tmp/cache/assets/E36/A40/sprockets%2Ff3477eebd69a4f1b8fbdd3f9ef2ba242 +0 -0
  168. data/spec/dummy/tmp/cache/assets/E41/250/sprockets%2F97cf8fe3d7ffaff076f655aefb36da03 +0 -0
  169. data/spec/dummy/tmp/cache/assets/E64/1E0/sprockets%2F81ab4c863fbbdec8dd66afc97ebf034d +0 -0
  170. data/spec/dummy/tmp/cache/assets/E6E/260/sprockets%2Fd9f8ab8b91ef582cc6c99a3ba0dedfe6 +0 -0
  171. data/spec/dummy/tmp/cache/assets/E89/4C0/sprockets%2F68b2eedb3cde6fc01d50fead7caf8a18 +0 -0
  172. data/spec/dummy/tmp/cache/assets/F79/360/sprockets%2F0ce035fefee5ebdabc8efabfbdbd6ee4 +0 -0
  173. data/spec/features/console_reporter_spec.rb +1 -0
  174. data/spec/javascripts/teabag/base/reporters/html/failure_view_spec.coffee +27 -0
  175. data/spec/javascripts/teabag/base/reporters/html_spec.coffee +25 -9
  176. data/spec/javascripts/teabag/base/runner_spec.coffee +2 -0
  177. data/spec/javascripts/teabag/jasmine/fixture_jspec.coffee +13 -0
  178. data/spec/javascripts/teabag/jasmine/runner_jspec.coffee +0 -7
  179. data/spec/javascripts/teabag/mocha/fixture_mspec.coffee +12 -0
  180. data/spec/javascripts/teabag/mocha/models_mspec.coffee +7 -9
  181. data/spec/javascripts/teabag/mocha/reporters/html_mspec.coffee +0 -4
  182. data/spec/teabag/console_spec.rb +3 -3
  183. data/spec/teabag/suite_spec.rb +45 -16
  184. data/test/javascripts/teabag/qunit/{qunit_test.coffee → fixture_test.coffee} +0 -33
  185. data/test/javascripts/teabag/qunit/runner_test.coffee +0 -2
  186. metadata +57 -11
  187. data/spec/javascripts/teabag/jasmine/jasmine_jspec.coffee +0 -60
  188. data/spec/javascripts/teabag/mocha/mocha_mspec.coffee +0 -60
@@ -0,0 +1,41 @@
1
+ Teabag.Reporters.HTML.template = """
2
+ <div id="teabag-interface">
3
+ <div class="teabag-clearfix">
4
+ <div id="teabag-title">
5
+ <h1>Teabag</h1>
6
+ <ul>
7
+ <li>version: <b id="teabag-version"></b></li>
8
+ <li id="teabag-env-info"></li>
9
+ </ul>
10
+ </div>
11
+ <div id="teabag-progress"></div>
12
+ <ul id="teabag-stats">
13
+ <li>passes: <b id="teabag-stats-passes">0</b></li>
14
+ <li>failures: <b id="teabag-stats-failures">0</b></li>
15
+ <li>skipped: <b id="teabag-stats-skipped">0</b></li>
16
+ <li>duration: <b id="teabag-stats-duration">&infin;</b></li>
17
+ </ul>
18
+ </div>
19
+
20
+ <div id="teabag-controls" class="teabag-clearfix">
21
+ <div id="teabag-toggles">
22
+ <button id="teabag-use-catch" title="Toggle using try/catch wrappers when possible">Try/Catch</button>
23
+ <button id="teabag-build-full-report" title="Toggle building the full report">Full Report</button>
24
+ <button id="teabag-display-progress" title="Toggle displaying progress as tests run">Progress</button>
25
+ </div>
26
+ <div id="teabag-suites"></div>
27
+ </div>
28
+
29
+ <hr/>
30
+
31
+ <div id="teabag-filter">
32
+ <h1>Filtering</h1>
33
+ <ul id="teabag-filter-list"></ul>
34
+ </div>
35
+
36
+ <div id="teabag-report">
37
+ <ol id="teabag-report-failures"></ol>
38
+ <ol id="teabag-report-all"></ol>
39
+ </div>
40
+ </div>
41
+ """
@@ -6,7 +6,7 @@ class Teabag.Runner
6
6
  return if @constructor.run
7
7
  @constructor.run = true
8
8
  @fixturePath = "#{Teabag.root}/fixtures"
9
- @params = @getParams()
9
+ @params = Teabag.params = @getParams()
10
10
  @setup()
11
11
 
12
12
 
@@ -18,7 +18,6 @@ class Teabag.Runner extends Teabag.Runner
18
18
 
19
19
  # add the reporter and set the filter
20
20
  reporter = new (@getReporter())()
21
- reporter.setFilter?(@params["grep"])
22
21
  env.addReporter(reporter)
23
22
 
24
23
  # add fixture support
@@ -15,7 +15,6 @@ class Teabag.Runner extends Teabag.Runner
15
15
  setup: ->
16
16
  # add the reporter and set the filter
17
17
  reporter = @getReporter()
18
- reporter.filter = @params["grep"]
19
18
  env.setup(reporter: reporter)
20
19
 
21
20
 
@@ -2,7 +2,6 @@ class Teabag.Reporters.HTML extends Teabag.Reporters.HTML
2
2
 
3
3
  constructor: (runner) ->
4
4
  super
5
- @setFilter(Teabag.Reporters.HTML.filter)
6
5
  @reportRunnerStarting(runner)
7
6
  runner.on("fail", @reportSpecResults)
8
7
  runner.on("test end", @reportSpecResults)
@@ -11,8 +11,7 @@ class Teabag.Runner extends Teabag.Runner
11
11
 
12
12
 
13
13
  setup: ->
14
- reporter = new (@getReporter())(env)
15
- reporter.setFilter?(@params["grep"])
14
+ new (@getReporter())(env)
16
15
 
17
16
 
18
17
 
@@ -0,0 +1,32 @@
1
+ class TeabagInterface
2
+
3
+ constructor: ->
4
+ @files = $u("#teabag-suite-list .file a")
5
+ @input = $u("#teabag-filter-input")[0]
6
+ @input.value = ""
7
+ @input.onkeyup = @filter
8
+
9
+
10
+ filter: =>
11
+ for file in @files
12
+ if LiquidMetal.score(file.innerHTML, @input.value) > 0
13
+ file.parentNode.style.display = "block"
14
+ else
15
+ file.parentNode.style.display = "none"
16
+
17
+
18
+ window.onload = -> new TeabagInterface()
19
+
20
+ `
21
+ /*!
22
+ * LiquidMetal
23
+ * Copyright (c) 2009, Ryan McGeary (ryanonjavascript -[at]- mcgeary [*dot*] org)
24
+ */
25
+ var LiquidMetal=function(){var l=0.0;var m=1.0;var n=0.8;var o=0.9;var p=0.85;return{score:function(a,b){if(b.length==0)return n;if(b.length>a.length)return l;var c=this.buildScoreArray(a,b);var d=0.0;for(var i=0;i<c.length;i++){d+=c[i]}return(d/c.length)},buildScoreArray:function(a,b){var d=new Array(a.length);var e=a.toLowerCase();var f=b.toLowerCase().split("");var g=-1;var h=false;for(var i=0;i<f.length;i++){var c=f[i];var j=e.indexOf(c,g+1);if(j<0)return fillArray(d,l);if(j==0)h=true;if(isNewWord(a,j)){d[j-1]=1;fillArray(d,p,g+1,j-1)}else if(isUpperCase(a,j)){fillArray(d,p,g+1,j)}else{fillArray(d,l,g+1,j)}d[j]=m;g=j}var k=h?o:n;fillArray(d,k,g+1);return d}};function isUpperCase(a,b){var c=a.charAt(b);return("A"<=c&&c<="Z")}function isNewWord(a,b){var c=a.charAt(b-1);return(c==" "||c=="\t")}function fillArray(a,b,c,d){c=Math.max(c||0,0);d=Math.min(d||a.length,a.length);for(var i=c;i<d;i++){a[i]=b}return a}}();
26
+
27
+ /*!
28
+ * uSelector
29
+ * author: Fabio Miranda Costa | github: fabiomcosta | twitter: @fabiomiranda | license: MIT-style license
30
+ */
31
+ (function(h,i){var f,c,j,k,m={},e,l,q=/^\s+|\s+$/g,r=!!i.querySelectorAll,g=function(d,b,a){f=a||[];e=b||g.context;if(r)try{n(e.querySelectorAll(d));return f}catch(v){}l=e.ownerDocument||e;d=d.replace(q,"");for(c={};d=d.replace(/([#.:])?([^#.:]*)/,s););d=(b=c.id)&&c.tag||c.classes||c.pseudos||!b&&(c.classes||c.pseudos)?t:o;if(b){if(a=b=l.getElementById(b))if(!(a=l===e))a:{a=b;do if(a===e){a=true;break a}while(a=a.parentNode);a=false}a&&d([b])}else d(e.getElementsByTagName(c.tag||"*"));return f},u=function(d){if(c.tag){var b=d.nodeName.toUpperCase();if(c.tag=="*"){if(b<"@")return false}else if(b!=c.tag)return false}if(c.id&&d.getAttribute("id")!=c.id)return false;if(j=c.classes){var a=" "+d.className+" ";for(b=j.length;b--;)if(a.indexOf(" "+j[b]+" ")<0)return false}if(k=c.pseudos)for(b=k.length;b--;){a=m[k[b]];if(!(a&&a.call(g,d)))return false}return true},s=function(d,b,a){if(b)if(b=="#")c.id=a;else if(b==".")if(c.classes)c.classes.push(a);else c.classes=[a];else{if(b==":")if(c.pseudos)c.pseudos.push(a);else c.pseudos=[a]}else c.tag=a.toUpperCase();return""},p=Array.prototype.slice,n=function(d){f=p.call(d,0)},o=function(d){for(var b=0,a;a=d[b++];)f.push(a)};try{p.call(i.documentElement.childNodes,0)}catch(w){n=o}var t=function(d){for(var b=0,a;a=d[b++];)u(a)&&f.push(a)};g.pseudos=m;g.context=i;h.uSelector=g;h.$u||(h.$u=g)})(this,document);
32
+ `
@@ -7,19 +7,19 @@ body {
7
7
 
8
8
  /* Base Reporter
9
9
  *---------------------------------------------------------------------------*/
10
- #teabag-html-reporter {
10
+ #teabag-interface {
11
11
  padding: 45px 50px 0;
12
- min-width: 440px;
12
+ min-width: 430px;
13
13
  border-top: 3px solid #18c2e8;
14
14
  color: #000;
15
15
  }
16
- #teabag-html-reporter hr {
16
+ #teabag-interface hr {
17
17
  border: 0;
18
18
  background: #cfc8c4;
19
19
  height: 1px;
20
20
  margin: 20px 0;
21
21
  }
22
- #teabag-html-reporter .teabag-clearfix:after {
22
+ #teabag-interface .teabag-clearfix:after {
23
23
  content: ".";
24
24
  display: block;
25
25
  clear: both;
@@ -27,10 +27,10 @@ body {
27
27
  line-height: 0;
28
28
  height: 0;
29
29
  }
30
- html[xmlns] #teabag-html-reporter .teabag-clearfix {
30
+ html[xmlns] #teabag-interface .teabag-clearfix {
31
31
  display: block;
32
32
  }
33
- * html #teabag-html-reporter .teabag-clearfix {
33
+ * html #teabag-interface .teabag-clearfix {
34
34
  height: 1%;
35
35
  }
36
36
 
@@ -58,6 +58,13 @@ html[xmlns] #teabag-html-reporter .teabag-clearfix {
58
58
  #teabag-title b {
59
59
  font-weight: 400;
60
60
  }
61
+ #teabag-title a {
62
+ text-decoration: none;
63
+ color: #000;
64
+ }
65
+ #teabag-title a:hover {
66
+ text-decoration: underline;
67
+ }
61
68
 
62
69
  /* Progress indicator
63
70
  *---------------------------------------------------------------------------*/
@@ -195,26 +202,23 @@ html[xmlns] #teabag-html-reporter .teabag-clearfix {
195
202
  position: relative;
196
203
  top: -1px;
197
204
  height: 21px;
198
- max-width: 100px;
205
+ max-width: 150px;
199
206
  margin: 0;
200
207
  border: 1px solid #B3B3B3;
201
208
  outline: none;
202
209
  }
203
-
204
- #teabag-controls #teabag-filter {
205
- margin-right: 220px;
206
- white-space: nowrap;
207
- overflow: hidden;
208
- text-overflow: ellipsis;
209
- font-weight: 200;
210
- color: #7b4f49;
211
- }
212
- #teabag-controls #teabag-filter button {
213
- visibility: hidden;
214
- }
215
- #teabag-controls #teabag-filter.teabag-filtered button {
216
- visibility: visible;
210
+ #teabag-controls input {
211
+ margin: 0;
212
+ padding: 2px 8px;
213
+ zoom: 1;
214
+ border: 1px solid #B3B3B3;
215
+ outline: none;
216
+ font-size: 12px;
217
+ border-radius: 0.4em;
218
+ background-color: #fff;
219
+ width: 100%;
217
220
  }
221
+
218
222
  #teabag-controls #teabag-toggles {
219
223
  float: right;
220
224
  }
@@ -233,6 +237,41 @@ html[xmlns] #teabag-html-reporter .teabag-clearfix {
233
237
  position: relative;
234
238
  }
235
239
 
240
+ /* Filter
241
+ *---------------------------------------------------------------------------*/
242
+ #teabag-filter {
243
+ font-weight: 200;
244
+ display: none;
245
+ }
246
+ #teabag-filter.teabag-filtered {
247
+ display: block;
248
+ }
249
+ #teabag-filter h1 {
250
+ float: right;
251
+ height: 15px;
252
+ margin: -11px 15px 0 0;
253
+ padding: 0 4px;
254
+ background: #f4f3ee;
255
+ text-align: right;
256
+ font-size: 17px;
257
+ font-weight: 200;
258
+ color: #7b4f49;
259
+ }
260
+ #teabag-filter ul {
261
+ margin: 0;
262
+ padding: 3px 10px 6px;
263
+ list-style: none;
264
+ border: 1px solid #cfc8c4;
265
+ border-radius: 3px;
266
+ }
267
+ #teabag-filter li {
268
+ overflow: hidden;
269
+ text-overflow: ellipsis;
270
+ white-space: nowrap;
271
+ width: 100%;
272
+ }
273
+
274
+
236
275
  /* Reporting
237
276
  *---------------------------------------------------------------------------*/
238
277
  #teabag-report a {
@@ -283,7 +322,6 @@ html[xmlns] #teabag-html-reporter .teabag-clearfix {
283
322
  background: #ff3f3c;
284
323
  }
285
324
 
286
-
287
325
  #teabag-report #teabag-report-all {
288
326
  margin: 0;
289
327
  padding: 0;
@@ -325,10 +363,10 @@ html[xmlns] #teabag-html-reporter .teabag-clearfix {
325
363
 
326
364
  /* State Overrides
327
365
  *---------------------------------------------------------------------------*/
328
- body.teabag-failed #teabag-html-reporter {
366
+ body.teabag-failed #teabag-interface {
329
367
  border-top: 3px solid #ff3f3c;
330
368
  }
331
- body.teabag-passed #teabag-html-reporter {
369
+ body.teabag-passed #teabag-interface {
332
370
  border-top: 3px solid #51e431;
333
371
  }
334
372
  body.teabag-failed #teabag-progress .teabag-indicator {
@@ -350,11 +388,41 @@ body.teabag-passed #teabag-progress .teabag-indicator {
350
388
  background: #fff;
351
389
  }
352
390
 
391
+ /* Suite List
392
+ *---------------------------------------------------------------------------*/
393
+ #teabag-suite-list {
394
+ list-style: none;
395
+ margin: 0;
396
+ padding: 0;
397
+ }
398
+ #teabag-suite-list ul {
399
+ margin: 0 0 20px 0;
400
+ padding: 0 0 0 20px;
401
+ /*background: rgba(200, 184, 161, 0.1);*/
402
+ }
403
+ #teabag-suite-list a {
404
+ text-decoration: none;
405
+ color: #482b25;
406
+ }
407
+ #teabag-suite-list a:hover {
408
+ text-decoration: underline;
409
+ }
410
+ #teabag-suite-list h1 {
411
+ margin: 0 0 -1px 0;
412
+ font-weight: 400;
413
+ font-size: 20px;
414
+ border-bottom: 1px dotted #cfc8c4;
415
+ }
416
+ #teabag-suite-list h4 {
417
+ margin: 0;
418
+ font-weight: 200;
419
+ }
420
+
353
421
  /* Responsive
354
422
  *---------------------------------------------------------------------------*/
355
423
  @media (max-width: 540px) {
356
- body {
357
- padding: 25px 5px;
424
+ #teabag-interface {
425
+ padding: 15px 5px;
358
426
  }
359
427
  #teabag-progress {
360
428
  margin-right: 15px;
@@ -7,7 +7,11 @@ class Teabag::SpecController < ActionController::Base
7
7
  rescue_from Exception, with: :javascript_exception
8
8
  end
9
9
 
10
- def index
10
+ def suites
11
+ @suites = Teabag.configuration.suites.keys.map { |suite| Teabag::Suite.new(suite: suite) }
12
+ end
13
+
14
+ def runner
11
15
  @suite = Teabag::Suite.new(params)
12
16
  end
13
17
 
@@ -0,0 +1,40 @@
1
+ <!DOCTYPE>
2
+ <html>
3
+ <head>
4
+ <title>Teabag :: Suites</title>
5
+ <meta name="viewport" content="width=device-width, user-scalable=no">
6
+ <%= csrf_meta_tags %>
7
+ <%= stylesheet_link_tag_for_teabag *(@suites.first.present? ? @suites.first.stylesheets : "teabag") %>
8
+ <%= javascript_include_tag_for_teabag "teabag-teabag" %>
9
+ </head>
10
+ <body>
11
+ <div id="teabag-interface">
12
+ <div class="teabag-clearfix">
13
+ <div id="teabag-title">
14
+ <h1>Teabag</h1>
15
+ <ul>
16
+ <li>version: <b><%= Teabag::VERSION %></b></li>
17
+ <li><a href="http://github.com/modeset/teabag" target="blank">http://github.com/modeset/teabag</a></li>
18
+ </ul>
19
+ </div>
20
+ <div id="teabag-progress"><div class="teabag-indicator modeset-logo"></div></div>
21
+ </div>
22
+ <div id="teabag-controls" class="teabag-clearfix">
23
+ <input type="text" id="teabag-filter-input" placeholder="filter files"/>
24
+ </div>
25
+ <hr/>
26
+ <ul id="teabag-suite-list">
27
+ <% for suite in @suites %>
28
+ <li class="suite">
29
+ <h1><%= link_to suite.name, suite.link %></h1>
30
+ <ul class="file">
31
+ <% for file in suite.spec_files %>
32
+ <h4><%= link_to file[:name], suite.link(file: file[:path]) %></h4>
33
+ <% end %>
34
+ </ul>
35
+ </li>
36
+ <% end %>
37
+ </ul>
38
+ </div>
39
+ </body>
40
+ </html>
data/config/routes.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  Teabag::Engine.routes.draw do
2
- get "/fixtures/*filename", to: "spec#fixtures", via: :get
3
- get "/(:suite)", to: "spec#index", via: :get, defaults: { suite: "default" }
2
+ get "/fixtures/*filename", to: "spec#fixtures"
3
+ get "/:suite", to: "spec#runner", defaults: { suite: "default" }
4
+ root to: "spec#suites"
4
5
  end
@@ -53,11 +53,11 @@ module Teabag
53
53
  parts = []
54
54
  parts << "grep=#{URI::encode(@options[:filter])}" if @options[:filter].present?
55
55
  @files.each { |file| parts << "file[]=#{URI::encode(file)}" }
56
- "?#{parts.join('&')}"
56
+ "?#{parts.join('&')}" if parts.present?
57
57
  end
58
58
 
59
59
  def url(suite)
60
- ["#{@server.url}#{Teabag.configuration.mount_at}", suite, filter].join("/")
60
+ ["#{@server.url}#{Teabag.configuration.mount_at}", suite, filter].compact.join("/")
61
61
  end
62
62
  end
63
63
  end
@@ -50,6 +50,7 @@ class @Runner
50
50
 
51
51
 
52
52
  onLoadFinished: (status) =>
53
+ return if @start
53
54
  @start = new Date().getTime()
54
55
  defined = @page.evaluate(-> window.Teabag)
55
56
  unless status == "success" && defined
data/lib/teabag/suite.rb CHANGED
@@ -1,12 +1,12 @@
1
1
  module Teabag
2
2
  class Suite
3
3
 
4
- attr_accessor :config
4
+ attr_accessor :config, :name
5
5
  delegate :stylesheets, :helper, to: :config
6
6
 
7
7
  def initialize(options = {})
8
8
  @options = options
9
- @name = @options[:suite] || :default
9
+ @name = (@options[:suite] || :default).to_s
10
10
  @config = suite_configuration
11
11
  end
12
12
 
@@ -22,34 +22,44 @@ module Teabag
22
22
  [helper, specs].flatten
23
23
  end
24
24
 
25
- def specs
26
- files = specs_from_file
27
- return files unless files.empty?
25
+ def suites
26
+ {all: Teabag.configuration.suites.keys, active: name}
27
+ end
28
28
 
29
- Dir[config.matcher.present? ? Teabag.configuration.root.join(config.matcher) : ""].map do |filename|
30
- asset_path_from_filename(File.expand_path(filename))
31
- end
29
+ def spec_files
30
+ glob.map { |file| {path: file, name: asset_from_file(file)} }
32
31
  end
33
32
 
34
- def suites
35
- {all: Teabag.configuration.suites.keys, active: @name.to_s}
33
+ def link(params = {})
34
+ query = "?#{params.to_query}" if params.present?
35
+ [Teabag.configuration.mount_at, name, query].compact.join("/")
36
36
  end
37
37
 
38
38
  protected
39
39
 
40
- def specs_from_file
41
- Array(@options[:file]).map do |filename|
42
- asset_path_from_filename(File.expand_path(Teabag.configuration.root.join(filename)))
43
- end
40
+ def specs
41
+ files = specs_from_file
42
+ return files unless files.empty?
43
+ glob.map { |file| asset_from_file(file) }
44
+ end
45
+
46
+ def glob
47
+ Dir[config.matcher.present? ? Teabag.configuration.root.join(config.matcher) : ""]
44
48
  end
45
49
 
46
50
  def suite_configuration
47
- config = Teabag.configuration.suites[@name.to_s]
51
+ config = Teabag.configuration.suites[name]
48
52
  raise Teabag::UnknownSuite unless config.present?
49
53
  Teabag::Configuration::Suite.new(&config)
50
54
  end
51
55
 
52
- def asset_path_from_filename(original)
56
+ def specs_from_file
57
+ Array(@options[:file]).map do |filename|
58
+ asset_from_file(File.expand_path(Teabag.configuration.root.join(filename)))
59
+ end
60
+ end
61
+
62
+ def asset_from_file(original)
53
63
  filename = original
54
64
  Rails.application.config.assets.paths.each do |path|
55
65
  filename = filename.gsub(%r(^#{path}[\/|\\]), "")