rally-jasmine 1.2.0.12 → 1.2.0.18

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