guard-cucumber 0.2.4 → 0.3.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 +29 -14
- data/lib/guard/cucumber/notification_formatter.rb +44 -0
- data/lib/guard/cucumber/runners/preload_runner.rb +7 -3
- data/lib/guard/cucumber/runners/runner.rb +8 -19
- data/lib/guard/cucumber/templates/Guardfile +1 -1
- data/lib/guard/cucumber/version.rb +1 -1
- metadata +4 -42
- data/lib/guard/cucumber/cucumber_formatter.rb +0 -33
data/README.md
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# Guard::Cucumber
|
2
2
|
|
3
|
-
Guard::Cucumber allows you to automatically run Cucumber features when files are modified.
|
3
|
+
Guard::Cucumber allows you to automatically run Cucumber features when files are modified.
|
4
|
+
It is tested on Ruby 1.8.7 & 1.9.2.
|
4
5
|
|
5
6
|
## Install
|
6
7
|
|
@@ -14,7 +15,7 @@ Add it to your `Gemfile`, preferably inside the test group:
|
|
14
15
|
|
15
16
|
gem 'guard-cucumber'
|
16
17
|
|
17
|
-
Add Guard
|
18
|
+
Add the default Guard::Cucumber template to your `Guardfile` by running this command:
|
18
19
|
|
19
20
|
guard init cucumber
|
20
21
|
|
@@ -24,26 +25,40 @@ Please read the [Guard usage documentation](http://github.com/guard/guard#readme
|
|
24
25
|
|
25
26
|
## Guardfile
|
26
27
|
|
27
|
-
Guard::Cucumber can be adapted to all kind of projects
|
28
|
-
[Guard documentation](http://github.com/guard/guard#readme) for more information about the Guardfile DSL.
|
28
|
+
Guard::Cucumber can be adapted to all kind of projects and comes with a default template that looks like this:
|
29
29
|
|
30
30
|
guard 'cucumber' do
|
31
31
|
watch(%r{features/.+\.feature})
|
32
|
-
watch(%r{features/support/.+})
|
33
|
-
watch(%r{features/step_definitions
|
32
|
+
watch(%r{features/support/.+}) { 'features' }
|
33
|
+
watch(%r{features/step_definitions/(.+)_steps\.rb}) { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'features' }
|
34
34
|
end
|
35
35
|
|
36
|
+
Expressed in plain English, this configuration tells Guard::Cucumber:
|
37
|
+
|
38
|
+
1. When a file within the features directory that ends in feature is modified, just run that single feature.
|
39
|
+
2. When any file within features/support directory is modified, run all features.
|
40
|
+
3. When a file within the features/step_definitions directory that ends in \_steps.rb is modified,
|
41
|
+
run the first feature that matches the name (\_steps.rb replaced by .feature) and when no feature is found,
|
42
|
+
then run all features.
|
43
|
+
|
44
|
+
Please read the [Guard documentation](http://github.com/guard/guard#readme) for more information about the Guardfile DSL.
|
45
|
+
|
36
46
|
## Options
|
37
47
|
|
38
|
-
|
48
|
+
You can pass any of the standard Cucumber CLI options using the :cli option:
|
49
|
+
|
50
|
+
guard 'cucumber', :cli => '-c --drb --port 1234 --profile custom' do
|
51
|
+
...
|
52
|
+
end
|
53
|
+
|
54
|
+
Former `:color`, `:drb`, `:port` and `:profile` options are thus deprecated and have no effect anymore.
|
55
|
+
|
56
|
+
### List of available options
|
39
57
|
|
40
|
-
:
|
41
|
-
:
|
42
|
-
:
|
43
|
-
:
|
44
|
-
:rvm => ['1.8.7', '1.9.2'] # Directly run your specs on multiple ruby
|
45
|
-
:profile => 'cucumber_profile' # Let cucumber use another profile than the default one
|
46
|
-
:command => 'whatever' # Pass any other command to cucumber
|
58
|
+
:cli => '-c -f pretty' # Pass arbitrary Cucumber CLI arguments, default: nil
|
59
|
+
:bundler => false # Don't use "bundle exec" to run the Cucumber command, default: true
|
60
|
+
:rvm => ['1.8.7', '1.9.2'] # Directly run your features on multiple ruby versions, default: nil
|
61
|
+
:notification => false # Don't display Growl (or Libnotify) notification, default: true
|
47
62
|
|
48
63
|
## Development
|
49
64
|
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'guard'
|
2
|
+
require 'cucumber/formatter/console'
|
3
|
+
|
4
|
+
module Guard
|
5
|
+
class Cucumber
|
6
|
+
class NotificationFormatter
|
7
|
+
include ::Cucumber::Formatter::Console
|
8
|
+
|
9
|
+
attr_reader :step_mother
|
10
|
+
|
11
|
+
def initialize(step_mother, path_or_io, options)
|
12
|
+
@step_mother = step_mother
|
13
|
+
end
|
14
|
+
|
15
|
+
def after_features(features)
|
16
|
+
icon, messages = '', []
|
17
|
+
[:failed, :skipped, :undefined, :pending, :passed].reverse.each do |status|
|
18
|
+
if step_mother.steps(status).any?
|
19
|
+
icon = icon_for(status)
|
20
|
+
messages << dump_count(step_mother.steps(status).length, 'step', status.to_s)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
::Guard::Notifier.notify messages.reverse.join(', '), :title => 'Cucumber Results', :image => icon
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def icon_for(status)
|
30
|
+
case status
|
31
|
+
when :passed
|
32
|
+
:success
|
33
|
+
when :pending, :undefined, :skipped
|
34
|
+
:pending
|
35
|
+
when :failed
|
36
|
+
:failed
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'cucumber'
|
2
|
-
require '
|
2
|
+
require 'cucumber/formatter/progress'
|
3
|
+
require 'guard/cucumber/notification_formatter'
|
3
4
|
|
4
5
|
module Guard
|
5
6
|
class Cucumber
|
@@ -28,8 +29,11 @@ module Guard
|
|
28
29
|
message = options[:message] || run_message(features)
|
29
30
|
UI.info message, :reset => true
|
30
31
|
|
31
|
-
|
32
|
-
|
32
|
+
formatters = [
|
33
|
+
NotificationFormatter.new(@runtime, $stdout, @configuration.instance_variable_get('@options')),
|
34
|
+
::Cucumber::Formatter::Progress.new(@runtime, $stdout, @configuration.instance_variable_get('@options'))
|
35
|
+
]
|
36
|
+
runner = ::Cucumber::Ast::TreeWalker.new(@runtime, formatters, @configuration)
|
33
37
|
@runtime.visitor = runner
|
34
38
|
loader = ::Cucumber::Runtime::FeaturesLoader.new(features, @configuration.filters, @configuration.tag_expression)
|
35
39
|
runner.visit_features(loader.features)
|
@@ -12,37 +12,26 @@ module Guard
|
|
12
12
|
|
13
13
|
def cucumber_command(paths, options)
|
14
14
|
cmd = []
|
15
|
-
|
16
15
|
cmd << "rvm #{options[:rvm].join(',')} exec" if options[:rvm].is_a?(Array)
|
17
16
|
cmd << 'bundle exec' if bundler? && options[:bundler] != false
|
18
17
|
|
19
18
|
cmd << 'cucumber'
|
20
|
-
cmd <<
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
if not require_command?(options)
|
27
|
-
if options[:drb]
|
28
|
-
cmd << "--require features/support"
|
29
|
-
cmd << "--require features/step_definitions"
|
30
|
-
else
|
31
|
-
cmd << "--require features"
|
32
|
-
end
|
19
|
+
cmd << options[:cli] if options[:cli]
|
20
|
+
|
21
|
+
if options[:notification] != false
|
22
|
+
cmd << "--require #{ File.expand_path(File.join(File.dirname(__FILE__), '..', 'notification_formatter.rb')) } --format Guard::Cucumber::NotificationFormatter --out #{ null_device }"
|
23
|
+
cmd << "--require features"
|
33
24
|
end
|
34
25
|
|
35
|
-
cmd
|
36
|
-
cmd = cmd + paths
|
37
|
-
cmd.join(' ')
|
26
|
+
(cmd + paths).join(' ')
|
38
27
|
end
|
39
28
|
|
40
29
|
def bundler?
|
41
30
|
@bundler ||= File.exist?("#{Dir.pwd}/Gemfile")
|
42
31
|
end
|
43
32
|
|
44
|
-
def
|
45
|
-
|
33
|
+
def null_device
|
34
|
+
RUBY_PLATFORM.index('mswin') ? 'NUL' : '/dev/null'
|
46
35
|
end
|
47
36
|
|
48
37
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
guard 'cucumber' do
|
2
2
|
watch(%r{features/.+\.feature})
|
3
3
|
watch(%r{features/support/.+}) { 'features' }
|
4
|
-
watch(%r{features/step_definitions
|
4
|
+
watch(%r{features/step_definitions/(.+)_steps\.rb}) { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'features' }
|
5
5
|
end
|
metadata
CHANGED
@@ -1,13 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: guard-cucumber
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash: 31
|
5
4
|
prerelease:
|
6
|
-
|
7
|
-
- 0
|
8
|
-
- 2
|
9
|
-
- 4
|
10
|
-
version: 0.2.4
|
5
|
+
version: 0.3.0
|
11
6
|
platform: ruby
|
12
7
|
authors:
|
13
8
|
- Michael Kessler
|
@@ -15,7 +10,7 @@ autorequire:
|
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
12
|
|
18
|
-
date: 2011-03-
|
13
|
+
date: 2011-03-28 00:00:00 +02:00
|
19
14
|
default_executable:
|
20
15
|
dependencies:
|
21
16
|
- !ruby/object:Gem::Dependency
|
@@ -26,11 +21,6 @@ dependencies:
|
|
26
21
|
requirements:
|
27
22
|
- - ~>
|
28
23
|
- !ruby/object:Gem::Version
|
29
|
-
hash: 19
|
30
|
-
segments:
|
31
|
-
- 0
|
32
|
-
- 3
|
33
|
-
- 0
|
34
24
|
version: 0.3.0
|
35
25
|
type: :runtime
|
36
26
|
version_requirements: *id001
|
@@ -42,11 +32,6 @@ dependencies:
|
|
42
32
|
requirements:
|
43
33
|
- - ~>
|
44
34
|
- !ruby/object:Gem::Version
|
45
|
-
hash: 55
|
46
|
-
segments:
|
47
|
-
- 0
|
48
|
-
- 10
|
49
|
-
- 0
|
50
35
|
version: 0.10.0
|
51
36
|
type: :runtime
|
52
37
|
version_requirements: *id002
|
@@ -58,11 +43,6 @@ dependencies:
|
|
58
43
|
requirements:
|
59
44
|
- - ~>
|
60
45
|
- !ruby/object:Gem::Version
|
61
|
-
hash: 3
|
62
|
-
segments:
|
63
|
-
- 1
|
64
|
-
- 0
|
65
|
-
- 10
|
66
46
|
version: 1.0.10
|
67
47
|
type: :development
|
68
48
|
version_requirements: *id003
|
@@ -74,11 +54,6 @@ dependencies:
|
|
74
54
|
requirements:
|
75
55
|
- - ~>
|
76
56
|
- !ruby/object:Gem::Version
|
77
|
-
hash: 27
|
78
|
-
segments:
|
79
|
-
- 2
|
80
|
-
- 5
|
81
|
-
- 0
|
82
57
|
version: 2.5.0
|
83
58
|
type: :development
|
84
59
|
version_requirements: *id004
|
@@ -90,11 +65,6 @@ dependencies:
|
|
90
65
|
requirements:
|
91
66
|
- - ~>
|
92
67
|
- !ruby/object:Gem::Version
|
93
|
-
hash: 23
|
94
|
-
segments:
|
95
|
-
- 0
|
96
|
-
- 2
|
97
|
-
- 0
|
98
68
|
version: 0.2.0
|
99
69
|
type: :development
|
100
70
|
version_requirements: *id005
|
@@ -108,8 +78,8 @@ extensions: []
|
|
108
78
|
extra_rdoc_files: []
|
109
79
|
|
110
80
|
files:
|
111
|
-
- lib/guard/cucumber/cucumber_formatter.rb
|
112
81
|
- lib/guard/cucumber/inspector.rb
|
82
|
+
- lib/guard/cucumber/notification_formatter.rb
|
113
83
|
- lib/guard/cucumber/runners/preload_runner.rb
|
114
84
|
- lib/guard/cucumber/runners/runner.rb
|
115
85
|
- lib/guard/cucumber/templates/Guardfile
|
@@ -131,25 +101,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
131
101
|
requirements:
|
132
102
|
- - ">="
|
133
103
|
- !ruby/object:Gem::Version
|
134
|
-
hash: 3
|
135
|
-
segments:
|
136
|
-
- 0
|
137
104
|
version: "0"
|
138
105
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
139
106
|
none: false
|
140
107
|
requirements:
|
141
108
|
- - ">="
|
142
109
|
- !ruby/object:Gem::Version
|
143
|
-
hash: 23
|
144
|
-
segments:
|
145
|
-
- 1
|
146
|
-
- 3
|
147
|
-
- 6
|
148
110
|
version: 1.3.6
|
149
111
|
requirements: []
|
150
112
|
|
151
113
|
rubyforge_project: guard-cucumber
|
152
|
-
rubygems_version: 1.6.
|
114
|
+
rubygems_version: 1.6.2
|
153
115
|
signing_key:
|
154
116
|
specification_version: 3
|
155
117
|
summary: Guard gem for Cucumber
|
@@ -1,33 +0,0 @@
|
|
1
|
-
require 'guard'
|
2
|
-
require 'cucumber/formatter/progress'
|
3
|
-
|
4
|
-
class CucumberFormatter < Cucumber::Formatter::Progress
|
5
|
-
|
6
|
-
def print_stats(features, profiles = [])
|
7
|
-
super features, profiles
|
8
|
-
|
9
|
-
icon, messages = '', []
|
10
|
-
[:failed, :skipped, :undefined, :pending, :passed].reverse.each do |status|
|
11
|
-
if step_mother.steps(status).any?
|
12
|
-
icon = icon_for(status)
|
13
|
-
messages << dump_count(step_mother.steps(status).length, 'step', status.to_s)
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
::Guard::Notifier.notify messages.reverse.join(', '), :title => 'Cucumber Results', :image => icon
|
18
|
-
end
|
19
|
-
|
20
|
-
private
|
21
|
-
|
22
|
-
def icon_for(status)
|
23
|
-
case status
|
24
|
-
when :passed
|
25
|
-
:success
|
26
|
-
when :pending, :undefined, :skipped
|
27
|
-
:pending
|
28
|
-
when :failed
|
29
|
-
:failed
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
end
|