teabag 0.5.5 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (266) hide show
  1. data/README.md +61 -6
  2. data/app/assets/javascripts/teabag-jasmine.js +14 -11
  3. data/app/assets/javascripts/teabag-mocha.js +21 -12
  4. data/app/assets/javascripts/teabag-qunit.js +14 -11
  5. data/app/assets/javascripts/teabag/base/reporters/console.coffee +2 -1
  6. data/app/assets/javascripts/teabag/base/reporters/html.coffee +1 -1
  7. data/app/assets/javascripts/teabag/base/teabag.coffee +4 -3
  8. data/app/assets/javascripts/teabag/mocha/reporters/console.coffee +1 -0
  9. data/app/assets/javascripts/teabag/mocha/reporters/html.coffee +2 -1
  10. data/app/controllers/teabag/spec_controller.rb +2 -0
  11. data/app/helpers/teabag/spec_helper.rb +9 -2
  12. data/app/views/teabag/spec/runner.html.erb +1 -1
  13. data/lib/generators/teabag/install/templates/env.rb +11 -7
  14. data/lib/generators/teabag/install/templates/jasmine/initializer.rb +6 -0
  15. data/lib/generators/teabag/install/templates/mocha/initializer.rb +6 -0
  16. data/lib/generators/teabag/install/templates/qunit/initializer.rb +6 -0
  17. data/lib/teabag.rb +3 -0
  18. data/lib/teabag/command_line.rb +26 -9
  19. data/lib/teabag/configuration.rb +32 -17
  20. data/lib/teabag/coverage.rb +34 -0
  21. data/lib/teabag/drivers/phantomjs/runner.coffee +7 -2
  22. data/lib/teabag/engine.rb +3 -0
  23. data/lib/teabag/formatters/base_formatter.rb +9 -0
  24. data/lib/teabag/formatters/dot_formatter.rb +9 -11
  25. data/lib/teabag/instrumentation.rb +65 -0
  26. data/lib/teabag/result.rb +19 -13
  27. data/lib/teabag/runner.rb +1 -1
  28. data/lib/teabag/suite.rb +13 -3
  29. data/lib/teabag/utility.rb +1 -0
  30. data/lib/teabag/version.rb +1 -1
  31. data/spec/dummy/app/assets/javascripts/instrumented1.coffee +1 -0
  32. data/spec/dummy/app/assets/javascripts/instrumented2.coffee +1 -0
  33. data/spec/dummy/config/initializers/teabag.rb +6 -0
  34. data/spec/dummy/log/development.log +9251 -0
  35. data/spec/dummy/log/test.log +2094 -0
  36. data/spec/dummy/tmp/cache/assets/C13/B50/sprockets%2F431452d41e5087d2211162d23c63789b +0 -0
  37. data/spec/dummy/tmp/cache/assets/C2B/5D0/sprockets%2F98606f6051a5fc71379af24236793353 +0 -0
  38. data/spec/dummy/tmp/cache/assets/C35/510/sprockets%2Fb5f1121863a3025179f1a621e7127b10 +0 -0
  39. data/spec/dummy/tmp/cache/assets/C35/A30/sprockets%2F29906bf540f7d2e081088494b2554989 +0 -0
  40. data/spec/dummy/tmp/cache/assets/C4E/9B0/sprockets%2Fa807397434c9262c3d62da3e91152184 +0 -0
  41. data/spec/dummy/tmp/cache/assets/C51/3F0/sprockets%2F759a198d3c007241619a48f992210a5e +0 -0
  42. data/spec/dummy/tmp/cache/assets/C59/250/sprockets%2Fa80d3fe493d2476e58c4323996064512 +0 -0
  43. data/spec/dummy/tmp/cache/assets/C64/740/sprockets%2Fa65d355185e6ed0699611739c38a6683 +0 -0
  44. data/spec/dummy/tmp/cache/assets/C72/150/sprockets%2F4194031b4b51b6422c14ac697e3455e5 +0 -0
  45. data/spec/dummy/tmp/cache/assets/C75/D50/sprockets%2F5302968a40e08d2c011aa38666d273f6 +0 -0
  46. data/spec/dummy/tmp/cache/assets/C78/6B0/sprockets%2F173640f631a07f48c900a9c2923c825b +0 -0
  47. data/spec/dummy/tmp/cache/assets/C78/EF0/sprockets%2F65f827a4a5337d05d037845161b41ab8 +0 -0
  48. data/spec/dummy/tmp/cache/assets/C78/F80/sprockets%2F9161622ddd251097a4ab816b8220984c +0 -0
  49. data/spec/dummy/tmp/cache/assets/C7A/EC0/sprockets%2F5c16e4214f5662e1b27932a57c43491b +0 -0
  50. data/spec/dummy/tmp/cache/assets/C7C/AC0/sprockets%2F29124be1160817c61bb4878894b2ba55 +0 -0
  51. data/spec/dummy/tmp/cache/assets/C7D/8F0/sprockets%2Ff13d01b85f2449a4f0638ff260425906 +0 -0
  52. data/spec/dummy/tmp/cache/assets/C80/F70/sprockets%2Fe5c9811902c221828ea647978f000be3 +0 -0
  53. data/spec/dummy/tmp/cache/assets/C83/E90/sprockets%2F8be0bf09618c38257464f07790a4163b +0 -0
  54. data/spec/dummy/tmp/cache/assets/C89/700/sprockets%2F259935a7704fef0069303ea63fa89408 +0 -0
  55. data/spec/dummy/tmp/cache/assets/C8A/460/sprockets%2F77bffd9959420103906722b404ae8d59 +0 -0
  56. data/spec/dummy/tmp/cache/assets/C91/FA0/sprockets%2F2eb81283f5789ae91a69344552db3856 +0 -0
  57. data/spec/dummy/tmp/cache/assets/C92/CB0/sprockets%2F45739dff24234d860f5b75254966b49a +0 -0
  58. data/spec/dummy/tmp/cache/assets/C97/430/sprockets%2Fc049582fd1c9178ff983323f75326f64 +0 -0
  59. data/spec/dummy/tmp/cache/assets/C9D/E90/sprockets%2F3045c9533f179d3e1c805d163ed002a0 +0 -0
  60. data/spec/dummy/tmp/cache/assets/CA6/2F0/sprockets%2F20040c18b672e4c4d2731a2a929d8b97 +0 -0
  61. data/spec/dummy/tmp/cache/assets/CA6/DF0/sprockets%2F7da83747ce56e49393b6b8726587f846 +0 -0
  62. data/spec/dummy/tmp/cache/assets/CA9/C40/sprockets%2F932b7e2cd1e067289ab51190800814df +0 -0
  63. data/spec/dummy/tmp/cache/assets/CAA/0C0/sprockets%2F057b0ce384f16d9202ae84473436cc35 +0 -0
  64. data/spec/dummy/tmp/cache/assets/CAD/410/sprockets%2F651414e5c7e86f05c5108dc71626b25c +0 -0
  65. data/spec/dummy/tmp/cache/assets/CAF/0F0/sprockets%2F6000e67cf3f2377f860c24da7c819701 +0 -0
  66. data/spec/dummy/tmp/cache/assets/CB0/700/sprockets%2F006af6bf0f6b55777b03c4615c853881 +0 -0
  67. data/spec/dummy/tmp/cache/assets/CB4/6A0/sprockets%2F7373c9de844b711519cb49c4f1b16822 +0 -0
  68. data/spec/dummy/tmp/cache/assets/CB5/E60/sprockets%2Ff0f2b623b42840839e37f5ed055f5482 +0 -0
  69. data/spec/dummy/tmp/cache/assets/CB7/2B0/sprockets%2Fdf3d317564a780186148134f2ddd59a9 +0 -0
  70. data/spec/dummy/tmp/cache/assets/CBB/FA0/sprockets%2F74922109263bdc965b2e9567eec6d154 +0 -0
  71. data/spec/dummy/tmp/cache/assets/CBD/AF0/sprockets%2Fd687ec33822256e9444e8cd04f1b4873 +0 -0
  72. data/spec/dummy/tmp/cache/assets/CBF/630/sprockets%2F707d2db81468088470d476abff35388d +0 -0
  73. data/spec/dummy/tmp/cache/assets/CC2/EC0/sprockets%2F76bf80cb571ca530357f78db78167866 +0 -0
  74. data/spec/dummy/tmp/cache/assets/CC3/BA0/sprockets%2Fa717665e3657e376fa8d788940d6a22a +0 -0
  75. data/spec/dummy/tmp/cache/assets/CCC/DB0/sprockets%2F3998958d61cda73452466f5652ed81ef +0 -0
  76. data/spec/dummy/tmp/cache/assets/CCE/C50/sprockets%2Fe12774c2fea852112414bb379a71f31a +0 -0
  77. data/spec/dummy/tmp/cache/assets/CD3/460/sprockets%2F7f3f6802b0b309ed142d0b671c9640c4 +0 -0
  78. data/spec/dummy/tmp/cache/assets/CD6/DD0/sprockets%2F301bd3b0e19eb866905681d03a891be3 +0 -0
  79. data/spec/dummy/tmp/cache/assets/CD9/DD0/sprockets%2Fe5774759168a731da1c1149ecf0e1b03 +0 -0
  80. data/spec/dummy/tmp/cache/assets/CDC/E90/sprockets%2F019bff716c58b9c1f2221562fe29c170 +0 -0
  81. data/spec/dummy/tmp/cache/assets/CE0/090/sprockets%2F48d5d35ae87d0723318b8bc257fa2237 +0 -0
  82. data/spec/dummy/tmp/cache/assets/CE0/4C0/sprockets%2Fb8694bbec107486c72e40670b3b7832d +0 -0
  83. data/spec/dummy/tmp/cache/assets/CE2/190/sprockets%2F0183b0f4e9f302b8677a5e31c45c89c5 +0 -0
  84. data/spec/dummy/tmp/cache/assets/CE3/1F0/sprockets%2Fe69a515d3a9d14c669be8871012a7d07 +0 -0
  85. data/spec/dummy/tmp/cache/assets/CE4/190/sprockets%2F36c9ee4181433e33e07eb9748d218ae2 +0 -0
  86. data/spec/dummy/tmp/cache/assets/CE6/270/sprockets%2F2c98152560d18470fec8cf4c6829b4d0 +0 -0
  87. data/spec/dummy/tmp/cache/assets/CE6/7C0/sprockets%2Fa03a2c86ce6724be8542295e1cf24798 +0 -0
  88. data/spec/dummy/tmp/cache/assets/CE6/990/sprockets%2F02e1c54cebf6319465e469269b91ab66 +0 -0
  89. data/spec/dummy/tmp/cache/assets/CE7/A60/sprockets%2Ff58eee249aa167d23f8220087bb46684 +0 -0
  90. data/spec/dummy/tmp/cache/assets/CE9/9E0/sprockets%2F135480d497ed7e4884462dc0ef0b80d7 +0 -0
  91. data/spec/dummy/tmp/cache/assets/CEB/680/sprockets%2F67f0794ef8c0576d5c7da34f4437305a +0 -0
  92. data/spec/dummy/tmp/cache/assets/CEB/B40/sprockets%2F1150bf8d912aa100a132251eefaf6045 +0 -0
  93. data/spec/dummy/tmp/cache/assets/CEC/360/sprockets%2F264b79dde726b36d63fee272a0609469 +0 -0
  94. data/spec/dummy/tmp/cache/assets/CEE/930/sprockets%2Fe196521e15fd8d33e3261d5538fe8f92 +0 -0
  95. data/spec/dummy/tmp/cache/assets/CF1/C50/sprockets%2F57bd9ac92067ea01882feef075582758 +0 -0
  96. data/spec/dummy/tmp/cache/assets/CF3/3A0/sprockets%2F6571249b82eb52e7c7e035c692df9b69 +0 -0
  97. data/spec/dummy/tmp/cache/assets/CF4/6C0/sprockets%2F087d4a99adae6d6972937a2e57e93504 +0 -0
  98. data/spec/dummy/tmp/cache/assets/CF4/6F0/sprockets%2Fed96f92571224b862b84d7078b86ded3 +0 -0
  99. data/spec/dummy/tmp/cache/assets/CF7/F10/sprockets%2F8c45854ebd195b52cc42bf3f99996336 +0 -0
  100. data/spec/dummy/tmp/cache/assets/CF8/780/sprockets%2F8845b81ff27cdb57c835836c9f91a265 +0 -0
  101. data/spec/dummy/tmp/cache/assets/CFA/D20/sprockets%2Fb26796b39b3c5d6ed70be7989637a493 +0 -0
  102. data/spec/dummy/tmp/cache/assets/CFB/210/sprockets%2F9104695bfbf9a9d4b94382e6e90487a9 +0 -0
  103. data/spec/dummy/tmp/cache/assets/CFC/380/sprockets%2Fa7443cbd671446a589867dd5f4a4f989 +0 -0
  104. data/spec/dummy/tmp/cache/assets/D00/110/sprockets%2F6a6353b7723a8b21708e0fbfe04bd422 +0 -0
  105. data/spec/dummy/tmp/cache/assets/D00/F60/sprockets%2F42e279b52511c47d26c0adb125fd04e8 +0 -0
  106. data/spec/dummy/tmp/cache/assets/D02/570/sprockets%2F51fa8dc514e6256ae0836d5eb24e0312 +0 -0
  107. data/spec/dummy/tmp/cache/assets/D03/630/sprockets%2F5d8da32dba6a7be70426a1d554773701 +0 -0
  108. data/spec/dummy/tmp/cache/assets/D04/170/sprockets%2F76ab1dc02e6c7618852708a1e05a2df3 +0 -0
  109. data/spec/dummy/tmp/cache/assets/D04/480/sprockets%2F8bd8f10500b21d2f9d94e4cd1401c936 +0 -0
  110. data/spec/dummy/tmp/cache/assets/D04/580/sprockets%2F18748d128c062c8eab0e22d35d41b19e +0 -0
  111. data/spec/dummy/tmp/cache/assets/D05/8D0/sprockets%2F319f8f235f452343f1ebf03cb262d23d +0 -0
  112. data/spec/dummy/tmp/cache/assets/D09/BF0/sprockets%2F9e6bca5d26f50d9484385d51ba04312c +0 -0
  113. data/spec/dummy/tmp/cache/assets/D0B/210/sprockets%2Fb95ce127097fba0e4019f633e91b730d +0 -0
  114. data/spec/dummy/tmp/cache/assets/D0E/570/sprockets%2F90fe371bf8091e88a712124d9cdae260 +0 -0
  115. data/spec/dummy/tmp/cache/assets/D12/F40/sprockets%2Fb6f95541e256c15909e0a5a5fbf2a359 +0 -0
  116. data/spec/dummy/tmp/cache/assets/D15/750/sprockets%2F8effdd3e668a4036260a3e370f3b6657 +0 -0
  117. data/spec/dummy/tmp/cache/assets/D17/710/sprockets%2Ffa49fb6823d466e79a195e0cd71340c5 +0 -0
  118. data/spec/dummy/tmp/cache/assets/D18/AF0/sprockets%2F8f572049bd1b0a6f1eb3d27979c9544c +0 -0
  119. data/spec/dummy/tmp/cache/assets/D1A/D30/sprockets%2F815a5177e9edba0c5c996182ef1b3675 +0 -0
  120. data/spec/dummy/tmp/cache/assets/D1B/480/sprockets%2F281f079dce6c1e4794b2ec756851d51e +0 -0
  121. data/spec/dummy/tmp/cache/assets/D1D/560/sprockets%2F1ca784ee7ba1922465147e7f8963eae5 +0 -0
  122. data/spec/dummy/tmp/cache/assets/D1E/AA0/sprockets%2F5c8741a556bc955cd36e61c88582b6dc +0 -0
  123. data/spec/dummy/tmp/cache/assets/D21/AD0/sprockets%2Fd471d7f687f61341d8b19efc41f39e44 +0 -0
  124. data/spec/dummy/tmp/cache/assets/D22/D70/sprockets%2Fe86ae12aa97067ed78aa94489484ec16 +0 -0
  125. data/spec/dummy/tmp/cache/assets/D23/E70/sprockets%2F0c6d23a1282deab18acb51022a74489a +0 -0
  126. data/spec/dummy/tmp/cache/assets/D23/F90/sprockets%2F2923479467bdf1e189d0c8f79ae46fc0 +0 -0
  127. data/spec/dummy/tmp/cache/assets/D2C/5B0/sprockets%2Fff04a2033b20f70f62911fa18cb9ad37 +0 -0
  128. data/spec/dummy/tmp/cache/assets/D2D/060/sprockets%2F545ec7a363badb5e7106e5112b53b26d +0 -0
  129. data/spec/dummy/tmp/cache/assets/D2F/520/sprockets%2Fea2308e8add6880c1c4d47040ab710d7 +0 -0
  130. data/spec/dummy/tmp/cache/assets/D2F/810/sprockets%2F1a2674b7dac8ff403c23a570475ace04 +0 -0
  131. data/spec/dummy/tmp/cache/assets/D31/9C0/sprockets%2Fbd102a4f5a4985c3519dd6ab0295a1c6 +0 -0
  132. data/spec/dummy/tmp/cache/assets/D34/920/sprockets%2Ff234dd736ae50902ba074c526ca8f0c8 +0 -0
  133. data/spec/dummy/tmp/cache/assets/D35/7C0/sprockets%2Ff536a2606eaf7d542c0985104cb62baf +0 -0
  134. data/spec/dummy/tmp/cache/assets/D37/810/sprockets%2F99de576ce6ad42b5c0843fc21c2025b2 +0 -0
  135. data/spec/dummy/tmp/cache/assets/D37/FF0/sprockets%2F96841ca4cfae32c515077f3f5fc303b2 +0 -0
  136. data/spec/dummy/tmp/cache/assets/D39/BE0/sprockets%2Fdb727091cf3e4b4f6126c48b6063ef0b +0 -0
  137. data/spec/dummy/tmp/cache/assets/D3C/840/sprockets%2Fc6202ec91d567a85bd3d46dc43ea9108 +0 -0
  138. data/spec/dummy/tmp/cache/assets/D3D/EC0/sprockets%2F1aa82cb99ef076aea10d472b30a58979 +0 -0
  139. data/spec/dummy/tmp/cache/assets/D3F/3A0/sprockets%2F1b3734b358a405ca6f92455db8e4b5ff +0 -0
  140. data/spec/dummy/tmp/cache/assets/D44/E90/sprockets%2F05cfc0bf7c9938963d1d1c63248db80d +0 -0
  141. data/spec/dummy/tmp/cache/assets/D45/C30/sprockets%2Fcc744877558178a3adb77c441cadce70 +0 -0
  142. data/spec/dummy/tmp/cache/assets/D47/A90/sprockets%2Fe7ca382b607c595ea6505853f7fb63da +0 -0
  143. data/spec/dummy/tmp/cache/assets/D49/1F0/sprockets%2F773b56f87127c6605e7d1d3faf2b6af6 +0 -0
  144. data/spec/dummy/tmp/cache/assets/D49/A10/sprockets%2Fc4656bd995a6f297c26d19b13aadb963 +0 -0
  145. data/spec/dummy/tmp/cache/assets/D4A/580/sprockets%2F19b8d8a9a57850de79b6c099fb2d010e +0 -0
  146. data/spec/dummy/tmp/cache/assets/D4A/A50/sprockets%2Fb95795be8b937dab770541e27ddb2e70 +0 -0
  147. data/spec/dummy/tmp/cache/assets/D4C/840/sprockets%2F7732c94884c24e764f109ce2deb2a9ed +0 -0
  148. data/spec/dummy/tmp/cache/assets/D50/D70/sprockets%2Fe2a3e6c95b11e0801a4eebae3a026026 +0 -0
  149. data/spec/dummy/tmp/cache/assets/D51/400/sprockets%2Ff5e433d8a31e80985b75ce598de236be +0 -0
  150. data/spec/dummy/tmp/cache/assets/D54/D80/sprockets%2F631327e25ec20edc723046cdec3bb1c0 +0 -0
  151. data/spec/dummy/tmp/cache/assets/D58/870/sprockets%2F3cef1ff075a050004b74ffa13c8c4f02 +0 -0
  152. data/spec/dummy/tmp/cache/assets/D5A/140/sprockets%2F01f728f33e9bd12104d3b0b1dc7df0a9 +0 -0
  153. data/spec/dummy/tmp/cache/assets/D5B/9D0/sprockets%2F9c18c0aa5bbe1b323c5022c98aa09f29 +0 -0
  154. data/spec/dummy/tmp/cache/assets/D5B/E60/sprockets%2F167c229432f74a17b4c6a07bbb19aacb +0 -0
  155. data/spec/dummy/tmp/cache/assets/D5C/710/sprockets%2F9427d05cee2caa721241a25a9af1d08f +0 -0
  156. data/spec/dummy/tmp/cache/assets/D5C/CC0/sprockets%2Faa8bf6de211f2765b0a26f112b971f0c +0 -0
  157. data/spec/dummy/tmp/cache/assets/D5E/FA0/sprockets%2Fc81c371ae2d61a6aa1708262fba79e0d +0 -0
  158. data/spec/dummy/tmp/cache/assets/D60/060/sprockets%2Fe8a6ac51dd42491eaa2f9130c1629eb2 +0 -0
  159. data/spec/dummy/tmp/cache/assets/D61/1F0/sprockets%2F0c7a6176d2fc4db00bb9a74d36380fe1 +0 -0
  160. data/spec/dummy/tmp/cache/assets/D61/BD0/sprockets%2Ff96fcad988ca7fea975e538c27188605 +0 -0
  161. data/spec/dummy/tmp/cache/assets/D65/AD0/sprockets%2Fcc53fff930eaf306c15c4568cb265c00 +0 -0
  162. data/spec/dummy/tmp/cache/assets/D67/030/sprockets%2Fb8b36ba6104c8dbe6297b4e61e6d33b1 +0 -0
  163. data/spec/dummy/tmp/cache/assets/D67/BC0/sprockets%2F35d2c2b45981ade5a2db2a9c7f37a615 +0 -0
  164. data/spec/dummy/tmp/cache/assets/D67/C20/sprockets%2F0d30bf27e5f74bbd85f313cb8d3c4623 +0 -0
  165. data/spec/dummy/tmp/cache/assets/D69/F90/sprockets%2F6a0795b7b38bd7e6142cd1b88211dade +0 -0
  166. data/spec/dummy/tmp/cache/assets/D6A/7E0/sprockets%2F3a3b155b775b7d32b25abc8cb6bf9727 +0 -0
  167. data/spec/dummy/tmp/cache/assets/D6A/950/sprockets%2F429b1806cb7580ebf29f9a12c33cbea6 +0 -0
  168. data/spec/dummy/tmp/cache/assets/D6B/6E0/sprockets%2F266d99da1afe084cac250a6ba864c565 +0 -0
  169. data/spec/dummy/tmp/cache/assets/D6B/890/sprockets%2Fe1317822fdcc5580f1e50c9b91c6e5bb +0 -0
  170. data/spec/dummy/tmp/cache/assets/D6D/530/sprockets%2F8d52dee91bff01a8a2306d8a7c9152a9 +0 -0
  171. data/spec/dummy/tmp/cache/assets/D6D/DA0/sprockets%2Fac936bf40b42227a2bf9d474ae9ec149 +0 -0
  172. data/spec/dummy/tmp/cache/assets/D71/A70/sprockets%2F4f10f5dd56c8a3ff78c460bbe3723a39 +0 -0
  173. data/spec/dummy/tmp/cache/assets/D72/C10/sprockets%2Ffbdb5250837c5cb856f464eb2cb3388b +0 -0
  174. data/spec/dummy/tmp/cache/assets/D73/5D0/sprockets%2F5c8608f3e25d077fa3df8cd32b50c37f +0 -0
  175. data/spec/dummy/tmp/cache/assets/D73/C00/sprockets%2F9cf4bfb486e4ab461e3f275a3d974c30 +0 -0
  176. data/spec/dummy/tmp/cache/assets/D77/B30/sprockets%2F946cf2f17c7eb41037f9ee08ad67ec40 +0 -0
  177. data/spec/dummy/tmp/cache/assets/D78/2F0/sprockets%2F3c61f8915b8f717b1de788e6ecad122c +0 -0
  178. data/spec/dummy/tmp/cache/assets/D78/870/sprockets%2F8f3a7d4fcd104fa8e47f552f6630a49e +0 -0
  179. data/spec/dummy/tmp/cache/assets/D7E/C10/sprockets%2F747c98c3cc7494a62dd882752adffb2b +0 -0
  180. data/spec/dummy/tmp/cache/assets/D7F/6C0/sprockets%2F77fe714bfff7e409a9d838cdf126700c +0 -0
  181. data/spec/dummy/tmp/cache/assets/D80/390/sprockets%2Fe44158f578d9ffade083a07f54eab729 +0 -0
  182. data/spec/dummy/tmp/cache/assets/D8C/520/sprockets%2F221cd58a042baac534d27e4cfedc1188 +0 -0
  183. data/spec/dummy/tmp/cache/assets/D8D/370/sprockets%2Fc8ecf0a54ad40917d2607b0d5a6bbb27 +0 -0
  184. data/spec/dummy/tmp/cache/assets/D93/BD0/sprockets%2Ff5e1b60201e08e3ddf8d3de5211f3d5e +0 -0
  185. data/spec/dummy/tmp/cache/assets/D97/520/sprockets%2Fea2442ae4caddb758dfb1964c601b476 +0 -0
  186. data/spec/dummy/tmp/cache/assets/D9D/440/sprockets%2F869f9acc13b88cf15a31d24a0ac3f6f6 +0 -0
  187. data/spec/dummy/tmp/cache/assets/D9D/600/sprockets%2F17dcd25e57fe7397d30d44ffa1400aef +0 -0
  188. data/spec/dummy/tmp/cache/assets/D9E/550/sprockets%2F7395f2f9b6f6a07b44eadbf3c1216a7c +0 -0
  189. data/spec/dummy/tmp/cache/assets/DA0/330/sprockets%2Fcbbb4de706387d50f48a72ee6c9c1b80 +0 -0
  190. data/spec/dummy/tmp/cache/assets/DA4/320/sprockets%2F7fd0ad444f4a16b359bdbfe0977bb874 +0 -0
  191. data/spec/dummy/tmp/cache/assets/DA5/0A0/sprockets%2F7a4b5928cec69ab65afff309a04d6b47 +0 -0
  192. data/spec/dummy/tmp/cache/assets/DA6/D80/sprockets%2F8702dce2e6b9879a6add309e92ace2f0 +0 -0
  193. data/spec/dummy/tmp/cache/assets/DA8/C50/sprockets%2F0810627fddce930a399fc60d3be97fed +0 -0
  194. data/spec/dummy/tmp/cache/assets/DAA/2B0/sprockets%2Fe0c5d93fa08d139e198bfe47cd42b99a +0 -0
  195. data/spec/dummy/tmp/cache/assets/DAB/920/sprockets%2F799cc5f63f62ebc5faf4511e771fa5b5 +0 -0
  196. data/spec/dummy/tmp/cache/assets/DAC/9B0/sprockets%2F5e58701704fefbc8f88ae24c549fab6b +0 -0
  197. data/spec/dummy/tmp/cache/assets/DAD/1F0/sprockets%2Fdf7609630657aee0ebe5ed61e929d5dd +0 -0
  198. data/spec/dummy/tmp/cache/assets/DAE/6C0/sprockets%2F77c7a8676aeefa73156c55dfcf51cc46 +0 -0
  199. data/spec/dummy/tmp/cache/assets/DAF/5B0/sprockets%2F780e81d97e4eefcce73e0b82a5b1859d +0 -0
  200. data/spec/dummy/tmp/cache/assets/DAF/7C0/sprockets%2F8942514d59e7bffbfb33cde6fa9735c2 +0 -0
  201. data/spec/dummy/tmp/cache/assets/DB3/5D0/sprockets%2Fce1d4d75832c9bdeafd869f6f7b61725 +0 -0
  202. data/spec/dummy/tmp/cache/assets/DB3/D70/sprockets%2Fcc2f5e1f6eeb99c33881848cb1cde758 +0 -0
  203. data/spec/dummy/tmp/cache/assets/DB4/1F0/sprockets%2F69ad2749d7bfe831c0e74e7d7fc4dc57 +0 -0
  204. data/spec/dummy/tmp/cache/assets/DB4/820/sprockets%2Fe8cc1bf3231003d92b11cbf1ebd5a82f +0 -0
  205. data/spec/dummy/tmp/cache/assets/DB5/040/sprockets%2F9a9da5df88713663b9fbc945facca891 +0 -0
  206. data/spec/dummy/tmp/cache/assets/DB5/860/sprockets%2Facf25fab3016425a0e03c9d190fd4eac +0 -0
  207. data/spec/dummy/tmp/cache/assets/DB9/220/sprockets%2Fd2dc4f59e70e73984997ffca8ad7f4a0 +0 -0
  208. data/spec/dummy/tmp/cache/assets/DBC/A20/sprockets%2Fec46fb30cecc002128c61fb49cf30da8 +0 -0
  209. data/spec/dummy/tmp/cache/assets/DC3/230/sprockets%2Fdf52e72eb73be91eccc60182191aed0b +0 -0
  210. data/spec/dummy/tmp/cache/assets/DC3/AC0/sprockets%2Fe29911eb34fdf4b710dd0d2c2cf24bc9 +0 -0
  211. data/spec/dummy/tmp/cache/assets/DC4/CA0/sprockets%2Fdbcd5b5132f1ec3ff0e7e7db19190f03 +0 -0
  212. data/spec/dummy/tmp/cache/assets/DC7/A10/sprockets%2F84a8af0fcbf401864e1ae5bf092cba94 +0 -0
  213. data/spec/dummy/tmp/cache/assets/DC8/110/sprockets%2Faf09fc16a29e34c256dbbfa80a44b97b +0 -0
  214. data/spec/dummy/tmp/cache/assets/DCB/620/sprockets%2F27a68cf9fe11fb1b6326d11eba7e76cb +0 -0
  215. data/spec/dummy/tmp/cache/assets/DCD/EB0/sprockets%2F4f77f509126ecbced7ea2a5ab290c8d4 +0 -0
  216. data/spec/dummy/tmp/cache/assets/DCE/070/sprockets%2Fb6ddeed67c9ebb1834d6252ef0360d1f +0 -0
  217. data/spec/dummy/tmp/cache/assets/DD7/630/sprockets%2Ffa5eec4483c5be83deee04f5a5654a58 +0 -0
  218. data/spec/dummy/tmp/cache/assets/DDB/520/sprockets%2Faa365f7b98350c85b6acb09d5e9cbf9e +0 -0
  219. data/spec/dummy/tmp/cache/assets/DDB/EF0/sprockets%2Fe790bb18b64df8aa0a9fe94642a9edd8 +0 -0
  220. data/spec/dummy/tmp/cache/assets/DDD/A60/sprockets%2Fff948b6ffe44a3cc3d2d109a39f548fd +0 -0
  221. data/spec/dummy/tmp/cache/assets/DE3/6C0/sprockets%2F51c550cc1b3b021aa9aede66a5a36aff +0 -0
  222. data/spec/dummy/tmp/cache/assets/DE4/140/sprockets%2F139e4ab85d1aacb22c115fa136afdc8a +0 -0
  223. data/spec/dummy/tmp/cache/assets/DEB/110/sprockets%2F2dbdab0ce5babca645cdb5780004f875 +0 -0
  224. data/spec/dummy/tmp/cache/assets/DF6/0E0/sprockets%2F85b10db6e1afe643aba6d396abdd77f0 +0 -0
  225. data/spec/dummy/tmp/cache/assets/DF7/E10/sprockets%2F25e4253aba9a9adcefb72552fb1ff0c8 +0 -0
  226. data/spec/dummy/tmp/cache/assets/DF9/AD0/sprockets%2Fc700afd7cee3fe9d7ff8352b213b2c4a +0 -0
  227. data/spec/dummy/tmp/cache/assets/DFC/C20/sprockets%2Fd9178ad7e3b401c9fceafd64ea2b50d6 +0 -0
  228. data/spec/dummy/tmp/cache/assets/DFC/C30/sprockets%2Fb50a07cb30b0bd0eec8e98e5de79d65d +0 -0
  229. data/spec/dummy/tmp/cache/assets/E00/2B0/sprockets%2Fffeda2454f8128abad731f07d7ea88da +0 -0
  230. data/spec/dummy/tmp/cache/assets/E02/6E0/sprockets%2F63d6a5cdb8cefa64ef76b5c6e0fd3720 +0 -0
  231. data/spec/dummy/tmp/cache/assets/E08/BB0/sprockets%2Fefac99af1af28543aef6fb607faa4973 +0 -0
  232. data/spec/dummy/tmp/cache/assets/E08/F20/sprockets%2F4fc5cdcd6974efe7adfe809b30bd6513 +0 -0
  233. data/spec/dummy/tmp/cache/assets/E0D/070/sprockets%2F0e7ef9a5978dcc6b1abce678ef836c0a +0 -0
  234. data/spec/dummy/tmp/cache/assets/E16/D30/sprockets%2Fd69469e6e7439baacd8df989c0fdacc2 +0 -0
  235. data/spec/dummy/tmp/cache/assets/E17/EF0/sprockets%2Fa291ad64a26afd055dfadabbdf03f154 +0 -0
  236. data/spec/dummy/tmp/cache/assets/E2F/790/sprockets%2F7fac280deaa7ef20a77d5c9b5b9cfc34 +0 -0
  237. data/spec/dummy/tmp/cache/assets/E36/A40/sprockets%2Ff3477eebd69a4f1b8fbdd3f9ef2ba242 +0 -0
  238. data/spec/dummy/tmp/cache/assets/E41/250/sprockets%2F97cf8fe3d7ffaff076f655aefb36da03 +0 -0
  239. data/spec/dummy/tmp/cache/assets/E64/1E0/sprockets%2F81ab4c863fbbdec8dd66afc97ebf034d +0 -0
  240. data/spec/dummy/tmp/cache/assets/E6E/260/sprockets%2Fd9f8ab8b91ef582cc6c99a3ba0dedfe6 +0 -0
  241. data/spec/dummy/tmp/cache/assets/E89/4C0/sprockets%2F68b2eedb3cde6fc01d50fead7caf8a18 +0 -0
  242. data/spec/dummy/tmp/cache/assets/F79/360/sprockets%2F0ce035fefee5ebdabc8efabfbdbd6ee4 +0 -0
  243. data/spec/features/console_reporter_spec.rb +7 -0
  244. data/spec/features/html_reporter_spec.rb +2 -6
  245. data/spec/features/instrumentation_spec.rb +19 -0
  246. data/spec/javascripts/teabag/base/reporters/console_spec.coffee +2 -0
  247. data/spec/javascripts/teabag/base/teabag_spec.coffee +0 -1
  248. data/spec/javascripts/teabag/mocha/reporters/html_mspec.coffee +1 -1
  249. data/spec/spec_helper.rb +0 -2
  250. data/spec/teabag/configuration_spec.rb +13 -15
  251. data/spec/teabag/coverage_spec.rb +35 -0
  252. data/spec/teabag/environment_spec.rb +1 -10
  253. data/spec/teabag/formatters/base_formatter_spec.rb +44 -0
  254. data/spec/teabag/formatters/dot_formatter_spec.rb +5 -9
  255. data/spec/teabag/instrumentation_spec.rb +101 -0
  256. data/spec/teabag/result_spec.rb +30 -28
  257. data/spec/teabag/runner_spec.rb +2 -11
  258. data/spec/teabag/server_spec.rb +3 -4
  259. data/spec/teabag/suite_spec.rb +29 -20
  260. data/spec/teabag_env.rb +17 -11
  261. data/vendor/assets/javascripts/support/sinon-chai.MIT-ISH.LICENSE +13 -0
  262. data/vendor/assets/javascripts/support/sinon-chai.js +109 -0
  263. metadata +44 -10
  264. data/spec/dummy/tmp/cache/assets/CC1/DB0/sprockets%2F95e6273223502af230a0dbaa25410de8 +0 -0
  265. data/spec/dummy/tmp/cache/assets/D0B/740/sprockets%2F781d3a2f0449451e9f35c5b0e3e2df41 +0 -0
  266. data/spec/dummy/tmp/cache/assets/D44/0F0/sprockets%2Fc4d293b967c2e290deed3f3bd2271828 +0 -0
