guard-jasmine 0.9.14 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +89 -18
- data/bin/guard-jasmine-debug +1 -1
- data/lib/guard/jasmine/phantomjs/guard-jasmine.coffee +115 -0
- data/lib/guard/jasmine/phantomjs/lib/console.js +168 -0
- data/lib/guard/jasmine/phantomjs/lib/reporter.js +134 -0
- data/lib/guard/jasmine/phantomjs/src/console.coffee +149 -0
- data/lib/guard/jasmine/phantomjs/src/reporter.coffee +134 -0
- data/lib/guard/jasmine/phantomjs/test/console_spec.coffee +125 -0
- data/lib/guard/jasmine/phantomjs/test/reporter_spec.coffee +0 -0
- data/lib/guard/jasmine/runner.rb +5 -3
- data/lib/guard/jasmine/task.rb +1 -1
- data/lib/guard/jasmine/version.rb +1 -1
- metadata +53 -25
- data/lib/guard/jasmine/phantomjs/run-jasmine.coffee +0 -247
File without changes
|
data/lib/guard/jasmine/runner.rb
CHANGED
@@ -6,7 +6,7 @@ module Guard
|
|
6
6
|
class Jasmine
|
7
7
|
|
8
8
|
# The Jasmine runner handles the execution of the spec through the PhantomJS binary,
|
9
|
-
# evaluates the JSON response from the PhantomJS Script `
|
9
|
+
# evaluates the JSON response from the PhantomJS Script `guard_jasmine.coffee`,
|
10
10
|
# writes the result to the console and triggers optional system notifications.
|
11
11
|
#
|
12
12
|
module Runner
|
@@ -118,7 +118,7 @@ module Guard
|
|
118
118
|
# @return [String] the path to the PhantomJS script
|
119
119
|
#
|
120
120
|
def phantomjs_script
|
121
|
-
File.expand_path(File.join(File.dirname(__FILE__), 'phantomjs', '
|
121
|
+
File.expand_path(File.join(File.dirname(__FILE__), 'phantomjs', 'guard-jasmine.coffee'))
|
122
122
|
end
|
123
123
|
|
124
124
|
# The suite name must be extracted from the spec that
|
@@ -278,7 +278,9 @@ module Guard
|
|
278
278
|
def report_specdoc_logs(spec, options, level)
|
279
279
|
if spec['logs'] && (options[:console] == :always || (options[:console] == :failure && !spec['passed']))
|
280
280
|
spec['logs'].each do |log|
|
281
|
-
|
281
|
+
log.split("\n").each_with_index do |message, index|
|
282
|
+
Formatter.info(indent(" #{ index == 0 ? '•' : ' ' } #{ message }", level))
|
283
|
+
end
|
282
284
|
end
|
283
285
|
end
|
284
286
|
end
|
data/lib/guard/jasmine/task.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: guard-jasmine
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-03-
|
12
|
+
date: 2012-03-09 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: guard
|
16
|
-
requirement: &
|
16
|
+
requirement: &70338979257280 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 0.8.3
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70338979257280
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: multi_json
|
27
|
-
requirement: &
|
27
|
+
requirement: &70338979256900 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70338979256900
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: childprocess
|
38
|
-
requirement: &
|
38
|
+
requirement: &70338979256440 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70338979256440
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: thor
|
49
|
-
requirement: &
|
49
|
+
requirement: &70338979256020 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :runtime
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70338979256020
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: bundler
|
60
|
-
requirement: &
|
60
|
+
requirement: &70338979255600 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: '0'
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *70338979255600
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: guard-rspec
|
71
|
-
requirement: &
|
71
|
+
requirement: &70338979255180 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,10 +76,32 @@ dependencies:
|
|
76
76
|
version: '0'
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *70338979255180
|
80
|
+
- !ruby/object:Gem::Dependency
|
81
|
+
name: guard-coffeescript
|
82
|
+
requirement: &70338979254760 !ruby/object:Gem::Requirement
|
83
|
+
none: false
|
84
|
+
requirements:
|
85
|
+
- - ! '>='
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: '0'
|
88
|
+
type: :development
|
89
|
+
prerelease: false
|
90
|
+
version_requirements: *70338979254760
|
91
|
+
- !ruby/object:Gem::Dependency
|
92
|
+
name: guard-shell
|
93
|
+
requirement: &70338979254340 !ruby/object:Gem::Requirement
|
94
|
+
none: false
|
95
|
+
requirements:
|
96
|
+
- - ! '>='
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: '0'
|
99
|
+
type: :development
|
100
|
+
prerelease: false
|
101
|
+
version_requirements: *70338979254340
|
80
102
|
- !ruby/object:Gem::Dependency
|
81
103
|
name: rspec
|
82
|
-
requirement: &
|
104
|
+
requirement: &70338979253920 !ruby/object:Gem::Requirement
|
83
105
|
none: false
|
84
106
|
requirements:
|
85
107
|
- - ! '>='
|
@@ -87,10 +109,10 @@ dependencies:
|
|
87
109
|
version: '0'
|
88
110
|
type: :development
|
89
111
|
prerelease: false
|
90
|
-
version_requirements: *
|
112
|
+
version_requirements: *70338979253920
|
91
113
|
- !ruby/object:Gem::Dependency
|
92
114
|
name: yard
|
93
|
-
requirement: &
|
115
|
+
requirement: &70338979253500 !ruby/object:Gem::Requirement
|
94
116
|
none: false
|
95
117
|
requirements:
|
96
118
|
- - ! '>='
|
@@ -98,10 +120,10 @@ dependencies:
|
|
98
120
|
version: '0'
|
99
121
|
type: :development
|
100
122
|
prerelease: false
|
101
|
-
version_requirements: *
|
123
|
+
version_requirements: *70338979253500
|
102
124
|
- !ruby/object:Gem::Dependency
|
103
125
|
name: redcarpet
|
104
|
-
requirement: &
|
126
|
+
requirement: &70338979253080 !ruby/object:Gem::Requirement
|
105
127
|
none: false
|
106
128
|
requirements:
|
107
129
|
- - ! '>='
|
@@ -109,10 +131,10 @@ dependencies:
|
|
109
131
|
version: '0'
|
110
132
|
type: :development
|
111
133
|
prerelease: false
|
112
|
-
version_requirements: *
|
134
|
+
version_requirements: *70338979253080
|
113
135
|
- !ruby/object:Gem::Dependency
|
114
136
|
name: pry
|
115
|
-
requirement: &
|
137
|
+
requirement: &70338979252660 !ruby/object:Gem::Requirement
|
116
138
|
none: false
|
117
139
|
requirements:
|
118
140
|
- - ! '>='
|
@@ -120,10 +142,10 @@ dependencies:
|
|
120
142
|
version: '0'
|
121
143
|
type: :development
|
122
144
|
prerelease: false
|
123
|
-
version_requirements: *
|
145
|
+
version_requirements: *70338979252660
|
124
146
|
- !ruby/object:Gem::Dependency
|
125
147
|
name: yajl-ruby
|
126
|
-
requirement: &
|
148
|
+
requirement: &70338979252240 !ruby/object:Gem::Requirement
|
127
149
|
none: false
|
128
150
|
requirements:
|
129
151
|
- - ! '>='
|
@@ -131,7 +153,7 @@ dependencies:
|
|
131
153
|
version: '0'
|
132
154
|
type: :development
|
133
155
|
prerelease: false
|
134
|
-
version_requirements: *
|
156
|
+
version_requirements: *70338979252240
|
135
157
|
description: Guard::Jasmine automatically tests your Jasmine specs on PhantomJS
|
136
158
|
email:
|
137
159
|
- michi@netzpiraten.ch
|
@@ -146,7 +168,13 @@ files:
|
|
146
168
|
- lib/guard/jasmine/cli.rb
|
147
169
|
- lib/guard/jasmine/formatter.rb
|
148
170
|
- lib/guard/jasmine/inspector.rb
|
149
|
-
- lib/guard/jasmine/phantomjs/
|
171
|
+
- lib/guard/jasmine/phantomjs/guard-jasmine.coffee
|
172
|
+
- lib/guard/jasmine/phantomjs/lib/console.js
|
173
|
+
- lib/guard/jasmine/phantomjs/lib/reporter.js
|
174
|
+
- lib/guard/jasmine/phantomjs/src/console.coffee
|
175
|
+
- lib/guard/jasmine/phantomjs/src/reporter.coffee
|
176
|
+
- lib/guard/jasmine/phantomjs/test/console_spec.coffee
|
177
|
+
- lib/guard/jasmine/phantomjs/test/reporter_spec.coffee
|
150
178
|
- lib/guard/jasmine/runner.rb
|
151
179
|
- lib/guard/jasmine/server.rb
|
152
180
|
- lib/guard/jasmine/task.rb
|
@@ -1,247 +0,0 @@
|
|
1
|
-
# This file is the script that runs within PhantomJS, requests the Jasmine specs
|
2
|
-
# and waits until they are ready.
|
3
|
-
|
4
|
-
# Wait until the test condition is true or a timeout occurs.
|
5
|
-
#
|
6
|
-
# @param [Function] test the test that returns true if condition is met
|
7
|
-
# @param [Function] ready the action when the condition is fulfilled
|
8
|
-
# @param [Number] timeout the max amount of time to wait in milliseconds
|
9
|
-
#
|
10
|
-
waitFor = (test, ready, timeout = 5000) ->
|
11
|
-
start = new Date().getTime()
|
12
|
-
condition = false
|
13
|
-
|
14
|
-
wait = ->
|
15
|
-
if (new Date().getTime() - start < timeout) and not condition
|
16
|
-
condition = test()
|
17
|
-
else
|
18
|
-
if not condition
|
19
|
-
text = page.evaluate -> document.getElementsByTagName('body')[0]?.innerText
|
20
|
-
|
21
|
-
if text
|
22
|
-
error = """
|
23
|
-
Timeout waiting for the Jasmine test results!
|
24
|
-
|
25
|
-
#{ text }
|
26
|
-
"""
|
27
|
-
console.log JSON.stringify({ error: error })
|
28
|
-
else
|
29
|
-
console.log JSON.stringify({ error: 'Timeout waiting for the Jasmine test results!' })
|
30
|
-
|
31
|
-
phantom.exit(1)
|
32
|
-
else
|
33
|
-
ready()
|
34
|
-
clearInterval interval
|
35
|
-
|
36
|
-
interval = setInterval wait, 250
|
37
|
-
|
38
|
-
# Test if the specs have finished.
|
39
|
-
#
|
40
|
-
specsReady = ->
|
41
|
-
page.evaluate -> window.resultReceived
|
42
|
-
|
43
|
-
#
|
44
|
-
# SCRIPT START
|
45
|
-
#
|
46
|
-
|
47
|
-
# Set default values
|
48
|
-
url = phantom.args[0] || 'http://127.0.0.1:3000/jasmine'
|
49
|
-
timeout = parseInt(phantom.args[1] || 5000)
|
50
|
-
|
51
|
-
# Create the web page.
|
52
|
-
#
|
53
|
-
page = require('webpage').create()
|
54
|
-
|
55
|
-
# Used to collect log messages for later assignment to the spec
|
56
|
-
#
|
57
|
-
currentSpecId = -1
|
58
|
-
logs = {}
|
59
|
-
|
60
|
-
# Add logs to the given suite
|
61
|
-
#
|
62
|
-
# @param suite [Object} the suite result
|
63
|
-
#
|
64
|
-
page.addLogs = (suite) ->
|
65
|
-
for s in suite.suites
|
66
|
-
arguments.callee(s) if s
|
67
|
-
|
68
|
-
for spec in suite.specs
|
69
|
-
id = Number(spec['id'])
|
70
|
-
spec['logs'] = logs[id] if logs[id] && logs[id].length isnt 0
|
71
|
-
delete spec['id']
|
72
|
-
|
73
|
-
delete suite['id']
|
74
|
-
delete suite['parent']
|
75
|
-
|
76
|
-
# Capture console.log output to add it to
|
77
|
-
# the result when specs have finished.
|
78
|
-
#
|
79
|
-
page.onConsoleMessage = (msg, line, source) ->
|
80
|
-
if /^RUNNER_RESULT: ([\s\S]*)$/.test(msg)
|
81
|
-
result = JSON.parse(RegExp.$1)
|
82
|
-
|
83
|
-
for suite in result.suites
|
84
|
-
page.addLogs(suite)
|
85
|
-
|
86
|
-
console.log JSON.stringify(result, undefined, 2)
|
87
|
-
page.evaluate -> window.resultReceived = true
|
88
|
-
|
89
|
-
else if /^SPEC_START: (\d+)$/.test(msg)
|
90
|
-
currentSpecId = Number(RegExp.$1)
|
91
|
-
logs[currentSpecId] = []
|
92
|
-
|
93
|
-
else
|
94
|
-
logs[currentSpecId].push("#{ msg } in #{ source } (line #{ line })") if currentSpecId isnt -1
|
95
|
-
|
96
|
-
# Initialize the page before the JavaScript is run.
|
97
|
-
#
|
98
|
-
page.onInitialized = ->
|
99
|
-
page.evaluate ->
|
100
|
-
|
101
|
-
# Jasmine Reporter that logs reporter steps
|
102
|
-
# and results to the console.
|
103
|
-
#
|
104
|
-
class ConsoleReporter
|
105
|
-
|
106
|
-
runnerResult: {
|
107
|
-
passed: false
|
108
|
-
stats: {
|
109
|
-
specs: 0
|
110
|
-
failures: 0
|
111
|
-
time: 0.0
|
112
|
-
}
|
113
|
-
suites: []
|
114
|
-
}
|
115
|
-
|
116
|
-
specCount: 0
|
117
|
-
currentSpecs: []
|
118
|
-
nestedSuiteResults: {}
|
119
|
-
|
120
|
-
# Report the start of a spec.
|
121
|
-
#
|
122
|
-
# @param spec [jasmine.Spec] the spec
|
123
|
-
#
|
124
|
-
reportSpecStarting: (spec) ->
|
125
|
-
console.log "SPEC_START: #{ spec.id }"
|
126
|
-
|
127
|
-
# Report results from a spec.
|
128
|
-
#
|
129
|
-
# @param spec [jasmine.Spec] the spec
|
130
|
-
#
|
131
|
-
reportSpecResults: (spec) ->
|
132
|
-
unless spec.results().skipped
|
133
|
-
specResult = {
|
134
|
-
id: spec.id
|
135
|
-
description: spec.description
|
136
|
-
passed: spec.results().failedCount is 0
|
137
|
-
}
|
138
|
-
|
139
|
-
if spec.results().failedCount isnt 0
|
140
|
-
messages = []
|
141
|
-
messages.push result.message for result in spec.results().getItems()
|
142
|
-
specResult['messages'] = messages if messages.length isnt 0
|
143
|
-
|
144
|
-
@specCount += 1
|
145
|
-
@currentSpecs.push specResult
|
146
|
-
|
147
|
-
# Report results from a suite.
|
148
|
-
#
|
149
|
-
# @param suite [jasmine.Suite] the suite
|
150
|
-
#
|
151
|
-
reportSuiteResults: (suite) ->
|
152
|
-
unless suite.results().skipped
|
153
|
-
suiteResult = {
|
154
|
-
id: suite.id
|
155
|
-
parent: suite.parentSuite?.id
|
156
|
-
description: suite.description
|
157
|
-
passed: suite.results().failedCount is 0
|
158
|
-
specs: @currentSpecs
|
159
|
-
suites: []
|
160
|
-
}
|
161
|
-
|
162
|
-
if suite.parentSuite?
|
163
|
-
parent = suite.parentSuite.id
|
164
|
-
@nestedSuiteResults[parent] = [] unless @nestedSuiteResults[parent]
|
165
|
-
@nestedSuiteResults[parent].push suiteResult
|
166
|
-
else
|
167
|
-
@addNestedSuites suiteResult
|
168
|
-
@removeEmptySuites suiteResult
|
169
|
-
|
170
|
-
if suiteResult.specs.length isnt 0 || suiteResult.suites.length isnt 0
|
171
|
-
@runnerResult.suites.push suiteResult
|
172
|
-
|
173
|
-
@currentSpecs = []
|
174
|
-
|
175
|
-
# Report results from the runner.
|
176
|
-
#
|
177
|
-
# @param runner [jasmine.Runner] the runner
|
178
|
-
#
|
179
|
-
reportRunnerResults: (runner) ->
|
180
|
-
runtime = (new Date().getTime() - @startTime) / 1000
|
181
|
-
|
182
|
-
@runnerResult['passed'] = runner.results().failedCount is 0
|
183
|
-
|
184
|
-
@runnerResult['stats'] = {
|
185
|
-
specs: @specCount
|
186
|
-
failures: runner.results().failedCount
|
187
|
-
time: runtime
|
188
|
-
}
|
189
|
-
|
190
|
-
console.log "RUNNER_RESULT: #{ JSON.stringify(@runnerResult) }"
|
191
|
-
|
192
|
-
# Report the start of the runner
|
193
|
-
#
|
194
|
-
# @param runner [jasmine.Runner] the runner
|
195
|
-
#
|
196
|
-
reportRunnerStarting: (runner) ->
|
197
|
-
@startTime = new Date().getTime()
|
198
|
-
|
199
|
-
# Add all nested suites that have previously
|
200
|
-
# been processed.
|
201
|
-
#
|
202
|
-
# @param suiteResult [Object] the suite result
|
203
|
-
#
|
204
|
-
addNestedSuites: (suiteResult) ->
|
205
|
-
if @nestedSuiteResults[suiteResult.id]
|
206
|
-
for suite in @nestedSuiteResults[suiteResult.id]
|
207
|
-
@addNestedSuites suite
|
208
|
-
suiteResult.suites.push suite
|
209
|
-
|
210
|
-
# Removes suites without child suites or specs.
|
211
|
-
#
|
212
|
-
# @param suiteResult [Object] the suite result
|
213
|
-
#
|
214
|
-
removeEmptySuites: (suiteResult) ->
|
215
|
-
suites = []
|
216
|
-
|
217
|
-
for suite in suiteResult.suites
|
218
|
-
@removeEmptySuites suite
|
219
|
-
|
220
|
-
suites.push suite if suite.suites.length isnt 0 || suite.specs.length isnt 0
|
221
|
-
|
222
|
-
suiteResult.suites = suites
|
223
|
-
|
224
|
-
# Log a message
|
225
|
-
#
|
226
|
-
# @param message [String] the log message
|
227
|
-
#
|
228
|
-
log: (message) ->
|
229
|
-
|
230
|
-
# Attach the console reporter when the document is ready.
|
231
|
-
#
|
232
|
-
window.onload = ->
|
233
|
-
window.resultReceived = false
|
234
|
-
jasmine.getEnv().addReporter(new ConsoleReporter())
|
235
|
-
|
236
|
-
# Open web page and run the Jasmine test runner
|
237
|
-
#
|
238
|
-
page.open url, (status) ->
|
239
|
-
# Avoid that a failed iframe load breaks the runner, see https://github.com/netzpirat/guard-jasmine/pull/19
|
240
|
-
page.onLoadFinished = ->
|
241
|
-
|
242
|
-
if status isnt 'success'
|
243
|
-
console.log JSON.stringify({ error: "Unable to access Jasmine specs at #{ url }" })
|
244
|
-
phantom.exit()
|
245
|
-
else
|
246
|
-
done = -> phantom.exit()
|
247
|
-
waitFor specsReady, done, timeout
|