teaspoon 0.9.1 → 1.0.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 (214) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +141 -0
  3. data/README.md +9 -19
  4. data/{vendor → app}/assets/javascripts/support/bind-poly.js +0 -0
  5. data/{vendor → app}/assets/javascripts/support/sinon.js +0 -0
  6. data/app/assets/javascripts/teaspoon-filterer.js +55 -0
  7. data/app/assets/javascripts/teaspoon/error.coffee +5 -0
  8. data/app/assets/javascripts/teaspoon/{base/fixture.coffee → fixture.coffee} +15 -15
  9. data/app/assets/javascripts/teaspoon/{base/hook.coffee → hook.coffee} +0 -0
  10. data/app/assets/javascripts/teaspoon/{base/reporters → reporters}/console.coffee +18 -10
  11. data/app/assets/javascripts/teaspoon/{base/reporters → reporters}/html.coffee +43 -40
  12. data/app/assets/javascripts/teaspoon/{base/reporters → reporters}/html/base_view.coffee +0 -0
  13. data/app/assets/javascripts/teaspoon/{base/reporters → reporters}/html/failure_view.coffee +2 -0
  14. data/app/assets/javascripts/teaspoon/reporters/html/progress_view.coffee +18 -0
  15. data/app/assets/javascripts/teaspoon/{base/reporters/html/progress_view.coffee → reporters/html/radial_progress_view.coffee} +1 -34
  16. data/app/assets/javascripts/teaspoon/reporters/html/simple_progress_view.coffee +15 -0
  17. data/app/assets/javascripts/teaspoon/{base/reporters → reporters}/html/spec_view.coffee +5 -3
  18. data/app/assets/javascripts/teaspoon/{base/reporters → reporters}/html/suite_view.coffee +4 -2
  19. data/app/assets/javascripts/teaspoon/{base/reporters → reporters}/html/template.coffee +0 -0
  20. data/app/assets/javascripts/teaspoon/{base/runner.coffee → runner.coffee} +7 -3
  21. data/app/assets/javascripts/teaspoon/teaspoon.coffee +90 -32
  22. data/app/controllers/teaspoon/suite_controller.rb +5 -0
  23. data/app/views/teaspoon/suite/index.html.erb +1 -1
  24. data/lib/generators/teaspoon/install/install_generator.rb +67 -37
  25. data/lib/generators/teaspoon/install/templates/MISSING_FRAMEWORK +14 -0
  26. data/lib/generators/teaspoon/install/{POST_INSTALL → templates/POST_INSTALL} +0 -0
  27. data/lib/generators/teaspoon/install/templates/env.rb.tt +14 -0
  28. data/lib/generators/teaspoon/install/templates/{jasmine/env_comments.rb.tt → env_comments.rb.tt} +34 -43
  29. data/lib/tasks/teaspoon/info.rake +17 -0
  30. data/lib/teaspoon-devkit.rb +61 -0
  31. data/lib/teaspoon.rb +2 -0
  32. data/lib/teaspoon/command_line.rb +19 -14
  33. data/lib/teaspoon/configuration.rb +24 -35
  34. data/lib/teaspoon/console.rb +11 -21
  35. data/lib/teaspoon/coverage.rb +14 -7
  36. data/lib/teaspoon/deprecated.rb +22 -4
  37. data/lib/teaspoon/driver.rb +15 -0
  38. data/lib/teaspoon/driver/base.rb +7 -0
  39. data/lib/teaspoon/{drivers/capybara_webkit_driver.rb → driver/capybara_webkit.rb} +8 -5
  40. data/lib/teaspoon/{drivers/phantomjs_driver.rb → driver/phantomjs.rb} +8 -4
  41. data/lib/teaspoon/{drivers → driver}/phantomjs/runner.js +0 -0
  42. data/lib/teaspoon/{drivers/selenium_driver.rb → driver/selenium.rb} +11 -9
  43. data/lib/teaspoon/engine.rb +38 -25
  44. data/lib/teaspoon/environment.rb +24 -15
  45. data/lib/teaspoon/exceptions.rb +154 -41
  46. data/lib/teaspoon/exporter.rb +2 -2
  47. data/lib/teaspoon/formatter.rb +30 -0
  48. data/lib/teaspoon/{formatters → formatter}/base.rb +2 -36
  49. data/lib/teaspoon/{formatters/clean_formatter.rb → formatter/clean.rb} +4 -2
  50. data/lib/teaspoon/{formatters/documentation_formatter.rb → formatter/documentation.rb} +4 -3
  51. data/lib/teaspoon/{formatters/dot_formatter.rb → formatter/dot.rb} +4 -3
  52. data/lib/teaspoon/{formatters/json_formatter.rb → formatter/json.rb} +4 -2
  53. data/lib/teaspoon/{formatters/junit_formatter.rb → formatter/junit.rb} +3 -2
  54. data/lib/teaspoon/{formatters → formatter}/modules/report_module.rb +1 -1
  55. data/lib/teaspoon/{formatters/pride_formatter.rb → formatter/pride.rb} +4 -2
  56. data/lib/teaspoon/{formatters/rspec_html_formatter.rb → formatter/rspec_html.rb} +3 -2
  57. data/lib/teaspoon/{formatters/snowday_formatter.rb → formatter/snowday.rb} +3 -2
  58. data/lib/teaspoon/formatter/swayze_or_oprah.rb +111 -0
  59. data/lib/teaspoon/{formatters/tap_formatter.rb → formatter/tap.rb} +4 -2
  60. data/lib/teaspoon/{formatters/tap_y_formatter.rb → formatter/tap_y.rb} +3 -2
  61. data/lib/teaspoon/{formatters/teamcity_formatter.rb → formatter/teamcity.rb} +4 -2
  62. data/lib/teaspoon/framework.rb +17 -0
  63. data/lib/teaspoon/framework/base.rb +88 -0
  64. data/lib/teaspoon/instrumentation.rb +12 -2
  65. data/lib/teaspoon/registry.rb +47 -0
  66. data/lib/teaspoon/registry/has_default.rb +11 -0
  67. data/lib/teaspoon/runner.rb +6 -7
  68. data/lib/teaspoon/server.rb +2 -2
  69. data/lib/teaspoon/suite.rb +28 -30
  70. data/lib/teaspoon/utility.rb +5 -0
  71. data/lib/teaspoon/version.rb +1 -1
  72. metadata +52 -276
  73. data/app/assets/javascripts/teaspoon-jasmine.js +0 -1344
  74. data/app/assets/javascripts/teaspoon-mocha.js +0 -1350
  75. data/app/assets/javascripts/teaspoon-qunit.js +0 -1415
  76. data/app/assets/javascripts/teaspoon-teaspoon.js +0 -51
  77. data/app/assets/javascripts/teaspoon/base/teaspoon.coffee +0 -69
  78. data/app/assets/javascripts/teaspoon/jasmine.coffee +0 -119
  79. data/app/assets/javascripts/teaspoon/jasmine/reporters/html.coffee +0 -11
  80. data/app/assets/javascripts/teaspoon/mocha.coffee +0 -90
  81. data/app/assets/javascripts/teaspoon/mocha/reporters/console.coffee +0 -16
  82. data/app/assets/javascripts/teaspoon/mocha/reporters/html.coffee +0 -27
  83. data/app/assets/javascripts/teaspoon/qunit.coffee +0 -81
  84. data/app/assets/javascripts/teaspoon/qunit/reporters/console.coffee +0 -25
  85. data/app/assets/javascripts/teaspoon/qunit/reporters/html.coffee +0 -80
  86. data/lib/generators/teaspoon/install/templates/jasmine/env.rb +0 -11
  87. data/lib/generators/teaspoon/install/templates/jasmine/spec_helper.coffee +0 -31
  88. data/lib/generators/teaspoon/install/templates/jasmine/spec_helper.js +0 -31
  89. data/lib/generators/teaspoon/install/templates/mocha/env.rb +0 -11
  90. data/lib/generators/teaspoon/install/templates/mocha/env_comments.rb.tt +0 -187
  91. data/lib/generators/teaspoon/install/templates/mocha/spec_helper.coffee +0 -40
  92. data/lib/generators/teaspoon/install/templates/mocha/spec_helper.js +0 -40
  93. data/lib/generators/teaspoon/install/templates/qunit/env.rb +0 -11
  94. data/lib/generators/teaspoon/install/templates/qunit/env_comments.rb.tt +0 -187
  95. data/lib/generators/teaspoon/install/templates/qunit/test_helper.coffee +0 -29
  96. data/lib/generators/teaspoon/install/templates/qunit/test_helper.js +0 -30
  97. data/lib/teaspoon/drivers/base.rb +0 -10
  98. data/lib/teaspoon/formatters/description.rb +0 -36
  99. data/lib/teaspoon/formatters/swayze_or_oprah_formatter.rb +0 -101
  100. data/spec/dummy/Rakefile +0 -7
  101. data/spec/dummy/app/assets/javascripts/instrumented1.coffee +0 -1
  102. data/spec/dummy/app/assets/javascripts/instrumented2.coffee +0 -1
  103. data/spec/dummy/app/assets/javascripts/integration/integration.coffee +0 -1
  104. data/spec/dummy/app/assets/javascripts/integration/integration_spec.coffee +0 -32
  105. data/spec/dummy/app/assets/javascripts/integration/spec_helper.coffee +0 -7
  106. data/spec/dummy/app/assets/javascripts/specs/asset_spec.js +0 -11
  107. data/spec/dummy/config.ru +0 -15
  108. data/spec/dummy/config/application.rb +0 -29
  109. data/spec/dummy/config/boot.rb +0 -3
  110. data/spec/dummy/config/environment.rb +0 -5
  111. data/spec/dummy/config/environments/development.rb +0 -41
  112. data/spec/dummy/config/environments/production.rb +0 -79
  113. data/spec/dummy/config/environments/test.rb +0 -42
  114. data/spec/dummy/config/routes.rb +0 -2
  115. data/spec/dummy/config/secrets.yml +0 -22
  116. data/spec/dummy/log/.gitkeep +0 -0
  117. data/spec/dummy/public/favicon.ico +0 -0
  118. data/spec/dummy/script/rails +0 -6
  119. data/spec/features/console_reporter_spec.rb +0 -62
  120. data/spec/features/hooks_spec.rb +0 -60
  121. data/spec/features/html_reporter_spec.rb +0 -81
  122. data/spec/features/install_generator_spec.rb +0 -54
  123. data/spec/features/instrumentation_spec.rb +0 -21
  124. data/spec/fixtures/coverage.json +0 -243
  125. data/spec/javascripts/fixtures/_body.html.erb +0 -1
  126. data/spec/javascripts/fixtures/fixture.html.haml +0 -4
  127. data/spec/javascripts/fixtures/fixture.json +0 -4
  128. data/spec/javascripts/jasmine_helper.coffee +0 -3
  129. data/spec/javascripts/mocha_helper.coffee +0 -4
  130. data/spec/javascripts/spec_helper.coffee +0 -7
  131. data/spec/javascripts/stylesheets/stylesheet.css.scss +0 -0
  132. data/spec/javascripts/support/json2.js +0 -486
  133. data/spec/javascripts/support/support.js.coffee +0 -0
  134. data/spec/javascripts/teaspoon/base/fixture_spec.coffee +0 -93
  135. data/spec/javascripts/teaspoon/base/reporters/console_spec.coffee +0 -162
  136. data/spec/javascripts/teaspoon/base/reporters/html/base_view_spec.coffee +0 -88
  137. data/spec/javascripts/teaspoon/base/reporters/html/failure_view_spec.coffee +0 -28
  138. data/spec/javascripts/teaspoon/base/reporters/html/progress_view_spec.coffee +0 -1
  139. data/spec/javascripts/teaspoon/base/reporters/html/spec_view_spec.coffee +0 -1
  140. data/spec/javascripts/teaspoon/base/reporters/html/suite_view_spec.coffee +0 -1
  141. data/spec/javascripts/teaspoon/base/reporters/html_spec.coffee +0 -372
  142. data/spec/javascripts/teaspoon/base/runner_spec.coffee +0 -58
  143. data/spec/javascripts/teaspoon/base/teaspoon_spec.coffee +0 -47
  144. data/spec/javascripts/teaspoon/jasmine/fixture_jspec.coffee +0 -13
  145. data/spec/javascripts/teaspoon/jasmine/models_jspec.coffee +0 -101
  146. data/spec/javascripts/teaspoon/jasmine/reporters/html_jspec.coffee +0 -17
  147. data/spec/javascripts/teaspoon/jasmine/runner_jspec.coffee +0 -59
  148. data/spec/javascripts/teaspoon/jasmine/spec_jspec.coffee +0 -3
  149. data/spec/javascripts/teaspoon/mocha/fixture_mspec.coffee +0 -12
  150. data/spec/javascripts/teaspoon/mocha/models_mspec.coffee +0 -93
  151. data/spec/javascripts/teaspoon/mocha/reporters/console_mspec.coffee +0 -24
  152. data/spec/javascripts/teaspoon/mocha/reporters/html_mspec.coffee +0 -41
  153. data/spec/javascripts/teaspoon/mocha/runner_mspec.coffee +0 -23
  154. data/spec/javascripts/teaspoon/mocha/spec_mspec.coffee +0 -9
  155. data/spec/javascripts/teaspoon/other/erb_spec.js.coffee.erb +0 -4
  156. data/spec/javascripts/teaspoon/phantomjs/runner_spec.coffee +0 -161
  157. data/spec/javascripts/turbolinks_helper.coffee +0 -2
  158. data/spec/spec_helper.rb +0 -25
  159. data/spec/support/aruba.rb +0 -15
  160. data/spec/teaspoon/command_line_spec.rb +0 -157
  161. data/spec/teaspoon/configuration_spec.rb +0 -236
  162. data/spec/teaspoon/console_spec.rb +0 -224
  163. data/spec/teaspoon/coverage_spec.rb +0 -118
  164. data/spec/teaspoon/drivers/base_spec.rb +0 -5
  165. data/spec/teaspoon/drivers/capybara_webkit_driver_spec.rb +0 -39
  166. data/spec/teaspoon/drivers/phantomjs_driver_spec.rb +0 -66
  167. data/spec/teaspoon/drivers/selenium_driver_spec.rb +0 -68
  168. data/spec/teaspoon/engine_spec.rb +0 -22
  169. data/spec/teaspoon/environment_spec.rb +0 -109
  170. data/spec/teaspoon/exceptions_spec.rb +0 -57
  171. data/spec/teaspoon/exporter_spec.rb +0 -96
  172. data/spec/teaspoon/formatters/base_spec.rb +0 -259
  173. data/spec/teaspoon/formatters/clean_formatter_spec.rb +0 -37
  174. data/spec/teaspoon/formatters/documentation_formatter_spec.rb +0 -127
  175. data/spec/teaspoon/formatters/dot_formatter_spec.rb +0 -116
  176. data/spec/teaspoon/formatters/json_formatter_spec.rb +0 -77
  177. data/spec/teaspoon/formatters/junit_formatter_spec.rb +0 -114
  178. data/spec/teaspoon/formatters/pride_formatter_spec.rb +0 -37
  179. data/spec/teaspoon/formatters/rspec_html_formatter_spec.rb +0 -107
  180. data/spec/teaspoon/formatters/snowday_formatter_spec.rb +0 -35
  181. data/spec/teaspoon/formatters/tap_formatter_spec.rb +0 -72
  182. data/spec/teaspoon/formatters/tap_y_formatter_spec.rb +0 -80
  183. data/spec/teaspoon/formatters/teamcity_formatter_spec.rb +0 -148
  184. data/spec/teaspoon/instrumentation_spec.rb +0 -113
  185. data/spec/teaspoon/result_spec.rb +0 -98
  186. data/spec/teaspoon/runner_spec.rb +0 -116
  187. data/spec/teaspoon/server_spec.rb +0 -105
  188. data/spec/teaspoon/suite_spec.rb +0 -138
  189. data/spec/teaspoon_env.rb +0 -39
  190. data/test/javascripts/qunit_helper.coffee +0 -3
  191. data/test/javascripts/teaspoon/qunit/fixture_test.coffee +0 -10
  192. data/test/javascripts/teaspoon/qunit/models_test.coffee +0 -66
  193. data/test/javascripts/teaspoon/qunit/reporters/console_test.coffee +0 -3
  194. data/test/javascripts/teaspoon/qunit/reporters/html/failure_view_test.coffee +0 -3
  195. data/test/javascripts/teaspoon/qunit/reporters/html/spec_view_test.coffee +0 -3
  196. data/test/javascripts/teaspoon/qunit/reporters/html/suite_view_test.coffee +0 -3
  197. data/test/javascripts/teaspoon/qunit/reporters/html_test.coffee +0 -3
  198. data/test/javascripts/teaspoon/qunit/runner_test.coffee +0 -18
  199. data/vendor/assets/javascripts/jasmine/1.3.1.js +0 -2602
  200. data/vendor/assets/javascripts/jasmine/2.0.0.js +0 -2412
  201. data/vendor/assets/javascripts/jasmine/MIT.LICENSE +0 -20
  202. data/vendor/assets/javascripts/mocha/1.10.0.js +0 -5374
  203. data/vendor/assets/javascripts/mocha/1.17.1.js +0 -5813
  204. data/vendor/assets/javascripts/mocha/MIT.LICENSE +0 -22
  205. data/vendor/assets/javascripts/qunit/1.12.0.js +0 -2212
  206. data/vendor/assets/javascripts/qunit/1.14.0.js +0 -2288
  207. data/vendor/assets/javascripts/qunit/MIT.LICENSE +0 -21
  208. data/vendor/assets/javascripts/support/chai-1.10.0.js +0 -4800
  209. data/vendor/assets/javascripts/support/chai-jq-0.0.7.js +0 -524
  210. data/vendor/assets/javascripts/support/chai.js +0 -4782
  211. data/vendor/assets/javascripts/support/expect.js +0 -1284
  212. data/vendor/assets/javascripts/support/jasmine-jquery-1.7.0.js +0 -720
  213. data/vendor/assets/javascripts/support/jasmine-jquery-2.0.0.js +0 -812
  214. data/vendor/assets/javascripts/support/sinon-chai.js +0 -126
