aruba 0.11.2 → 0.12.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.
- 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
|