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 +1 -0
- data/lib/jasmine/base.rb +2 -1
- data/lib/jasmine/run.html.erb +93 -20
- data/lib/jasmine/runners/http.rb +70 -3
- data/lib/jasmine/selenium_driver.rb +9 -0
- data/lib/jasmine/server.rb +6 -7
- data/lib/jasmine/version.rb +1 -1
- data/rally-jasmine.gemspec +2 -1
- metadata +23 -7
data/.gitignore
CHANGED
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
|
data/lib/jasmine/run.html.erb
CHANGED
@@ -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
|
-
|
18
|
+
(function () {
|
19
|
+
var jasmineEnv = jasmine.getEnv();
|
20
20
|
|
21
|
-
|
22
|
-
|
21
|
+
function getSpecName(spec) {
|
22
|
+
var nodes = [spec.description];
|
23
|
+
var suite = spec.suite;
|
23
24
|
|
24
|
-
|
25
|
-
|
25
|
+
while(suite) {
|
26
|
+
nodes.push(suite.description);
|
27
|
+
suite = suite.parentSuite;
|
28
|
+
}
|
26
29
|
|
27
|
-
|
28
|
-
|
29
|
-
};
|
30
|
+
return nodes.reverse().join(':');
|
31
|
+
}
|
30
32
|
|
31
|
-
|
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
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
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
|
-
|
41
|
-
|
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
|
+
|
data/lib/jasmine/runners/http.rb
CHANGED
@@ -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
|
-
|
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
|
-
|
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
|
data/lib/jasmine/server.rb
CHANGED
@@ -6,14 +6,13 @@ module Jasmine
|
|
6
6
|
end
|
7
7
|
|
8
8
|
def start
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
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
|
data/lib/jasmine/version.rb
CHANGED
data/rally-jasmine.gemspec
CHANGED
@@ -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.
|
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.
|
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-
|
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.
|
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.
|
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:
|
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:
|
311
|
+
hash: -3596832894580337131
|
296
312
|
requirements: []
|
297
313
|
rubyforge_project:
|
298
|
-
rubygems_version: 1.8.
|
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
|