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.
Files changed (122) hide show
  1. data/Gemfile +16 -8
  2. data/Guardfile +6 -1
  3. data/Rakefile +2 -1
  4. data/config/cucumber.yml +2 -0
  5. data/ext/jasmine-webkit-specrunner/Page.cpp +2 -3
  6. data/ext/jasmine-webkit-specrunner/Page.h +1 -0
  7. data/ext/jasmine-webkit-specrunner/Runner.cpp +37 -16
  8. data/ext/jasmine-webkit-specrunner/Runner.h +15 -5
  9. data/ext/jasmine-webkit-specrunner/specrunner.cpp +17 -7
  10. data/features/bin/failure.feature +7 -0
  11. data/features/bin/files.feature +7 -0
  12. data/features/bin/filtered_run/both_runs.feature +18 -0
  13. data/features/bin/filtered_run/no_full_run.feature +14 -0
  14. data/features/bin/help.feature +7 -0
  15. data/features/bin/quiet_messages.feature +8 -0
  16. data/features/bin/runner_out.feature +8 -0
  17. data/features/bin/spec_files_with_same_basename.feature +7 -0
  18. data/features/bin/success.feature +20 -0
  19. data/features/bin/success_with_js_error.feature +5 -0
  20. data/features/bin/tries_to_leave_page.feature +7 -0
  21. data/features/bin/try_to_click_a_button.feature +7 -0
  22. data/features/bin/two_files_from_src_files.feature +11 -0
  23. data/features/bin/with_coffeescript_error.feature +7 -0
  24. data/features/bin/with_console_log.feature +7 -0
  25. data/features/bin/with_server.feature +7 -0
  26. data/features/bin/with_window_prompt.feature +7 -0
  27. data/features/reporters.feature +24 -0
  28. data/features/runner.feature +34 -0
  29. data/features/steps/given/i_have_test_suite.rb +2 -0
  30. data/features/steps/given/no_existing_file.rb +4 -0
  31. data/features/steps/given/options/i_have_defaults.rb +4 -0
  32. data/features/steps/given/options/i_have_reporters.rb +10 -0
  33. data/features/steps/given/options/i_have_runner_options.rb +3 -0
  34. data/features/steps/then/bin/exit_status_should_be.rb +3 -0
  35. data/features/steps/then/bin/file_should_contain_runner.rb +4 -0
  36. data/features/steps/then/bin/following_files_loaded_in_order.rb +10 -0
  37. data/features/steps/then/bin/i_should_get_help_output.rb +4 -0
  38. data/features/steps/then/bin/output_should_include.rb +3 -0
  39. data/features/steps/then/bin/output_should_not_include.rb +4 -0
  40. data/features/steps/then/reporting/report_does_not_exist.rb +4 -0
  41. data/features/steps/then/reporting/report_should_exist.rb +3 -0
  42. data/features/steps/then/reporting/report_should_have.rb +7 -0
  43. data/features/steps/then/reporting/report_should_have_seed.rb +4 -0
  44. data/features/steps/then/runner/it_should_have_exit_status.rb +3 -0
  45. data/features/steps/then/runner/it_should_include_report_file.rb +4 -0
  46. data/features/steps/then/runner/it_should_not_include_report_file.rb +3 -0
  47. data/features/steps/then/templates/it_should_use_reporter.rb +6 -0
  48. data/features/steps/when/i_delete_file.rb +3 -0
  49. data/features/steps/when/i_get_runner.rb +4 -0
  50. data/features/steps/when/i_get_template_writer.rb +4 -0
  51. data/features/steps/when/i_run_executable.rb +4 -0
  52. data/features/steps/when/i_run_runner.rb +4 -0
  53. data/features/support/env.rb +7 -0
  54. data/lib/jasmine/headless/file_checker.rb +7 -3
  55. data/lib/jasmine/headless/files_list.rb +46 -19
  56. data/lib/jasmine/headless/options.rb +113 -5
  57. data/lib/jasmine/headless/report.rb +6 -1
  58. data/lib/jasmine/headless/report_message/console.rb +2 -4
  59. data/lib/jasmine/headless/report_message/seed.rb +14 -0
  60. data/lib/jasmine/headless/report_message/spec.rb +3 -5
  61. data/lib/jasmine/headless/report_message.rb +1 -0
  62. data/lib/jasmine/headless/runner.rb +169 -28
  63. data/lib/jasmine/headless/task.rb +0 -14
  64. data/lib/jasmine/headless/template_writer.rb +28 -4
  65. data/lib/jasmine/headless/unique_asset_list.rb +1 -1
  66. data/lib/jasmine/headless/version.rb +1 -1
  67. data/lib/jasmine/headless.rb +18 -0
  68. data/lib/jasmine-headless-webkit.rb +0 -4
  69. data/script/hooks/post-commit +4 -0
  70. data/script/hooks/pre-commit +2 -2
  71. data/script/initialize-environment +1 -1
  72. data/skel/template.html.erb +31 -2
  73. data/spec/jasmine/noisy/file.js.erb +0 -0
  74. data/spec/jasmine/noisy/noisy.yml +8 -0
  75. data/spec/jasmine/noisy/other_file.js +2 -0
  76. data/spec/jasmine/two_files_from_src_files/app/app-file.js +0 -0
  77. data/spec/jasmine/two_files_from_src_files/app/app.js +2 -0
  78. data/spec/jasmine/two_files_from_src_files/jasmine.yml +7 -0
  79. data/spec/jasmine/two_files_from_src_files/vendor/vendor-file.js +0 -0
  80. data/spec/jasmine/two_files_from_src_files/vendor/vendor.js +2 -0
  81. data/spec/jasmine/two_spec_files_same_basename/jasmine.yml +6 -0
  82. data/spec/jasmine/two_spec_files_same_basename/spec.coffee +4 -0
  83. data/spec/jasmine/two_spec_files_same_basename/spec.js +6 -0
  84. data/spec/jasmine/window_prompt/source.js +2 -0
  85. data/spec/jasmine/window_prompt/window_prompt.yml +4 -0
  86. data/spec/javascripts/headless_reporter_result_spec.coffee +22 -6
  87. data/spec/javascripts/helpers/spec_helper.coffee +2 -0
  88. data/spec/javascripts/{jasmine.HeadlessConsoleReporter_spec.coffee → jasmine-extensions_spec.coffee} +0 -35
  89. data/spec/javascripts/jasmine.HeadlessReporter.ConsoleBase_spec.coffee +35 -0
  90. data/spec/javascripts/jasmine.HeadlessReporter.Console_spec.coffee +3 -0
  91. data/spec/javascripts/jasmine.HeadlessReporter.Tap_spec.coffee +19 -0
  92. data/spec/javascripts/jasmine.HeadlessReporter_spec.coffee +27 -0
  93. data/spec/javascripts/support/jasmine.yml +6 -5
  94. data/spec/lib/jasmine/headless/file_checker_spec.rb +25 -9
  95. data/spec/lib/jasmine/headless/files_list_spec.rb +132 -158
  96. data/spec/lib/jasmine/headless/options_spec.rb +77 -0
  97. data/spec/lib/jasmine/headless/report_message/seed_spec.rb +18 -0
  98. data/spec/lib/jasmine/headless/report_spec.rb +16 -0
  99. data/spec/lib/jasmine/headless/runner_spec.rb +110 -33
  100. data/spec/lib/jasmine/headless/template_writer_spec.rb +31 -27
  101. data/spec/lib/jasmine/headless/unique_asset_list_spec.rb +3 -3
  102. data/spec/lib/jasmine/headless_spec.rb +36 -0
  103. data/spec/skel/template.html.erb_spec.rb +8 -0
  104. data/vendor/assets/coffeescripts/prolog.coffee +48 -21
  105. data/vendor/assets/javascripts/headless_reporter_result.js +3 -0
  106. data/vendor/assets/{coffeescripts → javascripts}/intense.coffee +0 -0
  107. data/vendor/assets/{coffeescripts → javascripts}/jasmine-extensions.coffee +4 -10
  108. data/vendor/assets/javascripts/jasmine.HeadlessReporter.Console.coffee +8 -0
  109. data/vendor/assets/javascripts/jasmine.HeadlessReporter.ConsoleBase.coffee +92 -0
  110. data/vendor/assets/javascripts/jasmine.HeadlessReporter.File.coffee +24 -0
  111. data/vendor/assets/javascripts/jasmine.HeadlessReporter.Tap.coffee +28 -0
  112. data/vendor/assets/javascripts/jasmine.HeadlessReporter.Verbose.coffee +64 -0
  113. data/vendor/assets/javascripts/jasmine.HeadlessReporter.coffee +58 -0
  114. data/vendor/assets/javascripts/prolog.js +44 -27
  115. metadata +157 -31
  116. data/ext/jasmine-webkit-specrunner/jasmine-webkit-specrunner.pro +0 -19
  117. data/lib/digest/jasmine_test.rb +0 -20
  118. data/spec/bin/jasmine-headless-webkit_spec.rb +0 -142
  119. data/vendor/assets/coffeescripts/jasmine.HeadlessConsoleReporter.coffee +0 -118
  120. data/vendor/assets/javascripts/intense.js +0 -44
  121. data/vendor/assets/javascripts/jasmine-extensions.js +0 -129
  122. 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