@@ -0,0 +1,14 @@
1
+ ******************************************************************************
2
+ Error: There don't seem to be any frameworks registered within Teaspoon yet.
3
+
4
+ Teaspoon has been split into separate gems so you can now include only the
5
+ javascript frameworks you want.
6
+
7
+ Add one or more of the following to your gemfile:
8
+
9
+ gem "teaspoon-jasmine"
10
+ gem "teaspoon-mocha"
11
+ gem "teaspoon-qunit"
12
+
13
+ More information can be found at: https://github.com/modeset/teaspoon
14
+
@@ -0,0 +1,14 @@
1
+ Teaspoon.configure do |config|
2
+ config.mount_at = "/teaspoon"
3
+ config.root = nil
4
+ config.asset_paths = ["<%= framework.install_path %>/javascripts", "<%= framework.install_path %>/javascripts/stylesheets"]
5
+ config.fixture_paths = ["<%= framework.install_path %>/javascripts/fixtures"]
6
+
7
+ config.suite do |suite|
8
+ suite.use_framework :<%= framework.name %>, <%= version.inspect %> # <%= framework.versions.join(', ') %>
9
+ suite.matcher = <%= suite.matcher.inspect %>
10
+ suite.helper = <%= suite.helper.inspect %>
11
+ suite.boot_partial = <%= suite.boot_partial.inspect %>
12
+ suite.body_partial = <%= suite.body_partial.inspect %>
13
+ end
14
+ end
@@ -1,27 +1,20 @@
1
- # Set RAILS_ROOT and load the environment if it's not already loaded.
2
- unless defined?(Rails)
3
- ENV["RAILS_ROOT"] = File.expand_path("../../", __FILE__)
4
- require File.expand_path("../../config/environment", __FILE__)
5
- end
6
-
7
1
  Teaspoon.configure do |config|
