vagrant-cucumber 0.0.3 → 0.0.4

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/CHANGELOG.md CHANGED
@@ -1,3 +1,12 @@
1
+ ## 0.0.4 (August 8, 2013)
2
+
3
+ * Added missing license detail to Gem spec
4
+ * Improve use of Given/When/Then in examples as per idiomatic Cucumber usage
5
+ * Refactor to get shell runner helper into the glue and out of the step definitions
6
+ * Added details on how to contribute to the project
7
+
8
+ With thanks to Matt Wynne (@mattwynne) for feedback
9
+
1
10
  ## 0.0.3 (July 26, 2013)
2
11
 
3
12
  * Update dependencies for vagrant-multiprovider-snap
data/CONTRIBUTING.md ADDED
@@ -0,0 +1,32 @@
1
+ Contributing to vagrant-cucumber
2
+ ================================
3
+
4
+ We welcome contributions to vagrant-cucumber, either to fix bugs or to add new features.
5
+
6
+ Patch workflow
7
+ --------------
8
+
9
+ * Fork the project.
10
+ * Create a branch for your changes.
11
+ * Don't modify the version number or changelog - we'll do that on release.
12
+ * Send a pull request
13
+
14
+
15
+ Working with the code
16
+ ---------------------
17
+
18
+ We use Bundler to manage the development environment with the latest version of Vagrant and its dependencies. Assuming you have Bundler installed, running ```bundle install``` in the project root will set the environment up for you.
19
+
20
+
21
+ Testing
22
+ -------
23
+
24
+ vagrant-cucumber is a reasonably thin glue layer, so doesn't need a whole lot of testing in its current incarnation. As long as the published example features work, you can be confident your changes haven't broken anything. To test this, run:
25
+
26
+ ```
27
+ cd example
28
+ bundle exec vagrant cucumber
29
+ ```
30
+
31
+ If you add any new behaviour to vagrant-cucumber, please add a feature file to
32
+ the ```example/``` folder which demonstrates how to use it.
data/example/Vagrantfile CHANGED
@@ -1,3 +1,5 @@
1
+ Vagrant.require_plugin('vagrant-cucumber')
2
+
1
3
  Vagrant.configure("2") do |config|
2
4
 
3
5
  config.vm.box = "precise64"
@@ -3,8 +3,8 @@ Feature: VM Running
3
3
  Scenario: Check we can run simple commands
4
4
 
5
5
  Given there is a running VM called "vm1"
6
- Then running the shell command `id` should succeed
7
- And the stdout of that shell command should match /vagrant/
6
+ When I run the shell command `id`
7
+ Then the stdout of that shell command should match /vagrant/
8
8
  And the stdout of that shell command should not match /root/
9
9
  And the stderr of that shell command should match /^$/
10
10
 
@@ -12,19 +12,18 @@ Feature: VM Running
12
12
  Scenario: Check we can run commands as root
13
13
 
14
14
  Given there is a running VM called "vm1"
15
- Then running the shell command `id` as root should succeed
16
- And the stdout of that shell command should match /root/
15
+ When I run the shell command `id` as root
16
+ Then the stdout of that shell command should match /root/
17
17
  And the stdout of that shell command should not match /vagrant/
18
18
 
19
19
 
20
20
  Scenario: Write a file so that we can check we're rolling back properly
21
21
 
22
22
  Given there is a running VM called "vm1"
23
-
24
23
  Then running the shell command `grep test /tmp/cucumber-written-file` should fail
25
24
 
26
- When I run the shell command `echo test > /tmp/cucumber-written-file`, it should succeed
27
- And running the shell command `grep test /tmp/cucumber-written-file` should succeed
25
+ When I run the shell command `echo test > /tmp/cucumber-written-file`
26
+ Then running the shell command `grep test /tmp/cucumber-written-file` should succeed
28
27
 
29
28
  When I roll back the VM called "vm1"
30
29
  Then running the shell command `grep test /tmp/cucumber-written-file` should fail
@@ -88,6 +88,54 @@ module VagrantPlugins
88
88
  end
89
89
  end
90
90
 
91
+
92
+ attr_reader :last_shell_command_status
93
+ attr_reader :last_shell_command_output
94
+
95
+ def execute_on_vm ( command, machine, opts = {} )
96
+
97
+ @last_shell_command_output = {
98
+ :stdout => '',
99
+ :stderr => '',
100
+ }
101
+
102
+ @last_shell_command_status = nil
103
+
104
+ machine.communicate.tap do |comm|
105
+
106
+ @last_shell_command_status = comm.execute(
107
+ command, {
108
+ :error_check => false,
109
+ :sudo => opts[:as_root]
110
+ }
111
+ ) do |type,data|
112
+
113
+ if @vagrant_cucumber_debug
114
+ puts "[:#{type}] #{data.chomp}"
115
+ end
116
+
117
+ @last_shell_command_output[type] += data
118
+
119
+ end
120
+
121
+ end
122
+
123
+ if opts[:expect_nonzero]
124
+
125
+ if @last_shell_command_status != 0
126
+ raise "Expected command to return non-zero, got #{@last_shell_command_status}"
127
+ end
128
+
129
+ elsif opts.has_key?(:expect)
130
+
131
+ if @last_shell_command_status != opts[:expect]
132
+ raise "Expected command to return #{opts[:expect]}, got #{@last_shell_command_status}"
133
+ end
134
+
135
+ end
136
+
137
+ end
138
+
91
139
  end
92
140
 
93
141
 
@@ -8,6 +8,8 @@ module VagrantPlugins
8
8
  module Cucumber
