aruba 0.5.0 → 0.5.1

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/.gitignore CHANGED
@@ -12,6 +12,7 @@ tmtags
12
12
 
13
13
  ## VIM
14
14
  *.swp
15
+ tags
15
16
 
16
17
  ## PROJECT::GENERAL
17
18
  coverage
@@ -1,10 +1,11 @@
1
+ language: ruby
1
2
  rvm:
2
3
  - 1.9.3
3
4
  - 1.9.2
4
5
  - 1.8.7
5
6
  - ree
6
7
  - jruby-18mode
7
- - jruby-19mode
8
+ # - jruby-19mode
8
9
  # whitelist
9
10
  branches:
10
11
  only:
data/History.md CHANGED
@@ -1,3 +1,7 @@
1
+ ## [v0.5.1](https://github.com/cucumber/aruba/compare/v0.5..v0.5.1)
2
+ * Individual timeout settings when running commands (#124 Jarl Friis)
3
+ * Varous fixes for JRuby tests, should now work on more versions of JRuby
4
+
1
5
  ## [v0.5](https://github.com/cucumber/aruba/compare/v0.4.10..v0.5)
2
6
  * Add #with_file_content to the DSL (#110 Pavel Argentov)
3
7
  * Make JRuby performance tweaks optional (#102 Taylor Carpenter, #125 Andy Lindeman)
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- [![Build Status](https://secure.travis-ci.org/cucumber/aruba.png)](http://travis-ci.org/cucumber/aruba)
1
+ [![Build Status](https://secure.travis-ci.org/cucumber/aruba.png)](http://travis-ci.org/cucumber/aruba) [![Code Climate](https://codeclimate.com/badge.png)](https://codeclimate.com/github/cucumber/aruba)
2
2
 
3
3
  Aruba is Cucumber extension for Command line applications written in any programming language. Features at a glance:
4
4
 
@@ -71,7 +71,7 @@ Aruba defines several tags that you can put on on individual scenarios, or on a
71
71
 
72
72
  To get more information on what Aruba is doing, use these tags:
73
73
 
74
- * `@announce-cmd` - See what command is is run
74
+ * `@announce-cmd` - See what command is run
75
75
  * `@announce-stdout` - See the stdout
76
76
  * `@announce-stderr` - See the stderr
77
77
  * `@announce-dir` - See the current directory
@@ -119,7 +119,7 @@ or setting a hook like this example:
119
119
  ```
120
120
 
121
121
  *Note* - no conflict resolution on the JAVA/JRuby environment options is
122
- done; only merging. For more complex settings please manually set the
122
+ done; only merging. For more complex settings please manually set the
123
123
  environment variables in the hook or externally.
124
124
 
125
125
  A larger process timeout for java may be needed
data/Rakefile CHANGED
@@ -7,9 +7,10 @@ Bundler::GemHelper.install_tasks
7
7
  require 'cucumber/rake/task'
8
8
 
9
9
  Cucumber::Rake::Task.new do |t|
10
- opts = defined?(JRUBY_VERSION) ? %w{--tags ~@jruby} : []
11
- opts += %w{--tags ~@fails-on-travis} if ENV['TRAVIS']
12
- t.cucumber_opts = opts
10
+ end
11
+
12
+ Cucumber::Rake::Task.new(:cucumber_wip) do |t|
13
+ t.cucumber_opts = "-p wip"
13
14
  end
14
15
 
15
16
  require 'rspec/core/rake_task'
@@ -20,6 +21,6 @@ RSpec::Core::RakeTask.new do |spec|
20
21
  end
21
22
 
22
23
  desc "Run tests, both RSpec and Cucumber"
23
- task :test => [:spec, :cucumber]
24
+ task :test => [:spec, :cucumber, :cucumber_wip]
24
25
 
25
26
  task :default => :test
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = 'aruba'
5
- s.version = '0.5.0'
5
+ s.version = '0.5.1'
6
6
  s.authors = ["Aslak Hellesøy", "David Chelimsky", "Mike Sassak", "Matt Wynne"]
7
7
  s.description = 'CLI Steps for Cucumber, hand-crafted for you in Aruba'
8
8
  s.summary = "aruba-#{s.version}"
@@ -10,8 +10,7 @@ Gem::Specification.new do |s|
10
10
  s.homepage = 'http://github.com/cucumber/aruba'
11
11
 
12
12
  s.add_runtime_dependency 'cucumber', '>= 1.1.1'
13
- s.add_runtime_dependency 'childprocess', '= 0.2.3'
14
- s.add_runtime_dependency 'ffi', '>= 1.0.11'
13
+ s.add_runtime_dependency 'childprocess', '~> 0.3.6'
15
14
  s.add_runtime_dependency 'rspec-expectations', '>= 2.7.0'
16
15
  s.add_development_dependency 'bcat', '>= 0.6.1'
17
16
  s.add_development_dependency 'rdiscount', '>= 1.6.8'
@@ -1,2 +1,9 @@
1
- default: --tags ~@wip
2
- wip: --wip --tags @wip
1
+ <%
2
+ std_opts = "--color --tags ~@wip"
3
+ std_opts << " --tags ~@wip-jruby" if defined?(JRUBY_VERSION)
4
+
5
+ wip_opts = "--color --tags @wip:3"
6
+ wip_opts = "--color --tags @wip:3,@wip-jruby:3" if defined?(JRUBY_VERSION)
7
+ %>
8
+ default: <%= std_opts %>
9
+ wip: --wip <%= wip_opts %>
@@ -5,38 +5,26 @@ Feature: exit statuses
5
5
  I want to use the "the exit status should be" step
6
6
 
7
7
  Scenario: exit status of 0
8
- When I run `ruby -h`
8
+ When I run `true`
9
9
  Then the exit status should be 0
10
10
 
11
- Scenario: exit status of 0 with `
12
- When I run `ruby -h`
13
- Then the exit status should be 0
14
-
15
- Scenario: Not explicitly exiting at all
16
- When I run `ruby -e '42'`
17
- Then the exit status should be 0
18
-
19
11
  Scenario: non-zero exit status
20
- When I run `ruby -e 'exit 56'`
21
- Then the exit status should be 56
12
+ When I run `false`
13
+ Then the exit status should be 1
22
14
  And the exit status should not be 0
23
15
 
24
16
  Scenario: Successfully run something
25
- When I successfully run `ruby -e 'exit 0'`
17
+ When I successfully run `true`
26
18
 
27
- Scenario: Successfully run something with `
28
- When I successfully run `ruby -e 'exit 0'`
19
+ Scenario: Successfully run something for a long time
20
+ Given The default aruba timeout is 0 seconds
21
+ When I successfully run `ruby -e 'sleep 1'` for up to 2 seconds
29
22
 
30
- Scenario: Unsuccessfully run something
31
- When I do aruba I successfully run `ruby -e 'exit 10'`
32
- Then aruba should fail with "Exit status was 10"
23
+ Scenario: Unsuccessfully run something that takes too long
24
+ Given The default aruba timeout is 0 seconds
25
+ When I do aruba I successfully run `ruby -e 'sleep 1'`
26
+ Then aruba should fail with "process still alive after 0 seconds"
33
27
 
34
- @posix
35
- Scenario: Try to run something that doesn't exist
36
- When I run `does_not_exist`
37
- Then the exit status should be 1
38
-
39
- @posix
40
- Scenario: Try to run something that doesn't exist with `
41
- When I run `does_not_exist`
42
- Then the exit status should be 1
28
+ Scenario: Unsuccessfully run something
29
+ When I do aruba I successfully run `false`
30
+ Then aruba should fail with ""
@@ -6,16 +6,16 @@ Feature: file system commands
6
6
 
7
7
  Scenario: create a dir
8
8
  Given a directory named "foo/bar"
9
- When I run `ruby -e "puts test ?d, 'foo'"`
10
- Then the stdout should contain "true"
9
+ When I run `file foo/bar`
10
+ Then the stdout should contain "foo/bar: directory"
11
11
 
12
12
  Scenario: create a file
13
- Given a file named "foo/bar/example.rb" with:
13
+ Given a file named "foo/bar/example.txt" with:
14
14
  """
15
- puts "hello world"
15
+ hello world
16
16
  """
17
- When I run `ruby foo/bar/example.rb`
18
- Then the output should contain "hello world"
17
+ When I run `cat foo/bar/example.txt`
18
+ Then the output should contain exactly "hello world"
19
19
 
20
20
  Scenario: create a fixed sized file
21
21
  Given a 1048576 byte file named "test.txt"
@@ -30,22 +30,17 @@ Feature: file system commands
30
30
  - One
31
31
  - Two
32
32
 
33
- Given a file named "foo/bar/example.feature" with:
34
- """
35
- Feature: Example
36
- Hello World
33
+ Given a file named "foo/bar/example.txt" with:
37
34
  """
38
- And a file named "foo/bar/example.rb" with:
39
- """
40
- puts "\e[31mhello world\e[0m"
41
-
35
+ hello world
36
+
42
37
  """
43
- When I append to "foo/bar/example.rb" with:
38
+ When I append to "foo/bar/example.txt" with:
44
39
  """
45
- puts "this was appended"
46
-
40
+ this was appended
41
+
47
42
  """
48
- When I run `ruby foo/bar/example.rb`
43
+ When I run `cat foo/bar/example.txt`
49
44
  Then the stdout should contain "hello world"
50
45
  And the stdout should contain "this was appended"
51
46
 
@@ -55,28 +50,23 @@ Feature: file system commands
55
50
  Then the file "thedir/thefile" should contain "xy"
56
51
 
57
52
  Scenario: clean up files generated in previous scenario
58
- When I run `ruby foo/bar/example.rb`
59
- Then the exit status should be 1
60
- And the output should contain "No such file or directory -- foo/bar/example.rb"
53
+ Then the file "foo/bar/example.txt" should not exist
61
54
 
62
55
  Scenario: change to a subdir
63
- Given a file named "foo/bar/example.rb" with:
56
+ Given a file named "foo/bar/example.txt" with:
64
57
  """
65
- puts "hello world"
58
+ hello world
59
+
66
60
  """
67
61
  When I cd to "foo/bar"
68
- And I run `ruby example.rb`
62
+ And I run `cat example.txt`
69
63
  Then the output should contain "hello world"
70
64
 
71
65
  Scenario: Reset current directory from previous scenario
72
- When I run `ruby example.rb`
73
- Then the exit status should be 1
66
+ When I run `pwd`
67
+ Then the output should match /\057tmp\057aruba$/
74
68
 
75
69
  Scenario: Holler if cd to bad dir
76
- Given a file named "foo/bar/example.rb" with:
77
- """
78
- puts "hello world"
79
- """
80
70
  When I do aruba I cd to "foo/nonexistant"
81
71
  Then aruba should fail with "tmp/aruba/foo/nonexistant is not a directory"
82
72
 
@@ -5,19 +5,19 @@ Feature: Flushing output
5
5
  I want to make sure that large amounts of output aren't buffered
6
6
 
7
7
  Scenario: A little output
8
- When I run `ruby -e 'puts :a.to_s * 256'`
8
+ When I run `bash -c 'for ((c=0; c<256; c = c+1)); do echo -n "a"; done'`
9
9
  Then the output should contain "a"
10
10
  And the output should be 256 bytes long
11
11
  And the exit status should be 0
12
12
 
13
13
  Scenario: Tons of output
14
- When I run `ruby -e 'puts :a.to_s * 65536'`
14
+ When I run `bash -c 'for ((c=0; c<65536; c = c+1)); do echo -n "a"; done'`
15
15
  Then the output should contain "a"
16
16
  And the output should be 65536 bytes long
17
17
  And the exit status should be 0
18
18
 
19
19
  Scenario: Tons of interactive output
20
- When I run `ruby -e 'len = gets.chomp; puts :a.to_s * len.to_i'` interactively
20
+ When I run `bash -c 'read size; for ((c=0; c<$size; c = c+1)); do echo -n "a"; done'` interactively
21
21
  And I type "65536"
22
22
  Then the output should contain "a"
23
23
  And the output should be 65536 bytes long
@@ -4,6 +4,7 @@ Feature: Interactive process control
4
4
  As a developer using Cucumber
5
5
  I want to use the interactive session steps
6
6
 
7
+ @wip-jruby
7
8
  Scenario: Running ruby interactively
8
9
  Given a file named "echo.rb" with:
9
10
  """
@@ -20,14 +21,14 @@ Feature: Interactive process control
20
21
  dlrow ,olleh
21
22
  """
22
23
 
23
- @posix @fails-on-travis
24
+ @posix
24
25
  Scenario: Running a native binary interactively
25
- When I run `bc -q` interactively
26
- And I type "4 + 3"
27
- And I type "quit"
26
+ When I run `cat` interactively
27
+ And I type "Hello, world"
28
+ And I type ""
28
29
  Then the output should contain:
29
30
  """
30
- 7
31
+ Hello, world
31
32
  """
32
33
 
33
34
  @posix
@@ -4,37 +4,24 @@ Feature: Output
4
4
  As a developer using Cucumber
5
5
  I want to use the "the output should contain" step
6
6
 
7
- @posix
8
- Scenario: Run unknown command
9
- When I run `neverever gonna work`
10
- Then the output should contain:
11
- """
12
- No such file or directory - neverever
13
- """
14
-
15
7
  @posix
16
8
  Scenario: Detect subset of one-line output
17
- When I run `ruby -e 'puts \"hello world\"'`
18
- Then the output should contain "hello world"
19
-
20
- @posix
21
- Scenario: Detect subset of one-line output
22
- When I run `echo 'hello world'`
9
+ When I run `printf 'hello world'`
23
10
  Then the output should contain "hello world"
24
11
 
25
12
  Scenario: Detect absence of one-line output
26
- When I run `ruby -e 'puts \"hello world\"'`
13
+ When I run `printf "hello world"`
27
14
  Then the output should not contain "good-bye"
28
15
 
29
16
  Scenario: Detect subset of multiline output
30
- When I run `ruby -e 'puts \"hello\\nworld\"'`
17
+ When I run `printf "hello\nworld"`
31
18
  Then the output should contain:
32
19
  """
33
20
  hello
34
21
  """
35
22
 
36
- Scenario: Detect subset of multiline output
37
- When I run `ruby -e 'puts \"hello\\nworld\"'`
23
+ Scenario: Detect absence of multiline output
24
+ When I run `printf "hello\nworld"`
38
25
  Then the output should not contain:
39
26
  """
40
27
  good-bye
@@ -42,51 +29,48 @@ Feature: Output
42
29
 
43
30
  @posix
44
31
  Scenario: Detect exact one-line output
45
- When I run `ruby -e 'puts \"hello world\"'`
32
+ When I run `printf "hello world"`
46
33
  Then the output should contain exactly:
47
34
  """
48
35
  hello world
49
-
50
36
  """
51
37
 
52
38
  @ansi
53
39
  @posix
54
40
  Scenario: Detect exact one-line output with ANSI output
55
- When I run `ruby -e 'puts \"\e[36mhello world\e[0m\"'`
41
+ When I run `printf "\e[36mhello world\e[0m"`
56
42
  Then the output should contain exactly:
57
43
  """
58
44
  \e[36mhello world\e[0m
59
-
60
45
  """
61
46
 
62
47
  @posix
63
48
  Scenario: Detect exact one-line output with ANSI output stripped by default
64
- When I run `ruby -e 'puts \"\e[36mhello world\e[0m\"'`
49
+ When I run `printf "\e[36mhello world\e[0m"`
65
50
  Then the output should contain exactly:
66
51
  """
67
52
  hello world
68
-
69
53
  """
54
+
70
55
  @posix
71
56
  Scenario: Detect exact multiline output
72
- When I run `ruby -e 'puts "hello\nworld"'`
57
+ When I run `printf "hello\nworld"`
73
58
  Then the output should contain exactly:
74
59
  """
75
60
  hello
76
61
  world
77
-
78
62
  """
79
63
 
80
64
  @announce
81
65
  Scenario: Detect subset of one-line output with regex
82
- When I run `ruby --version`
66
+ When I run `printf "hello, ruby"`
83
67
  Then the output should contain "ruby"
84
- And the output should match /ruby ([\d]+\.[\d]+\.[\d]+)(\w*\d*)? \(.*$/
68
+ And the output should match /^hello(, world)?/
85
69
 
86
70
  @announce
87
71
  @posix
88
72
  Scenario: Detect subset of multiline output with regex
89
- When I run `ruby -e 'puts "hello\nworld\nextra line1\nextra line2\nimportant line"'`
73
+ When I run `printf "hello\nworld\nextra line1\nextra line2\nimportant line"`
90
74
  Then the output should match:
91
75
  """
92
76
  he..o
@@ -97,14 +81,14 @@ Feature: Output
97
81
 
98
82
  @announce
99
83
  Scenario: Negative matching of one-line output with regex
100
- When I run `ruby --version`
84
+ When I run `printf "hello, ruby"`
101
85
  Then the output should contain "ruby"
102
86
  And the output should not match /ruby is a better perl$/
103
87
 
104
88
  @announce
105
89
  @posix
106
90
  Scenario: Negative matching of multiline output with regex
107
- When I run `ruby -e 'puts "hello\nworld\nextra line1\nextra line2\nimportant line"'`
91
+ When I run `printf "hello\nworld\nextra line1\nextra line2\nimportant line"`
108
92
  Then the output should not match:
109
93
  """
110
94
  ruby
@@ -117,7 +101,7 @@ Feature: Output
117
101
  @announce
118
102
  @posix
119
103
  Scenario: Match passing exit status and partial output
120
- When I run `ruby -e 'puts "hello\nworld"'`
104
+ When I run `printf "hello\nworld"`
121
105
  Then it should pass with:
122
106
  """
123
107
  hello
@@ -125,17 +109,16 @@ Feature: Output
125
109
 
126
110
  @posix
127
111
  Scenario: Match passing exit status and exact output
128
- When I run `ruby -e 'puts "hello\nworld"'`
112
+ When I run `printf "hello\nworld"`
129
113
  Then it should pass with exactly:
130
114
  """
131
115
  hello
132
116
  world
133
-
134
117
  """
135
118
 
136
119
  @announce-stdout
137
120
  Scenario: Match failing exit status and partial output
138
- When I run `ruby -e 'puts \"hello\\nworld\";exit 99'`
121
+ When I run `bash -c '(printf "hello\nworld";exit 99)'`
139
122
  Then it should fail with:
140
123
  """
141
124
  hello
@@ -143,18 +126,17 @@ Feature: Output
143
126
 
144
127
  @posix
145
128
  Scenario: Match failing exit status and exact output
146
- When I run `ruby -e 'puts "hello\nworld";exit 99'`
129
+ When I run `bash -c '(printf "hello\nworld";exit 99)'`
147
130
  Then it should fail with exactly:
148
131
  """
149
132
  hello
150
133
  world
151
-
152
134
  """
153
135
 
154
136
  @announce-stdout
155
137
  @posix
156
138
  Scenario: Match failing exit status and output with regex
157
- When I run `ruby -e 'puts \"hello\\nworld\";exit 99'`
139
+ When I run `bash -c '(printf "hello\nworld";exit 99)'`
158
140
  Then it should fail with regex:
159
141
  """
160
142
  hello\s*world
@@ -163,13 +145,13 @@ Feature: Output
163
145
  @announce-cmd
164
146
  @posix
165
147
  Scenario: Match output in stdout
166
- When I run `ruby -e 'puts \"hello\\nworld\"'`
148
+ When I run `printf "hello\nworld"`
167
149
  Then the stdout should contain "hello"
168
150
  Then the stderr should not contain "hello"
169
151
 
170
152
  @announce
171
153
  Scenario: Match output on several lines
172
- When I run `ruby -e 'puts %{GET /}'`
154
+ When I run `printf 'GET /'`
173
155
  Then the stdout should contain:
174
156
  """
175
157
  GET /
@@ -177,91 +159,93 @@ Feature: Output
177
159
 
178
160
  @posix
179
161
  Scenario: Match output on several lines using quotes
180
- When I run `ruby -e 'puts %{GET "/"}'`
162
+ When I run `printf 'GET "/"'`
181
163
  Then the stdout should contain:
182
164
  """
183
165
  GET "/"
184
166
  """
185
167
 
186
- @posix
187
- Scenario: Match output in stdout
188
- When I run `ruby -e 'puts \"hello\\nworld\"'`
189
- Then the stdout should contain "hello"
190
- Then the stderr should not contain "hello"
191
-
192
-
193
168
  @posix
194
169
  Scenario: Detect output from all processes
195
- When I run `ruby -e 'puts \"hello world!\"'`
196
- And I run `ruby -e 'puts gets.chomp.reverse'` interactively
197
- And I type "hello"
170
+ When I run `printf "hello world!\n"`
171
+ And I run `cat` interactively
172
+ And I type "hola"
173
+ And I type ""
198
174
  Then the output should contain exactly:
199
175
  """
200
176
  hello world!
201
- olleh
177
+ hola
202
178
 
203
179
  """
204
180
 
205
181
  @posix
206
182
  Scenario: Detect stdout from all processes
207
- When I run `ruby -e 'puts \"hello world!\"'`
208
- And I run `ruby -e 'puts gets.chomp.reverse'` interactively
209
- And I type "hello"
183
+ When I run `printf "hello world!\n"`
184
+ And I run `cat` interactively
185
+ And I type "hola"
186
+ And I type ""
210
187
  Then the stdout should contain:
211
188
  """
212
189
  hello world!
213
- olleh
214
- """
215
- And the stderr should not contain:
216
- """
217
- hello world!
218
- olleh
190
+ hola
191
+
219
192
  """
193
+ And the stderr should not contain anything
220
194
 
221
195
  @posix
222
196
  Scenario: Detect stderr from all processes
223
- When I run `ruby -e 'STDERR.puts \"hello world!\"'`
224
- And I run `ruby -e 'STDERR.puts gets.chomp.reverse'` interactively
225
- And I type "hello"
197
+ When I run `bash -c 'printf "hello world!\n" >&2'`
198
+ And I run `bash -c 'cat >&2 '` interactively
199
+ And I type "hola"
200
+ And I type ""
226
201
  Then the stderr should contain:
227
202
  """
228
203
  hello world!
229
- olleh
230
- """
231
- And the stdout should not contain:
232
- """
233
- hello world!
234
- olleh
204
+ hola
235
205
  """
206
+ And the stdout should not contain anything
236
207
 
237
208
  Scenario: Detect output from named source
238
- When I run `ruby -e 'puts :simple'`
239
- And I run `ruby -e 'puts gets.chomp'` interactively
209
+ When I run `printf 'simple'`
210
+ And I run `cat` interactively
240
211
  And I type "interactive"
241
- Then the output from "ruby -e 'puts :simple'" should contain "simple"
242
- And the output from "ruby -e 'puts gets.chomp'" should not contain "simple"
212
+ And I type ""
213
+ Then the output from "printf 'simple'" should contain "simple"
214
+ And the output from "printf 'simple'" should contain exactly "simple"
215
+ And the output from "printf 'simple'" should contain exactly:
216
+ """
217
+ simple
218
+ """
219
+ And the output from "cat" should not contain "simple"
243
220
 
244
221
  Scenario: Detect stdout from named source
245
- When I run `ruby -e 'puts :hello'`
246
- And I run `ruby -e 'puts :goodbye'`
247
- Then the stdout from "ruby -e 'puts :hello'" should contain "hello"
248
- And the stderr from "ruby -e 'puts :hello'" should not contain "hello"
249
- And the stdout from "ruby -e 'puts :goodbye'" should not contain "hello"
222
+ When I run `printf 'hello'`
223
+ And I run `printf 'goodbye'`
224
+ Then the stdout from "printf 'hello'" should contain "hello"
225
+ And the stdout from "printf 'hello'" should contain exactly "hello"
226
+ And the stdout from "printf 'hello'" should contain exactly:
227
+ """
228
+ hello
229
+ """
230
+ And the stderr from "printf 'hello'" should not contain "hello"
231
+ And the stdout from "printf 'goodbye'" should not contain "hello"
250
232
 
251
233
  Scenario: Detect stderr from named source
252
- When I run `ruby -e 'STDERR.puts :hello'`
253
- And I run `ruby -e 'puts :goodbye'`
254
- Then the stderr from "ruby -e 'STDERR.puts :hello'" should contain "hello"
255
- And the stdout from "ruby -e 'STDERR.puts :hello'" should not contain "hello"
256
- And the stderr from "ruby -e 'puts :goodbye'" should not contain "hello"
257
-
258
- @wip
259
- Scenario: Detect output from named source with custom name
234
+ When I run `bash -c 'printf hello >&2'`
235
+ And I run `printf goodbye`
236
+ Then the stderr from "bash -c 'printf hello >&2'" should contain "hello"
237
+ And the stderr from "bash -c 'printf hello >&2'" should contain exactly "hello"
238
+ And the stderr from "bash -c 'printf hello >&2'" should contain exactly:
239
+ """
240
+ hello
241
+ """
242
+ And the stdout from "bash -c 'printf hello >&2'" should not contain "hello"
243
+ And the stderr from "printf goodbye" should not contain "hello"
260
244
 
261
245
  Scenario: Detect second output from named source with custom name
262
246
  When I set env variable "ARUBA_TEST_VAR" to "first"
263
- And I run `ruby -e 'puts ENV[%q(ARUBA_TEST_VAR)]'`
264
- Then the output from "ruby -e 'puts ENV[%q(ARUBA_TEST_VAR)]'" should contain "first"
247
+ And I run `bash -c 'printf $ARUBA_TEST_VAR'`
248
+ Then the output from "bash -c 'printf $ARUBA_TEST_VAR'" should contain "first"
265
249
  When I set env variable "ARUBA_TEST_VAR" to "second"
266
- And I run `ruby -e 'puts ENV[%q(ARUBA_TEST_VAR)]'`
267
- Then the output from "ruby -e 'puts ENV[%q(ARUBA_TEST_VAR)]'" should contain "second"
250
+ And I run `bash -c 'printf $ARUBA_TEST_VAR'`
251
+ Then the output from "bash -c 'printf $ARUBA_TEST_VAR'" should contain "second"
@@ -24,5 +24,5 @@ Then /^the following step should fail with Spec::Expectations::ExpectationNotMet
24
24
  end
25
25
 
26
26
  Then /^the output should be (\d+) bytes long$/ do |length|
27
- all_output.chomp.length.should == length.to_i
27
+ all_output.length.should == length.to_i
28
28
  end
@@ -0,0 +1,5 @@
1
+ if RUBY_PLATFORM == 'java'
2
+ Before do
3
+ @aruba_timeout_seconds = 10
4
+ end
5
+ end
@@ -23,7 +23,7 @@ module Aruba
23
23
  end
24
24
 
25
25
  def dirs
26
- @dirs ||= ['tmp/aruba']
26
+ @dirs ||= ['tmp', 'aruba']
27
27
  end
28
28
 
29
29
  def write_file(file_name, file_content)
@@ -278,7 +278,8 @@ module Aruba
278
278
  processes.collect{ |_, process| process }
279
279
  end
280
280
 
281
- def run(cmd)
281
+ def run(cmd, timeout = nil)
282
+ timeout ||= exit_timeout
282
283
  @commands ||= []
283
284
  @commands << cmd
284
285
 
@@ -290,7 +291,7 @@ module Aruba
290
291
  announcer.dir(Dir.pwd)
291
292
  announcer.cmd(cmd)
292
293
 
293
- process = Process.new(cmd, exit_timeout, io_wait)
294
+ process = Process.new(cmd, timeout, io_wait)
294
295
  register_process(cmd, process)
295
296
  process.run!
296
297
 
@@ -310,8 +311,8 @@ module Aruba
310
311
  @aruba_io_wait_seconds || DEFAULT_IO_WAIT_SECONDS
311
312
  end
312
313
 
313
- def run_simple(cmd, fail_on_error=true)
314
- run(cmd) do |process|
314
+ def run_simple(cmd, fail_on_error=true, timeout = nil)
315
+ run(cmd, timeout) do |process|
315
316
  stop_process(process)
316
317
  end
317
318
  @timed_out = last_exit_status.nil?
@@ -323,11 +324,17 @@ module Aruba
323
324
  end
324
325
 
325
326
  def type(input)
327
+ return eot if "" == input ##If on Windows it is actually  (26 == 0x1A)
326
328
  _write_interactive(_ensure_newline(input))
327
329
  end
328
330
 
331
+ def eot
332
+ @interactive.stdin.close
333
+ end
334
+
329
335
  def _write_interactive(input)
330
336
  @interactive.stdin.write(input)
337
+ @interactive.stdin.flush
331
338
  end
332
339
 
333
340
  def _read_interactive
@@ -4,6 +4,10 @@ require 'aruba/reporting'
4
4
 
5
5
  World(Aruba::Api)
6
6
 
7
+ Given /The default aruba timeout is (\d+) seconds/ do |seconds|
8
+ @aruba_timeout_seconds = seconds.to_i
9
+ end
10
+
7
11
  Given /^I'm using a clean gemset "([^"]*)"$/ do |gemset|
8
12
  use_clean_gemset(gemset)
9
13
  end
@@ -62,8 +66,10 @@ When /^I successfully run "(.*)"$/ do |cmd|
62
66
  run_simple(unescape(cmd))
63
67
  end
64
68
 
65
- When /^I successfully run `([^`]*)`$/ do |cmd|
66
- run_simple(unescape(cmd))
69
+ ## I successfully run `echo -n "Hello"`
70
+ ## I successfully run `sleep 29` for up to 30 seconds
71
+ When /^I successfully run `(.*?)`(?: for up to (\d+) seconds)?$/ do |cmd, secs|
72
+ run_simple(unescape(cmd), true, secs && secs.to_i)
67
73
  end
68
74
 
69
75
  When /^I run "([^"]*)" interactively$/ do |cmd|
@@ -112,12 +118,16 @@ Then /^the output should not contain:$/ do |unexpected|
112
118
  assert_no_partial_output(unexpected, all_output)
113
119
  end
114
120
 
115
- Then /^the output should contain exactly "([^"]*)"$/ do |expected|
116
- assert_exact_output(expected, all_output)
121
+ ## the output should contain exactly "output"
122
+ ## the output from `echo -n "Hello"` should contain exactly "Hello"
123
+ Then /^the output(?: from "(.*?)")? should contain exactly "(.*?)"$/ do |cmd, expected|
124
+ assert_exact_output(expected, cmd ? output_from(cmd) : all_output)
117
125
  end
118
126
 
119
- Then /^the output should contain exactly:$/ do |expected|
120
- assert_exact_output(expected, all_output)
127
+ ## the output should contain exactly:
128
+ ## the output from `echo -n "Hello"` should contain exactly:
129
+ Then /^the output(?: from "(.*?)")? should contain exactly:$/ do |cmd, expected|
130
+ assert_exact_output(expected, cmd ? output_from(cmd) : all_output)
121
131
  end
122
132
 
123
133
  # "the output should match" allows regex in the partial_output, if
@@ -162,28 +172,52 @@ Then /^it should (pass|fail) with regexp?:$/ do |pass_fail, expected|
162
172
  assert_success(pass_fail == 'pass')
163
173
  end
164
174
 
165
- Then /^the stderr should contain "([^"]*)"$/ do |expected|
166
- assert_partial_output(expected, all_stderr)
167
- end
168
-
169
- Then /^the stderr should contain:$/ do |expected|
170
- assert_partial_output(expected, all_stderr)
171
- end
172
-
173
- Then /^the stderr should contain exactly:$/ do |expected|
174
- assert_exact_output(expected, all_stderr)
175
+ ## the stderr should contain "hello"
176
+ ## the stderr from "echo -n 'Hello'" should contain "hello"
177
+ ## the stderr should contain exactly:
178
+ ## the stderr from "echo -n 'Hello'" should contain exactly:
179
+ Then /^the stderr(?: from "(.*?)")? should contain( exactly)? "(.*?)"$/ do |cmd, exact, expected|
180
+ if exact
181
+ assert_exact_output(expected, cmd ? stderr_from(cmd) : all_stderr)
182
+ else
183
+ assert_partial_output(expected, cmd ? stderr_from(cmd) : all_stderr)
184
+ end
175
185
  end
176
186
 
177
- Then /^the stdout should contain "([^"]*)"$/ do |expected|
178
- assert_partial_output(expected, all_stdout)
187
+ ## the stderr should contain:
188
+ ## the stderr from "echo -n 'Hello'" should contain:
189
+ ## the stderr should contain exactly:
190
+ ## the stderr from "echo -n 'Hello'" should contain exactly:
191
+ Then /^the stderr(?: from "(.*?)")? should contain( exactly)?:$/ do |cmd, exact, expected|
192
+ if exact
193
+ assert_exact_output(expected, cmd ? stderr_from(cmd) : all_stderr)
194
+ else
195
+ assert_partial_output(expected, cmd ? stderr_from(cmd) : all_stderr)
196
+ end
179
197
  end
180
198
 
181
- Then /^the stdout should contain:$/ do |expected|
182
- assert_partial_output(expected, all_stdout)
199
+ ## the stdout should contain "hello"
200
+ ## the stdout from "echo -n 'Hello'" should contain "hello"
201
+ ## the stdout should contain exactly:
202
+ ## the stdout from "echo -n 'Hello'" should contain exactly:
203
+ Then /^the stdout(?: from "(.*?)")? should contain( exactly)? "(.*?)"$/ do |cmd, exact, expected|
204
+ if exact
205
+ assert_exact_output(expected, cmd ? stdout_from(cmd) : all_stdout)
206
+ else
207
+ assert_partial_output(expected, cmd ? stdout_from(cmd) : all_stdout)
208
+ end
183
209
  end
184
210
 
185
- Then /^the stdout should contain exactly:$/ do |expected|
186
- assert_exact_output(expected, all_stdout)
211
+ ## the stdout should contain:
212
+ ## the stdout from "echo -n 'Hello'" should contain:
213
+ ## the stdout should contain exactly:
214
+ ## the stdout from "echo -n 'Hello'" should contain exactly:
215
+ Then /^the stdout(?: from "(.*?)")? should contain( exactly)?:$/ do |cmd, exact, expected|
216
+ if exact
217
+ assert_exact_output(expected, cmd ? stdout_from(cmd) : all_stdout)
218
+ else
219
+ assert_partial_output(expected, cmd ? stdout_from(cmd) : all_stdout)
220
+ end
187
221
  end
188
222
 
189
223
  Then /^the stderr should not contain "([^"]*)"$/ do |unexpected|
@@ -194,6 +228,11 @@ Then /^the stderr should not contain:$/ do |unexpected|
194
228
  assert_no_partial_output(unexpected, all_stderr)
195
229
  end
196
230
 
231
+ Then /^the (stderr|stdout) should not contain anything$/ do |stream_name|
232
+ stream = self.send("all_#{stream_name}")
233
+ stream.should be_empty
234
+ end
235
+
197
236
  Then /^the stdout should not contain "([^"]*)"$/ do |unexpected|
198
237
  assert_no_partial_output(unexpected, all_stdout)
199
238
  end
@@ -202,18 +241,10 @@ Then /^the stdout should not contain:$/ do |unexpected|
202
241
  assert_no_partial_output(unexpected, all_stdout)
203
242
  end
204
243
 
205
- Then /^the stdout from "([^"]*)" should contain "([^"]*)"$/ do |cmd, expected|
206
- assert_partial_output(expected, stdout_from(cmd))
207
- end
208
-
209
244
  Then /^the stdout from "([^"]*)" should not contain "([^"]*)"$/ do |cmd, unexpected|
210
245
  assert_no_partial_output(unexpected, stdout_from(cmd))
211
246
  end
212
247
 
213
- Then /^the stderr from "([^"]*)" should contain "([^"]*)"$/ do |cmd, expected|
214
- assert_partial_output(expected, stderr_from(cmd))
215
- end
216
-
217
248
  Then /^the stderr from "([^"]*)" should not contain "([^"]*)"$/ do |cmd, unexpected|
218
249
  assert_no_partial_output(unexpected, stderr_from(cmd))
219
250
  end
@@ -0,0 +1,4 @@
1
+ module Aruba
2
+ class Error < StandardError; end
3
+ class LaunchError < Error; end
4
+ end
@@ -1,6 +1,7 @@
1
1
  require 'childprocess'
2
2
  require 'tempfile'
3
3
  require 'shellwords'
4
+ require 'aruba/errors'
4
5
 
5
6
  module Aruba
6
7
  class Process
@@ -10,24 +11,29 @@ module Aruba
10
11
  @exit_timeout = exit_timeout
11
12
  @io_wait = io_wait
12
13
 
14
+ @cmd = cmd
15
+ @process = nil
16
+ @exit_code = nil
17
+ end
18
+
19
+ def run!(&block)
20
+ @process = ChildProcess.build(*shellwords(@cmd))
13
21
  @out = Tempfile.new("aruba-out")
14
22
  @err = Tempfile.new("aruba-err")
15
- @process = ChildProcess.build(*shellwords(cmd))
16
23
  @process.io.stdout = @out
17
24
  @process.io.stderr = @err
18
25
  @process.duplex = true
19
- end
20
-
21
- def run!(&block)
22
- @process.start
26
+ @exit_code = nil
27
+ begin
28
+ @process.start
29
+ rescue ChildProcess::LaunchError => e
30
+ raise LaunchError.new(e.message)
31
+ end
23
32
  yield self if block_given?
24
33
  end
25
34
 
26
35
  def stdin
27
- wait_for_io do
28
- @process.io.stdin.sync = true
29
- @process.io.stdin
30
- end
36
+ @process.io.stdin
31
37
  end
32
38
 
33
39
  def output(keep_ansi)
@@ -56,13 +62,15 @@ module Aruba
56
62
  end
57
63
 
58
64
  def stop(reader, keep_ansi)
59
- return unless @process
65
+ return @exit_code unless @process
60
66
  unless @process.exited?
61
- reader.stdout stdout(keep_ansi)
62
- reader.stderr stderr(keep_ansi)
63
67
  @process.poll_for_exit(@exit_timeout)
64
68
  end
65
- @process.exit_code
69
+ reader.stdout stdout(keep_ansi)
70
+ reader.stderr stderr(keep_ansi)
71
+ @exit_code = @process.exit_code
72
+ @process = nil
73
+ @exit_code
66
74
  end
67
75
 
68
76
  def terminate(keep_ansi)
@@ -76,7 +84,7 @@ module Aruba
76
84
  private
77
85
 
78
86
  def wait_for_io(&block)
79
- sleep @io_wait if @process.alive?
87
+ sleep @io_wait if @process
80
88
  yield
81
89
  end
82
90
 
@@ -19,10 +19,14 @@ describe Aruba::Api do
19
19
  @file_name = "test.txt"
20
20
  @file_size = 256
21
21
  @file_path = File.join(@aruba.current_dir, @file_name)
22
- @directory_name = 'test_dir'
23
- @directory_path = File.join(@aruba.current_dir, @directory_name)
24
22
 
25
- Dir.mkdir(@directory_path) if File.exist?(@directory_path)
23
+ (@aruba.dirs.length-1).times do |depth| #Ensure all parent dirs exists
24
+ dir = File.join(*@aruba.dirs[0..depth])
25
+ Dir.mkdir(dir) unless File.exist?(dir)
26
+ end
27
+ raise "We must work with relative paths, everything else is dangerous" if ?/ == @aruba.current_dir[0]
28
+ FileUtils.rm_rf(@aruba.current_dir)
29
+ Dir.mkdir(@aruba.current_dir)
26
30
  end
27
31
 
28
32
  describe 'current_dir' do
@@ -33,6 +37,11 @@ describe Aruba::Api do
33
37
 
34
38
  describe 'directories' do
35
39
  context 'delete directory' do
40
+ before(:each) do
41
+ @directory_name = 'test_dir'
42
+ @directory_path = File.join(@aruba.current_dir, @directory_name)
43
+ Dir.mkdir(@directory_path)
44
+ end
36
45
  it 'should delete directory' do
37
46
  @aruba.remove_dir(@directory_name)
38
47
  File.exist?(@directory_path).should == false
@@ -57,7 +66,9 @@ describe Aruba::Api do
57
66
  @aruba.write_fixed_size_file(@file_name, @file_size)
58
67
  lambda { @aruba.check_file_size([[@file_name, @file_size + 1]]) }.should raise_error
59
68
  end
60
-
69
+ end
70
+ context 'existing' do
71
+ before(:each) { File.open(@file_path, 'w') { |f| f << "" } }
61
72
  it "should delete file" do
62
73
  @aruba.remove_file(@file_name)
63
74
  File.exist?(@file_path).should == false
@@ -67,12 +78,12 @@ describe Aruba::Api do
67
78
 
68
79
  describe 'tags' do
69
80
  describe '@announce_stdout' do
70
-
81
+ after(:each){@aruba.stop_processes!}
71
82
  context 'enabled' do
72
83
  it "should announce to stdout exactly once" do
73
84
  @aruba.should_receive(:announce_or_puts).once
74
85
  @aruba.set_tag(:announce_stdout, true)
75
- @aruba.run_simple("ruby -e 'puts \"hello world\"'", false)
86
+ @aruba.run_simple('echo "hello world"', false)
76
87
  @aruba.all_output.should match(/hello world/)
77
88
  end
78
89
  end
@@ -81,7 +92,7 @@ describe Aruba::Api do
81
92
  it "should not announce to stdout" do
82
93
  @aruba.should_not_receive(:announce_or_puts)
83
94
  @aruba.set_tag(:announce_stdout, false)
84
- @aruba.run_simple("ruby -e 'puts \"hello world\"'", false)
95
+ @aruba.run_simple('echo "hello world"', false)
85
96
  @aruba.all_output.should match(/hello world/)
86
97
  end
87
98
  end
@@ -122,9 +133,8 @@ describe Aruba::Api do
122
133
  end #with_file_content
123
134
 
124
135
  describe "#assert_not_matching_output" do
125
- before :each do
126
- @aruba.run_simple("echo foo", false)
127
- end
136
+ before(:each){ @aruba.run_simple("echo foo", false) }
137
+ after(:each){ @aruba.stop_processes! }
128
138
 
129
139
  it "passes when the output doesn't match a regexp" do
130
140
  @aruba.assert_not_matching_output "bar", @aruba.all_output
@@ -136,4 +146,20 @@ describe Aruba::Api do
136
146
  end
137
147
  end
138
148
 
149
+ describe "#run_interactive" do
150
+ before(:each){@aruba.run_interactive "cat"}
151
+ after(:each){@aruba.stop_processes!}
152
+ it "respond to input" do
153
+ @aruba.type "Hello"
154
+ @aruba.type ""
155
+ @aruba.all_output.should == "Hello\n"
156
+ end
157
+
158
+ it "respond to eot" do
159
+ @aruba.type "Hello"
160
+ @aruba.eot
161
+ @aruba.all_output.should == "Hello\n"
162
+ end
163
+ end
164
+
139
165
  end # Aruba::Api
@@ -3,7 +3,7 @@ require 'aruba/process'
3
3
  module Aruba
4
4
  describe Process do
5
5
 
6
- let(:process) { Process.new('echo "yo"', 0, 0.1) }
6
+ let(:process) { Process.new('echo "yo"', 0.1, 0.1) }
7
7
 
8
8
  describe "#stdout" do
9
9
  before { process.run! }
@@ -29,5 +29,15 @@ module Aruba
29
29
  end
30
30
  end
31
31
 
32
+ describe "#run!" do
33
+ context "upon process launch error" do
34
+ let(:process_failure) { Process.new('does_not_exists', 1, 1) }
35
+
36
+ it "raises a Aruba::LaunchError" do
37
+ lambda{process_failure.run!}.should raise_error(::Aruba::LaunchError)
38
+ end
39
+ end
40
+ end
41
+
32
42
  end
33
43
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aruba
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.5.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -12,7 +12,7 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2012-10-09 00:00:00.000000000 Z
15
+ date: 2012-11-20 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: cucumber
@@ -35,33 +35,17 @@ dependencies:
35
35
  requirement: !ruby/object:Gem::Requirement
36
36
  none: false
37
37
  requirements:
38
- - - '='
38
+ - - ~>
39
39
  - !ruby/object:Gem::Version
40
- version: 0.2.3
40
+ version: 0.3.6
41
41
  type: :runtime
42
42
  prerelease: false
43
43
  version_requirements: !ruby/object:Gem::Requirement
44
44
  none: false
45
45
  requirements:
46
- - - '='
46
+ - - ~>
47
47
  - !ruby/object:Gem::Version
48
- version: 0.2.3
49
- - !ruby/object:Gem::Dependency
50
- name: ffi
51
- requirement: !ruby/object:Gem::Requirement
52
- none: false
53
- requirements:
54
- - - ! '>='
55
- - !ruby/object:Gem::Version
56
- version: 1.0.11
57
- type: :runtime
58
- prerelease: false
59
- version_requirements: !ruby/object:Gem::Requirement
60
- none: false
61
- requirements:
62
- - - ! '>='
63
- - !ruby/object:Gem::Version
64
- version: 1.0.11
48
+ version: 0.3.6
65
49
  - !ruby/object:Gem::Dependency
66
50
  name: rspec-expectations
67
51
  requirement: !ruby/object:Gem::Requirement
@@ -192,6 +176,8 @@ files:
192
176
  ZmVhdHVyZXMvc3RlcF9kZWZpbml0aW9ucy9hcnViYV9kZXZfc3RlcHMucmI=
193
177
  - !binary |-
194
178
  ZmVhdHVyZXMvc3VwcG9ydC9lbnYucmI=
179
+ - !binary |-
180
+ ZmVhdHVyZXMvc3VwcG9ydC9qcnVieS5yYg==
195
181
  - !binary |-
196
182
  bGliL2FydWJhLnJi
197
183
  - !binary |-
@@ -202,6 +188,8 @@ files:
202
188
  bGliL2FydWJhL2N1Y3VtYmVyLnJi
203
189
  - !binary |-
204
190
  bGliL2FydWJhL2N1Y3VtYmVyL2hvb2tzLnJi
191
+ - !binary |-
192
+ bGliL2FydWJhL2Vycm9ycy5yYg==
205
193
  - !binary |-
206
194
  bGliL2FydWJhL2pydWJ5LnJi
207
195
  - !binary |-
@@ -259,7 +247,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
259
247
  version: '0'
260
248
  segments:
261
249
  - 0
262
- hash: -2122942938856216296
250
+ hash: 1656561211491698914
263
251
  required_rubygems_version: !ruby/object:Gem::Requirement
264
252
  none: false
265
253
  requirements:
@@ -268,13 +256,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
268
256
  version: '0'
269
257
  segments:
270
258
  - 0
271
- hash: -2122942938856216296
259
+ hash: 1656561211491698914
272
260
  requirements: []
273
261
  rubyforge_project:
274
262
  rubygems_version: 1.8.24
275
263
  signing_key:
276
264
  specification_version: 3
277
- summary: aruba-0.5.0
265
+ summary: aruba-0.5.1
278
266
  test_files:
279
267
  - !binary |-
280
268
  ZmVhdHVyZXMvYmVmb3JlX2NtZF9ob29rcy5mZWF0dXJl
@@ -294,6 +282,8 @@ test_files:
294
282
  ZmVhdHVyZXMvc3RlcF9kZWZpbml0aW9ucy9hcnViYV9kZXZfc3RlcHMucmI=
295
283
  - !binary |-
296
284
  ZmVhdHVyZXMvc3VwcG9ydC9lbnYucmI=
285
+ - !binary |-
286
+ ZmVhdHVyZXMvc3VwcG9ydC9qcnVieS5yYg==
297
287
  - !binary |-
298
288
  c3BlYy9hcnViYS9hcGlfc3BlYy5yYg==
299
289
  - !binary |-