8
-
9
2
  # Determines where the Teaspoon routes will be mounted. Changing this to "/jasmine" would allow you to browse to
10
3
  # `http://localhost:3000/jasmine` to run your tests.
11
- #config.mount_at = "/teaspoon"
4
+ config.mount_at = "/teaspoon"
12
5
 
13
6
  # Specifies the root where Teaspoon will look for files. If you're testing an engine using a dummy application it can
14
7
  # be useful to set this to your engines root (e.g. `Teaspoon::Engine.root`).
15
8
  # Note: Defaults to `Rails.root` if nil.
16
- #config.root = nil
9
+ config.root = nil
17
10
 
18
11
  # Paths that will be appended to the Rails assets paths
19
12
  # Note: Relative to `config.root`.
20
- #config.asset_paths = ["spec/javascripts", "spec/javascripts/stylesheets"]
13
+ config.asset_paths = ["<%= framework.install_path %>/javascripts", "<%= framework.install_path %>/javascripts/stylesheets"]
21
14
 
22
15
  # Fixtures are rendered through a controller, which allows using HAML, RABL/JBuilder, etc. Files in these paths will
23
16
  # be rendered as fixtures.
24
- #config.fixture_paths = ["spec/javascripts/fixtures"]
17
+ config.fixture_paths = ["<%= framework.install_path %>/javascripts/fixtures"]
25
18
 