@@ -0,0 +1,19 @@
1
+ require "spec_helper"
2
+
3
+ feature "instrumenting javascript" do
4
+
5
+ before do
6
+ pending("needs istanbul to be installed") unless Teabag::Instrumentation.which('istanbul')
7
+ end
8
+
9
+ scenario "requesting with instrument=true adds istanbul instrumentation" do
10
+ visit "/assets/instrumented1.js?instrument=true"
11
+ expect(html).to include("if (typeof __coverage__ === 'undefined') { __coverage__ = {}; }")
12
+ end
13
+
14
+ scenario "requesting without instrument=true doesn't do anything" do
15
+ visit "/assets/instrumented2.js?instrument=false"
16
+ expect(html).to_not include("if (typeof __coverage__ === 'undefined') { __coverage__ = {}; }")
17
+ end
18
+
19
+ end
@@ -141,11 +141,13 @@ describe "Teabag.Reporters.Console", ->
141
141
 
142
142
  it "logs the results", ->
143
143
  spy = spyOn(@reporter, "log")
144
+ window.__coverage__ ||= {}
144
145
  @reporter.reportRunnerResults()
145
146
  Teabag.finished = false
146
147
  args = spy.mostRecentCall.args[0]
147
148
  expect(args["type"]).toEqual("result")
