jasmine-headless-webkit 0.8.4 → 0.9.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +16 -8
- data/Guardfile +6 -1
- data/Rakefile +2 -1
- data/config/cucumber.yml +2 -0
- data/ext/jasmine-webkit-specrunner/Page.cpp +2 -3
- data/ext/jasmine-webkit-specrunner/Page.h +1 -0
- data/ext/jasmine-webkit-specrunner/Runner.cpp +37 -16
- data/ext/jasmine-webkit-specrunner/Runner.h +15 -5
- data/ext/jasmine-webkit-specrunner/specrunner.cpp +17 -7
- data/features/bin/failure.feature +7 -0
- data/features/bin/files.feature +7 -0
- data/features/bin/filtered_run/both_runs.feature +18 -0
- data/features/bin/filtered_run/no_full_run.feature +14 -0
- data/features/bin/help.feature +7 -0
- data/features/bin/quiet_messages.feature +8 -0
- data/features/bin/runner_out.feature +8 -0
- data/features/bin/spec_files_with_same_basename.feature +7 -0
- data/features/bin/success.feature +20 -0
- data/features/bin/success_with_js_error.feature +5 -0
- data/features/bin/tries_to_leave_page.feature +7 -0
- data/features/bin/try_to_click_a_button.feature +7 -0
- data/features/bin/two_files_from_src_files.feature +11 -0
- data/features/bin/with_coffeescript_error.feature +7 -0
- data/features/bin/with_console_log.feature +7 -0
- data/features/bin/with_server.feature +7 -0
- data/features/bin/with_window_prompt.feature +7 -0
- data/features/reporters.feature +24 -0
- data/features/runner.feature +34 -0
- data/features/steps/given/i_have_test_suite.rb +2 -0
- data/features/steps/given/no_existing_file.rb +4 -0
- data/features/steps/given/options/i_have_defaults.rb +4 -0
- data/features/steps/given/options/i_have_reporters.rb +10 -0
- data/features/steps/given/options/i_have_runner_options.rb +3 -0
- data/features/steps/then/bin/exit_status_should_be.rb +3 -0
- data/features/steps/then/bin/file_should_contain_runner.rb +4 -0
- data/features/steps/then/bin/following_files_loaded_in_order.rb +10 -0
- data/features/steps/then/bin/i_should_get_help_output.rb +4 -0
- data/features/steps/then/bin/output_should_include.rb +3 -0
- data/features/steps/then/bin/output_should_not_include.rb +4 -0
- data/features/steps/then/reporting/report_does_not_exist.rb +4 -0
- data/features/steps/then/reporting/report_should_exist.rb +3 -0
- data/features/steps/then/reporting/report_should_have.rb +7 -0
- data/features/steps/then/reporting/report_should_have_seed.rb +4 -0
- data/features/steps/then/runner/it_should_have_exit_status.rb +3 -0
- data/features/steps/then/runner/it_should_include_report_file.rb +4 -0
- data/features/steps/then/runner/it_should_not_include_report_file.rb +3 -0
- data/features/steps/then/templates/it_should_use_reporter.rb +6 -0
- data/features/steps/when/i_delete_file.rb +3 -0
- data/features/steps/when/i_get_runner.rb +4 -0
- data/features/steps/when/i_get_template_writer.rb +4 -0
- data/features/steps/when/i_run_executable.rb +4 -0
- data/features/steps/when/i_run_runner.rb +4 -0
- data/features/support/env.rb +7 -0
- data/lib/jasmine/headless/file_checker.rb +7 -3
- data/lib/jasmine/headless/files_list.rb +46 -19
- data/lib/jasmine/headless/options.rb +113 -5
- data/lib/jasmine/headless/report.rb +6 -1
- data/lib/jasmine/headless/report_message/console.rb +2 -4
- data/lib/jasmine/headless/report_message/seed.rb +14 -0
- data/lib/jasmine/headless/report_message/spec.rb +3 -5
- data/lib/jasmine/headless/report_message.rb +1 -0
- data/lib/jasmine/headless/runner.rb +169 -28
- data/lib/jasmine/headless/task.rb +0 -14
- data/lib/jasmine/headless/template_writer.rb +28 -4
- data/lib/jasmine/headless/unique_asset_list.rb +1 -1
- data/lib/jasmine/headless/version.rb +1 -1
- data/lib/jasmine/headless.rb +18 -0
- data/lib/jasmine-headless-webkit.rb +0 -4
- data/script/hooks/post-commit +4 -0
- data/script/hooks/pre-commit +2 -2
- data/script/initialize-environment +1 -1
- data/skel/template.html.erb +31 -2
- data/spec/jasmine/noisy/file.js.erb +0 -0
- data/spec/jasmine/noisy/noisy.yml +8 -0
- data/spec/jasmine/noisy/other_file.js +2 -0
- data/spec/jasmine/two_files_from_src_files/app/app-file.js +0 -0
- data/spec/jasmine/two_files_from_src_files/app/app.js +2 -0
- data/spec/jasmine/two_files_from_src_files/jasmine.yml +7 -0
- data/spec/jasmine/two_files_from_src_files/vendor/vendor-file.js +0 -0
- data/spec/jasmine/two_files_from_src_files/vendor/vendor.js +2 -0
- data/spec/jasmine/two_spec_files_same_basename/jasmine.yml +6 -0
- data/spec/jasmine/two_spec_files_same_basename/spec.coffee +4 -0
- data/spec/jasmine/two_spec_files_same_basename/spec.js +6 -0
- data/spec/jasmine/window_prompt/source.js +2 -0
- data/spec/jasmine/window_prompt/window_prompt.yml +4 -0
- data/spec/javascripts/headless_reporter_result_spec.coffee +22 -6
- data/spec/javascripts/helpers/spec_helper.coffee +2 -0
- data/spec/javascripts/{jasmine.HeadlessConsoleReporter_spec.coffee → jasmine-extensions_spec.coffee} +0 -35
- data/spec/javascripts/jasmine.HeadlessReporter.ConsoleBase_spec.coffee +35 -0
- data/spec/javascripts/jasmine.HeadlessReporter.Console_spec.coffee +3 -0
- data/spec/javascripts/jasmine.HeadlessReporter.Tap_spec.coffee +19 -0
- data/spec/javascripts/jasmine.HeadlessReporter_spec.coffee +27 -0
- data/spec/javascripts/support/jasmine.yml +6 -5
- data/spec/lib/jasmine/headless/file_checker_spec.rb +25 -9
- data/spec/lib/jasmine/headless/files_list_spec.rb +132 -158
- data/spec/lib/jasmine/headless/options_spec.rb +77 -0
- data/spec/lib/jasmine/headless/report_message/seed_spec.rb +18 -0
- data/spec/lib/jasmine/headless/report_spec.rb +16 -0
- data/spec/lib/jasmine/headless/runner_spec.rb +110 -33
- data/spec/lib/jasmine/headless/template_writer_spec.rb +31 -27
- data/spec/lib/jasmine/headless/unique_asset_list_spec.rb +3 -3
- data/spec/lib/jasmine/headless_spec.rb +36 -0
- data/spec/skel/template.html.erb_spec.rb +8 -0
- data/vendor/assets/coffeescripts/prolog.coffee +48 -21
- data/vendor/assets/javascripts/headless_reporter_result.js +3 -0
- data/vendor/assets/{coffeescripts → javascripts}/intense.coffee +0 -0
- data/vendor/assets/{coffeescripts → javascripts}/jasmine-extensions.coffee +4 -10
- data/vendor/assets/javascripts/jasmine.HeadlessReporter.Console.coffee +8 -0
- data/vendor/assets/javascripts/jasmine.HeadlessReporter.ConsoleBase.coffee +92 -0
- data/vendor/assets/javascripts/jasmine.HeadlessReporter.File.coffee +24 -0
- data/vendor/assets/javascripts/jasmine.HeadlessReporter.Tap.coffee +28 -0
- data/vendor/assets/javascripts/jasmine.HeadlessReporter.Verbose.coffee +64 -0
- data/vendor/assets/javascripts/jasmine.HeadlessReporter.coffee +58 -0
- data/vendor/assets/javascripts/prolog.js +44 -27
- metadata +157 -31
- data/ext/jasmine-webkit-specrunner/jasmine-webkit-specrunner.pro +0 -19
- data/lib/digest/jasmine_test.rb +0 -20
- data/spec/bin/jasmine-headless-webkit_spec.rb +0 -142
- data/vendor/assets/coffeescripts/jasmine.HeadlessConsoleReporter.coffee +0 -118
- data/vendor/assets/javascripts/intense.js +0 -44
- data/vendor/assets/javascripts/jasmine-extensions.js +0 -129
- data/vendor/assets/javascripts/jasmine.HeadlessConsoleReporter.js +0 -136
@@ -4,11 +4,29 @@ require 'coffee-script'
|
|
4
4
|
require 'rainbow'
|
5
5
|
|
6
6
|
require 'yaml'
|
7
|
+
require 'erb'
|
7
8
|
require 'sprockets'
|
8
9
|
|
9
|
-
|
10
10
|
module Jasmine
|
11
11
|
module Headless
|
12
|
+
class IndexHandler
|
13
|
+
class << self
|
14
|
+
attr_accessor :index
|
15
|
+
end
|
16
|
+
|
17
|
+
def initialize(app)
|
18
|
+
@app = app
|
19
|
+
end
|
20
|
+
|
21
|
+
def call(env)
|
22
|
+
if env['PATH_INFO'] == '/'
|
23
|
+
return [ 302, { 'Location' => self.class.index }, [ 'Redirecting...' ] ]
|
24
|
+
end
|
25
|
+
|
26
|
+
@app.call(env)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
12
30
|
class Runner
|
13
31
|
JASMINE_DEFAULTS = {
|
14
32
|
'spec_files' => [ '**/*[sS]pec.js' ],
|
@@ -25,22 +43,109 @@ module Jasmine
|
|
25
43
|
|
26
44
|
attr_reader :options
|
27
45
|
|
28
|
-
|
29
|
-
|
30
|
-
options = Options.new(options) if !options.kind_of?(Options)
|
31
|
-
new(options).run
|
32
|
-
end
|
46
|
+
def self.run(options = {})
|
47
|
+
new(options).run
|
33
48
|
end
|
34
49
|
|
35
|
-
def
|
36
|
-
if
|
37
|
-
|
38
|
-
|
39
|
-
|
50
|
+
def self.server_port
|
51
|
+
return @server_port if @server_port
|
52
|
+
|
53
|
+
require 'socket'
|
54
|
+
|
55
|
+
count = 100
|
56
|
+
begin
|
57
|
+
port = select_server_port
|
58
|
+
|
59
|
+
socket = TCPSocket.new(server_interface, port)
|
60
|
+
socket.close
|
61
|
+
|
62
|
+
count -= 1
|
63
|
+
|
64
|
+
raise "Could not create server port after 100 attempts!" if count == 0
|
65
|
+
rescue Errno::ECONNREFUSED
|
66
|
+
@server_port = port
|
67
|
+
|
68
|
+
break
|
69
|
+
ensure
|
70
|
+
begin
|
71
|
+
socket.close if socket
|
72
|
+
rescue IOError
|
73
|
+
end
|
74
|
+
end while true
|
75
|
+
|
76
|
+
@server_port
|
77
|
+
end
|
78
|
+
|
79
|
+
def self.server_port=(port)
|
80
|
+
@server_port = port
|
81
|
+
end
|
82
|
+
|
83
|
+
def self.select_server_port
|
84
|
+
21000 + rand(10000)
|
85
|
+
end
|
86
|
+
|
87
|
+
def self.server_interface
|
88
|
+
'127.0.0.1'
|
89
|
+
end
|
90
|
+
|
91
|
+
def self.server_uri
|
92
|
+
"http://#{server_interface}:#{server_port}"
|
93
|
+
end
|
94
|
+
|
95
|
+
def self.server_spec_path
|
96
|
+
self.server_uri + '/__JHW__/'
|
97
|
+
end
|
98
|
+
|
99
|
+
def self.ensure_server(options)
|
100
|
+
return if @server
|
101
|
+
|
102
|
+
require 'webrick'
|
103
|
+
require 'thread'
|
104
|
+
require 'rack'
|
105
|
+
require 'net/http'
|
106
|
+
|
107
|
+
port = server_port
|
108
|
+
|
109
|
+
@server = Thread.new do
|
110
|
+
Jasmine::Headless.warn "Powering up!"
|
111
|
+
|
112
|
+
app = Rack::Builder.new do
|
113
|
+
use IndexHandler
|
114
|
+
|
115
|
+
map '/__JHW__' do
|
116
|
+
run Rack::File.new(Dir.pwd)
|
117
|
+
end
|
118
|
+
|
119
|
+
map '/' do
|
120
|
+
run Rack::File.new('/')
|
121
|
+
end
|
40
122
|
end
|
41
|
-
|
123
|
+
|
124
|
+
Rack::Handler::WEBrick.run(
|
125
|
+
app,
|
126
|
+
:Port => port,
|
127
|
+
:Logger => Logger.new(StringIO.new),
|
128
|
+
:AccessLog => [
|
129
|
+
[ StringIO.new, WEBrick::AccessLog::COMMON_LOG_FORMAT ],
|
130
|
+
[ StringIO.new, WEBrick::AccessLog::REFERER_LOG_FORMAT ]
|
131
|
+
]
|
132
|
+
)
|
42
133
|
end
|
43
134
|
|
135
|
+
while true do
|
136
|
+
begin
|
137
|
+
Net::HTTP.get(URI(server_uri))
|
138
|
+
break
|
139
|
+
rescue Errno::ECONNREFUSED => e
|
140
|
+
end
|
141
|
+
|
142
|
+
sleep 0.1
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
def initialize(options)
|
147
|
+
options = Options.new(options) if !options.kind_of?(Options)
|
148
|
+
|
44
149
|
@options = options
|
45
150
|
end
|
46
151
|
|
@@ -59,27 +164,30 @@ module Jasmine
|
|
59
164
|
end
|
60
165
|
|
61
166
|
def jasmine_command(*targets)
|
62
|
-
[
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
167
|
+
command = [ RUNNER ]
|
168
|
+
|
169
|
+
command << "-s #{options[:seed]}"
|
170
|
+
command << '-c' if options[:colors]
|
171
|
+
command << '-q' if options[:quiet]
|
172
|
+
|
173
|
+
options.file_reporters.each do |reporter, identifier, file|
|
174
|
+
command << "-r #{file}"
|
175
|
+
end
|
176
|
+
|
177
|
+
command += targets
|
178
|
+
command.compact.join(' ')
|
68
179
|
end
|
69
180
|
|
70
181
|
def run
|
71
182
|
Jasmine::Headless::CacheableAction.enabled = @options[:enable_cache]
|
183
|
+
Jasmine::Headless.show_warnings = !@options[:quiet]
|
72
184
|
FilesList.reset!
|
73
185
|
|
74
|
-
|
75
|
-
:config => jasmine_config,
|
76
|
-
:only => @options[:files],
|
77
|
-
:seed => @options[:seed]
|
78
|
-
)
|
186
|
+
self.class.server_port = options[:server_port]
|
79
187
|
|
80
|
-
@_targets = template_writer.write
|
188
|
+
@_targets = template_writer.write
|
81
189
|
|
82
|
-
run_targets = @_targets.dup
|
190
|
+
run_targets = absolute_run_targets(@_targets.dup)
|
83
191
|
|
84
192
|
if run_targets.length == 2
|
85
193
|
if (!@options[:full_run] && files_list.filtered?) || files_list.has_spec_outside_scope?
|
@@ -87,9 +195,13 @@ module Jasmine
|
|
87
195
|
end
|
88
196
|
end
|
89
197
|
|
90
|
-
system jasmine_command(run_targets)
|
198
|
+
runner = lambda { system jasmine_command(run_targets) }
|
91
199
|
|
92
|
-
|
200
|
+
if options[:use_server]
|
201
|
+
wrap_in_server(run_targets, &runner)
|
202
|
+
else
|
203
|
+
runner.call
|
204
|
+
end
|
93
205
|
|
94
206
|
@_status = $?.exitstatus
|
95
207
|
ensure
|
@@ -98,6 +210,17 @@ module Jasmine
|
|
98
210
|
end
|
99
211
|
end
|
100
212
|
|
213
|
+
def absolute_run_targets(targets)
|
214
|
+
targets.flatten.collect do |target|
|
215
|
+
if options[:use_server]
|
216
|
+
target = self.class.server_spec_path + target
|
217
|
+
else
|
218
|
+
target = "file://" + File.expand_path(target)
|
219
|
+
end
|
220
|
+
target
|
221
|
+
end
|
222
|
+
end
|
223
|
+
|
101
224
|
def runner_filename
|
102
225
|
options[:runner_output_filename] || begin
|
103
226
|
if (runner_output = jasmine_config['runner_output']) && !runner_output.empty?
|
@@ -108,11 +231,29 @@ module Jasmine
|
|
108
231
|
end
|
109
232
|
end
|
110
233
|
|
234
|
+
def files_list
|
235
|
+
@files_list ||= Jasmine::Headless::FilesList.new(
|
236
|
+
:config => jasmine_config,
|
237
|
+
:only => options[:files],
|
238
|
+
:seed => options[:seed],
|
239
|
+
:reporters => options.reporters
|
240
|
+
)
|
241
|
+
end
|
242
|
+
|
243
|
+
def wrap_in_server(run_targets)
|
244
|
+
self.class.ensure_server(options)
|
245
|
+
IndexHandler.index = run_targets.last
|
246
|
+
|
247
|
+
Jasmine::Headless.warn "HTTP powered specs! Located at #{run_targets.join(' ')}"
|
248
|
+
|
249
|
+
yield
|
250
|
+
end
|
251
|
+
|
111
252
|
private
|
112
253
|
def jasmine_config_data
|
113
254
|
raise JasmineConfigNotFound.new("Jasmine config not found. I tried #{@options[:jasmine_config]}.") if !File.file?(@options[:jasmine_config])
|
114
255
|
|
115
|
-
YAML.
|
256
|
+
YAML.load(ERB.new(File.read(@options[:jasmine_config])).result(binding))
|
116
257
|
end
|
117
258
|
end
|
118
259
|
end
|
@@ -14,23 +14,9 @@ module Jasmine
|
|
14
14
|
|
15
15
|
desc 'Run Jasmine specs headlessly'
|
16
16
|
task(name) { run_rake_task }
|
17
|
-
|
18
|
-
create_rails_compliant_task if defined?(Rails)
|
19
17
|
end
|
20
18
|
|
21
19
|
private
|
22
|
-
def create_rails_compliant_task
|
23
|
-
if Rails.respond_to?(:version) && Rails.version >= "3.1.0"
|
24
|
-
task 'assets:precompile:for_testing' => :environment do
|
25
|
-
$stderr.puts "This task is deprecated and will be removed after 2012-01-01"
|
26
|
-
|
27
|
-
Rails.application.assets.digest_class = Digest::JasmineTest
|
28
|
-
|
29
|
-
Rake::Task['assets:precompile'].invoke
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
20
|
def run_rake_task
|
35
21
|
case Jasmine::Headless::Runner.run(
|
36
22
|
:colors => colors,
|
@@ -1,24 +1,32 @@
|
|
1
1
|
require 'multi_json'
|
2
2
|
require 'erb'
|
3
3
|
require 'tempfile'
|
4
|
+
require 'forwardable'
|
4
5
|
|
5
6
|
module Jasmine::Headless
|
6
7
|
class TemplateWriter
|
7
8
|
attr_reader :runner
|
8
9
|
|
10
|
+
extend Forwardable
|
11
|
+
|
12
|
+
def_delegators :runner, :files_list, :options
|
13
|
+
def_delegators :options, :reporters
|
14
|
+
|
9
15
|
def initialize(runner)
|
10
16
|
@runner = runner
|
11
17
|
end
|
12
18
|
|
13
|
-
def write
|
19
|
+
def write
|
14
20
|
output = [
|
15
21
|
[ all_tests_filename, files_list.files_to_html ]
|
16
22
|
]
|
17
23
|
|
18
|
-
output.unshift([filtered_tests_filename
|
24
|
+
output.unshift([filtered_tests_filename, files_list.filtered_files_to_html ]) if files_list.filtered?
|
19
25
|
|
20
26
|
output.each do |name, files|
|
21
|
-
|
27
|
+
template = template_for(files)
|
28
|
+
|
29
|
+
File.open(name, 'wb') { |fh| fh.print template }
|
22
30
|
end
|
23
31
|
|
24
32
|
output.collect(&:first)
|
@@ -32,8 +40,24 @@ module Jasmine::Headless
|
|
32
40
|
all_tests_filename.gsub(%r{\.html$}, '.filter.html')
|
33
41
|
end
|
34
42
|
|
43
|
+
def render
|
44
|
+
template_for(all_files)
|
45
|
+
end
|
46
|
+
|
47
|
+
def all_files
|
48
|
+
files_list.files_to_html
|
49
|
+
end
|
50
|
+
|
51
|
+
def jhw_reporters
|
52
|
+
reporters.collect do |reporter, output|
|
53
|
+
%{jasmine.getEnv().addReporter(new jasmine.HeadlessReporter.#{reporter}("#{output}"));}
|
54
|
+
end.join("\n")
|
55
|
+
end
|
56
|
+
|
35
57
|
private
|
36
|
-
def template_for(files
|
58
|
+
def template_for(files)
|
59
|
+
spec_lines = files_list.spec_file_line_numbers
|
60
|
+
|
37
61
|
ERB.new(Jasmine::Headless.root.join('skel/template.html.erb').read).result(binding)
|
38
62
|
end
|
39
63
|
end
|
@@ -3,7 +3,7 @@ module Jasmine::Headless
|
|
3
3
|
def <<(asset)
|
4
4
|
raise InvalidUniqueAsset.new("Not an asset: #{asset.inspect}") if !asset.respond_to?(:logical_path)
|
5
5
|
|
6
|
-
super if !self.any? { |other| asset.
|
6
|
+
super if !self.any? { |other| asset.pathname == other.pathname }
|
7
7
|
end
|
8
8
|
|
9
9
|
def flatten
|
data/lib/jasmine/headless.rb
CHANGED
@@ -35,6 +35,24 @@ module Jasmine
|
|
35
35
|
def root
|
36
36
|
@root ||= Pathname(File.expand_path('../../..', __FILE__))
|
37
37
|
end
|
38
|
+
|
39
|
+
def warn(message)
|
40
|
+
output.puts message if show_warnings?
|
41
|
+
end
|
42
|
+
|
43
|
+
def show_warnings=(show)
|
44
|
+
@show_warnings = show
|
45
|
+
end
|
46
|
+
|
47
|
+
def show_warnings?
|
48
|
+
@show_warnings = true if @show_warnings.nil?
|
49
|
+
|
50
|
+
@show_warnings
|
51
|
+
end
|
52
|
+
|
53
|
+
def output
|
54
|
+
$stdout
|
55
|
+
end
|
38
56
|
end
|
39
57
|
end
|
40
58
|
end
|
data/script/hooks/pre-commit
CHANGED
@@ -2,9 +2,9 @@
|
|
2
2
|
|
3
3
|
OLD_GIT_DIR=$GIT_DIR
|
4
4
|
|
5
|
-
if [ "$(penchant gemfile-env)" != "remote" ]; then
|
5
|
+
if [ "$(penchant gemfile-env)" != "remote deployment" ]; then
|
6
6
|
unset GIT_DIR
|
7
|
-
penchant gemfile remote
|
7
|
+
penchant gemfile remote --deployment
|
8
8
|
GIT_DIR=$OLD_GIT_DIR
|
9
9
|
git add Gemfile*
|
10
10
|
fi
|
@@ -5,7 +5,7 @@ if File.file?('Gemfile.erb')
|
|
5
5
|
|
6
6
|
Dir.chdir '..' do
|
7
7
|
File.readlines(File.join(pwd, 'Gemfile.erb')).find_all { |line| line[':git'] }.each do |line|
|
8
|
-
repo = line[%r{:git => (['"])(
|
8
|
+
repo = line[%r{:git => (['"])([^'"]+)\1}, 2]
|
9
9
|
|
10
10
|
puts "Installing #{repo}"
|
11
11
|
system %{git clone #{repo}}
|
data/skel/template.html.erb
CHANGED
@@ -12,7 +12,7 @@
|
|
12
12
|
<body>
|
13
13
|
<script type="text/javascript">
|
14
14
|
jasmine.getEnv().console = {
|
15
|
-
log: function(msg) { JHW.stdout
|
15
|
+
log: function(msg) { JHW.print('stdout', msg + "\n"); }
|
16
16
|
}
|
17
17
|
|
18
18
|
window._onload = window.onload;
|
@@ -23,7 +23,7 @@
|
|
23
23
|
}
|
24
24
|
|
25
25
|
if (window.JHW) {
|
26
|
-
|
26
|
+
<%= jhw_reporters %>
|
27
27
|
} else {
|
28
28
|
types = [ 'HtmlReporter', 'TrivialReporter' ];
|
29
29
|
|
@@ -34,6 +34,35 @@
|
|
34
34
|
break;
|
35
35
|
}
|
36
36
|
}
|
37
|
+
|
38
|
+
var getLastModified = function(callback) {
|
39
|
+
var http = new XMLHttpRequest();
|
40
|
+
var header;
|
41
|
+
|
42
|
+
http.open('HEAD', window.location.href, false);
|
43
|
+
|
44
|
+
http.onreadystatechange = function() {
|
45
|
+
callback(http.getResponseHeader('Last-Modified'));
|
46
|
+
};
|
47
|
+
http.send();
|
48
|
+
}
|
49
|
+
|
50
|
+
getLastModified(function(currentLastModified) {
|
51
|
+
var checker;
|
52
|
+
checker = function() {
|
53
|
+
setTimeout(function() {
|
54
|
+
getLastModified(function(newLastModified) {
|
55
|
+
if (currentLastModified != newLastModified) {
|
56
|
+
setTimeout(function() { window.location.reload(); }, 1000);
|
57
|
+
} else {
|
58
|
+
checker();
|
59
|
+
}
|
60
|
+
});
|
61
|
+
}, 3000);
|
62
|
+
};
|
63
|
+
|
64
|
+
checker();
|
65
|
+
});
|
37
66
|
}
|
38
67
|
|
39
68
|
jasmine.getEnv().execute();
|
File without changes
|
File without changes
|
File without changes
|
@@ -4,11 +4,27 @@ describe 'HeadlessReporterResult', ->
|
|
4
4
|
splitName = "splitName"
|
5
5
|
message = 'message'
|
6
6
|
|
7
|
-
|
8
|
-
|
7
|
+
context 'no lines', ->
|
8
|
+
beforeEach ->
|
9
|
+
result = new HeadlessReporterResult(name, splitName)
|
9
10
|
|
10
|
-
|
11
|
-
|
12
|
-
|
11
|
+
describe '#addResult', ->
|
12
|
+
it 'should add a message', ->
|
13
|
+
result.addResult(message)
|
14
|
+
|
15
|
+
expect(result.results).toEqual([ message ])
|
16
|
+
|
17
|
+
context 'with lines', ->
|
18
|
+
beforeEach ->
|
19
|
+
HeadlessReporterResult.specLineNumbers = {
|
20
|
+
'one': {
|
21
|
+
'name': [ 1 ],
|
22
|
+
'of': [ 2, 9 ],
|
23
|
+
'test': [ 3, 10 ],
|
24
|
+
'other': [ 7 ]
|
25
|
+
}
|
26
|
+
}
|
27
|
+
it 'should find the best spec lines', ->
|
28
|
+
expect(HeadlessReporterResult.findSpecLine([ 'name', 'of', 'test' ]).lineNumber).toEqual(3)
|
29
|
+
expect(HeadlessReporterResult.findSpecLine([ 'other', 'of', 'test' ]).lineNumber).toEqual(10)
|
13
30
|
|
14
|
-
expect(result.results).toEqual([ message ])
|
data/spec/javascripts/{jasmine.HeadlessConsoleReporter_spec.coffee → jasmine-extensions_spec.coffee}
RENAMED
@@ -1,38 +1,3 @@
|
|
1
|
-
describe 'HeadlessReporterResult', ->
|
2
|
-
beforeEach ->
|
3
|
-
HeadlessReporterResult.specLineNumbers = {
|
4
|
-
'one': {
|
5
|
-
'name': [ 1 ],
|
6
|
-
'of': [ 2, 9 ],
|
7
|
-
'test': [ 3, 10 ],
|
8
|
-
'other': [ 7 ]
|
9
|
-
}
|
10
|
-
}
|
11
|
-
it 'should find the best spec lines', ->
|
12
|
-
expect(HeadlessReporterResult.findSpecLine([ 'name', 'of', 'test' ]).lineNumber).toEqual(3)
|
13
|
-
expect(HeadlessReporterResult.findSpecLine([ 'other', 'of', 'test' ]).lineNumber).toEqual(10)
|
14
|
-
|
15
|
-
describe 'jasmine.HeadlessConsoleReporter', ->
|
16
|
-
reporter = null
|
17
|
-
|
18
|
-
beforeEach ->
|
19
|
-
reporter = new jasmine.HeadlessConsoleReporter()
|
20
|
-
|
21
|
-
it 'should stop running specs if there are errors reported', ->
|
22
|
-
# otherwise it gets really confusing!
|
23
|
-
|
24
|
-
suite = { finish: -> null }
|
25
|
-
spec = new jasmine.Spec("env", suite, "test")
|
26
|
-
|
27
|
-
spyOn(reporter, 'hasError').andReturn(true)
|
28
|
-
spyOn(spec, 'finish')
|
29
|
-
spyOn(suite, 'finish')
|
30
|
-
|
31
|
-
reporter.reportSpecStarting(spec)
|
32
|
-
|
33
|
-
expect(spec.finish).toHaveBeenCalled()
|
34
|
-
expect(suite.finish).toHaveBeenCalled()
|
35
|
-
|
36
1
|
describe 'jasmine.Suite.prototype.getSuiteSplitName', ->
|
37
2
|
it 'should flatten the description', ->
|
38
3
|
suite = new jasmine.Suite({});
|
@@ -0,0 +1,35 @@
|
|
1
|
+
describe 'jasmine.HeadlessReporter.ConsoleBase', ->
|
2
|
+
reporter = null
|
3
|
+
|
4
|
+
beforeEach ->
|
5
|
+
reporter = new jasmine.HeadlessReporter.ConsoleBase()
|
6
|
+
|
7
|
+
describe '#formatResultLine', ->
|
8
|
+
context 'length = 1', ->
|
9
|
+
it 'should format', ->
|
10
|
+
reporter.length = 1
|
11
|
+
expect(reporter.formatResultLine(0)).toMatch(/test,/)
|
12
|
+
|
13
|
+
context 'length != 1', ->
|
14
|
+
it 'should format', ->
|
15
|
+
reporter.length = 2
|
16
|
+
expect(reporter.formatResultLine(0)).toMatch(/tests,/)
|
17
|
+
|
18
|
+
context 'failedCount = 1', ->
|
19
|
+
it 'should format', ->
|
20
|
+
reporter.failedCount = 1
|
21
|
+
expect(reporter.formatResultLine(0)).toMatch(/failure,/)
|
22
|
+
|
23
|
+
context 'failedCount != 1', ->
|
24
|
+
it 'should format', ->
|
25
|
+
reporter.failedCount = 0
|
26
|
+
expect(reporter.formatResultLine(0)).toMatch(/failures,/)
|
27
|
+
|
28
|
+
context 'runtime = 1', ->
|
29
|
+
it 'should format', ->
|
30
|
+
expect(reporter.formatResultLine(1)).toMatch(/sec./)
|
31
|
+
|
32
|
+
context 'runtime != 1', ->
|
33
|
+
it 'should format', ->
|
34
|
+
expect(reporter.formatResultLine(0)).toMatch(/secs./)
|
35
|
+
|