26
19
  # SUITES
27
20
  #
@@ -35,62 +28,52 @@ Teaspoon.configure do |config|
35
28
  # - with the rake task: rake teaspoon suite=[suite_name]
36
29
  # - with the cli: teaspoon --suite=[suite_name]
37
30
  config.suite do |suite|
38
-
39
31
  # Specify the framework you would like to use. This allows you to select versions, and will do some basic setup for
40
32
  # you -- which you can override with the directives below. This should be specified first, as it can override other
41
33
  # directives.
42
34
  # Note: If no version is specified, the latest is assumed.
43
35
  #
44
- # Available: jasmine[1.3.1], mocha[1.10.0, 1.17.1] qunit[1.12.0, 1.14.0]
45
- suite.use_framework :jasmine, "1.3.1"
36
+ # Versions: <%= framework.versions.join(', ') %>
37
+ suite.use_framework :<%= framework.name %>, <%= version.inspect %>
46
38
 
47
39
  # Specify a file matcher as a regular expression and all matching files will be loaded when the suite is run. These
48
40
  # files need to be within an asset path. You can add asset paths using the `config.asset_paths`.
49
- #suite.matcher = "{spec/javascripts,app/assets}/**/*_spec.{js,js.coffee,coffee}"
50
-
51
- # This suites spec helper, which can require additional support files. This file is loaded before any of your test
52
- # files are loaded.
53
- #suite.helper = "spec_helper"
41
+ suite.matcher = <%= suite.matcher.inspect %>
54
42
 
