guard-jasmine 0.9.8 → 0.9.9
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 +7 -0
- data/lib/guard/jasmine.rb +7 -97
- data/lib/guard/jasmine/cli.rb +16 -7
- data/lib/guard/jasmine/phantomjs/run-jasmine.coffee +3 -1
- data/lib/guard/jasmine/util.rb +90 -0
- data/lib/guard/jasmine/version.rb +1 -1
- metadata +23 -22
data/README.md
CHANGED
@@ -403,12 +403,19 @@ With the given `guard-jasmine` script you're able to configure [Travis CI](http:
|
|
403
403
|
Simply use the `script` setting in your `.travis.yml`:
|
404
404
|
|
405
405
|
```yaml
|
406
|
+
before_script:
|
407
|
+
- "export DISPLAY=:99.0"
|
408
|
+
- "sh -e /etc/init.d/xvfb start"
|
406
409
|
script: 'bundle exec guard-jasmine'
|
407
410
|
```
|
408
411
|
|
409
412
|
You can also run your Guard::Jasmine specs after your specs that are ran with `rake` by using `after_script`:
|
410
413
|
|
411
414
|
```yaml
|
415
|
+
before_script:
|
416
|
+
- "export DISPLAY=:99.0"
|
417
|
+
- "sh -e /etc/init.d/xvfb start"
|
418
|
+
script: 'rake spec'
|
412
419
|
after_script: 'bundle exec guard-jasmine'
|
413
420
|
```
|
414
421
|
|
data/lib/guard/jasmine.rb
CHANGED
@@ -1,7 +1,8 @@
|
|
1
|
+
require 'net/http'
|
2
|
+
|
1
3
|
require 'guard'
|
2
4
|
require 'guard/guard'
|
3
5
|
require 'guard/watcher'
|
4
|
-
require 'net/http'
|
5
6
|
|
6
7
|
module Guard
|
7
8
|
|
@@ -10,10 +11,12 @@ module Guard
|
|
10
11
|
#
|
11
12
|
class Jasmine < Guard
|
12
13
|
|
13
|
-
autoload :Formatter, 'guard/jasmine/formatter'
|
14
14
|
autoload :Inspector, 'guard/jasmine/inspector'
|
15
15
|
autoload :Runner, 'guard/jasmine/runner'
|
16
16
|
autoload :Server, 'guard/jasmine/server'
|
17
|
+
autoload :Util, 'guard/jasmine/util'
|
18
|
+
|
19
|
+
extend Util
|
17
20
|
|
18
21
|
attr_accessor :last_run_failed, :last_failed_paths
|
19
22
|
|
@@ -72,11 +75,11 @@ module Guard
|
|
72
75
|
# @raise [:task_has_failed] when run_on_change has failed
|
73
76
|
#
|
74
77
|
def start
|
75
|
-
if phantomjs_bin_valid?(options[:phantomjs_bin])
|
78
|
+
if Jasmine.phantomjs_bin_valid?(options[:phantomjs_bin])
|
76
79
|
|
77
80
|
Server.start(options[:server], options[:port], options[:server_env]) unless options[:server] == :none
|
78
81
|
|
79
|
-
if
|
82
|
+
if Jasmine.runner_available?(options[:jasmine_url])
|
80
83
|
run_all if options[:all_on_start]
|
81
84
|
end
|
82
85
|
else
|
@@ -137,98 +140,5 @@ module Guard
|
|
137
140
|
throw :task_has_failed unless passed
|
138
141
|
end
|
139
142
|
|
140
|
-
private
|
141
|
-
|
142
|
-
# Verifies if the Jasmine test runner is available.
|
143
|
-
#
|
144
|
-
# @param [String] url the location of the test runner
|
145
|
-
# @return [Boolean] when the runner is available
|
146
|
-
#
|
147
|
-
def jasmine_runner_available?(url)
|
148
|
-
url = URI.parse(url)
|
149
|
-
|
150
|
-
begin
|
151
|
-
Net::HTTP.start(url.host, url.port) do |http|
|
152
|
-
response = http.request(Net::HTTP::Head.new(url.path))
|
153
|
-
|
154
|
-
if response.code.to_i == 200
|
155
|
-
Formatter.info("Jasmine test runner is available at #{ url }")
|
156
|
-
else
|
157
|
-
notify_failure("Jasmine test runner isn't available", "Jasmine test runner isn't available at #{ url }")
|
158
|
-
end
|
159
|
-
|
160
|
-
response.code.to_i == 200
|
161
|
-
end
|
162
|
-
|
163
|
-
rescue
|
164
|
-
notify_failure("Jasmine test runner isn't available", "Jasmine test runner isn't available at #{ url }")
|
165
|
-
|
166
|
-
false
|
167
|
-
end
|
168
|
-
end
|
169
|
-
|
170
|
-
# Verifies that the phantomjs bin is available and the
|
171
|
-
# right version is installed.
|
172
|
-
#
|
173
|
-
# @param [String] bin the location of the phantomjs bin
|
174
|
-
# @return [Boolean] when the runner is available
|
175
|
-
#
|
176
|
-
def phantomjs_bin_valid?(bin)
|
177
|
-
if bin && !bin.empty?
|
178
|
-
version = `#{ bin } --version`
|
179
|
-
|
180
|
-
if version
|
181
|
-
# Remove all but version, e.g. from '1.5 (development)'
|
182
|
-
version = version.match(/(\d\.)*(\d)/)[0]
|
183
|
-
|
184
|
-
if Gem::Version.new(version) < Gem::Version.new('1.3.0')
|
185
|
-
notify_failure('Wrong PhantomJS version', "PhantomJS executable at #{ bin } must be at least version 1.3.0")
|
186
|
-
else
|
187
|
-
true
|
188
|
-
end
|
189
|
-
else
|
190
|
-
notify_failure('PhantomJS executable missing', "PhantomJS executable doesn't exist at #{ bin }")
|
191
|
-
end
|
192
|
-
else
|
193
|
-
notify_failure('PhantomJS executable missing', "PhantomJS executable couldn't be auto detected.")
|
194
|
-
end
|
195
|
-
end
|
196
|
-
|
197
|
-
# Notify a failure.
|
198
|
-
#
|
199
|
-
# @param title [String] the failure title
|
200
|
-
# @param message [String] the failure message
|
201
|
-
#
|
202
|
-
def notify_failure(title, message)
|
203
|
-
Formatter.error(message)
|
204
|
-
Formatter.notify(message,
|
205
|
-
:title => title,
|
206
|
-
:image => :failed,
|
207
|
-
:priority => 2) if options[:notification]
|
208
|
-
false
|
209
|
-
end
|
210
|
-
|
211
|
-
# Cross-platform way of finding an executable in the $PATH.
|
212
|
-
# http://stackoverflow.com/questions/2108727/which-in-ruby-checking-if-program-exists-in-path-from-ruby
|
213
|
-
#
|
214
|
-
# @example
|
215
|
-
# which('ruby') #=> /usr/bin/ruby
|
216
|
-
#
|
217
|
-
# @param cmd [String] the executable to find
|
218
|
-
# @return [String, nil] the path to the executable
|
219
|
-
#
|
220
|
-
def self.which(cmd)
|
221
|
-
exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : ['']
|
222
|
-
|
223
|
-
ENV['PATH'].split(File::PATH_SEPARATOR).each do |path|
|
224
|
-
exts.each do |ext|
|
225
|
-
exe = "#{ path }/#{ cmd }#{ ext }"
|
226
|
-
return exe if File.executable?(exe)
|
227
|
-
end
|
228
|
-
end
|
229
|
-
|
230
|
-
nil
|
231
|
-
end
|
232
|
-
|
233
143
|
end
|
234
144
|
end
|
data/lib/guard/jasmine/cli.rb
CHANGED
@@ -4,6 +4,7 @@ require 'guard/jasmine/version'
|
|
4
4
|
require 'guard/jasmine/runner'
|
5
5
|
require 'guard/jasmine/formatter'
|
6
6
|
require 'guard/jasmine/server'
|
7
|
+
require 'guard/jasmine/util'
|
7
8
|
|
8
9
|
module Guard
|
9
10
|
class Jasmine
|
@@ -15,6 +16,7 @@ module Guard
|
|
15
16
|
# This outputs the specdoc and disables any notifications.
|
16
17
|
#
|
17
18
|
class CLI < Thor
|
19
|
+
extend Util
|
18
20
|
|
19
21
|
default_task :spec
|
20
22
|
|
@@ -41,7 +43,6 @@ module Guard
|
|
41
43
|
method_option :bin,
|
42
44
|
:type => :string,
|
43
45
|
:aliases => '-b',
|
44
|
-
:default => '/usr/local/bin/phantomjs',
|
45
46
|
:desc => 'The location of the PhantomJS binary'
|
46
47
|
|
47
48
|
method_option :timeout,
|
@@ -72,7 +73,7 @@ module Guard
|
|
72
73
|
|
73
74
|
runner = {}
|
74
75
|
runner[:jasmine_url] = options.url
|
75
|
-
runner[:phantomjs_bin] = options.bin
|
76
|
+
runner[:phantomjs_bin] = options.bin || CLI.which('phantomjs')
|
76
77
|
runner[:timeout] = options.timeout
|
77
78
|
runner[:port] = options.port
|
78
79
|
runner[:server_env] = options.server_env
|
@@ -84,13 +85,21 @@ module Guard
|
|
84
85
|
runner[:max_error_notify] = 0
|
85
86
|
runner[:specdoc] = :always
|
86
87
|
|
87
|
-
|
88
|
-
|
88
|
+
if CLI.phantomjs_bin_valid?(runner[:phantomjs_bin])
|
89
|
+
::Guard::Jasmine::Server.start(runner[:server], runner[:port], runner[:server_env]) unless runner[:server] == :none
|
89
90
|
|
90
|
-
|
91
|
+
if CLI.runner_available?(runner[:jasmine_url])
|
92
|
+
result = ::Guard::Jasmine::Runner.run(paths, runner)
|
93
|
+
::Guard::Jasmine::Server.stop
|
91
94
|
|
92
|
-
|
93
|
-
|
95
|
+
Process.exit result.first ? 0 : 1
|
96
|
+
else
|
97
|
+
Process.exit 2
|
98
|
+
end
|
99
|
+
|
100
|
+
else
|
101
|
+
Process.exit 2
|
102
|
+
end
|
94
103
|
|
95
104
|
rescue Exception => e
|
96
105
|
raise e if e.is_a?(SystemExit)
|
@@ -113,6 +113,7 @@ page.onInitialized = ->
|
|
113
113
|
suites: []
|
114
114
|
}
|
115
115
|
|
116
|
+
specCount: 0
|
116
117
|
currentSpecs: []
|
117
118
|
nestedSuiteResults: {}
|
118
119
|
|
@@ -140,6 +141,7 @@ page.onInitialized = ->
|
|
140
141
|
messages.push result.message for result in spec.results().getItems()
|
141
142
|
specResult['messages'] = messages if messages.length isnt 0
|
142
143
|
|
144
|
+
@specCount += 1
|
143
145
|
@currentSpecs.push specResult
|
144
146
|
|
145
147
|
# Report results from a suite.
|
@@ -180,7 +182,7 @@ page.onInitialized = ->
|
|
180
182
|
@runnerResult['passed'] = runner.results().failedCount is 0
|
181
183
|
|
182
184
|
@runnerResult['stats'] = {
|
183
|
-
specs:
|
185
|
+
specs: @specCount
|
184
186
|
failures: runner.results().failedCount
|
185
187
|
time: runtime
|
186
188
|
}
|
@@ -0,0 +1,90 @@
|
|
1
|
+
require 'guard/jasmine/formatter'
|
2
|
+
|
3
|
+
module Guard
|
4
|
+
class Jasmine
|
5
|
+
|
6
|
+
# Provider of some shared utility methods.
|
7
|
+
#
|
8
|
+
module Util
|
9
|
+
|
10
|
+
# Verifies if the Jasmine test runner is available.
|
11
|
+
#
|
12
|
+
# @param [String] url the location of the test runner
|
13
|
+
# @return [Boolean] when the runner is available
|
14
|
+
#
|
15
|
+
def runner_available?(url)
|
16
|
+
url = URI.parse(url)
|
17
|
+
|
18
|
+
begin
|
19
|
+
Net::HTTP.start(url.host, url.port) do |http|
|
20
|
+
response = http.request(Net::HTTP::Head.new(url.path))
|
21
|
+
|
22
|
+
if response.code.to_i == 200
|
23
|
+
::Guard::Jasmine::Formatter.info "Jasmine test runner is available at #{ url }"
|
24
|
+
else
|
25
|
+
::Guard::Jasmine::Formatter.error "Jasmine test runner isn't available at #{ url }"
|
26
|
+
end
|
27
|
+
|
28
|
+
response.code.to_i == 200
|
29
|
+
end
|
30
|
+
|
31
|
+
rescue
|
32
|
+
::Guard::Jasmine::Formatter.error "Jasmine test runner isn't available at #{ url }"
|
33
|
+
|
34
|
+
false
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
# Verifies that the phantomjs bin is available and the
|
39
|
+
# right version is installed.
|
40
|
+
#
|
41
|
+
# @param [String] bin the location of the phantomjs bin
|
42
|
+
# @return [Boolean] when the runner is available
|
43
|
+
#
|
44
|
+
def phantomjs_bin_valid?(bin)
|
45
|
+
if bin && !bin.empty?
|
46
|
+
version = `#{ bin } --version`
|
47
|
+
|
48
|
+
if version
|
49
|
+
# Remove all but version, e.g. from '1.5 (development)'
|
50
|
+
version = version.match(/(\d\.)*(\d)/)[0]
|
51
|
+
|
52
|
+
if Gem::Version.new(version) < Gem::Version.new('1.3.0')
|
53
|
+
::Guard::Jasmine::Formatter.error "PhantomJS executable at #{ bin } must be at least version 1.3.0"
|
54
|
+
else
|
55
|
+
true
|
56
|
+
end
|
57
|
+
else
|
58
|
+
::Guard::Jasmine::Formatter.error "PhantomJS executable doesn't exist at #{ bin }"
|
59
|
+
end
|
60
|
+
else
|
61
|
+
::Guard::Jasmine::Formatter.error "PhantomJS executable couldn't be auto detected."
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
# Cross-platform way of finding an executable in the $PATH.
|
66
|
+
# http://stackoverflow.com/questions/2108727/which-in-ruby-checking-if-program-exists-in-path-from-ruby
|
67
|
+
#
|
68
|
+
# @example
|
69
|
+
# which('ruby') #=> /usr/bin/ruby
|
70
|
+
#
|
71
|
+
# @param cmd [String] the executable to find
|
72
|
+
# @return [String, nil] the path to the executable
|
73
|
+
#
|
74
|
+
def which(cmd)
|
75
|
+
exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : ['']
|
76
|
+
|
77
|
+
ENV['PATH'].split(File::PATH_SEPARATOR).each do |path|
|
78
|
+
exts.each do |ext|
|
79
|
+
exe = "#{ path }/#{ cmd }#{ ext }"
|
80
|
+
return exe if File.executable?(exe)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
nil
|
85
|
+
end
|
86
|
+
|
87
|
+
end
|
88
|
+
|
89
|
+
end
|
90
|
+
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.
|
4
|
+
version: 0.9.9
|
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-02-
|
12
|
+
date: 2012-02-13 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: guard
|
16
|
-
requirement: &
|
16
|
+
requirement: &70095772257560 !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: *70095772257560
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: multi_json
|
27
|
-
requirement: &
|
27
|
+
requirement: &70095772257160 !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: *70095772257160
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: childprocess
|
38
|
-
requirement: &
|
38
|
+
requirement: &70095772256500 !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: *70095772256500
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: thor
|
49
|
-
requirement: &
|
49
|
+
requirement: &70095772255840 !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: *70095772255840
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: bundler
|
60
|
-
requirement: &
|
60
|
+
requirement: &70095772255220 !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: *70095772255220
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: guard-rspec
|
71
|
-
requirement: &
|
71
|
+
requirement: &70095772254600 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: '0'
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *70095772254600
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: rspec
|
82
|
-
requirement: &
|
82
|
+
requirement: &70095772254000 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ! '>='
|
@@ -87,10 +87,10 @@ dependencies:
|
|
87
87
|
version: '0'
|
88
88
|
type: :development
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *70095772254000
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: yard
|
93
|
-
requirement: &
|
93
|
+
requirement: &70095772253460 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|
96
96
|
- - ! '>='
|
@@ -98,10 +98,10 @@ dependencies:
|
|
98
98
|
version: '0'
|
99
99
|
type: :development
|
100
100
|
prerelease: false
|
101
|
-
version_requirements: *
|
101
|
+
version_requirements: *70095772253460
|
102
102
|
- !ruby/object:Gem::Dependency
|
103
103
|
name: redcarpet
|
104
|
-
requirement: &
|
104
|
+
requirement: &70095772253040 !ruby/object:Gem::Requirement
|
105
105
|
none: false
|
106
106
|
requirements:
|
107
107
|
- - ! '>='
|
@@ -109,10 +109,10 @@ dependencies:
|
|
109
109
|
version: '0'
|
110
110
|
type: :development
|
111
111
|
prerelease: false
|
112
|
-
version_requirements: *
|
112
|
+
version_requirements: *70095772253040
|
113
113
|
- !ruby/object:Gem::Dependency
|
114
114
|
name: pry
|
115
|
-
requirement: &
|
115
|
+
requirement: &70095772252620 !ruby/object:Gem::Requirement
|
116
116
|
none: false
|
117
117
|
requirements:
|
118
118
|
- - ! '>='
|
@@ -120,7 +120,7 @@ dependencies:
|
|
120
120
|
version: '0'
|
121
121
|
type: :development
|
122
122
|
prerelease: false
|
123
|
-
version_requirements: *
|
123
|
+
version_requirements: *70095772252620
|
124
124
|
description: Guard::Jasmine automatically tests your Jasmine specs on PhantomJS
|
125
125
|
email:
|
126
126
|
- michi@netzpiraten.ch
|
@@ -145,6 +145,7 @@ files:
|
|
145
145
|
- lib/guard/jasmine/server.rbc
|
146
146
|
- lib/guard/jasmine/task.rb
|
147
147
|
- lib/guard/jasmine/templates/Guardfile
|
148
|
+
- lib/guard/jasmine/util.rb
|
148
149
|
- lib/guard/jasmine/version.rb
|
149
150
|
- lib/guard/jasmine/version.rbc
|
150
151
|
- lib/guard/jasmine.rb
|