148
149
  expect(args["elapsed"]).toBeDefined()
150
+ expect(args["coverage"]).toBe(window.__coverage__)
149
151
 
150
152
  it "tells Teabag that we're finished", ->
151
153
  @reporter.reportRunnerResults()
@@ -15,7 +15,6 @@ describe "Teabag", ->
15
15
  # caching
16
16
  expect(keys).toContain("Date")
17
17
  expect(keys).toContain("location")
18
- expect(keys).toContain("console")
19
18
 
20
19
 
21
20
  describe ".execute", ->
@@ -29,7 +29,7 @@ describe "Mocha Teabag.Reporters.HTML", ->
29
29
  describe "#envInfo", ->
30
30
 
31
31
  it "returns the version", ->
32
- expect(@reporter.envInfo()).to.be("mocha 1.7.4")
32
+ expect(@reporter.envInfo()).to.be("mocha 1.8.1")
33
33
 
34
34
 
35
35
  describe "Mocha Teabag.Reporters.HTML.SpecView", ->
@@ -15,5 +15,3 @@ RSpec.configure do |config|
15
15
  config.infer_base_class_for_anonymous_controllers = false
16
16
  config.order = "random"
17
17
  end
18
-
19
- Teabag.configuration.suites = {}
@@ -19,23 +19,19 @@ describe Teabag do
19
19
  describe ".override_from_env" do