55
- # The core Teaspoon javascripts. It's recommended to include only the base files here, as you can require support
56
- # libraries from your spec helper.
57
- # Note: For CoffeeScript files use `"teaspoon/jasmine"` etc.
58
- #
59
- # Available: teaspoon-jasmine, teaspoon-mocha, teaspoon-qunit
60
- #suite.javascripts = ["jasmine/1.3.1", "teaspoon-jasmine"]
43
+ # Load additional JS files, but requiring them in your spec helper is the preferred way to do this.
44
+ #suite.javascripts = []
61
45
 
62
46
  # You can include your own stylesheets if you want to change how Teaspoon looks.
63
47
  # Note: Spec related CSS can and should be loaded using fixtures.
64
48
  #suite.stylesheets = ["teaspoon"]
65
49
 
50
+ # This suites spec helper, which can require additional support files. This file is loaded before any of your test
51
+ # files are loaded.
52
+ suite.helper = <%= suite.helper.inspect %>
53
+
66
54
  # Partial to be rendered in the head tag of the runner. You can use the provided ones or define your own by creating
67
55
  # a `_boot.html.erb` in your fixtures path, and adjust the config to `"/boot"` for instance.
68
56
  #
69
57
  # Available: boot, boot_require_js
70
- #suite.boot_partial = "boot"
58
+ suite.boot_partial = <%= suite.boot_partial.inspect %>
71
59
 
72
60
  # Partial to be rendered in the body tag of the runner. You can define your own to create a custom body structure.
73
- #suite.body_partial = "body"
74
-
75
- # Assets to be ignored when generating coverage reports. Accepts an array of filenames or regular expressions. The
76
- # default excludes assets from vendor, gems and support libraries.<br/><br/>
77
- #suite.no_coverage = [%r{/lib/ruby/gems/}, %r{/vendor/assets/}, %r{/support/}, %r{/(.+)_helper.}]
61
+ suite.body_partial = <%= suite.body_partial.inspect %>
78
62
 
79
63
  # Hooks allow you to use `Teaspoon.hook("fixtures")` before, after, or during your spec run. This will make a
80
64
  # synchronous Ajax request to the server that will call all of the blocks you've defined for that hook name.
81
- #suite.hook :fixtures, proc{ }
65
+ #suite.hook :fixtures, &proc{}
82
66
 
83
67
  # Determine whether specs loaded into the test harness should be embedded as individual script tags or concatenated
84
68
  # into a single file. Similar to Rails' asset `debug: true` and `config.assets.debug = true` options. By default,
85
69
  # Teaspoon expands all assets to provide more valuable stack traces that reference individual source files.
86
- #suite.expand_assets = false
87
-
70
+ #suite.expand_assets = true
88
71
  end
89
72
 
90
73
  # Example suite. Since we're just filtering to files already within the root test/javascripts, these files will also
91
74
  # be run in the default suite -- but can be focused into a more specific suite.
92
75
  #config.suite :targeted do |suite|
93
- # suite.matcher = "test/javascripts/targeted/*_test.{js,js.coffee,coffee}"
76
+ # suite.matcher = "<%= framework.install_path %>/javascripts/targeted/*_spec.{js,js.coffee,coffee}"
94
77
  #end
95
78
 
96
79
  # CONSOLE RUNNER SPECIFIC
@@ -107,15 +90,17 @@ Teaspoon.configure do |config|
107
90
 
108
91
  # Specify which headless driver to use. Supports PhantomJS and Selenium Webdriver.
109
92
  #
110
- # Available: phantomjs, selenium
93
+ # Available: <%= Teaspoon::Driver.available.keys.map{|f| ":#{f}"}.join(", ") %>
111
94
  # PhantomJS: https://github.com/modeset/teaspoon/wiki/Using-PhantomJS
112
95
  # Selenium Webdriver: https://github.com/modeset/teaspoon/wiki/Using-Selenium-WebDriver
