aruba 0.11.2 → 0.12.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +9 -8
- data/History.md +8 -1
- data/LICENSE +1 -1
- data/README.md +2 -2
- data/aruba.gemspec +2 -2
- data/features/api/environment/{remove_environment_variable.feature → delete_environment_variable.feature} +1 -1
- data/features/api/environment/set_environment_variable.feature +70 -0
- data/features/configuration/command_runtime_environment.feature +129 -0
- data/features/matchers/file/be_a_command_found_in_path.feature +115 -0
- data/features/matchers/file/be_existing_executable.feature +1 -0
- data/lib/aruba/api/command.rb +3 -2
- data/lib/aruba/api/core.rb +2 -0
- data/lib/aruba/config.rb +1 -1
- data/lib/aruba/cucumber/hooks.rb +0 -3
- data/lib/aruba/matchers/file/be_a_command_found_in_path.rb +36 -0
- data/lib/aruba/platforms/unix_environment_variables.rb +111 -32
- data/lib/aruba/platforms/unix_platform.rb +1 -1
- data/lib/aruba/platforms/windows_environment_variables.rb +3 -3
- data/lib/aruba/platforms/windows_platform.rb +1 -1
- data/lib/aruba/rspec.rb +2 -3
- data/lib/aruba/runtime.rb +5 -4
- data/lib/aruba/version.rb +1 -1
- metadata +14 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a03bef8bda8e7603e1f838f59617c33ed241a6c5
|
4
|
+
data.tar.gz: 2400a8a46277213356de308fc2be9bff799de045
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dee2acfaddc2865642aacb0d4dd464aa8e9656e9485511e16a78568b7305a60a8fb79c0529c86c493dab163e8f12d9549eda3f2638c589201c04630e6ea11462
|
7
|
+
data.tar.gz: 07adf9438e735fd1d9bc85149b95ae4f51795d193676f793f0e516f9dbff80f99d75380e081cde6bd9eea78c821a4d796016b1e54db693b8d7eb5584fad47cf0
|
data/.travis.yml
CHANGED
@@ -7,27 +7,28 @@ rvm:
|
|
7
7
|
- 1.9.2
|
8
8
|
- 1.9.3
|
9
9
|
- 2.0.0
|
10
|
-
- 2.1.
|
11
|
-
- 2.2.
|
10
|
+
- 2.1.8
|
11
|
+
- 2.2.4
|
12
|
+
- 2.3.0
|
12
13
|
- jruby
|
13
14
|
- jruby-20mode
|
14
15
|
- jruby-21mode
|
15
16
|
- rbx
|
16
17
|
matrix:
|
17
18
|
include:
|
18
|
-
- rvm: jruby-9.0.
|
19
|
+
- rvm: jruby-9.0.1.0
|
19
20
|
env: JRUBY_OPTS='--dev'
|
20
|
-
- rvm: jruby-9.0.
|
21
|
+
- rvm: jruby-9.0.1.0-20mode
|
21
22
|
env: JRUBY_OPTS='--dev'
|
22
|
-
- rvm: jruby-9.0.
|
23
|
+
- rvm: jruby-9.0.1.0-21mode
|
23
24
|
env: JRUBY_OPTS='--dev'
|
24
25
|
allow_failures:
|
25
26
|
- rvm: rbx
|
26
|
-
- rvm: jruby-9.0.
|
27
|
+
- rvm: jruby-9.0.1.0
|
27
28
|
env: JRUBY_OPTS='--dev'
|
28
|
-
- rvm: jruby-9.0.
|
29
|
+
- rvm: jruby-9.0.1.0-20mode
|
29
30
|
env: JRUBY_OPTS='--dev'
|
30
|
-
- rvm: jruby-9.0.
|
31
|
+
- rvm: jruby-9.0.1.0-21mode
|
31
32
|
env: JRUBY_OPTS='--dev'
|
32
33
|
notifications:
|
33
34
|
email:
|
data/History.md
CHANGED
@@ -1,10 +1,17 @@
|
|
1
1
|
# Latest Release
|
2
2
|
|
3
|
+
## [v0.12.0](https://github.com/cucumber/aruba/compare/v0.11.2...v0.12.0)
|
4
|
+
|
5
|
+
* Add matcher to check if a command can be found in PATH (PR #336)
|
6
|
+
* Fixed issue with environment variables set by external libraries (fix #321,
|
7
|
+
issue #320)
|
8
|
+
|
9
|
+
# Old releases
|
10
|
+
|
3
11
|
## [v0.11.2](https://github.com/cucumber/aruba/compare/v0.11.1...v0.11.2)
|
4
12
|
|
5
13
|
* Fixed problem with positional arguments in `#run_simple()` (issue #322)
|
6
14
|
|
7
|
-
# Old releases
|
8
15
|
|
9
16
|
## [v0.11.1](https://github.com/cucumber/aruba/compare/v0.11.0...v0.11.1)
|
10
17
|
|
data/LICENSE
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
Copyright (c) 2010-
|
1
|
+
Copyright (c) 2010-2016 Aslak Hellesøy, David Chelimsky, Mike Sassak, Jarl Friis, Matt Wynne, Dennis Günnewig
|
2
2
|
|
3
3
|
Permission is hereby granted, free of charge, to any person obtaining
|
4
4
|
a copy of this software and associated documentation files (the
|
data/README.md
CHANGED
@@ -219,8 +219,8 @@ A full documentation of the API can be found
|
|
219
219
|
|
220
220
|
## Contributing
|
221
221
|
|
222
|
-
Please see the
|
222
|
+
Please see the [CONTRIBUTING](CONTRIBUTING.md) file.
|
223
223
|
|
224
224
|
## Copyright
|
225
225
|
|
226
|
-
Copyright (c) 2010-
|
226
|
+
Copyright (c) 2010-2016 Aslak Hellesøy et al. See [MIT License](LICENSE) for details.
|
data/aruba.gemspec
CHANGED
@@ -21,7 +21,7 @@ Gem::Specification.new do |s|
|
|
21
21
|
s.add_runtime_dependency 'thor', '~> 0.19'
|
22
22
|
s.add_runtime_dependency 'event-bus', '~> 0.2'
|
23
23
|
|
24
|
-
s.add_development_dependency 'bundler', '~> 1.
|
24
|
+
s.add_development_dependency 'bundler', '~> 1.11'
|
25
25
|
|
26
26
|
s.rubygems_version = ">= 1.6.1"
|
27
27
|
|
@@ -35,7 +35,7 @@ Use on ruby 1.8.7
|
|
35
35
|
* Make sure you add something like that to your `Gemfile`. Otherwise you will
|
36
36
|
get cucumber > 2 and this will fail on ruby 1.8.7
|
37
37
|
|
38
|
-
gem 'cucumber', ~>
|
38
|
+
gem 'cucumber', '~> 1.3.20'
|
39
39
|
|
40
40
|
With aruba >= 1.0 there will be breaking changes. Make sure to read https://github.com/cucumber/aruba/blob/master/History.md for 1.0.0
|
41
41
|
EOS
|
@@ -69,6 +69,46 @@ Feature: Set environment variable via API-method
|
|
69
69
|
When I run `rspec`
|
70
70
|
Then the specs should all pass
|
71
71
|
|
72
|
+
Scenario: Set variable via ENV
|
73
|
+
|
74
|
+
Given a file named "spec/environment_spec.rb" with:
|
75
|
+
"""ruby
|
76
|
+
require 'spec_helper'
|
77
|
+
|
78
|
+
RSpec.describe 'Environment command', :type => :aruba do
|
79
|
+
before(:each) { ENV['REALLY_LONG_LONG_VARIABLE'] = '2' }
|
80
|
+
|
81
|
+
before(:each) { run('env') }
|
82
|
+
before(:each) { stop_all_commands }
|
83
|
+
|
84
|
+
it { expect(last_command_started.output).to include 'REALLY_LONG_LONG_VARIABLE=2' }
|
85
|
+
end
|
86
|
+
"""
|
87
|
+
When I run `rspec`
|
88
|
+
Then the specs should all pass
|
89
|
+
|
90
|
+
Scenario: Existing variable set in before block in RSpec
|
91
|
+
|
92
|
+
Setting environment variables with `#set_environment_variable('VAR', 'value')` takes
|
93
|
+
precedence before setting variables with `ENV['VAR'] = 'value'`.
|
94
|
+
|
95
|
+
Given a file named "spec/environment_spec.rb" with:
|
96
|
+
"""ruby
|
97
|
+
require 'spec_helper'
|
98
|
+
|
99
|
+
RSpec.describe 'Environment command', :type => :aruba do
|
100
|
+
before(:each) { set_environment_variable 'REALLY_LONG_LONG_VARIABLE', '1' }
|
101
|
+
before(:each) { ENV['REALLY_LONG_LONG_VARIABLE'] = '2' }
|
102
|
+
|
103
|
+
before(:each) { run('env') }
|
104
|
+
before(:each) { stop_all_commands }
|
105
|
+
|
106
|
+
it { expect(last_command_started.output).to include 'REALLY_LONG_LONG_VARIABLE=1' }
|
107
|
+
end
|
108
|
+
"""
|
109
|
+
When I run `rspec`
|
110
|
+
Then the specs should all pass
|
111
|
+
|
72
112
|
Scenario: Run some ruby code in code with previously set environment
|
73
113
|
|
74
114
|
The `#with_environment`-block makes the change environment temporary
|
@@ -304,3 +344,33 @@ Feature: Set environment variable via API-method
|
|
304
344
|
"""
|
305
345
|
When I run `rspec`
|
306
346
|
Then the specs should all pass
|
347
|
+
|
348
|
+
Scenario: External ruby file / ruby gem modifying ENV
|
349
|
+
|
350
|
+
There are some Rubygems around which need to modify ENV['NODE_PATH'] like
|
351
|
+
[`ruby-stylus`](https://github.com/forgecrafted/ruby-stylus/blob/e7293362dc8cbf550f7c317d721ba6b9087e8833/lib/stylus.rb#L168).
|
352
|
+
This is supported by aruba as well.
|
353
|
+
|
354
|
+
Given a file named "spec/environment_spec.rb" with:
|
355
|
+
"""ruby
|
356
|
+
require 'spec_helper'
|
357
|
+
|
358
|
+
$LOAD_PATH << File.expand_path('../../lib', __FILE__)
|
359
|
+
|
360
|
+
RSpec.describe 'Environment command', :type => :aruba do
|
361
|
+
before(:each) do
|
362
|
+
require 'my_library'
|
363
|
+
end
|
364
|
+
|
365
|
+
before(:each) { run('env') }
|
366
|
+
before(:each) { stop_all_commands }
|
367
|
+
|
368
|
+
it { expect(last_command_started.output).to include 'LONG_LONG_VARIABLE=1' }
|
369
|
+
end
|
370
|
+
"""
|
371
|
+
And a file named "lib/my_library.rb" with:
|
372
|
+
"""
|
373
|
+
ENV['LONG_LONG_VARIABLE'] = '1'
|
374
|
+
"""
|
375
|
+
When I run `rspec`
|
376
|
+
Then the specs should all pass
|
@@ -0,0 +1,129 @@
|
|
1
|
+
Feature: Define default process environment
|
2
|
+
Say you want to have a default set of environment variables, then use this
|
3
|
+
code.
|
4
|
+
|
5
|
+
~~~ruby
|
6
|
+
Aruba.configure do |config|
|
7
|
+
config.command_runtime_environment = { 'MY_VARIABLE' => 'x' }
|
8
|
+
end
|
9
|
+
~~~
|
10
|
+
|
11
|
+
This can be changed via `#set_environment_variable`,
|
12
|
+
`#append_environment_variable`, `#delete_environment_variable` or
|
13
|
+
`#prepend_environment_variable`.
|
14
|
+
|
15
|
+
Background:
|
16
|
+
Given I use the fixture "cli-app"
|
17
|
+
|
18
|
+
Scenario: Overwrite existing variable with new default value
|
19
|
+
Given a file named "spec/environment_spec.rb" with:
|
20
|
+
"""ruby
|
21
|
+
require 'spec_helper'
|
22
|
+
|
23
|
+
ENV['LONG_LONG_VARIABLE'] = 'y'
|
24
|
+
|
25
|
+
Aruba.configure do |config|
|
26
|
+
config.command_runtime_environment = { 'LONG_LONG_VARIABLE' => 'x' }
|
27
|
+
end
|
28
|
+
|
29
|
+
RSpec.describe 'Environment command', :type => :aruba do
|
30
|
+
before(:each) { run('env') }
|
31
|
+
before(:each) { stop_all_commands }
|
32
|
+
|
33
|
+
it { expect(last_command_started.output).to include 'LONG_LONG_VARIABLE=x' }
|
34
|
+
end
|
35
|
+
"""
|
36
|
+
When I run `rspec`
|
37
|
+
Then the specs should all pass
|
38
|
+
|
39
|
+
Scenario: Overwrite default value for variable
|
40
|
+
Given a file named "spec/environment_spec.rb" with:
|
41
|
+
"""ruby
|
42
|
+
require 'spec_helper'
|
43
|
+
|
44
|
+
ENV['LONG_LONG_VARIABLE'] = 'y'
|
45
|
+
|
46
|
+
Aruba.configure do |config|
|
47
|
+
config.command_runtime_environment = { 'LONG_LONG_VARIABLE' => 'x' }
|
48
|
+
end
|
49
|
+
|
50
|
+
RSpec.describe 'Environment command', :type => :aruba do
|
51
|
+
before(:each) { set_environment_variable 'LONG_LONG_VARIABLE', 'z' }
|
52
|
+
|
53
|
+
before(:each) { run('env') }
|
54
|
+
before(:each) { stop_all_commands }
|
55
|
+
|
56
|
+
it { expect(last_command_started.output).to include 'LONG_LONG_VARIABLE=z' }
|
57
|
+
end
|
58
|
+
"""
|
59
|
+
When I run `rspec`
|
60
|
+
Then the specs should all pass
|
61
|
+
|
62
|
+
Scenario: Append value to default value
|
63
|
+
Given a file named "spec/environment_spec.rb" with:
|
64
|
+
"""ruby
|
65
|
+
require 'spec_helper'
|
66
|
+
|
67
|
+
ENV['LONG_LONG_VARIABLE'] = 'y'
|
68
|
+
|
69
|
+
Aruba.configure do |config|
|
70
|
+
config.command_runtime_environment = { 'LONG_LONG_VARIABLE' => 'x' }
|
71
|
+
end
|
72
|
+
|
73
|
+
RSpec.describe 'Environment command', :type => :aruba do
|
74
|
+
before(:each) { append_environment_variable 'LONG_LONG_VARIABLE', 'z' }
|
75
|
+
|
76
|
+
before(:each) { run('env') }
|
77
|
+
before(:each) { stop_all_commands }
|
78
|
+
|
79
|
+
it { expect(last_command_started.output).to include 'LONG_LONG_VARIABLE=xz' }
|
80
|
+
end
|
81
|
+
"""
|
82
|
+
When I run `rspec`
|
83
|
+
Then the specs should all pass
|
84
|
+
|
85
|
+
Scenario: Prepend value
|
86
|
+
Given a file named "spec/environment_spec.rb" with:
|
87
|
+
"""ruby
|
88
|
+
require 'spec_helper'
|
89
|
+
|
90
|
+
ENV['LONG_LONG_VARIABLE'] = 'y'
|
91
|
+
|
92
|
+
Aruba.configure do |config|
|
93
|
+
config.command_runtime_environment = { 'LONG_LONG_VARIABLE' => 'x' }
|
94
|
+
end
|
95
|
+
|
96
|
+
RSpec.describe 'Environment command', :type => :aruba do
|
97
|
+
before(:each) { prepend_environment_variable 'LONG_LONG_VARIABLE', 'z' }
|
98
|
+
|
99
|
+
before(:each) { run('env') }
|
100
|
+
before(:each) { stop_all_commands }
|
101
|
+
|
102
|
+
it { expect(last_command_started.output).to include 'LONG_LONG_VARIABLE=zx' }
|
103
|
+
end
|
104
|
+
"""
|
105
|
+
When I run `rspec`
|
106
|
+
Then the specs should all pass
|
107
|
+
|
108
|
+
Scenario: Remove variable from default set of variables
|
109
|
+
Given a file named "spec/environment_spec.rb" with:
|
110
|
+
"""ruby
|
111
|
+
require 'spec_helper'
|
112
|
+
|
113
|
+
ENV['LONG_LONG_VARIABLE'] = 'y'
|
114
|
+
|
115
|
+
Aruba.configure do |config|
|
116
|
+
config.command_runtime_environment = { 'LONG_LONG_VARIABLE' => 'x' }
|
117
|
+
end
|
118
|
+
|
119
|
+
RSpec.describe 'Environment command', :type => :aruba do
|
120
|
+
before(:each) { delete_environment_variable 'LONG_LONG_VARIABLE' }
|
121
|
+
|
122
|
+
before(:each) { run('env') }
|
123
|
+
before(:each) { stop_all_commands }
|
124
|
+
|
125
|
+
it { expect(last_command_started.output).not_to include 'LONG_LONG_VARIABLE' }
|
126
|
+
end
|
127
|
+
"""
|
128
|
+
When I run `rspec`
|
129
|
+
Then the specs should all pass
|
@@ -0,0 +1,115 @@
|
|
1
|
+
Feature: Check if command can be found in PATH
|
2
|
+
|
3
|
+
If you need to check if a given command can be found in path, you can use the
|
4
|
+
`be_an_existing_executable`-matcher.
|
5
|
+
|
6
|
+
```ruby
|
7
|
+
require 'spec_helper'
|
8
|
+
|
9
|
+
RSpec.describe 'Check if command can be found in PATH', :type => :aruba do
|
10
|
+
let(:file) { 'file.sh' }
|
11
|
+
before(:each) { touch(file) }
|
12
|
+
before(:each) { chmod(0755, file) }
|
13
|
+
before(:each) { prepend_environment_variable('PATH', format('%s:', expand_path('.')) }
|
14
|
+
|
15
|
+
it { expect(file).to be_an_existing_executable }
|
16
|
+
end
|
17
|
+
```
|
18
|
+
|
19
|
+
Background:
|
20
|
+
Given I use a fixture named "cli-app"
|
21
|
+
|
22
|
+
Scenario: Expect single existing executable file
|
23
|
+
Given a file named "spec/existing_executable_spec.rb" with:
|
24
|
+
"""
|
25
|
+
require 'spec_helper'
|
26
|
+
|
27
|
+
RSpec.describe 'Check if command can be found in PATH', :type => :aruba do
|
28
|
+
let(:file) { 'file.sh' }
|
29
|
+
|
30
|
+
before(:each) { touch(file) }
|
31
|
+
before(:each) { chmod(0755, file) }
|
32
|
+
before(:each) { prepend_environment_variable('PATH', format('%s:', expand_path('.'))) }
|
33
|
+
|
34
|
+
it { expect(file).to be_a_command_found_in_path }
|
35
|
+
end
|
36
|
+
"""
|
37
|
+
When I run `rspec`
|
38
|
+
Then the specs should all pass
|
39
|
+
|
40
|
+
Scenario: Expect single non-existing executable file
|
41
|
+
Given a file named "spec/existing_executable_spec.rb" with:
|
42
|
+
"""
|
43
|
+
require 'spec_helper'
|
44
|
+
|
45
|
+
RSpec.describe 'Check if command can be found in PATH', :type => :aruba do
|
46
|
+
let(:file) { 'file.sh' }
|
47
|
+
|
48
|
+
before(:each) { prepend_environment_variable('PATH', format('%s:', expand_path('.'))) }
|
49
|
+
|
50
|
+
it { expect(file).not_to be_a_command_found_in_path }
|
51
|
+
end
|
52
|
+
"""
|
53
|
+
When I run `rspec`
|
54
|
+
Then the specs should all pass
|
55
|
+
|
56
|
+
Scenario: Expect single non-executable file
|
57
|
+
Given a file named "spec/existing_executable_spec.rb" with:
|
58
|
+
"""
|
59
|
+
require 'spec_helper'
|
60
|
+
|
61
|
+
RSpec.describe 'Check if command can be found in PATH', :type => :aruba do
|
62
|
+
let(:file) { 'file.sh' }
|
63
|
+
|
64
|
+
before(:each) { touch(file) }
|
65
|
+
before(:each) { prepend_environment_variable('PATH', format('%s:', expand_path('.'))) }
|
66
|
+
|
67
|
+
it { expect(file).not_to be_a_command_found_in_path }
|
68
|
+
end
|
69
|
+
"""
|
70
|
+
When I run `rspec`
|
71
|
+
Then the specs should all pass
|
72
|
+
|
73
|
+
Scenario: Expect multiple existing executable files
|
74
|
+
Given a file named "spec/existing_executable_spec.rb" with:
|
75
|
+
"""
|
76
|
+
require 'spec_helper'
|
77
|
+
|
78
|
+
RSpec.describe 'Check if file exists and is an executable file', :type => :aruba do
|
79
|
+
let(:files) { %w(file1.sh file2.sh) }
|
80
|
+
|
81
|
+
before :each do
|
82
|
+
files.each do |f|
|
83
|
+
touch(f)
|
84
|
+
chmod(0755, f)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
before(:each) { prepend_environment_variable('PATH', format('%s:', expand_path('.'))) }
|
89
|
+
|
90
|
+
it { expect(files).to all be_a_command_found_in_path }
|
91
|
+
end
|
92
|
+
"""
|
93
|
+
When I run `rspec`
|
94
|
+
Then the specs should all pass
|
95
|
+
|
96
|
+
Scenario: Expect a least one existing executable file
|
97
|
+
Given a file named "spec/existing_executable_spec.rb" with:
|
98
|
+
"""
|
99
|
+
require 'spec_helper'
|
100
|
+
|
101
|
+
RSpec.describe 'Check if file exists and is an executable file', :type => :aruba do
|
102
|
+
let(:files) { %w(file1.sh file2.sh) }
|
103
|
+
|
104
|
+
before :each do
|
105
|
+
touch(files.first)
|
106
|
+
chmod(0755, files.first)
|
107
|
+
end
|
108
|
+
|
109
|
+
before(:each) { prepend_environment_variable('PATH', format('%s:', expand_path('.'))) }
|
110
|
+
|
111
|
+
it { expect(files).to include a_command_found_in_path }
|
112
|
+
end
|
113
|
+
"""
|
114
|
+
When I run `rspec`
|
115
|
+
Then the specs should all pass
|
@@ -9,6 +9,7 @@ Feature: Check if path exists and is an executable file
|
|
9
9
|
RSpec.describe 'Check if file exists and is an executable file', :type => :aruba do
|
10
10
|
let(:file) { 'file.txt' }
|
11
11
|
before(:each) { touch(file) }
|
12
|
+
before(:each) { chmod(0755, file) }
|
12
13
|
|
13
14
|
it { expect(file).to be_an_existing_executable }
|
14
15
|
end
|
data/lib/aruba/api/command.rb
CHANGED
@@ -164,7 +164,7 @@ module Aruba
|
|
164
164
|
@commands ||= []
|
165
165
|
@commands << cmd
|
166
166
|
|
167
|
-
environment = aruba.environment
|
167
|
+
environment = aruba.environment
|
168
168
|
working_directory = expand_path('.')
|
169
169
|
event_bus = aruba.event_bus
|
170
170
|
|
@@ -202,7 +202,7 @@ module Aruba
|
|
202
202
|
:exit_timeout => exit_timeout,
|
203
203
|
:io_wait_timeout => io_wait_timeout,
|
204
204
|
:working_directory => working_directory,
|
205
|
-
:environment => environment,
|
205
|
+
:environment => environment.to_hash,
|
206
206
|
:main_class => main_class,
|
207
207
|
:stop_signal => stop_signal,
|
208
208
|
:startup_wait_time => startup_wait_time,
|
@@ -217,6 +217,7 @@ module Aruba
|
|
217
217
|
end
|
218
218
|
|
219
219
|
aruba.config.before(:command, self, command)
|
220
|
+
|
220
221
|
command.start
|
221
222
|
|
222
223
|
aruba.announcer.announce(:stop_signal, command.pid, stop_signal) if stop_signal
|
data/lib/aruba/api/core.rb
CHANGED
@@ -179,8 +179,10 @@ module Aruba
|
|
179
179
|
def with_environment(env = {}, &block)
|
180
180
|
old_aruba_env = aruba.environment.to_h
|
181
181
|
|
182
|
+
# make sure the old environment is really restored in "ENV"
|
182
183
|
Aruba.platform.with_environment aruba.environment.update(env).to_h, &block
|
183
184
|
ensure
|
185
|
+
# make sure the old environment is really restored in "aruba.environment"
|
184
186
|
aruba.environment.clear
|
185
187
|
aruba.environment.update old_aruba_env
|
186
188
|
end
|
data/lib/aruba/config.rb
CHANGED
@@ -36,7 +36,7 @@ module Aruba
|
|
36
36
|
option_accessor :io_wait_timeout, :contract => { Num => Num }, :default => 0.1
|
37
37
|
option_accessor :startup_wait_time, :contract => { Num => Num }, :default => 0
|
38
38
|
option_accessor :fixtures_directories, :contract => { Array => ArrayOf[String] }, :default => %w(features/fixtures spec/fixtures test/fixtures fixtures)
|
39
|
-
option_accessor :command_runtime_environment, :contract => { Hash => Hash }, :default => ENV.to_hash
|
39
|
+
option_accessor :command_runtime_environment, :contract => { Hash => Hash }, :default => ENV.to_hash
|
40
40
|
# rubocop:disable Metrics/LineLength
|
41
41
|
option_accessor(:command_search_paths, :contract => { ArrayOf[String] => ArrayOf[String] }) { |config| [File.join(config.root_directory.value, 'bin')] }
|
42
42
|
# rubocop:enable Metrics/LineLength
|
data/lib/aruba/cucumber/hooks.rb
CHANGED
@@ -10,9 +10,6 @@ if Aruba::VERSION >= '1.0.0'
|
|
10
10
|
end
|
11
11
|
|
12
12
|
Before do
|
13
|
-
# this is ENV by default ...
|
14
|
-
aruba.environment.update aruba.config.command_runtime_environment
|
15
|
-
|
16
13
|
# ... so every change needs to be done later
|
17
14
|
prepend_environment_variable 'PATH', aruba.config.command_search_paths.join(':') + ':'
|
18
15
|
set_environment_variable 'HOME', aruba.config.home_directory
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'rspec/expectations/version'
|
2
|
+
|
3
|
+
# @!method be_a_command_found_in_path
|
4
|
+
# This matchers checks if <command> can be found in path
|
5
|
+
#
|
6
|
+
# @return [TrueClass, FalseClass] The result
|
7
|
+
#
|
8
|
+
# false:
|
9
|
+
# * if command was not found in PATH
|
10
|
+
# true:
|
11
|
+
# * if command can be found in PATH
|
12
|
+
#
|
13
|
+
# @example Use matcher
|
14
|
+
#
|
15
|
+
# RSpec.describe do
|
16
|
+
# it { expect(cmd).to be_a_command_found_in_path }
|
17
|
+
# end
|
18
|
+
RSpec::Matchers.define :be_a_command_found_in_path do
|
19
|
+
match do |actual|
|
20
|
+
@actual = Shellwords.split(actual.commandline).first if actual.respond_to? :commandline
|
21
|
+
|
22
|
+
!which(@actual).nil?
|
23
|
+
end
|
24
|
+
|
25
|
+
failure_message do |actual|
|
26
|
+
format(%(expected that command "%s" can be found in PATH "#{ENV['PATH']}".), actual)
|
27
|
+
end
|
28
|
+
|
29
|
+
failure_message_when_negated do |actual|
|
30
|
+
format(%(expected that command "%s" cannot be found in PATH "#{ENV['PATH']}".), actual)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
if RSpec::Expectations::Version::STRING >= '3.0'
|
35
|
+
RSpec::Matchers.alias_matcher :a_command_found_in_path, :be_a_command_found_in_path
|
36
|
+
end
|
@@ -4,17 +4,69 @@ module Aruba
|
|
4
4
|
module Platforms
|
5
5
|
# Abstract environment variables
|
6
6
|
class UnixEnvironmentVariables
|
7
|
+
# Update environment
|
8
|
+
class UpdateAction
|
9
|
+
attr_reader :other_env, :block
|
10
|
+
|
11
|
+
def initialize(other_env, &block)
|
12
|
+
@other_env = other_env
|
13
|
+
|
14
|
+
if RUBY_VERSION <= '1.9.3'
|
15
|
+
# rubocop:disable Style/EachWithObject
|
16
|
+
@other_env = @other_env.to_hash.inject({}) { |a, (k, v)| a[k] = v.to_s; a }
|
17
|
+
# rubocop:enable Style/EachWithObject
|
18
|
+
else
|
19
|
+
@other_env = @other_env.to_h.each_with_object({}) { |(k, v), a| a[k] = v.to_s }
|
20
|
+
end
|
21
|
+
|
22
|
+
if block_given?
|
23
|
+
@block = block
|
24
|
+
else
|
25
|
+
@block = nil
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def call(env)
|
30
|
+
if block
|
31
|
+
env.update(other_env, &block)
|
32
|
+
else
|
33
|
+
env.update(other_env)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
# Remove variables from environment
|
39
|
+
class RemoveAction
|
40
|
+
attr_reader :variables
|
41
|
+
|
42
|
+
def initialize(variables)
|
43
|
+
@variables = Array(variables)
|
44
|
+
end
|
45
|
+
|
46
|
+
def call(env)
|
47
|
+
variables.each { |v| env.delete v }
|
48
|
+
|
49
|
+
env
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
7
53
|
# We need to use this, because `nil` is a valid value as default
|
8
54
|
UNDEFINED = Object.new.freeze
|
9
55
|
|
10
56
|
private
|
11
57
|
|
12
|
-
attr_reader :env
|
58
|
+
attr_reader :actions, :env
|
13
59
|
|
14
60
|
public
|
15
61
|
|
16
|
-
def initialize(env = ENV
|
17
|
-
@
|
62
|
+
def initialize(env = ENV)
|
63
|
+
@actions = []
|
64
|
+
|
65
|
+
if RUBY_VERSION < '2.0'
|
66
|
+
@env = env.to_hash
|
67
|
+
else
|
68
|
+
@env = env.to_h
|
69
|
+
end
|
18
70
|
end
|
19
71
|
|
20
72
|
# Update environment with other en
|
@@ -24,18 +76,10 @@ module Aruba
|
|
24
76
|
#
|
25
77
|
# @yield
|
26
78
|
# Pass block to env
|
27
|
-
def update(other_env
|
28
|
-
|
29
|
-
# rubocop:disable Style/EachWithObject
|
30
|
-
other_env = other_env.to_hash.inject({}) { |a, (k, v)| a[k] = v.to_s; a }
|
31
|
-
# rubocop:enable Style/EachWithObject
|
32
|
-
else
|
33
|
-
other_env = other_env.to_h.each_with_object({}) { |(k, v), a| a[k] = v.to_s }
|
34
|
-
end
|
79
|
+
def update(other_env)
|
80
|
+
actions << UpdateAction.new(other_env)
|
35
81
|
|
36
|
-
|
37
|
-
|
38
|
-
self
|
82
|
+
UnixEnvironmentVariables.new(to_h)
|
39
83
|
end
|
40
84
|
|
41
85
|
# Fetch variable from environment
|
@@ -47,9 +91,9 @@ module Aruba
|
|
47
91
|
# The default value used, if the variable is not defined
|
48
92
|
def fetch(name, default = UNDEFINED)
|
49
93
|
if default == UNDEFINED
|
50
|
-
|
94
|
+
to_h.fetch name.to_s
|
51
95
|
else
|
52
|
-
|
96
|
+
to_h.fetch name.to_s, default
|
53
97
|
end
|
54
98
|
end
|
55
99
|
|
@@ -58,7 +102,7 @@ module Aruba
|
|
58
102
|
# @param [#to_s] name
|
59
103
|
# The name of the variable
|
60
104
|
def key?(name)
|
61
|
-
|
105
|
+
to_h.key? name.to_s
|
62
106
|
end
|
63
107
|
|
64
108
|
# Get value of variable
|
@@ -66,7 +110,7 @@ module Aruba
|
|
66
110
|
# @param [#to_s] name
|
67
111
|
# The name of the variable
|
68
112
|
def [](name)
|
69
|
-
|
113
|
+
to_h[name.to_s]
|
70
114
|
end
|
71
115
|
|
72
116
|
# Set value of variable
|
@@ -77,9 +121,11 @@ module Aruba
|
|
77
121
|
# @param [#to_s] value
|
78
122
|
# The value of the variable
|
79
123
|
def []=(name, value)
|
80
|
-
|
124
|
+
value = value.to_s
|
125
|
+
|
126
|
+
actions << UpdateAction.new(name.to_s => value)
|
81
127
|
|
82
|
-
|
128
|
+
value
|
83
129
|
end
|
84
130
|
|
85
131
|
# Append value to variable
|
@@ -90,10 +136,12 @@ module Aruba
|
|
90
136
|
# @param [#to_s] value
|
91
137
|
# The value of the variable
|
92
138
|
def append(name, value)
|
93
|
-
name
|
94
|
-
|
139
|
+
name = name.to_s
|
140
|
+
value = self[name].to_s + value.to_s
|
141
|
+
|
142
|
+
actions << UpdateAction.new(name => value )
|
95
143
|
|
96
|
-
|
144
|
+
value
|
97
145
|
end
|
98
146
|
|
99
147
|
# Prepend value to variable
|
@@ -104,10 +152,12 @@ module Aruba
|
|
104
152
|
# @param [#to_s] value
|
105
153
|
# The value of the variable
|
106
154
|
def prepend(name, value)
|
107
|
-
name
|
108
|
-
|
155
|
+
name = name.to_s
|
156
|
+
value = value.to_s + self[name].to_s
|
109
157
|
|
110
|
-
|
158
|
+
actions << UpdateAction.new(name => value)
|
159
|
+
|
160
|
+
value
|
111
161
|
end
|
112
162
|
|
113
163
|
# Delete variable
|
@@ -115,9 +165,24 @@ module Aruba
|
|
115
165
|
# @param [#to_s] name
|
116
166
|
# The name of the variable
|
117
167
|
def delete(name)
|
118
|
-
|
168
|
+
# Rescue value, before it is deleted
|
169
|
+
value = to_h[name.to_s]
|
170
|
+
|
171
|
+
actions << RemoveAction.new(name.to_s)
|
172
|
+
|
173
|
+
value
|
174
|
+
end
|
175
|
+
|
176
|
+
# Pass on checks
|
177
|
+
def method_missing(name, *args, &block)
|
178
|
+
super unless to_h.respond_to? name
|
179
|
+
|
180
|
+
to_h.send name, *args, &block
|
181
|
+
end
|
119
182
|
|
120
|
-
|
183
|
+
# Check for respond_to
|
184
|
+
def respond_to_missing?(name, _private)
|
185
|
+
to_h.respond_to? name
|
121
186
|
end
|
122
187
|
|
123
188
|
# Convert to hash
|
@@ -126,17 +191,31 @@ module Aruba
|
|
126
191
|
# A new hash from environment
|
127
192
|
def to_h
|
128
193
|
if RUBY_VERSION < '2.0'
|
129
|
-
Marshal.load(Marshal.dump(
|
194
|
+
Marshal.load(Marshal.dump(prepared_environment.to_hash))
|
130
195
|
else
|
131
|
-
Marshal.load(Marshal.dump(
|
196
|
+
Marshal.load(Marshal.dump(prepared_environment.to_h))
|
132
197
|
end
|
133
198
|
end
|
134
199
|
|
135
200
|
# Reset environment
|
136
201
|
def clear
|
137
|
-
|
202
|
+
value = to_h
|
138
203
|
|
139
|
-
|
204
|
+
actions.clear
|
205
|
+
|
206
|
+
value
|
207
|
+
end
|
208
|
+
|
209
|
+
private
|
210
|
+
|
211
|
+
def prepared_environment
|
212
|
+
if RUBY_VERSION <= '1.9.3'
|
213
|
+
# rubocop:disable Style/EachWithObject
|
214
|
+
actions.inject(ENV.to_hash.merge(env)) { |a, e| e.call(a) }
|
215
|
+
# rubocop:enable Style/EachWithObject
|
216
|
+
else
|
217
|
+
actions.each_with_object(ENV.to_hash.merge(env)) { |e, a| a = e.call(a) }
|
218
|
+
end
|
140
219
|
end
|
141
220
|
end
|
142
221
|
end
|
@@ -34,14 +34,14 @@ module Aruba
|
|
34
34
|
# will always work.
|
35
35
|
class WindowsEnvironmentVariables < UnixEnvironmentVariables
|
36
36
|
def initialize(env = ENV.to_hash)
|
37
|
-
@
|
37
|
+
@actions = []
|
38
38
|
|
39
39
|
if RUBY_VERSION <= '1.9.3'
|
40
40
|
# rubocop:disable Style/EachWithObject
|
41
|
-
@env =
|
41
|
+
@env = env.inject({}) { |a, (k,v)| a[k.to_s.upcase] = v; a }
|
42
42
|
# rubocop:enable Style/EachWithObject
|
43
43
|
else
|
44
|
-
@env =
|
44
|
+
@env = env.each_with_object({}) { |(k,v), a| a[k.to_s.upcase] = v }
|
45
45
|
end
|
46
46
|
end
|
47
47
|
|
data/lib/aruba/rspec.rb
CHANGED
@@ -91,14 +91,13 @@ RSpec.configure do |config|
|
|
91
91
|
config.before :each do
|
92
92
|
next unless self.class.include? Aruba::Api
|
93
93
|
|
94
|
-
|
95
|
-
aruba.environment.prepend 'PATH', aruba.config.command_search_paths.join(':') + ':'
|
94
|
+
prepend_environment_variable 'PATH', aruba.config.command_search_paths.join(':') + ':'
|
96
95
|
end
|
97
96
|
|
98
97
|
# Use configured home directory as HOME
|
99
98
|
config.before :each do |example|
|
100
99
|
next unless self.class.include? Aruba::Api
|
101
100
|
|
102
|
-
|
101
|
+
set_environment_variable 'HOME', aruba.config.home_directory
|
103
102
|
end
|
104
103
|
end
|
data/lib/aruba/runtime.rb
CHANGED
@@ -40,14 +40,15 @@ module Aruba
|
|
40
40
|
attr_accessor :config, :environment, :logger, :command_monitor, :announcer, :event_bus
|
41
41
|
|
42
42
|
def initialize(opts = {})
|
43
|
-
@
|
44
|
-
@event_bus = ::Event::Bus.new(::Event::NameResolver.new(Aruba::Events))
|
43
|
+
@event_bus = ::Event::Bus.new(::Event::NameResolver.new(Aruba::Events))
|
45
44
|
@announcer = opts.fetch(:announcer, Aruba.platform.announcer.new)
|
46
|
-
|
47
|
-
@
|
45
|
+
@config = opts.fetch(:config, ConfigWrapper.new(Aruba.config.make_copy, @event_bus))
|
46
|
+
@environment = opts.fetch(:environment, Aruba.platform.environment_variables.new)
|
48
47
|
@current_directory = ArubaPath.new(@config.working_directory)
|
49
48
|
@root_directory = ArubaPath.new(@config.root_directory)
|
50
49
|
|
50
|
+
@environment.update(@config.command_runtime_environment)
|
51
|
+
|
51
52
|
if Aruba::VERSION < '1'
|
52
53
|
@command_monitor = opts.fetch(:command_monitor, Aruba.platform.command_monitor.new(:announcer => @announcer))
|
53
54
|
else
|
data/lib/aruba/version.rb
CHANGED
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.
|
4
|
+
version: 0.12.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Aslak Hellesøy
|
@@ -13,7 +13,7 @@ authors:
|
|
13
13
|
autorequire:
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
|
-
date:
|
16
|
+
date: 2016-01-03 00:00:00.000000000 Z
|
17
17
|
dependencies:
|
18
18
|
- !ruby/object:Gem::Dependency
|
19
19
|
name: cucumber
|
@@ -119,14 +119,14 @@ dependencies:
|
|
119
119
|
requirements:
|
120
120
|
- - "~>"
|
121
121
|
- !ruby/object:Gem::Version
|
122
|
-
version: 1.
|
122
|
+
version: '1.11'
|
123
123
|
type: :development
|
124
124
|
prerelease: false
|
125
125
|
version_requirements: !ruby/object:Gem::Requirement
|
126
126
|
requirements:
|
127
127
|
- - "~>"
|
128
128
|
- !ruby/object:Gem::Version
|
129
|
-
version: 1.
|
129
|
+
version: '1.11'
|
130
130
|
description: Extension for popular TDD and BDD frameworks like "Cucumber", "RSpec"
|
131
131
|
and "Minitest" to make testing commandline applications meaningful, easy and fun.
|
132
132
|
email: cukes@googlegroups.com
|
@@ -168,8 +168,8 @@ files:
|
|
168
168
|
- features/api/command/which.feature
|
169
169
|
- features/api/core/expand_path.feature
|
170
170
|
- features/api/environment/append_environment_variable.feature
|
171
|
+
- features/api/environment/delete_environment_variable.feature
|
171
172
|
- features/api/environment/prepend_environment_variable.feature
|
172
|
-
- features/api/environment/remove_environment_variable.feature
|
173
173
|
- features/api/environment/set_environment_variable.feature
|
174
174
|
- features/api/filesystem/cd.feature
|
175
175
|
- features/api/filesystem/create_directory.feature
|
@@ -187,6 +187,7 @@ files:
|
|
187
187
|
- features/api/text/unescape_text.feature
|
188
188
|
- features/cli/console.feature
|
189
189
|
- features/cli/init.feature
|
190
|
+
- features/configuration/command_runtime_environment.feature
|
190
191
|
- features/configuration/console_history_file.feature
|
191
192
|
- features/configuration/exit_timeout.feature
|
192
193
|
- features/configuration/fixtures_directories.feature
|
@@ -212,6 +213,7 @@ files:
|
|
212
213
|
- features/hooks/before/command.feature
|
213
214
|
- features/matchers/collection/include_an_object.feature
|
214
215
|
- features/matchers/directory/have_sub_directory.feature
|
216
|
+
- features/matchers/file/be_a_command_found_in_path.feature
|
215
217
|
- features/matchers/file/be_existing_executable.feature
|
216
218
|
- features/matchers/file/be_existing_file.feature
|
217
219
|
- features/matchers/file/have_file_content.feature
|
@@ -345,6 +347,7 @@ files:
|
|
345
347
|
- lib/aruba/matchers/directory/have_sub_directory.rb
|
346
348
|
- lib/aruba/matchers/environment.rb
|
347
349
|
- lib/aruba/matchers/file.rb
|
350
|
+
- lib/aruba/matchers/file/be_a_command_found_in_path.rb
|
348
351
|
- lib/aruba/matchers/file/be_an_existing_executable.rb
|
349
352
|
- lib/aruba/matchers/file/be_an_existing_file.rb
|
350
353
|
- lib/aruba/matchers/file/have_file_content.rb
|
@@ -450,7 +453,7 @@ post_install_message: |
|
|
450
453
|
* Make sure you add something like that to your `Gemfile`. Otherwise you will
|
451
454
|
get cucumber > 2 and this will fail on ruby 1.8.7
|
452
455
|
|
453
|
-
gem 'cucumber', ~>
|
456
|
+
gem 'cucumber', '~> 1.3.20'
|
454
457
|
|
455
458
|
With aruba >= 1.0 there will be breaking changes. Make sure to read https://github.com/cucumber/aruba/blob/master/History.md for 1.0.0
|
456
459
|
rdoc_options:
|
@@ -469,10 +472,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
469
472
|
version: '0'
|
470
473
|
requirements: []
|
471
474
|
rubyforge_project:
|
472
|
-
rubygems_version: 2.
|
475
|
+
rubygems_version: 2.5.1
|
473
476
|
signing_key:
|
474
477
|
specification_version: 4
|
475
|
-
summary: aruba-0.
|
478
|
+
summary: aruba-0.12.0
|
476
479
|
test_files:
|
477
480
|
- features/api/command/find_command.feature
|
478
481
|
- features/api/command/last_command_started.feature
|
@@ -486,8 +489,8 @@ test_files:
|
|
486
489
|
- features/api/command/which.feature
|
487
490
|
- features/api/core/expand_path.feature
|
488
491
|
- features/api/environment/append_environment_variable.feature
|
492
|
+
- features/api/environment/delete_environment_variable.feature
|
489
493
|
- features/api/environment/prepend_environment_variable.feature
|
490
|
-
- features/api/environment/remove_environment_variable.feature
|
491
494
|
- features/api/environment/set_environment_variable.feature
|
492
495
|
- features/api/filesystem/cd.feature
|
493
496
|
- features/api/filesystem/create_directory.feature
|
@@ -505,6 +508,7 @@ test_files:
|
|
505
508
|
- features/api/text/unescape_text.feature
|
506
509
|
- features/cli/console.feature
|
507
510
|
- features/cli/init.feature
|
511
|
+
- features/configuration/command_runtime_environment.feature
|
508
512
|
- features/configuration/console_history_file.feature
|
509
513
|
- features/configuration/exit_timeout.feature
|
510
514
|
- features/configuration/fixtures_directories.feature
|
@@ -530,6 +534,7 @@ test_files:
|
|
530
534
|
- features/hooks/before/command.feature
|
531
535
|
- features/matchers/collection/include_an_object.feature
|
532
536
|
- features/matchers/directory/have_sub_directory.feature
|
537
|
+
- features/matchers/file/be_a_command_found_in_path.feature
|
533
538
|
- features/matchers/file/be_existing_executable.feature
|
534
539
|
- features/matchers/file/be_existing_file.feature
|
535
540
|
- features/matchers/file/have_file_content.feature
|