rally-jasmine 1.2.0.12 → 1.2.0.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/.gitignore CHANGED
@@ -1,3 +1,4 @@
1
+ *.gem
1
2
  .idea
2
3
  pkg
3
4
  bin
data/lib/jasmine/base.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require 'socket'
2
2
  require 'erb'
3
+ require 'thin'
3
4
 
4
5
  module Jasmine
5
6
  # this seemingly-over-complex method is necessary to get an open port on at least some of our Macs
@@ -34,7 +35,7 @@ module Jasmine
34
35
  time_out_at = Time.now + seconds_to_wait
35
36
  until server_is_listening_on "localhost", port
36
37
  sleep 0.1
37
- puts "Waiting for #{name} on #{port}..."
38
+ $stderr.puts "Waiting for #{name} on #{port}..."
38
39
  raise "#{name} didn't show up on port #{port} after #{seconds_to_wait} seconds." if Time.now > time_out_at
39
40
  end
40
41
  end
@@ -15,33 +15,105 @@
15
15
  <script type="text/javascript">
16
16
  //TODO: make this a js file that gets passed in, then iterate over only js_files
17
17
  var jsApiReporter;
18
- (function() {
19
- var jasmineEnv = jasmine.getEnv();
18
+ (function () {
19
+ var jasmineEnv = jasmine.getEnv();
20
20
 
21
- jsApiReporter = new jasmine.JsApiReporter();
22
- var htmlReporter = new jasmine.HtmlReporter();
21
+ function getSpecName(spec) {
22
+ var nodes = [spec.description];
23
+ var suite = spec.suite;
23
24
 
24
- jasmineEnv.addReporter(jsApiReporter);
25
- jasmineEnv.addReporter(htmlReporter);
25
+ while(suite) {
26
+ nodes.push(suite.description);
27
+ suite = suite.parentSuite;
28
+ }
26
29
 
27
- jasmineEnv.specFilter = function(spec) {
28
- return htmlReporter.specFilter(spec);
29
- };
30
+ return nodes.reverse().join(':');
31
+ }
30
32
 
31
- var currentWindowOnload = window.onload;
33
+ var start, end;
34
+ var specResults = [];
35
+ var specFailures = [];
36
+ var latestSpecToFinish = 'none';
37
+
38
+ var realReportSpecResults = jasmine.JsApiReporter.prototype.reportSpecResults;
39
+ var realReportRunnerStarting = jasmine.JsApiReporter.prototype.reportRunnerStarting;
40
+ var realReportRunnerResults = jasmine.JsApiReporter.prototype.reportRunnerResults;
41
+ var realSummarizeResult_ = jasmine.JsApiReporter.prototype.summarizeResult_;
42
+
43
+ jasmine.JsApiReporter.prototype.reportSpecResults = function(spec) {
44
+ realReportSpecResults.call(this, spec);
32
45
 
33
- window.onload = function() {
34
- if (currentWindowOnload) {
35
- currentWindowOnload();
36
- }
37
- execJasmine();
38
- };
46
+ var specName = getSpecName(spec);
47
+ latestSpecToFinish = specName;
48
+
49
+ if(spec.results().failedCount > 0) {
50
+ specFailures.push(specName);
51
+ specResults.push('F');
52
+ } else {
53
+ specResults.push('.');
54
+ }
55
+ };
56
+
57
+ jasmine.JsApiReporter.prototype.reportRunnerStarting = function() {
58
+ realReportRunnerStarting.apply(this, arguments);
59
+ start = new Date();
60
+ };
61
+
62
+ jasmine.JsApiReporter.prototype.reportRunnerResults = function() {
63
+ realReportRunnerResults.apply(this, arguments);
64
+ end = new Date();
65
+ };
39
66
 
40
- function execJasmine() {
41
- jasmineEnv.execute();
42
- }
67
+ jasmine.JsApiReporter.prototype.summarizeResult_ = function(result) {
68
+ if(result) {
69
+ return realSummarizeResult_.call(this, result);
70
+ }
71
+ };
72
+
73
+ jsApiReporter = new jasmine.JsApiReporter();
43
74
 
44
- })();
75
+ jsApiReporter.getLatestStatus = function() {
76
+ var results = {
77
+ count: specResults.length,
78
+ failures: specFailures,
79
+ results: specResults.join('')
80
+ };
81
+ // var results = '"' + specResults.length + ',' + JSON.stringify(specFailures).replace(/"/g, '\\"') + ',' + specResults.join('') + '"';
82
+ specResults = [];
83
+ specFailures = [];
84
+ return JSON.stringify(results);
85
+ };
86
+
87
+ jsApiReporter.getLatestSpecToHaveFinished = function() {
88
+ return '"' + latestSpecToFinish + '"';
89
+ };
90
+
91
+ jsApiReporter.getDurationForRun = function() {
92
+ return end - start;
93
+ };
94
+
95
+ var htmlReporter = new jasmine.HtmlReporter();
96
+
97
+ jasmineEnv.addReporter(jsApiReporter);
98
+ jasmineEnv.addReporter(htmlReporter);
99
+ jasmineEnv.specFilter = function (spec) {
100
+ return htmlReporter.specFilter(spec);
101
+ };
102
+
103
+ var currentWindowOnload = window.onload;
104
+
105
+ window.onload = function () {
106
+ if (currentWindowOnload) {
107
+ currentWindowOnload();
108
+ }
109
+ execJasmine();
110
+ };
111
+
112
+ function execJasmine() {
113
+ jasmineEnv.execute();
114
+ }
115
+
116
+ })();
45
117
  </script>