113
- #config.driver = "phantomjs"
96
+ # Capybara Webkit: https://github.com/modeset/teaspoon/wiki/Using-Capybara-Webkit
97
+ #config.driver = :<%= Teaspoon::Driver.default %>
114
98
 
115
99
  # Specify additional options for the driver.
116
100
  #
117
101
  # PhantomJS: https://github.com/modeset/teaspoon/wiki/Using-PhantomJS
118
102
  # Selenium Webdriver: https://github.com/modeset/teaspoon/wiki/Using-Selenium-WebDriver
103
+ # Capybara Webkit: https://github.com/modeset/teaspoon/wiki/Using-Capybara-Webkit
119
104
  #config.driver_options = nil
120
105
 
121
106
  # Specify the timeout for the driver. Specs are expected to complete within this time frame or the run will be
@@ -139,8 +124,8 @@ Teaspoon.configure do |config|
139
124
  # Specify the formatters to use when outputting the results.
140
125
  # Note: Output files can be specified by using `"junit>/path/to/output.xml"`.
141
126
  #
142
- # Available: <%= Teaspoon::Formatters.known_formatters.map(&:name).join ", " %>
143
- #config.formatters = ["<%= Teaspoon::Formatters.known_formatters.select(&:default?).first.name %>"]
127
+ # Available: <%= Teaspoon::Formatter.available.keys.map{|f| ":#{f}"}.join(", ") %>
128
+ #config.formatters = [:<%= Teaspoon::Formatter.default %>]
144
129
 
145
130
  # Specify if you want color output from the formatters.
146
131
  #config.color = true
@@ -161,11 +146,15 @@ Teaspoon.configure do |config|
161
146
  # - with the rake task: rake teaspoon USE_COVERAGE=[coverage_name]
162
147
  # - with the cli: teaspoon --coverage=[coverage_name]
163
148
 
164
- # Specify that you always want a coverage configuration to be used.
149
+ # Specify that you always want a coverage configuration to be used. Otherwise, specify that you want coverage
150
+ # on the CLI.
151
+ # Set this to "true" or the name of your coverage config.
165
152
  #config.use_coverage = nil
166
153
 
154
+ # You can have multiple coverage configs by passing a name to config.coverage.
155
+ # e.g. config.coverage :ci do |coverage|
156
+ # The default coverage config name is :default.
167
157
  config.coverage do |coverage|
168
-
169
158
  # Which coverage reports Istanbul should generate. Correlates directly to what Istanbul supports.
170
159
  #
171
160
  # Available: text-summary, text, html, lcov, lcovonly, cobertura, teamcity
@@ -175,13 +164,15 @@ Teaspoon.configure do |config|
175
164
  # Note: Relative to `config.root`.
176
165
  #coverage.output_path = "coverage"
177
166
 
167
+ # Assets to be ignored when generating coverage reports. Accepts an array of filenames or regular expressions. The
168
+ # default excludes assets from vendor, gems and support libraries.
169
+ #coverage.ignore = [%r{/lib/ruby/gems/}, %r{/vendor/assets/}, %r{/support/}, %r{/(.+)_helper.}]
170
+
178
171
  # Various thresholds requirements can be defined, and those thresholds will be checked at the end of a run. If any
179
172
  # aren't met the run will fail with a message. Thresholds can be defined as a percentage (0-100), or nil.
180
173
  #coverage.statements = nil
181
174
  #coverage.functions = nil
182
175
  #coverage.branches = nil
183
176
  #coverage.lines = nil
184
-
185
177
  end
186
-
187
178
  end
@@ -0,0 +1,17 @@
1
+ namespace :teaspoon do
2
+ desc "Print teaspoon and framework information"
3
+ task info: :environment do
4
+ STDOUT.print("Teaspoon: #{Teaspoon::VERSION}\n\n")
5
+
6
+ STDOUT.print("Frameworks:\n")
7
+
8
+ Teaspoon::Framework.available.each do |framework, _|
9
+ STDOUT.print(" #{framework}\n")
10
+
11
+ versions = Teaspoon::Framework.fetch(framework).versions
12
+ versions.each { |version| STDOUT.print(" #{version}\n") }
13
+
14
+ STDOUT.print("\n")
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,61 @@
1
+ module Teaspoon
2
+ DEV_PATH = File.expand_path("../../", __FILE__)
3
+ SPEC_HELPER = File.join(DEV_PATH, "spec", "spec_helper")
4
+ FIXTURE_PATH = File.join(DEV_PATH, "spec", "javascripts", "fixtures")
5
+ RAKEFILE = File.join(DEV_PATH, "Rakefile")
6
+
7
+ def self.require_dummy!
8
+ unless defined?(Rails)
9
+ ENV["RAILS_ROOT"] = File.join(DEV_PATH, "spec", "dummy")
10
+ require File.join(ENV["RAILS_ROOT"], "config", "environment")
11
+ end
12
+ end
13
+
14
+ def self.loaded_from_teaspoon_root?
15
+ Dir.pwd == DEV_PATH
16
+ end
17
+
18
+ def self.load_teaspoon_tasks
19
+ if !loaded_from_teaspoon_root?
20
+ load File.join(RAKEFILE)
21
+ end
22
+ end
23
+
24
+ def self.setup_framework_tasks(framework:, framework_name:, framework_const:, framework_root:, compile_assets:)
25
+ extend Rake::DSL
26
+
27
+ namespace :teaspoon do
28
+ namespace framework do
29
+ desc "Run the #{framework_name} code examples"
30
+ RSpec::Core::RakeTask.new(:spec) do |t|
31
+ t.pattern = File.expand_path("spec/**/*_spec.rb", framework_root)
32
+ end
33
+ end
34
+
35
+ namespace framework do
36
+ desc "Builds Teaspoon #{framework_name} into the distribution ready bundle"
37
+ task build: "#{framework}:build:javascripts"
38
+
39
+ namespace :build do
40
+ desc "Compile Teaspoon #{framework_name} coffeescripts into javacripts"
41
+ task javascripts: :environment do
42
+ env = Rails.application.assets
43
+
44
+ Array(compile_assets).each do |filename|
45
+ asset = env.find_asset("teaspoon/#{filename}")
46
+ base_destination = framework_const.asset_paths.first
47
+ asset.write_to(File.expand_path("teaspoon-#{filename}", base_destination))
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
53
+
54
+ if !loaded_from_teaspoon_root?
55
+ Rake::Task["default"].prerequisites.clear
56
+ Rake::Task["default"].clear
57
+
58
+ task default: "teaspoon:#{framework}:spec"
59
+ end
60
+ end
61
+ end
data/lib/teaspoon.rb CHANGED
@@ -2,6 +2,8 @@ require "teaspoon/version"
2
2
  require "teaspoon/exceptions"