20
20
 
21
21
  after do
22
- Teabag.configuration.suppress_log = false
23
- Teabag.configuration.fail_fast = true
24
- Teabag.configuration.formatters = "dot"
22
+ ENV["SUPPRESS_LOG"] = nil
23
+ ENV["FAIL_FAST"] = nil
24
+ ENV["FORMATTERS"] = nil
25
25
  end
26
26
 
27
27
  it "allows overriding of fail_fast and suppress_log from the env" do
28
- Teabag.setup { |c| config = c }
29
28
  ENV["SUPPRESS_LOG"] = "true"
30
29
  ENV["FAIL_FAST"] = "false"
31
30
  ENV["FORMATTERS"] = "something"
31
+ Teabag.configuration.should_receive(:suppress_log=).with(true)
32
+ Teabag.configuration.should_receive(:fail_fast=).with(false)
33
+ Teabag.configuration.should_receive(:formatters=).with("something")
32
34
  Teabag.send(:override_from_env)
33
- expect(Teabag.configuration.suppress_log).to eq(true)
34
- expect(Teabag.configuration.fail_fast).to eq(false)
35
- expect(Teabag.configuration.formatters).to eq('something')
36
- ENV["SUPPRESS_LOG"] = nil
37
- ENV["FAIL_FAST"] = nil
38
- ENV["FORMATTERS"] = nil
39
35
  end