46
118
 
47
119
  <% js_files.each do |js_file| %>
@@ -53,3 +125,4 @@
53
125
  <div id="jasmine_content"></div>
54
126
  </body>
55
127
  </html>
128
+
@@ -28,6 +28,7 @@ module Jasmine
28
28
  end
29
29
 
30
30
  @suites = eval_js("var result = jsApiReporter.suites(); if (window.Prototype && Object.toJSON) { return Object.toJSON(result) } else { return JSON.stringify(result) }")
31
+ @total_spec_count = eval_js("return jasmine.getEnv().currentRunner().specs().length;")
31
32
  end
32
33
 
33
34
  def results_hash
@@ -52,14 +53,79 @@ module Jasmine
52
53
  end
53
54
 
54
55
  def wait_for_suites_to_finish_running
55
- puts "Waiting for suite to finish in browser ..."
56
+ $stderr.puts "Waiting for suite to finish in browser (#{@total_spec_count} specs)..."
57
+ @spec_status = ''
58
+ @finished_spec_count = 0
59
+ @output_spec_count = 0
56
60
  while !eval_js('return jsApiReporter.finished') do
57
- sleep 0.1
61
+
62
+ return if @unresponsive_script_detected
63
+
64
+ sleep 2
65
+ status = eval_js('return jsApiReporter.getLatestStatus()')
66
+ output_status(status)
67
+ end
68
+
69
+ status = eval_js('return jsApiReporter.getLatestStatus()')
70
+ output_status(status, true)
71
+
72
+ duration = eval_js('return jsApiReporter.getDurationForRun()')
73
+
74
+ $stderr.puts "\nSuites took #{duration/1000} seconds\n"
75
+
76
+ end
77
+
78
+ def output_status(chunk, flush = false)
79
+ return unless chunk
80
+ status_count = chunk['count']
81
+ failures = chunk['failures']
82
+ status = chunk['results']
83
+ @finished_spec_count += status_count
84
+ @spec_status += status
85
+ while @spec_status.size >= 100
86
+ @output_spec_count += 100
87
+ $stderr.puts @spec_status[0...100] + finished_of_total_count
88
+ @spec_status = @spec_status[100..-1]
89
+ end
90
+
91
+ if flush && @spec_status.size > 0
92
+ @output_spec_count = @finished_spec_count
93
+ $stderr.puts @spec_status + finished_of_total_count
94
+ @spec_status = ''
58
95
  end
96
+
97
+ failures.each { |f| $stderr.puts f }
98
+ end
99
+
100
+ def finished_of_total_count
101
+ " (#{@output_spec_count} of #{@total_spec_count})"
59
102
  end
60
103
 
61
104
  def eval_js(script)
62
- @client.eval_js(script)
105
+ begin
106
+ return @client.eval_js(script)
107
+ rescue Selenium::WebDriver::Error::UnhandledAlertError => e
108
+ handle_unexpected_alert e
109
+ end
110
+ end
111
+
112
+ def handle_unexpected_alert(e)
113
+ alert_text = @client.get_alert_text
114
+ @client.close_alert
115
+
116
+ $stderr.puts <<-ALERT_MSG
117
+ Unexpected alert: "#{alert_text}"
118
+
119
+ #{e.message}
120
+
121
+ happened near:
122
+ #{@client.eval_js('return jsApiReporter.getLatestSpecToHaveFinished()')}
123
+
124
+
125
+ ALERT_MSG
126
+
127
+ @unresponsive_script_detected = e.message =~ /stopped responding/
128
+ return nil
63
129
  end
64
130
 
65
131
  def json_generate(obj)
@@ -69,3 +135,4 @@ module Jasmine
69
135
  end
70
136
  end
71
137
  end
138
+
@@ -63,6 +63,7 @@ module Jasmine
63
63
  else
64
64
  url = @http_address
65
65
  end
66
+ @driver.manage.window.resize_to(1280, 1024)
66
67
  @driver.navigate.to url
67
68
  url
68
69
  end
@@ -77,6 +78,14 @@ module Jasmine
77
78
  JSON.parse("{\"result\":#{result}}", :max_nesting => false)["result"]