3
3
  require "teaspoon/utility"
4
4
  require "teaspoon/configuration"
5
+ require "teaspoon/formatter"
6
+ require "teaspoon/framework"
5
7
 
6
8
  require "teaspoon/engine" if defined?(Rails)
7
9
 
@@ -1,7 +1,9 @@
1
1
  require "optparse"
2
2
  require "teaspoon/version"
3
3
  require "teaspoon/exceptions"
4
- require "teaspoon/formatters/base"
4
+ require "teaspoon/utility"
5
+ require "teaspoon/driver"
6
+ require "teaspoon/formatter"
5
7
 
6
8
  module Teaspoon
7
9
  class CommandLine
@@ -10,9 +12,9 @@ module Teaspoon
10
12
  @options[:files] = opt_parser.parse!
11
13
 
12
14
  require_console
13
- abort if Teaspoon::Console.new(@options).failures?
15
+ Teaspoon.abort(nil, 1) if Teaspoon::Console.new(@options).failures?
14
16
  rescue Teaspoon::EnvironmentNotFound => e
15
- abort("#{e.message}\nConsider using -r path/to/teaspoon_env\n")
17
+ Teaspoon.abort("#{e.message} Consider using --require=path/to/teaspoon_env.rb")
16
18
  end
17
19
 
18
20
  def opt_parser
@@ -40,9 +42,7 @@ module Teaspoon
40
42
 
41
43
  opt :driver, "-d", "--driver DRIVER",
42
44
  "Specify driver:",
43
- " phantomjs (default)",
44
- " selenium",
45
- " capybara_webkit"
45
+ *driver_details
46
46
 
47
47
  opt :driver_options, "--driver-options OPTIONS",
48
48
  "Specify driver-specific options to pass into the driver.",
@@ -90,7 +90,7 @@ module Teaspoon
90
90
 
91
91
  opt :formatters, "-f", "--format FORMATTERS",
92
92
  "Specify formatters (comma separated)",
93
- *Teaspoon::Formatters.known_formatters.map(&:cli_help)
93
+ *formatter_details
94
94
  end
95
95
 
96
96
  def opts_for_coverage
@@ -104,13 +104,11 @@ module Teaspoon
104
104
  separator("Utility")
105
105
 
106
106
  @parser.on "-v", "--version", "Display the version." do
107
- STDOUT.print("#{Teaspoon::VERSION}\n")
108
- exit
107
+ Teaspoon.abort(Teaspoon::VERSION, 0)
109
108
  end
110
109
 
111
110
  @parser.on "-h", "--help", "You're looking at it." do
112
- STDOUT.print("#{@parser}\n")
113
- exit
111
+ Teaspoon.abort(@parser, 0)
114
112
  end
115
113
  end
116
114
 
@@ -128,9 +126,16 @@ module Teaspoon
128
126
  require "teaspoon/console"
129
127
  end
130
128
 
131
- def abort(message = nil)
132
- STDOUT.print(message) if message
133
- exit(1)
129
+ def formatter_details
130
+ Teaspoon::Formatter.available.map do |name, options|
131
+ " #{name}#{' (default)' if options[:default]} - #{options[:description]}"
132
+ end
133
+ end
134
+
135
+ def driver_details
136
+ Teaspoon::Driver.available.map do |name, options|
137
+ " #{name}#{' (default)' if options[:default]}"
138
+ end
134
139
  end
135
140
  end
136
141
  end
@@ -1,9 +1,8 @@
1
1
  require "singleton"
2
+ require "teaspoon/driver"
3
+ require "teaspoon/formatter"
2
4
 
3
5
  module Teaspoon
4
- autoload :Formatters, "teaspoon/formatters/base"
5
- autoload :Drivers, "teaspoon/drivers/base"
6
-
7
6
  class Configuration
8
7
  include Singleton
9
8
 
@@ -16,18 +15,20 @@ module Teaspoon
16
15
  # - add it to ENV_OVERRIDES if it can be overridden from ENV
17
16
  # - add it to the initializers in /lib/generators/install/templates so it's documented there as well
18
17
 
19
- cattr_accessor :mount_at, :root, :asset_paths, :fixture_paths
18
+ cattr_accessor :mount_at, :root, :asset_paths, :fixture_paths, :asset_manifest
20
19
  @@mount_at = "/teaspoon"