40
36
 
41
37
  end
@@ -49,7 +45,7 @@ describe Teabag::Configuration do
49
45
 
50
46
  after do
51
47
  Teabag::Configuration.mount_at = "/teabag"
52
- Teabag::Configuration.suites = {}
48
+ Teabag::Configuration.suites.delete("test_suite")
53
49
  end
54
50
 
55
51
  it "has the default configuration" do
@@ -57,11 +53,13 @@ describe Teabag::Configuration do
57
53
  expect(subject.asset_paths).to include("spec/javascripts")
58
54
  expect(subject.asset_paths).to include("spec/javascripts/stylesheets")
59
55
  expect(subject.fixture_path).to eq("spec/javascripts/fixtures")
60
- expect(subject.formatters).to eq('dot')
56
+ expect(subject.formatters).to eq(['dot'])
61
57
  expect(subject.server_timeout).to eq(20)
62
58
  expect(subject.fail_fast).to eq(true)
63
59
  expect(subject.suppress_log).to eq(false)
64
- expect(subject.suites).to eq({})
60
+ expect(subject.suites).to be_a(Hash)
61
+ expect(subject.coverage).to eq(false)
62
+ expect(subject.coverage_reports).to eq(["text-summary"])
65
63
  end
66
64
 
67
65
  it "allows setting various configuration options" do