- class << self
29
- def run(options = {})
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 initialize(options)
36
- if !File.file?(RUNNER)
37
- $stderr.puts "No runner found, attempting to compile..."
38
- Dir.chdir RUNNER_DIR do
39
- system %{ruby extconf.rb}
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
- raise NoRunnerError if !File.file?(RUNNER)
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
- RUNNER,
64
- @options[:colors] ? '-c' : nil,
65
- @options[:report] ? "-r #{@options[:report]}" : nil,
66
- *targets
67
- ].compact.join(" ")
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
- files_list = Jasmine::Headless::FilesList.new(
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!(files_list)
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
- puts "\nTest ordering seed: --seed #{@options[:seed]}"
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.load_file(@options[:jasmine_config])
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!(files_list)
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 , files_list.filtered_files_to_html ]) if files_list.filtered?
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
- File.open(name, 'w') { |fh| fh.print template_for(files, files_list.spec_file_line_numbers) }
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, spec_lines)
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.logical_path == other.logical_path }
6
+ super if !self.any? { |other| asset.pathname == other.pathname }
7
7
  end
8
8
 
9
9
  def flatten
@@ -1,5 +1,5 @@
1
1
  module Jasmine
2
2
  module Headless
3
- VERSION = "0.8.4"
3
+ VERSION = "0.9.0.rc1"
4
4
  end