78
79
  end
79
80
 
81
+ def close_alert
82
+ @driver.switch_to.alert.accept rescue nil
83
+ end
84
+
85
+ def get_alert_text
86
+ @driver.switch_to.alert.text rescue nil
87
+ end
88
+
80
89
  def json_generate(obj)
81
90
  JSON.generate(obj)
82
91
  end
@@ -6,14 +6,13 @@ module Jasmine
6
6
  end
7
7
 
8
8
  def start
9
- if Jasmine::Dependencies.legacy_rack?
10
- handler = Rack::Handler.get('webrick')
11
- handler.run(@application, :Port => @port, :AccessLog => [])
12
- else
13
- server = Rack::Server.new(:Port => @port, :AccessLog => [])
14
- # workaround for Rack bug, when Rack > 1.2.1 is released Rack::Server.start(:app => Jasmine.app(self)) will work
15
- server.instance_variable_set(:@app, @application)
9
+ $stderr.puts "About to start Thin"
10
+
11
+ begin
12
+ server = ::Thin::Server.new('0.0.0.0', @port, @application)
16
13
  server.start
14
+ rescue Exception => e
15
+ $stderr.puts "failed to start Thin: " + e
17
16
  end
18
17
  end
19
18
  end
@@ -1,3 +1,3 @@
1
1
  module Jasmine
2
- VERSION = "1.2.0.12"
2
+ VERSION = "1.2.0.18"
3
3
  end
@@ -66,8 +66,9 @@ Gem::Specification.new do |s|
66
66
  s.add_development_dependency 'json_pure'
67
67
  s.add_development_dependency 'nokogiri'
68
68
 
69
- s.add_dependency 'rally-jasmine-core', ">= 1.2.0.2"
69
+ s.add_dependency 'rally-jasmine-core', ">= 1.2.0.3"
70
70
  s.add_dependency 'rack', '~> 1.0'
71
71
  s.add_dependency 'rspec', '>= 1.3.1'
72
72
  s.add_dependency 'selenium-webdriver', '>= 0.1.3'
73
+ s.add_dependency 'thin', '>= 1.5.1'
73
74
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rally-jasmine
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0.12
4
+ version: 1.2.0.18
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -12,7 +12,7 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2013-04-24 00:00:00.000000000 Z
15
+ date: 2013-07-29 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: rspec
@@ -117,7 +117,7 @@ dependencies:
117
117
  requirements:
118
118
  - - ! '>='
119
119
  - !ruby/object:Gem::Version
120
- version: 1.2.0.2
120
+ version: 1.2.0.3
121
121
  type: :runtime
122
122
  prerelease: false
123
123
  version_requirements: !ruby/object:Gem::Requirement
@@ -125,7 +125,7 @@ dependencies:
125
125
  requirements:
126
126
  - - ! '>='
127
127
  - !ruby/object:Gem::Version
128
- version: 1.2.0.2
128
+ version: 1.2.0.3
129
129
  - !ruby/object:Gem::Dependency
130
130
  name: rack
131
131
  requirement: !ruby/object:Gem::Requirement
@@ -174,6 +174,22 @@ dependencies:
174
174
  - - ! '>='
175
175
  - !ruby/object:Gem::Version
176
176
  version: 0.1.3
177
+ - !ruby/object:Gem::Dependency
178
+ name: thin
179
+ requirement: !ruby/object:Gem::Requirement
180
+ none: false
181
+ requirements:
182
+ - - ! '>='
183
+ - !ruby/object:Gem::Version
184
+ version: 1.5.1
185
+ type: :runtime
186
+ prerelease: false
187
+ version_requirements: !ruby/object:Gem::Requirement
188
+ none: false
189
+ requirements:
190
+ - - ! '>='
191
+ - !ruby/object:Gem::Version
192
+ version: 1.5.1
177
193
  description: Test your JavaScript without any framework dependencies, in any environment,
178
194
  and with a nice descriptive syntax.
179
195
  email: jasmine-js@googlegroups.com
@@ -283,7 +299,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
283
299
  version: '0'
284
300
  segments:
285
301
  - 0
286
- hash: 3157245608277941443
302
+ hash: -3596832894580337131
287
303
  required_rubygems_version: !ruby/object:Gem::Requirement
288
304
  none: false
289
305
  requirements:
@@ -292,10 +308,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
292
308
  version: '0'
293
309
  segments:
294
310
  - 0
295
- hash: 3157245608277941443
311
+ hash: -3596832894580337131
296
312
  requirements: []
297
313
  rubyforge_project:
298
- rubygems_version: 1.8.24
314
+ rubygems_version: 1.8.25
299
315
  signing_key:
300
316
  specification_version: 3
301
317
  summary: JavaScript BDD framework with support for WebDriverJS