@@ -81,9 +79,9 @@ describe Teabag::Configuration::Suite do
81
79
 
82
80
  it "has the default configuration" do
83
81
  subject = Teabag::Configuration::Suite.new
84
- expect(subject.matcher).to eq("{spec/javascripts,app/assets}/**/*_spec.{js,js.coffee,coffee}")
82
+ expect(subject.matcher).to eq("{spec/javascripts,spec/dummy/app/assets/javascripts/specs}/**/*_spec.{js,js.coffee,coffee}")
85
83
  expect(subject.helper).to eq("spec_helper")
86
- expect(subject.javascripts).to eq(["teabag-jasmine"])
84
+ expect(subject.javascripts).to eq(["teabag/jasmine"])
87
85
  expect(subject.stylesheets).to eq(["teabag"])
88
86
  end
89
87
 
@@ -0,0 +1,35 @@
1
+ require "spec_helper"
2
+ require "teabag/coverage"
3
+
4
+ describe Teabag::Coverage do
5
+
6
+ subject { Teabag::Coverage.new({"foo" => "bar"}) }
7
+
8
+ describe "#reports" do
9
+
10
+ before do
11
+ Teabag.configuration.should_receive(:coverage_reports).and_return(["text", "text-summary", "html"])
12
+ subject.stub(:generate_report) { |i, f| "_#{f}_report_" }
13
+ File.stub(:write)
14
+
15
+ path = nil
16
+ Dir.mktmpdir { |p| path = p }
17
+ Dir.stub(:mktmpdir).and_yield(path)
18
+ @output = File.join(path, "coverage.json")
19
+ end
20
+
21
+ it "writes the data to a file" do
22
+ File.should_receive(:write).with(@output, '{"foo":"bar"}')
23
+ subject.reports
24
+ end
25
+
26
+ it "collects the results and returns them" do
27
+ subject.should_receive(:generate_report).with(@output, "text")
28
+ subject.should_receive(:generate_report).with(@output, "text-summary")
29
+ subject.should_receive(:generate_report).with(@output, "html")
30
+ expect(subject.reports).to eq("\n_text_report_\n\n_text-summary_report_\n")
31
+ end
32
+
33
+ end
34
+
35
+ end
@@ -69,18 +69,9 @@ describe Teabag::Environment do
69
69
 
