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.
@@ -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