21
20
  @@root = nil # will default to Rails.root
22
- @@asset_paths = ["spec/javascripts", "spec/javascripts/stylesheets", "test/javascripts", "test/javascripts/stylesheets"]
21
+ @@asset_paths = ["spec/javascripts", "spec/javascripts/stylesheets",
22
+ "test/javascripts", "test/javascripts/stylesheets"]
23
23
  @@fixture_paths = ["spec/javascripts/fixtures", "test/javascripts/fixtures"]
24
+ @@asset_manifest = ["teaspoon.css", "teaspoon-filterer.js", "teaspoon/*.js", "support/*.js"]
24
25
 
25
26
  # console runner specific
26
27
 
27
28
  cattr_accessor :driver, :driver_options, :driver_timeout, :server, :server_port, :server_timeout, :fail_fast,
28
29
  :formatters, :color, :suppress_log,
29
30
  :use_coverage
30
- @@driver = "phantomjs"
31
+ @@driver = Teaspoon::Driver.default
31
32
  @@driver_options = nil
32
33
  @@driver_timeout = 180
33
34
  @@server = nil
@@ -35,7 +36,7 @@ module Teaspoon
35
36
  @@server_timeout = 20
36
37
  @@fail_fast = true
37
38
 
38
- @@formatters = ["dot"]
39
+ @@formatters = [Teaspoon::Formatter.default]
39
40
  @@color = true
40
41
  @@suppress_log = false
41
42
 
@@ -55,55 +56,42 @@ module Teaspoon
55
56
  @@suite_configs = { "default" => { block: proc {} } }
56
57
 
57
58
  def self.suite(name = :default, &block)
58
- @@suite_configs[name.to_s] = { block: block, instance: Suite.new(&block) }
59
+ @@suite_configs[name.to_s] = { block: block, instance: Suite.new(name, &block) }
59
60
  end
60
61
 
61
62
  class Suite
62
- FRAMEWORKS = {
63
- jasmine: ["1.3.1", "2.0.0"],
64
- mocha: ["1.10.0", "1.17.1"],
65
- qunit: ["1.12.0", "1.14.0"],
66
- }
67
-
68
63
  attr_accessor :matcher, :helper, :javascripts, :stylesheets,
69
64
  :boot_partial, :body_partial,
70
- :no_coverage, :hooks, :expand_assets
65
+ :hooks, :expand_assets
71
66
 
72
- def initialize
67
+ def initialize(name = nil)
73
68
  @matcher = "{spec/javascripts,app/assets}/**/*_spec.{js,js.coffee,coffee}"
74
69
  @helper = "spec_helper"
75
- @javascripts = ["jasmine/1.3.1", "teaspoon-jasmine"]
70
+ @javascripts = []
76
71
  @stylesheets = ["teaspoon"]
77
72
 
78
73
  @boot_partial = "boot"
79
74
  @body_partial = "body"
80
75
 
81
- @no_coverage = [%r{/lib/ruby/gems/}, %r{/vendor/assets/}, %r{/support/}, %r{/(.+)_helper.}]
82
76
  @hooks = Hash.new { |h, k| h[k] = [] }
83
77
  @expand_assets = true
84
78
 
85
79
  default = Teaspoon.configuration.suite_configs["default"]
86
80
  instance_eval(&default[:block]) if default
87
- yield self if block_given?
81
+ if block_given?
82
+ yield self
83
+ raise Teaspoon::UnspecifiedFramework.new(name: name) if @javascripts.length == 0
84
+ end
88
85
  end
89
86
 
90
87
  def use_framework(name, version = nil)
91
- name = name.to_sym
92
- version ||= FRAMEWORKS[name].last if FRAMEWORKS[name]
93
- unless FRAMEWORKS[name] && FRAMEWORKS[name].include?(version)
94
- message = "Unknown framework \"#{name}\""
95
- if FRAMEWORKS[name] && version
96
- message += " with version #{version} -- available versions #{FRAMEWORKS[name].join(', ')}"
97
- end
98
- raise Teaspoon::UnknownFramework, message
99
- end
88
+ framework = Teaspoon::Framework.fetch(name)
89
+ framework.modify_config(self)
100
90
 
101
- @javascripts = [[name, version].join("/"), "teaspoon-#{name}"]
102
- case name.to_sym
103
- when :qunit
104
- @matcher = "{test/javascripts,app/assets}/**/*_test.{js,js.coffee,coffee}"
105
- @helper = "test_helper"
106
- end
91
+ @javascripts = framework.javascripts_for(version)
92
+ return if @javascripts
93
+
94
+ raise Teaspoon::UnknownFrameworkVersion.new(name: name, version: version)
107
95
  end
108
96
  alias_method :use_framework=, :use_framework
109
97
 
@@ -122,12 +110,13 @@ module Teaspoon
122
110
  end
123
111
 
124
112
  class Coverage
125
- attr_accessor :reports, :output_path,
113
+ attr_accessor :reports, :output_path, :ignore,
126
114
  :statements, :functions, :branches, :lines
127
115
 
128
116
  def initialize
129
117
  @reports = ["text-summary"]
130
118
  @output_path = "coverage"
119
+ @ignore = [%r{/.rvm/gems/}, %r{/lib/ruby/gems/}, %r{/vendor/assets/}, %r{/support/}, %r{/(.+)_helper.}]
131
120
 
132
121
  @statements = nil
133
122
  @functions = nil