5
5
  end
@@ -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
@@ -1,7 +1,3 @@
1
1
  require 'jasmine/headless'
2
2
  require 'jasmine/headless/railtie' if defined?(Rails) && Rails::VERSION::MAJOR >= 3
3
3
 
4
- module Digest
5
- autoload :JasmineTest, 'digest/jasmine_test'
6
- end
7
-
@@ -0,0 +1,4 @@
1
+ #!/bin/bash
2
+
3
+ penchant gemfile remote --switch-back
4
+
@@ -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 => (['"])(.*)\1}, 2]
8
+ repo = line[%r{:git => (['"])([^'"]+)\1}, 2]
9
9
 
10
10
  puts "Installing #{repo}"
11
11
  system %{git clone #{repo}}
@@ -12,7 +12,7 @@
12
12
  <body>
13
13
  <script type="text/javascript">
14
14
  jasmine.getEnv().console = {
15
- log: function(msg) { JHW.stdout.puts(msg) }
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
- jasmine.getEnv().addReporter(new jasmine.HeadlessConsoleReporter());
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
@@ -0,0 +1,8 @@
1
+ src_dir: spec/jasmine/noisy
2
+ src_files:
3
+ - '**/*'
4
+
5
+ spec_dir: spec/jasmine/noisy
6
+ spec_files:
7
+ - '**/*'
8
+
@@ -0,0 +1,2 @@
1
+ window.prompt("hello");
2
+
@@ -0,0 +1,2 @@
1
+ //= require app-file
2
+ //
@@ -0,0 +1,7 @@
1
+ src_dir: spec/jasmine/two_files_from_src_files/app
2
+
3
+ asset_paths:
4
+ - "spec/jasmine/two_files_from_src_files/vendor"
5
+
6
+ src_files: [ 'vendor.js', 'app.js' ]
7
+
@@ -0,0 +1,2 @@
1
+ //= require vendor-file
2
+ //
@@ -0,0 +1,6 @@
1
+ src_dir: spec/jasmine/two_spec_files_same_basename
2
+ src_files: []
3
+
4
+ spec_dir: spec/jasmine/two_spec_files_same_basename
5
+ spec_files: [ "**/*.{js,coffee}" ]
6
+
@@ -0,0 +1,4 @@
1
+ describe 'two', ->
2
+ it 'should pass', ->
3
+ expect(true).toEqual(true)
4
+
@@ -0,0 +1,6 @@
1
+ describe("one", function() {
2
+ it('should pass', function() {
3
+ expect(true).toEqual(true);
4
+ });
5
+ });
6
+
@@ -0,0 +1,2 @@
1
+ window.prompt("Yes! Hi!");
2
+
@@ -0,0 +1,4 @@
1
+ src_dir: spec/jasmine/window_prompt
2
+ src_files:
3
+ - '**/*.js'
4
+
@@ -4,11 +4,27 @@ describe 'HeadlessReporterResult', ->
4
4
  splitName = "splitName"
5
5
  message = 'message'
6
6
 
7
- beforeEach ->
8
- result = new HeadlessReporterResult(name, splitName)
7
+ context 'no lines', ->
8
+ beforeEach ->
9
+ result = new HeadlessReporterResult(name, splitName)
9
10
 
10
- describe '#addResult', ->
11
- it 'should add a message', ->
12
- result.addResult(message)
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 ])
@@ -0,0 +1,2 @@
1
+ window.context = window.describe
2
+
@@ -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
+
@@ -0,0 +1,3 @@
1
+ describe 'jasmine.HeadlessReporter.Console', ->
2
+ describe '#reportSpecResults', ->
3
+