70
70
  describe ".configure_from_options" do
71
71
 
72
- before do
73
- @stored_configuration = Teabag.configuration.color
74
- end
75
-
76
- after do
77
- Teabag.configuration.color = @stored_configuration
78
- end
79
-
80
72
  it "allows overriding configuration directives from options" do
81
- Teabag.configuration.color = true
73
+ Teabag.configuration.should_receive(:color=).with(false)
82
74
  Teabag::Environment.configure_from_options(color: false)
83
- expect(Teabag.configuration.color).to be(false)
84
75
  end
85
76
 
86
77
  end
@@ -0,0 +1,44 @@
1
+ require "spec_helper"
2
+ require "teabag/formatters/base_formatter"
3
+ require "teabag/result"
4
+
5
+ describe Teabag::Formatters::BaseFormatter do
6
+
7
+ before do
8
+ @log = ""
9
+ STDOUT.stub(:print) { |s| @log << s }
10
+ end
11
+
12
+ describe "#result" do
13
+
14
+ it "calls log_coverage" do
15
+ subject.should_receive(:log_coverage).with("_coverage_")
16
+ subject.result("coverage" => "_coverage_")
17
+ end
18
+
19
+ end
20
+
21
+ describe "#log_coverage" do
22
+
23
+ it "logs the coverage information" do
24
+ mock = mock(reports: nil)
25
+ Teabag::Coverage.should_receive(:new).with("_data_").and_return(mock)
26
+ mock.should_receive(:reports).and_return("_reports_")
27
+ STDOUT.should_receive(:print).with("_reports_")
28
+ subject.send(:log_coverage, "_data_")
29
+ end
30
+
31
+ it "doesn't log if there's no data" do
32
+ Teabag::Coverage.should_not_receive(:new)
33
+ subject.send(:log_coverage, {})
34
+ end
35
+
36
+ it "doesn't log when suppressing logs" do
37
+ Teabag.configuration.should_receive(:suppress_log).and_return(true)
38
+ Teabag::Coverage.should_not_receive(:new)
39
+ subject.send(:log_coverage, "_data_")
40
+ end
41
+
42
+ end
43
+
44
+ end
@@ -64,21 +64,17 @@ describe Teabag::Formatters::DotFormatter do
64
64
 
65
65
  it "logs the details and raises an exception" do
66
66
  subject.failures << Teabag::Result.build_from_json("label" => "some spec", "suite" => "full description", "message" => "some message", "link" => "full description")
