jasmine-headless-webkit-firstbanco 0.9.0.rc.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (216) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +19 -0
  3. data/.rspec +1 -0
  4. data/CHANGELOG.md +89 -0
  5. data/Gemfile +30 -0
  6. data/Guardfile +41 -0
  7. data/README.md +44 -0
  8. data/Rakefile +65 -0
  9. data/bin/jasmine-headless-webkit +11 -0
  10. data/config/cucumber.yml +2 -0
  11. data/ext/jasmine-webkit-specrunner/Info.plist +22 -0
  12. data/ext/jasmine-webkit-specrunner/Makefile.dummy +5 -0
  13. data/ext/jasmine-webkit-specrunner/Page.cpp +15 -0
  14. data/ext/jasmine-webkit-specrunner/Page.h +20 -0
  15. data/ext/jasmine-webkit-specrunner/Runner.cpp +208 -0
  16. data/ext/jasmine-webkit-specrunner/Runner.h +73 -0
  17. data/ext/jasmine-webkit-specrunner/common.pri +8 -0
  18. data/ext/jasmine-webkit-specrunner/extconf.rb +10 -0
  19. data/ext/jasmine-webkit-specrunner/specrunner.cpp +79 -0
  20. data/ext/jasmine-webkit-specrunner/specrunner.pro +5 -0
  21. data/features/bin/failure.feature +7 -0
  22. data/features/bin/files.feature +7 -0
  23. data/features/bin/filtered_run/both_runs.feature +18 -0
  24. data/features/bin/filtered_run/no_full_run.feature +14 -0
  25. data/features/bin/help.feature +7 -0
  26. data/features/bin/quiet_messages.feature +8 -0
  27. data/features/bin/runner_out.feature +8 -0
  28. data/features/bin/spec_files_with_same_basename.feature +7 -0
  29. data/features/bin/success.feature +20 -0
  30. data/features/bin/success_with_js_error.feature +5 -0
  31. data/features/bin/tries_to_leave_page.feature +7 -0
  32. data/features/bin/try_to_click_a_button.feature +7 -0
  33. data/features/bin/two_files_from_src_files.feature +11 -0
  34. data/features/bin/with_coffeescript_error.feature +7 -0
  35. data/features/bin/with_console_log.feature +7 -0
  36. data/features/bin/with_server.feature +7 -0
  37. data/features/bin/with_window_prompt.feature +7 -0
  38. data/features/reporters.feature +24 -0
  39. data/features/runner.feature +34 -0
  40. data/features/steps/given/i_have_test_suite.rb +2 -0
  41. data/features/steps/given/no_existing_file.rb +4 -0
  42. data/features/steps/given/options/i_have_defaults.rb +4 -0
  43. data/features/steps/given/options/i_have_reporters.rb +10 -0
  44. data/features/steps/given/options/i_have_runner_options.rb +3 -0
  45. data/features/steps/then/bin/exit_status_should_be.rb +3 -0
  46. data/features/steps/then/bin/file_should_contain_runner.rb +4 -0
  47. data/features/steps/then/bin/following_files_loaded_in_order.rb +10 -0
  48. data/features/steps/then/bin/i_should_get_help_output.rb +4 -0
  49. data/features/steps/then/bin/output_should_include.rb +3 -0
  50. data/features/steps/then/bin/output_should_not_include.rb +4 -0
  51. data/features/steps/then/reporting/report_does_not_exist.rb +4 -0
  52. data/features/steps/then/reporting/report_should_exist.rb +3 -0
  53. data/features/steps/then/reporting/report_should_have.rb +7 -0
  54. data/features/steps/then/reporting/report_should_have_seed.rb +4 -0
  55. data/features/steps/then/runner/it_should_have_exit_status.rb +3 -0
  56. data/features/steps/then/runner/it_should_include_report_file.rb +4 -0
  57. data/features/steps/then/runner/it_should_not_include_report_file.rb +3 -0
  58. data/features/steps/then/templates/it_should_use_reporter.rb +6 -0
  59. data/features/steps/when/i_delete_file.rb +3 -0
  60. data/features/steps/when/i_get_runner.rb +4 -0
  61. data/features/steps/when/i_get_template_writer.rb +4 -0
  62. data/features/steps/when/i_run_executable.rb +4 -0
  63. data/features/steps/when/i_run_runner.rb +4 -0
  64. data/features/support/env.rb +7 -0
  65. data/jasmine-headless-webkit-firstbanco.gemspec +30 -0
  66. data/lib/autotest/discover.rb +1 -0
  67. data/lib/autotest/jasmine.rb +7 -0
  68. data/lib/autotest/jasmine_mixin.rb +111 -0
  69. data/lib/autotest/jasmine_rspec2.rb +7 -0
  70. data/lib/jasmine-headless-webkit.rb +3 -0
  71. data/lib/jasmine/headless.rb +61 -0
  72. data/lib/jasmine/headless/cacheable_action.rb +85 -0
  73. data/lib/jasmine/headless/coffee_script_cache.rb +20 -0
  74. data/lib/jasmine/headless/coffee_template.rb +36 -0
  75. data/lib/jasmine/headless/command_line.rb +31 -0
  76. data/lib/jasmine/headless/css_template.rb +19 -0
  77. data/lib/jasmine/headless/errors.rb +16 -0
  78. data/lib/jasmine/headless/file_checker.rb +25 -0
  79. data/lib/jasmine/headless/files_list.rb +332 -0
  80. data/lib/jasmine/headless/js_template.rb +23 -0
  81. data/lib/jasmine/headless/jst_template.rb +15 -0
  82. data/lib/jasmine/headless/nil_template.rb +14 -0
  83. data/lib/jasmine/headless/options.rb +206 -0
  84. data/lib/jasmine/headless/railtie.rb +12 -0
  85. data/lib/jasmine/headless/report.rb +81 -0
  86. data/lib/jasmine/headless/report_message.rb +12 -0
  87. data/lib/jasmine/headless/report_message/console.rb +18 -0
  88. data/lib/jasmine/headless/report_message/error.rb +20 -0
  89. data/lib/jasmine/headless/report_message/fail.rb +5 -0
  90. data/lib/jasmine/headless/report_message/pass.rb +5 -0
  91. data/lib/jasmine/headless/report_message/seed.rb +14 -0
  92. data/lib/jasmine/headless/report_message/spec.rb +28 -0
  93. data/lib/jasmine/headless/report_message/total.rb +31 -0
  94. data/lib/jasmine/headless/runner.rb +264 -0
  95. data/lib/jasmine/headless/spec_file_analyzer.rb +44 -0
  96. data/lib/jasmine/headless/task.rb +39 -0
  97. data/lib/jasmine/headless/template_writer.rb +65 -0
  98. data/lib/jasmine/headless/unique_asset_list.rb +16 -0
  99. data/lib/jasmine/headless/version.rb +5 -0
  100. data/lib/qt/qmake.rb +155 -0
  101. data/script/gemfile +11 -0
  102. data/script/hooks/post-commit +4 -0
  103. data/script/hooks/pre-commit +15 -0
  104. data/script/initialize-environment +35 -0
  105. data/script/install-git-hooks +6 -0
  106. data/skel/template.html.erb +77 -0
  107. data/spec/files/UTF-8-test.txt +0 -0
  108. data/spec/integration/randomization_spec.rb +13 -0
  109. data/spec/integration/specify_runner_file_spec.rb +22 -0
  110. data/spec/integration/sprockets_spec.rb +23 -0
  111. data/spec/jasmine/click_button/click_button.js +5 -0
  112. data/spec/jasmine/click_button/click_button.yml +12 -0
  113. data/spec/jasmine/click_button/click_button_spec.js +11 -0
  114. data/spec/jasmine/coffeescript_error/coffeescript_error.yml +10 -0
  115. data/spec/jasmine/coffeescript_error/spec.coffee +2 -0
  116. data/spec/jasmine/coffeescript_error/src.coffee +2 -0
  117. data/spec/jasmine/console_log/console_log.js +1 -0
  118. data/spec/jasmine/console_log/console_log.yml +10 -0
  119. data/spec/jasmine/console_log/console_log_spec.js +7 -0
  120. data/spec/jasmine/failure/failure.js +1 -0
  121. data/spec/jasmine/failure/failure.yml +9 -0
  122. data/spec/jasmine/failure/failure_spec.js +6 -0
  123. data/spec/jasmine/filtered_failure/failure_spec.js +6 -0
  124. data/spec/jasmine/filtered_failure/filtered_failure.yml +10 -0
  125. data/spec/jasmine/filtered_failure/src.js +0 -0
  126. data/spec/jasmine/filtered_failure/success_spec.js +6 -0
  127. data/spec/jasmine/filtered_success/filtered_success.yml +10 -0
  128. data/spec/jasmine/filtered_success/src.js +0 -0
  129. data/spec/jasmine/filtered_success/success_one_spec.js +6 -0
  130. data/spec/jasmine/filtered_success/success_other_file.js +7 -0
  131. data/spec/jasmine/filtered_success/success_two_spec.js +6 -0
  132. data/spec/jasmine/filtered_success_with_console/filtered_success.yml +10 -0
  133. data/spec/jasmine/filtered_success_with_console/src.js +0 -0
  134. data/spec/jasmine/filtered_success_with_console/success_one_spec.js +7 -0
  135. data/spec/jasmine/filtered_success_with_console/success_two_spec.js +6 -0
  136. data/spec/jasmine/leave_page/leave_page.js +4 -0
  137. data/spec/jasmine/leave_page/leave_page.yml +9 -0
  138. data/spec/jasmine/leave_page/leave_page_spec.js +11 -0
  139. data/spec/jasmine/noisy/file.js.erb +0 -0
  140. data/spec/jasmine/noisy/noisy.yml +8 -0
  141. data/spec/jasmine/noisy/other_file.js +2 -0
  142. data/spec/jasmine/runner_out_in_jasmine_yml/jasmine.yml +11 -0
  143. data/spec/jasmine/runner_out_in_jasmine_yml/test.js +2 -0
  144. data/spec/jasmine/runner_out_in_jasmine_yml/test_spec.coffee +4 -0
  145. data/spec/jasmine/success/success.js +1 -0
  146. data/spec/jasmine/success/success.yml +9 -0
  147. data/spec/jasmine/success/success_spec.js +6 -0
  148. data/spec/jasmine/success_with_error/success_with_error.js +3 -0
  149. data/spec/jasmine/success_with_error/success_with_error.yml +9 -0
  150. data/spec/jasmine/success_with_error/success_with_error_spec.js +6 -0
  151. data/spec/jasmine/two_files_from_src_files/app/app-file.js +0 -0
  152. data/spec/jasmine/two_files_from_src_files/app/app.js +2 -0
  153. data/spec/jasmine/two_files_from_src_files/jasmine.yml +7 -0
  154. data/spec/jasmine/two_files_from_src_files/vendor/vendor-file.js +0 -0
  155. data/spec/jasmine/two_files_from_src_files/vendor/vendor.js +2 -0
  156. data/spec/jasmine/two_spec_files_same_basename/jasmine.yml +6 -0
  157. data/spec/jasmine/two_spec_files_same_basename/spec.coffee +4 -0
  158. data/spec/jasmine/two_spec_files_same_basename/spec.js +6 -0
  159. data/spec/jasmine/window_prompt/source.js +2 -0
  160. data/spec/jasmine/window_prompt/window_prompt.yml +4 -0
  161. data/spec/jasmine/with_sprockets_includes/assets/application.js.erb +2 -0
  162. data/spec/jasmine/with_sprockets_includes/assets/things/code.js +6 -0
  163. data/spec/jasmine/with_sprockets_includes/assets/things/jquery.string.js +0 -0
  164. data/spec/jasmine/with_sprockets_includes/assets/things/required.js +3 -0
  165. data/spec/jasmine/with_sprockets_includes/assets/things/subcode/more_code.js +2 -0
  166. data/spec/jasmine/with_sprockets_includes/assets/things/templates/that.jst.ejs +1 -0
  167. data/spec/jasmine/with_sprockets_includes/assets/things/templates/this.jst +2 -0
  168. data/spec/jasmine/with_sprockets_includes/spec/spec_helper.js +1 -0
  169. data/spec/jasmine/with_sprockets_includes/spec/things/code_spec.js +9 -0
  170. data/spec/jasmine/with_sprockets_includes/with_sprockets_includes.yml +12 -0
  171. data/spec/javascripts/console.log_spec.coffee +15 -0
  172. data/spec/javascripts/headless_reporter_result_spec.coffee +30 -0
  173. data/spec/javascripts/helpers/spec_helper.coffee +2 -0
  174. data/spec/javascripts/jasmine-extensions_spec.coffee +80 -0
  175. data/spec/javascripts/jasmine.HeadlessReporter.ConsoleBase_spec.coffee +35 -0
  176. data/spec/javascripts/jasmine.HeadlessReporter.Console_spec.coffee +3 -0
  177. data/spec/javascripts/jasmine.HeadlessReporter.Tap_spec.coffee +19 -0
  178. data/spec/javascripts/jasmine.HeadlessReporter_spec.coffee +27 -0
  179. data/spec/javascripts/support/jasmine.yml +9 -0
  180. data/spec/lib/jasmine/headless/cacheable_action_spec.rb +122 -0
  181. data/spec/lib/jasmine/headless/coffee_script_cache_spec.rb +21 -0
  182. data/spec/lib/jasmine/headless/coffee_template_spec.rb +55 -0
  183. data/spec/lib/jasmine/headless/css_template_spec.rb +25 -0
  184. data/spec/lib/jasmine/headless/file_checker_spec.rb +41 -0
  185. data/spec/lib/jasmine/headless/files_list_spec.rb +194 -0
  186. data/spec/lib/jasmine/headless/js_template_spec.rb +31 -0
  187. data/spec/lib/jasmine/headless/jst_template_spec.rb +21 -0
  188. data/spec/lib/jasmine/headless/nil_template_spec.rb +31 -0
  189. data/spec/lib/jasmine/headless/options_spec.rb +194 -0
  190. data/spec/lib/jasmine/headless/report_message/seed_spec.rb +18 -0
  191. data/spec/lib/jasmine/headless/report_message/spec_spec.rb +20 -0
  192. data/spec/lib/jasmine/headless/report_spec.rb +95 -0
  193. data/spec/lib/jasmine/headless/runner_spec.rb +247 -0
  194. data/spec/lib/jasmine/headless/spec_file_analyzer_spec.rb +68 -0
  195. data/spec/lib/jasmine/headless/task_spec.rb +92 -0
  196. data/spec/lib/jasmine/headless/template_writer_spec.rb +92 -0
  197. data/spec/lib/jasmine/headless/unique_asset_list_spec.rb +22 -0
  198. data/spec/lib/jasmine/headless_spec.rb +38 -0
  199. data/spec/lib/qt/qmake_spec.rb +142 -0
  200. data/spec/skel/template.html.erb_spec.rb +8 -0
  201. data/spec/spec_helper.rb +113 -0
  202. data/vendor/assets/coffeescripts/headless_reporter_result.coffee +49 -0
  203. data/vendor/assets/coffeescripts/prolog.coffee +100 -0
  204. data/vendor/assets/javascripts/beautify-html.js +463 -0
  205. data/vendor/assets/javascripts/headless_reporter_result.js +79 -0
  206. data/vendor/assets/javascripts/intense.coffee +28 -0
  207. data/vendor/assets/javascripts/jasmine-extensions.coffee +97 -0
  208. data/vendor/assets/javascripts/jasmine.HeadlessReporter.Console.coffee +8 -0
  209. data/vendor/assets/javascripts/jasmine.HeadlessReporter.ConsoleBase.coffee +92 -0
  210. data/vendor/assets/javascripts/jasmine.HeadlessReporter.File.coffee +24 -0
  211. data/vendor/assets/javascripts/jasmine.HeadlessReporter.Tap.coffee +28 -0
  212. data/vendor/assets/javascripts/jasmine.HeadlessReporter.Verbose.coffee +64 -0
  213. data/vendor/assets/javascripts/jasmine.HeadlessReporter.coffee +58 -0
  214. data/vendor/assets/javascripts/jsDump.js +209 -0
  215. data/vendor/assets/javascripts/prolog.js +108 -0
  216. metadata +347 -0
