guard-jasmine 0.9.14 → 1.0.0
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/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
|