67
- expect {
67
+ expect{
68
68
  subject.result("elapsed" => 0.31337)
69
69
  }.to raise_error(Teabag::Failure)
70
- expect(@log).to eq("\n\nFailures:\n\n 1) full description some spec\n\e[31m Failure/Error: some message\n\e[0m\nFinished in 0.31337 seconds\n\e[31m666 examples, 1 failure\n\e[0m\nFailed examples:\n\e[31m\nteabag -s default --filter=\"full description\"\e[0m\n\n")
70
+ expect(@log).to eq("\n\nFailures:\n\n 1) full description some spec\n\e[31m Failure/Error: some message\n\n\e[0mFinished in 0.31337 seconds\n\e[31m666 examples, 1 failure\n\e[0m\nFailed examples:\n\n\e[31mteabag -s default --filter=\"full description\"\n\e[0m\n")
71
71
  expect(subject.failures.length).to be(1)
72
72
  end
73
73
 
74
74
  describe "when fail_fast is false" do
75
75
 
76
- after do
77
- Teabag.configuration.fail_fast = true
78
- end
79
-
80
76
  it "doesn't raise the exception" do
81
- Teabag.configuration.fail_fast = false
77
+ Teabag.configuration.should_receive(:fail_fast).and_return(false)
82
78
  subject.failures << Teabag::Result.build_from_json("message" => "some message")
83
79
  subject.result("elapsed" => 0.31337)
84
80
  expect(subject.failures.length).to be(1)
@@ -93,7 +89,7 @@ describe Teabag::Formatters::DotFormatter do
93
89
  it "logs the details" do
94
90
  subject.pendings << Teabag::Result.build_from_json("label" => "some spec", "suite" => "full description")
95
91
  subject.result("elapsed" => 0.31337)
96
- expect(@log).to eq("\n\nPending:\e[33m\n full description some spec\n\e[0m\e[36m # Not yet implemented\n\e[0m\nFinished in 0.31337 seconds\n\e[33m666 examples, 0 failures, 1 pending\n\e[0m")
92
+ expect(@log).to eq("\n\nPending:\n\e[33m full description some spec\n\e[0m\e[36m # Not yet implemented\n\n\e[0mFinished in 0.31337 seconds\n\e[33m666 examples, 0 failures, 1 pending\n\e[0m")
97
93
  end
98
94
 
99
95
  end
@@ -103,7 +99,7 @@ describe Teabag::Formatters::DotFormatter do
103
99
  describe "#exception" do
104
100
 
105
101
  it "raises" do
106
- expect { subject.exception }.to raise_error(Teabag::RunnerException)
102
+ expect{ subject.exception }.to raise_error(Teabag::RunnerException)
107
103
  end
108
104
 
109
105
  end
@@ -0,0 +1,101 @@
1
+ require "spec_helper"
2
+ require "rack/test"
3
+
4
+ describe Teabag::Instrumentation do
5
+
6
+ subject { Teabag::Instrumentation }
7
+
8
+ let(:asset) { mock(source: nil) }
9
+ let(:response) { [200, {"Content-Type" => "application/javascript"}, asset] }
10
+ let(:env) { {"QUERY_STRING" => "instrument=true"} }
11
+
12
+ before do
13
+ Teabag::Instrumentation.stub(:which).and_return("/path/to/istanbul")
14
+ Teabag::Instrumentation.instance_variable_set(:@executable, nil)
15
+ end
16
+
17
+ after do
18
+ Teabag::Instrumentation.instance_variable_set(:@executable, nil)
19
+ end
20
+
21
+ describe ".executable" do
22
+
23
+ it "returns the executable" do
24
+ expect(subject.executable).to eq("/path/to/istanbul")
25
+ expect(subject.instance_variable_get(:@executable)).to eq("/path/to/istanbul")
26
+ end
27
+
28
+ end
29
+
30
+ describe ".add?" do
31
+
32
+ before do
33
+ subject.stub(:executable).and_return("/path/to/istanbul")
34
+ end
35
+
36
+ it "returns true when everything is good" do
37
+ expect(subject.add?(response, {"QUERY_STRING" => "instrument=true"})).to be(true)
38
+ expect(subject.add?(response, {"QUERY_STRING" => "instrument=1"})).to be(true)
39
+ end
40
+
41
+ it "doesn't if the query param isn't set (or isn't something we care about)" do
42
+ expect(subject.add?(response, {})).to_not be(true)
43
+ expect(subject.add?(response, {"QUERY_STRING" => "instrument=foo"})).to_not be(true)
44
+ end
45
+
46
+ it "doesn't if response isn't 200" do
47
+ expect(subject.add?([404, {"Content-Type" => "application/javascript"}, asset], env)).to_not be(true)
48
+ end
49
+
50
+ it "doesn't when the content type isn't application/javascript" do
51
+ expect(subject.add?([200, {"Content-Type" => "foo/bar"}, asset], env)).to_not be(true)
52
+ end
53
+
54
+ it "doesn't if there's no executable" do
55
+ subject.should_receive(:executable).and_return(false)
56
+ expect(subject.add?(response, env)).to_not be(true)
57
+ end
58
+
59
+ it "doesn't if there's no asset" do
60
+ expect(subject.add?([404, {"Content-Type" => "application/javascript"}, []], env)).to_not be(true)
61
+ end
62
+
63
+ end
64
+
65
+ describe ".add_to" do
66
+
67
+ let(:asset) { mock(source: "function add(a, b) { return a + b }", pathname: 'path/to/instrument.js') }
68
+
69
+ before do
70
+ Teabag::Instrumentation.stub(:add?).and_return(true)
71
+
72
+ File.stub(:write)
73
+ subject.any_instance.stub(:instrument).and_return("_foo_")
74
+
75
+ path = nil
76
+ Dir.mktmpdir { |p| path = p }
77
+ Dir.stub(:mktmpdir).and_yield(path)
78
+ @output = File.join(path, "instrument.js")
79
+ end
80
+
81
+ it "writes the file to a tmp path" do
82
+ File.should_receive(:write).with(@output, "function add(a, b) { return a + b }")
83
+ subject.add_to(response, env)
84
+ end
85
+
86
+ it "instruments the javascript file" do
87
+ subject.any_instance.should_receive(:instrument).with(@output).and_return("_instrumented_")
88
+ subject.add_to(response, env)
89
+ end
90
+
91
+ it "replaces the response array with the appropriate information" do
92
+ response = [666, {"Content-Type" => "application/javascript"}, asset]
93
+ expected = [666, {"Content-Type" => "application/javascript", "Content-Length" => "5"}, asset]
94
+
95
+ subject.add_to(response, env)
96
+ expect(response).to eq(expected)
97
+ end
98
+
99
+ end
100
+
101
+ end
@@ -3,33 +3,34 @@ require "teabag/result"
3
3
 
4
4
  describe Teabag::Result do
5
5
 
6
+ subject { Teabag::Result.build_from_json(json) }
6
7
  let(:suite_name) { 'My Suite' }
7
- let(:json) do
8
- { "type" => "spec",
9
- "suite" => "_suite_name_",
10
- "label" => "_spec_name_",
11
- "status" => "failed",
12
- "skipped" => false,
13
- "link" => "?grep=_spec_description_",
14
- "message" => "_message_",
15
- "trace" => "_trace_" }
16
- end
17
- let(:result) { Teabag::Result.build_from_json(json) }
8
+ let(:json) {{
9
+ "type" => "spec",
10
+ "suite" => "_suite_name_",
11
+ "label" => "_spec_name_",
12
+ "status" => "failed",
13
+ "skipped" => false,
14
+ "link" => "?grep=_spec_description_",
15
+ "message" => "_message_",
16
+ "trace" => "_trace_",
17
+ "coverage" => "_coverage_",
18
+ }}
18
19
 
19
20
  describe ".build_from_json" do
20
21
 
21
22
  describe "with a results object" do
22
23
 
23
- let(:json) do
24
- { "elapsed" => 0.01,
25
- "failures" => 10,
26
- "pending" => 1,
27
- "total" => 25 }
28
- end
24
+ let(:json) {{
25
+ "elapsed" => 0.01,
26
+ "failures" => 10,
27
+ "pending" => 1,
28
+ "total" => 25
29
+ }}
29
30
 
30
31
  it "assigns from the JSON hash" do
31
- expect(result.elapsed).to eq(0.01)
32
- expect(result.total).to eq(25)
32
+ expect(subject.elapsed).to eq(0.01)
33
+ expect(subject.total).to eq(25)
33
34
  end
34
35
 
35
36
  end
@@ -37,15 +38,16 @@ describe Teabag::Result do
37
38
  describe "with a spec" do
38
39
 
39
40
  it "assigns from the JSON hash" do
40
- expect(result.type).to eq('spec')
41
- expect(result.suite).to eq('_suite_name_')
42
- expect(result.label).to eq('_spec_name_')
43
- expect(result.description).to eq('_suite_name_ _spec_name_')
44
- expect(result.status).to eq('failed')
45
- expect(result.skipped).to be_false
46
- expect(result.link).to eq('?grep=_spec_description_')
47
- expect(result.message).to eq('_message_')
48
- expect(result.trace).to eq('_trace_')
41
+ expect(subject.type).to eq('spec')
42
+ expect(subject.suite).to eq('_suite_name_')
43
+ expect(subject.label).to eq('_spec_name_')
44
+ expect(subject.description).to eq('_suite_name_ _spec_name_')
45
+ expect(subject.status).to eq('failed')
46
+ expect(subject.skipped).to be_false
47
+ expect(subject.link).to eq('?grep=_spec_description_')
48
+ expect(subject.message).to eq('_message_')
49
+ expect(subject.trace).to eq('_trace_')
50
+ expect(subject.coverage).to eq('_coverage_')
49
51
  end
50
52
 
51
53
  end