guard-jasmine 0.9.8 → 0.9.9

Sign up to get free protection for your applications and to get access to all the features.
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
 
@@ -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 jasmine_runner_available?(options[:jasmine_url])
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
@@ -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
- ::Guard::Jasmine::Server.start(runner[:server], runner[:port], runner[:server_env]) unless runner[:server] == :none
88
- result = ::Guard::Jasmine::Runner.run(paths, runner)
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
- ::Guard::Jasmine::Server.stop
91
+ if CLI.runner_available?(runner[:jasmine_url])
92
+ result = ::Guard::Jasmine::Runner.run(paths, runner)
93
+ ::Guard::Jasmine::Server.stop
91
94
 
92
- exit_code = result.first ? 0 : 1
93
- Process.exit exit_code
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: runner.results().totalCount
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
@@ -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.8'
4
+ VERSION = '0.9.9'
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.8
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-02 00:00:00.000000000 Z
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: &70172271369340 !ruby/object:Gem::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: *70172271369340
24
+ version_requirements: *70095772257560
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: multi_json
27
- requirement: &70172271368940 !ruby/object:Gem::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: *70172271368940
35
+ version_requirements: *70095772257160
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: childprocess
38
- requirement: &70172271364640 !ruby/object:Gem::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: *70172271364640
46
+ version_requirements: *70095772256500
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: thor
49
- requirement: &70172271364160 !ruby/object:Gem::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: *70172271364160
57
+ version_requirements: *70095772255840
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: bundler
60
- requirement: &70172271363600 !ruby/object:Gem::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: *70172271363600
68
+ version_requirements: *70095772255220
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: guard-rspec
71
- requirement: &70172271362980 !ruby/object:Gem::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: *70172271362980
79
+ version_requirements: *70095772254600
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: rspec
82
- requirement: &70172271362320 !ruby/object:Gem::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: *70172271362320
90
+ version_requirements: *70095772254000
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: yard
93
- requirement: &70172271361880 !ruby/object:Gem::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: *70172271361880
101
+ version_requirements: *70095772253460
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: redcarpet
104
- requirement: &70172271361460 !ruby/object:Gem::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: *70172271361460
112
+ version_requirements: *70095772253040
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: pry
115
- requirement: &70172271361000 !ruby/object:Gem::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: *70172271361000
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