9
9
  class Plugin < Vagrant.plugin("2")
10
10
 
11
+ Vagrant.require_plugin("vagrant-multiprovider-snap")
12
+
11
13
  name "Cucumber"
12
14
 
13
15
  description <<-DESC
@@ -21,52 +21,40 @@ end
21
21
 
22
22
  Then /^(?:running|I run) the shell command `(.*)`(| as root)(#{VMRE})(?:|, it) should (succeed|fail)$/ do |command,as_root,vmre,condition|
23
23
 
24
- @last_shell_command_output = {
25
- :stdout => '',
26
- :stderr => '',
27
- }
28
-
29
- @last_shell_command_status = nil
30
-
31
- machine = vagrant_glue.identified_vm(vmre)
32
- machine.communicate.tap do |comm|
24
+ options = {
25
+ :as_root => ( as_root == ' as root' ),
26
+ :expect_non_zero => ( condition == 'fail' ),
27
+ }
33
28
 
34
- @last_shell_command_status = comm.execute(
35
- command, {
36
- :error_check => false,
37
- :sudo => as_root == ' as root',
38
- }
39
- ) do |type,data|
29
+ if condition == 'succeed'
30
+ options[:expect] = 0
31
+ end
40
32
 
41
- if @vagrant_cucumber_debug
42
- puts "[:#{type}] #{data.chomp}"
43
- end
33
+ vagrant_glue.execute_on_vm( command, vagrant_glue.identified_vm(vmre), options )
44
34
 
45
- @last_shell_command_output[type] += data
35
+ end
46
36
 
47
- end
37
+ Then /^(?:running|I run) the shell command `(.*)`(| as root)(#{VMRE})$/ do |command,as_root,vmre|
48
38
 
49
- end
39
+ options = {
40
+ :machine => vagrant_glue.identified_vm(vmre),
41
+ :as_root => ( as_root == ' as root' ),
42
+ }
50
43
 
51
- if @last_shell_command_status == 0 and condition == 'fail'
52
- raise "Expected command to fail, but got 0 exit status"
53
- end
54
-
55
- if @last_shell_command_status != 0 and condition == 'succeed'
56
- raise "Expected command to succeed but got #{@last_shell_command_status} exit status"
57
- end
44
+ vagrant_glue.execute_on_vm( command, vagrant_glue.identified_vm(vmre), options )
58
45
 
59
46
  end
60
47
 
48
+
61
49
  Then /^the (.+) of that shell command should(| not) match (\/.+\/)$/ do |stream,condition,re|
62
50
 
63
51
  stream.downcase!
64
52
 
65
- unless @last_shell_command_output.has_key?( stream.to_sym )
66
- raise "@last_shell_command_output structure has no #{stream}"
53
+ unless vagrant_glue.last_shell_command_output.has_key?( stream.to_sym )
54
+ raise "vagrant_glue.last_shell_command_output structure has no #{stream}"
67
55
  end
68
56
 
69
- re_result = ( @last_shell_command_output[stream.to_sym] =~ re.to_regexp )
57
+ re_result = ( vagrant_glue.last_shell_command_output[stream.to_sym] =~ re.to_regexp )
70
58
  re_matched = !re_result.nil?
71
59
 
72
60
  should_match = condition != ' not'
@@ -1,5 +1,5 @@
1
1
  module VagrantPlugins
2
2
  module Cucumber
3
- VERSION = "0.0.3"
3
+ VERSION = "0.0.4"
4
4
  end
5
5
  end
@@ -10,6 +10,7 @@ Gem::Specification.new do |s|
10
10
  s.homepage = "https://github.com/scalefactory/vagrant-cucumber"
11
11
  s.summary = %q{Cucumber support for Vagrant}
12
12
  s.description = %q{This plugin makes it possible for Cucumber to interact with Vagrant}
13
+ s.license = 'MIT'
13
14
 
14
15
  s.rubyforge_project = "vagrant-cucumber"
15
16
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vagrant-cucumber
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
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: 2013-07-26 00:00:00.000000000 Z
12
+ date: 2013-08-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: cucumber
16
- requirement: &70119409963120 !ruby/object:Gem::Requirement
16
+ requirement: &70291725096880 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 1.3.2
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70119409963120
24
+ version_requirements: *70291725096880
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: vagrant-multiprovider-snap
27
- requirement: &70119409962620 !ruby/object:Gem::Requirement
27
+ requirement: &70291725111160 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 0.0.4
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70119409962620
35
+ version_requirements: *70291725111160
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: to_regexp
38
- requirement: &70119409962160 !ruby/object:Gem::Requirement
38
+ requirement: &70291725109880 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,7 +43,7 @@ dependencies:
43
43
  version: 0.2.1
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70119409962160
46
+ version_requirements: *70291725109880
47
47
  description: This plugin makes it possible for Cucumber to interact with Vagrant
48
48
  email:
49
49
  - jon@scalefactory.com
@@ -52,6 +52,7 @@ extensions: []
52
52
  extra_rdoc_files: []
53
53
  files:
54
54
  - CHANGELOG.md
55
+ - CONTRIBUTING.md
55
56
  - LICENSE
56
57
  - README.md
57
58
  - example/Vagrantfile
@@ -70,7 +71,8 @@ files:
70
71
  - lib/vagrant-cucumber/version.rb
71
72
  - vagrant-cucumber.gemspec
72
73
  homepage: https://github.com/scalefactory/vagrant-cucumber
73
- licenses: []
74
+ licenses:
75
+ - MIT
74
76
  post_install_message:
75
77
  rdoc_options: []
76
78
  require_paths: