teaspoon 0.9.1 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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