@@ -0,0 +1,23 @@
1
+ require 'tilt/template'
2
+
3
+ module Jasmine::Headless
4
+ class JSTemplate < Tilt::Template
5
+ include Jasmine::Headless::FileChecker
6
+ self.default_mime_type = 'application/javascript'
7
+
8
+ def prepare ; end
9
+
10
+ def evaluate(scope, locals, &block)
11
+ if bad_format?(file)
12
+ alert_bad_format(file)
13
+ return ''
14
+ end
15
+ if data[%r{^<script type="text/javascript"}]
16
+ data
17
+ else
18
+ file ? %{<script type="text/javascript" src="#{file}"></script>} : data
19
+ end
20
+ end
21
+ end
22
+ end
23
+
@@ -0,0 +1,15 @@
1
+ require 'sprockets/jst_processor'
2
+
3
+ module Jasmine::Headless
4
+ class JSTTemplate < Sprockets::JstProcessor
5
+ include Jasmine::Headless::FileChecker
6
+ def evaluate(*args)
7
+ if bad_format?(file)
8
+ alert_bad_format(file)
9
+ return ''
10
+ end
11
+ %{<script type="text/javascript">#{super}</script>}
12
+ end
13
+ end
14
+ end
15
+
@@ -0,0 +1,14 @@
1
+ require 'tilt/template'
2
+ require 'rainbow'
3
+
4
+ module Jasmine::Headless
5
+ class NilTemplate < Tilt::Template
6
+
7
+ def prepare ; end
8
+
9
+ def evaluate(scope, locals, &block)
10
+ return ''
11
+ end
12
+ end
13
+ end
14
+
@@ -0,0 +1,206 @@
1
+ require 'forwardable'
2
+ require 'getoptlong'
3
+
4
+ module Jasmine
5
+ module Headless
6
+ class Options
7
+ extend Forwardable
8
+
9
+ def_delegators :@options, :[], :[]=
10
+
11
+ DEFAULT_OPTIONS = {
12
+ :colors => false,
13
+ :remove_html_file => true,
14
+ :runner_output_filename => false,
15
+ :jasmine_config => 'spec/javascripts/support/jasmine.yml',
16
+ :do_list => false,
17
+ :full_run => true,
18
+ :enable_cache => true,
19
+ :files => [],
20
+ :reporters => [ [ 'Console' ] ],
21
+ :quiet => false,
22
+ :use_server => false,
23
+ :server_port => nil
24
+ }
25
+
26
+ DEFAULTS_FILE = File.join(Dir.pwd, '.jasmine-headless-webkit')
27
+ GLOBAL_DEFAULTS_FILE = File.expand_path('~/.jasmine-headless-webkit')
28
+
29
+ REPORT_DEPRECATED_MESSAGE = "--report is deprecated. Use --format HeadlessFileReporter --out <filename>"
30
+
31
+ def self.from_command_line
32
+ options = new
33
+ options.process_command_line_args
34
+ options[:files] = ARGV
35
+ options
36
+ end
37
+
38
+ def initialize(opts = {})
39
+ @options = DEFAULT_OPTIONS.dup
40
+ srand
41
+ @options[:seed] = rand(10000)
42
+ read_defaults_files
43
+
44
+ opts.each { |k, v| @options[k] = v if v }
45
+ end
46
+
47
+ def process_option(*args)
48
+ opt, arg = args.flatten[0..1]
49
+
50
+ case opt
51
+ when '--colors', '-c'
52
+ @options[:colors] = true
53
+ when '--no-colors', '-nc'
54
+ @options[:colors] = false
55
+ when '--cache'
56
+ @options[:enable_cache] = true
57
+ when '--no-cache'
58
+ @options[:enable_cache] = false
59
+ when '--keep'
60
+ @options[:remove_html_file] = false
61
+ when '--report'
62
+ warn REPORT_DEPRECATED_MESSAGE
63
+
64
+ add_reporter('File', arg)
65
+ add_reporter('Console')
66
+ when '--runner-out'
67
+ @options[:runner_output_filename] = arg
68
+ when '--jasmine-config', '-j'
69
+ @options[:jasmine_config] = arg
70
+ when '--no-full-run'
71
+ @options[:full_run] = false
72
+ when '--list', '-l'
73
+ @options[:do_list] = true
74
+ when '--quiet', '-q'
75
+ @options[:quiet] = true
76
+ when '--seed'
77
+ @options[:seed] = arg.to_i
78
+ when '--format', '-f'
79
+ add_reporter(arg)
80
+ when '--use-server'
81
+ @options[:use_server] = true
82
+ when '--server-port'
83
+ @options[:server_port] = arg.to_i
84
+ when '--out'
85
+ add_reporter_file(arg)
86
+ when '-h', '--help'
87
+ print_help
88
+
89
+ exit
90
+ end
91
+ end
92
+
93
+ def read_defaults_files
94
+ [ GLOBAL_DEFAULTS_FILE, DEFAULTS_FILE ].each do |file|
95
+ if File.file?(file)
96
+ File.readlines(file).collect { |line| line.strip.split(' ', 2) }.each { |*args| process_option(*args) }
97
+ end
98
+ end
99
+ end
100
+
101
+ def process_command_line_args
102
+ command_line_args = GetoptLong.new(
103
+ [ '--colors', '-c', GetoptLong::NO_ARGUMENT ],
104
+ [ '--no-colors', GetoptLong::NO_ARGUMENT ],
105
+ [ '--cache', GetoptLong::NO_ARGUMENT ],
106
+ [ '--no-cache', GetoptLong::NO_ARGUMENT ],
107
+ [ '--keep', GetoptLong::NO_ARGUMENT ],
108
+ [ '--runner-out', GetoptLong::REQUIRED_ARGUMENT ],
109
+ [ '--report', GetoptLong::REQUIRED_ARGUMENT ],
110
+ [ '--jasmine-config', '-j', GetoptLong::REQUIRED_ARGUMENT ],
111
+ [ '--no-full-run', GetoptLong::NO_ARGUMENT ],
112
+ [ '--list', '-l', GetoptLong::NO_ARGUMENT ],
113
+ [ '--seed', GetoptLong::REQUIRED_ARGUMENT ],
114
+ [ '--format', '-f', GetoptLong::REQUIRED_ARGUMENT ],
115
+ [ '--out', GetoptLong::REQUIRED_ARGUMENT ],
116
+ [ '--use-server', GetoptLong::NO_ARGUMENT ],
117
+ [ '--server-port', GetoptLong::REQUIRED_ARGUMENT ],
118
+ [ '-h', '--help', GetoptLong::NO_ARGUMENT ],
119
+ [ '-q', '--quiet', GetoptLong::NO_ARGUMENT ]
120
+ )
121
+
122
+ command_line_args.each { |*args| process_option(*args) }
123
+ end
124
+
125
+ def reporters
126
+ file_index = 0
127
+
128
+ @options[:reporters].collect do |reporter, file|
129
+ output = [ reporter ]
130
+ if file
131
+ output << "report:#{file_index}"
132
+ output << file
133
+ file_index += 1
134
+ else
135
+ output << "stdout"
136
+ end
137
+
138
+ output
139
+ end
140
+ end
141
+
142
+ def file_reporters
143
+ reporters.find_all { |reporter| reporter[1]["report:"] }
144
+ end
145
+
146
+ private
147
+ def add_reporter(name, file = nil)
148
+ if !@added_reporter
149
+ @options[:reporters] = []
150
+ @added_reporter = true
151
+ end
152
+
153
+ if (parts = name.split(':')).length == 2
154
+ name, file = parts
155
+ end
156
+
157
+ @options[:reporters] << [ name ]
158
+
159
+ add_reporter_file(file) if file
160
+ end
161
+
162
+ def add_reporter_file(file)
163
+ @options[:reporters].last << file
164
+ end
165
+
166
+ def print_help
167
+ options = [
168
+ [ '-c, --colors', 'Enable colors (default: disabled)' ],
169
+ [ '-nc, --no-colors', 'Disable colors' ],
170
+ [ '--cache', 'Enable cache (default: enabled)' ],
171
+ [ '--no-cache', 'Disable cache' ],
172
+ [ '--keep', 'Keep runner files on failure' ],
173
+ [ '--runner-out <filename>', 'Write runner to specified filename' ],
174
+ [ '-j, --jasmine-config <config file>', 'Jasmine Yaml config to use' ],
175
+ [ '--no-full-run', 'Do not perform a full spec run after a successful targeted spec run' ],
176
+ [ '--use-server', 'Load tests from an HTTP server instead of from filesystem' ],
177
+ [ '-l, --list', 'List files in the order they will be required' ],
178
+ [ '--seed <seed>', 'Random order seed for spec file ordering' ],
179
+ [ '-f, --format <reporter<:filename>>', 'Specify an output reporter and possibly output filename' ],
180
+ [ '--out <filename>', 'Specify output filename for last defined reporter' ],
181
+ [ '-q, --quiet', "Silence most non-test related warnings" ],
182
+ [ '-h, --help', "You're looking at it" ]
183
+ ]
184
+
185
+ longest_length = options.collect(&:first).collect(&:length).max
186
+
187
+ puts <<-HELP
188
+ Usage: #{$0} [ options ] [ spec files ]
189
+
190
+ Options:
191
+ #{options.collect { |option, description| " #{option.ljust(longest_length)} #{description}" }.join("\n")}
192
+
193
+ Available reporters:
194
+ Console Write out spec results to the console in a progress format (default)
195
+ Verbose Write out spec results to the console in a verbose format
196
+ File Write spec results in jasmine-headless-webkit ReportFile format
197
+ Tap Write spec results in TAP format
198
+
199
+ Add reporters to the jasmine.HeadlessReporter object to access them
200
+ (ex: jasmine.HeadlessReporter.Teamcity for the Teamcity reporter)
201
+ HELP
202
+ end
203
+ end
204
+ end
205
+ end
206
+
@@ -0,0 +1,12 @@
1
+ module Jasmine
2
+ module Headless
3
+ class Railtie < Rails::Railtie
4
+ rake_tasks do
5
+ Jasmine::Headless::Task.new do |t|
6
+ t.colors = true
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
12
+
@@ -0,0 +1,81 @@
1
+ require 'forwardable'
2
+
3
+ module Jasmine::Headless
4
+ class Report
5
+ extend Forwardable
6
+
7
+ def_delegators :report, :length, :[]
8
+ def_delegators :last_total, :total, :failed, :time
9
+
10
+ class << self
11
+ def load(file)
12
+ new(file).process
13
+ end
14
+ end
15
+
16
+ attr_reader :file, :report
17
+
18
+ def initialize(file)
19
+ @file = file
20
+ end
21
+
22
+ def process
23
+ last_message = nil
24
+ @report = File.readlines(file).collect do |line|
25
+ type, *parts = line.split('||', -1)
26
+
27
+ if !(report_klass = report_class_for(type))
28
+ if last_message.kind_of?(Jasmine::Headless::ReportMessage::Console)
29
+ last_message.message << "\n"
30
+ last_message.message << line.strip
31
+ end
32
+ else
33
+ parts.last.strip!
34
+
35
+ last_message = report_klass.new_from_parts(parts)
36
+ end
37
+ end
38
+ self
39
+ end
40
+
41
+ def has_used_console?
42
+ @report.any? { |entry| entry.kind_of?(Jasmine::Headless::ReportMessage::Console) }
43
+ end
44
+
45
+ def has_failed_on?(statement)
46
+ @report.any? { |entry|
47
+ if entry.kind_of?(Jasmine::Headless::ReportMessage::Fail)
48
+ entry.statement == statement
49
+ end
50
+ }
51
+ end
52
+
53
+ def valid?
54
+ last_total != nil
55
+ end
56
+
57
+ def failed_files
58
+ @report.find_all { |entry|
59
+ entry.kind_of?(Jasmine::Headless::ReportMessage::Fail)
60
+ }.collect(&:filename).uniq.compact
61
+ end
62
+
63
+ def seed
64
+ if seed = report.find { |entry| entry.respond_to?(:seed) }
65
+ seed.seed
66
+ end
67
+ end
68
+
69
+ private
70
+ def last_total
71
+ @report.reverse.find { |entry| entry.respond_to?(:total) }
72
+ end
73
+
74
+ def report_class_for(type)
75
+ if constant = ReportMessage.constants.find { |k| k.to_s.downcase == type.downcase }
76
+ ReportMessage.const_get(constant)
77
+ end
78
+ end
79
+ end
80
+ end
81
+
@@ -0,0 +1,12 @@
1
+ module Jasmine::Headless
2
+ module ReportMessage
3
+ autoload :Spec, 'jasmine/headless/report_message/spec'
4
+ autoload :Pass, 'jasmine/headless/report_message/pass'
5
+ autoload :Fail, 'jasmine/headless/report_message/fail'
6
+ autoload :Console, 'jasmine/headless/report_message/console'
7
+ autoload :Error, 'jasmine/headless/report_message/error'
8
+ autoload :Total, 'jasmine/headless/report_message/total'
9
+ autoload :Seed, 'jasmine/headless/report_message/seed'
10
+ end
11
+ end
12
+
@@ -0,0 +1,18 @@
1
+ module Jasmine::Headless::ReportMessage
2
+ class Console
3
+ def self.new_from_parts(parts)
4
+ new(parts.first)
5
+ end
6
+
7
+ attr_reader :message
8
+
9
+ def initialize(message)
10
+ @message = message
11
+ end
12
+
13
+ def ==(other)
14
+ self.message == other.message
15
+ end
16
+ end
17
+ end
18
+
@@ -0,0 +1,20 @@
1
+ module Jasmine::Headless::ReportMessage
2
+ class Error
3
+ class << self
4
+ def new_from_parts(parts)
5
+ new(*parts)
6
+ end
7
+ end
8
+
9
+ attr_reader :message, :file_info
10
+
11
+ def initialize(message, file_info)
12
+ @message, @file_info = message, file_info
13
+ end
14
+
15
+ def ==(other)
16
+ self.message == other.message && self.file_info == other.file_info
17
+ end
18
+ end
19
+ end
20
+
@@ -0,0 +1,5 @@
1
+ module Jasmine::Headless::ReportMessage
2
+ class Fail < Spec
3
+ end
4
+ end
5
+
@@ -0,0 +1,5 @@
1
+ module Jasmine::Headless::ReportMessage
2
+ class Pass < Spec
3
+ end
4
+ end
5
+
@@ -0,0 +1,14 @@
1
+ module Jasmine::Headless::ReportMessage
2
+ class Seed
3
+ def self.new_from_parts(parts)
4
+ new(parts.first)
5
+ end
6
+
7
+ attr_reader :seed
8
+
9
+ def initialize(seed)
10
+ @seed = seed.to_i
11
+ end
12
+ end
13
+ end
14
+
@@ -0,0 +1,28 @@
1
+ module Jasmine::Headless::ReportMessage
2
+ class Spec
3
+ def self.new_from_parts(parts)
4
+ file_info = parts.pop
5
+
6
+ new(parts.join(' '), file_info)
7
+ end
8
+
9
+ attr_reader :statement, :file_info
10
+
11
+ def initialize(statement, file_info)
12
+ @statement, @file_info = statement, file_info
13
+ end
14
+
15
+ def ==(other)
16
+ self.statement == other.statement && self.file_info == other.file_info
17
+ end
18
+
19
+ def filename
20
+ if name = file_info.split(":").first
21
+ name
22
+ else
23
+ nil
24
+ end
25
+ end
26
+ end
27
+ end
28
+