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.
@@ -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 `run_jasmine.coffee`,
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', 'run-jasmine.coffee'))
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
- Formatter.info(indent(" #{ format_message(log, true) }", level))
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
@@ -34,7 +34,7 @@ module Guard
34
34
  desc 'Run all Jasmine specs'
35
35
  task(name) do
36
36
  begin
37
- Guard::Jasmine::CLI.start(options.split)
37
+ ::Guard::Jasmine::CLI.start(options.split)
38
38
 
39
39
  rescue SystemExit => e
40
40
  case e.status
@@ -1,6 +1,6 @@
1
1
  module Guard
2
2
  module JasmineVersion
3
3
  # Guard::Jasmine version that is used for the Gem specification
4
- VERSION = '0.9.14'
4
+ VERSION = '1.0.0'
5
5
  end
6
6
  end
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.9.14
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-08 00:00:00.000000000 Z
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: &70306138105320 !ruby/object:Gem::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: *70306138105320
24
+ version_requirements: *70338979257280
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: multi_json
27
- requirement: &70306138104940 !ruby/object:Gem::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: *70306138104940
35
+ version_requirements: *70338979256900
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: childprocess
38
- requirement: &70306138104480 !ruby/object:Gem::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: *70306138104480
46
+ version_requirements: *70338979256440
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: thor
49
- requirement: &70306138104060 !ruby/object:Gem::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: *70306138104060
57
+ version_requirements: *70338979256020
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: bundler
60
- requirement: &70306138103640 !ruby/object:Gem::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: *70306138103640
68
+ version_requirements: *70338979255600
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: guard-rspec
71
- requirement: &70306138103220 !ruby/object:Gem::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: *70306138103220
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: &70306138102800 !ruby/object:Gem::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: *70306138102800
112
+ version_requirements: *70338979253920
91
113
  - !ruby/object:Gem::Dependency
92
114
  name: yard
93
- requirement: &70306138102380 !ruby/object:Gem::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: *70306138102380
123
+ version_requirements: *70338979253500
102
124
  - !ruby/object:Gem::Dependency
103
125
  name: redcarpet
104
- requirement: &70306138101960 !ruby/object:Gem::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: *70306138101960
134
+ version_requirements: *70338979253080
113
135
  - !ruby/object:Gem::Dependency
114
136
  name: pry
115
- requirement: &70306138101540 !ruby/object:Gem::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: *70306138101540
145
+ version_requirements: *70338979252660
124
146
  - !ruby/object:Gem::Dependency
125
147
  name: yajl-ruby
126
- requirement: &70306138101120 !ruby/object:Gem::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: *70306138101120
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/run-jasmine.coffee
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