aruba 0.6.2 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +3 -0
- data/.rubocop.yml +167 -3
- data/.simplecov +32 -0
- data/.travis.yml +5 -2
- data/.yardopts +8 -0
- data/CONTRIBUTING.md +18 -8
- data/Gemfile +25 -0
- data/History.md +8 -0
- data/README.md +80 -18
- data/Rakefile +1 -1
- data/aruba.gemspec +6 -8
- data/cucumber.yml +5 -6
- data/features/debug.feature +15 -0
- data/features/file_system_commands.feature +14 -2
- data/features/fixtures/copy/file.txt +1 -0
- data/features/fixtures/fixtures-app/test.txt +1 -0
- data/features/fixtures/spawn_process/stderr.sh +3 -0
- data/features/interactive.feature +2 -2
- data/features/step_definitions/aruba_dev_steps.rb +1 -1
- data/features/support/custom_main.rb +10 -6
- data/features/support/env.rb +27 -2
- data/features/support/simplecov_setup.rb +8 -0
- data/lib/aruba.rb +2 -2
- data/lib/aruba/announcer.rb +161 -0
- data/lib/aruba/api.rb +490 -251
- data/lib/aruba/config.rb +0 -1
- data/lib/aruba/cucumber.rb +71 -59
- data/lib/aruba/cucumber/hooks.rb +18 -13
- data/lib/aruba/errors.rb +6 -0
- data/lib/aruba/in_process.rb +5 -45
- data/lib/aruba/matchers/command.rb +79 -0
- data/lib/aruba/matchers/directory.rb +59 -0
- data/lib/aruba/matchers/file.rb +177 -0
- data/lib/aruba/matchers/mode.rb +52 -0
- data/lib/aruba/matchers/path.rb +99 -0
- data/lib/aruba/matchers/rspec_matcher_include_regexp.rb +21 -1
- data/lib/aruba/process_monitor.rb +113 -0
- data/lib/aruba/processes/basic_process.rb +25 -0
- data/lib/aruba/processes/debug_process.rb +59 -0
- data/lib/aruba/processes/in_process.rb +86 -0
- data/lib/aruba/processes/spawn_process.rb +159 -0
- data/lib/aruba/reporting.rb +2 -2
- data/lib/aruba/rspec.rb +26 -0
- data/lib/aruba/spawn_process.rb +5 -104
- data/lib/aruba/utils.rb +21 -0
- data/script/bootstrap +22 -0
- data/script/console +17 -0
- data/script/test +3 -0
- data/spec/aruba/api_spec.rb +813 -147
- data/spec/aruba/hooks_spec.rb +0 -1
- data/spec/aruba/matchers/command_spec.rb +43 -0
- data/spec/aruba/matchers/directory_spec.rb +58 -0
- data/spec/aruba/matchers/file_spec.rb +131 -0
- data/spec/aruba/matchers/path_spec.rb +85 -0
- data/spec/aruba/spawn_process_spec.rb +46 -28
- data/spec/spec_helper.rb +18 -13
- data/{config/rubocop/include.yml → spec/support/configs/.keep} +0 -0
- data/spec/support/configs/rspec.rb +15 -0
- data/spec/support/helpers/.keep +0 -0
- data/spec/support/helpers/reporting.rb +44 -0
- data/spec/support/matchers/.keep +0 -0
- data/spec/support/shared_contexts/.keep +0 -0
- data/spec/support/shared_contexts/aruba.rb +45 -0
- data/spec/support/shared_examples/.keep +0 -0
- data/spec/support/shared_examples/directory.rb +7 -0
- data/spec/support/shared_examples/file.rb +7 -0
- data/templates/js/jquery-1.11.3.min.js +5 -0
- data/templates/main.erb +1 -1
- metadata +87 -96
- data/config/rubocop/exclude.yml +0 -160
- data/templates/js/jquery-1.6.1.min.js +0 -18
data/spec/aruba/hooks_spec.rb
CHANGED
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe 'Command Matchers' do
|
4
|
+
include_context 'uses aruba API'
|
5
|
+
|
6
|
+
def expand_path(*args)
|
7
|
+
@aruba.expand_path(*args)
|
8
|
+
end
|
9
|
+
|
10
|
+
def announcer(*args)
|
11
|
+
@aruba.send(:announcer, *args)
|
12
|
+
end
|
13
|
+
|
14
|
+
describe '#to_have_exit_status' do
|
15
|
+
let(:cmd) { 'true' }
|
16
|
+
|
17
|
+
before(:each) { run(cmd) }
|
18
|
+
|
19
|
+
context 'when has exit 0' do
|
20
|
+
it { expect(last_command).to have_exit_status 0 }
|
21
|
+
end
|
22
|
+
|
23
|
+
context 'when has exit 0' do
|
24
|
+
let(:cmd) { 'false' }
|
25
|
+
it { expect(last_command).not_to have_exit_status 0 }
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe '#to_be_successfully_executed_' do
|
30
|
+
let(:cmd) { 'true' }
|
31
|
+
|
32
|
+
before(:each) { run(cmd) }
|
33
|
+
|
34
|
+
context 'when has exit 0' do
|
35
|
+
it { expect(last_command).to be_successfully_executed }
|
36
|
+
end
|
37
|
+
|
38
|
+
context 'when has exit 0' do
|
39
|
+
let(:cmd) { 'false' }
|
40
|
+
it { expect(last_command).not_to be_successfully_executed }
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe 'Directory Matchers' do
|
4
|
+
include_context 'uses aruba API'
|
5
|
+
|
6
|
+
def expand_path(*args)
|
7
|
+
@aruba.expand_path(*args)
|
8
|
+
end
|
9
|
+
|
10
|
+
describe 'to_be_existing_directory' do
|
11
|
+
let(:name) { 'test.d' }
|
12
|
+
let(:path) { File.join(@aruba.current_directory, name) }
|
13
|
+
|
14
|
+
context 'when directory exists' do
|
15
|
+
before :each do
|
16
|
+
FileUtils.mkdir_p path
|
17
|
+
end
|
18
|
+
|
19
|
+
it { expect(name).to be_existing_directory }
|
20
|
+
end
|
21
|
+
|
22
|
+
context 'when directory does not exist' do
|
23
|
+
it { expect(name).not_to be_existing_directory }
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe 'to_have_sub_directory' do
|
28
|
+
let(:name) { 'test.d' }
|
29
|
+
let(:path) { File.join(@aruba.current_directory, name) }
|
30
|
+
let(:content) { %w(subdir.1.d subdir.2.d) }
|
31
|
+
|
32
|
+
context 'when directory exists' do
|
33
|
+
before :each do
|
34
|
+
FileUtils.mkdir_p path
|
35
|
+
end
|
36
|
+
|
37
|
+
before :each do
|
38
|
+
Array(content).each { |p| Dir.mkdir File.join(path, p) }
|
39
|
+
end
|
40
|
+
|
41
|
+
context 'when single directory' do
|
42
|
+
it { expect(name).to have_sub_directory('subdir.1.d') }
|
43
|
+
end
|
44
|
+
|
45
|
+
context 'when multiple directories' do
|
46
|
+
it { expect(name).to have_sub_directory(['subdir.1.d', 'subdir.2.d']) }
|
47
|
+
end
|
48
|
+
|
49
|
+
context 'when non existing directory' do
|
50
|
+
it { expect(name).not_to have_sub_directory('subdir.3.d') }
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
context 'when directory does not exist' do
|
55
|
+
it { expect(name).not_to have_sub_directory('subdir') }
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,131 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe 'File Matchers' do
|
4
|
+
include_context 'uses aruba API'
|
5
|
+
include_context 'needs to expand paths'
|
6
|
+
|
7
|
+
describe 'to_be_existing_file' do
|
8
|
+
let(:name) { @file_name }
|
9
|
+
|
10
|
+
context 'when file exists' do
|
11
|
+
before(:each) { create_test_files(name) }
|
12
|
+
|
13
|
+
it { expect(name).to be_existing_file }
|
14
|
+
end
|
15
|
+
|
16
|
+
context 'when file does not exist' do
|
17
|
+
it { expect(name).not_to be_existing_file }
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe 'to_be_existing_files' do
|
22
|
+
let(:name) { %w(file1.txt file2.txt) }
|
23
|
+
|
24
|
+
context 'when files exists' do
|
25
|
+
before(:each) { create_test_files(name) }
|
26
|
+
|
27
|
+
context 'when list of files is given' do
|
28
|
+
it { expect(name).to be_existing_files }
|
29
|
+
end
|
30
|
+
|
31
|
+
context 'when no list of files is given' do
|
32
|
+
let(:name) { 'file1.txt' }
|
33
|
+
it { expect(name).not_to be_existing_files }
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
context 'when file does not exist' do
|
38
|
+
it { expect(name).not_to be_existing_files }
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
describe 'to_have_file_content' do
|
43
|
+
context 'when file exists' do
|
44
|
+
before :each do
|
45
|
+
File.write(@file_path, 'aba')
|
46
|
+
end
|
47
|
+
|
48
|
+
context 'and file content is exactly equal string ' do
|
49
|
+
it { expect(@file_name).to have_file_content('aba') }
|
50
|
+
end
|
51
|
+
|
52
|
+
context 'and file content contains string' do
|
53
|
+
it { expect(@file_name).to have_file_content(/b/) }
|
54
|
+
end
|
55
|
+
|
56
|
+
context 'and file content is not exactly equal string' do
|
57
|
+
it { expect(@file_name).not_to have_file_content('c') }
|
58
|
+
end
|
59
|
+
|
60
|
+
context 'and file content not contains string' do
|
61
|
+
it { expect(@file_name).not_to have_file_content(/c/) }
|
62
|
+
end
|
63
|
+
|
64
|
+
context 'when other matchers is given which matches a string start with "a"' do
|
65
|
+
it { expect(@file_name).to have_file_content(a_string_starting_with('a')) }
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
context 'when file does not exist' do
|
70
|
+
it { expect(@file_name).not_to have_file_content('a') }
|
71
|
+
end
|
72
|
+
|
73
|
+
describe "description" do
|
74
|
+
context "when string" do
|
75
|
+
it { expect(have_file_content("a").description).to eq('have file content: "a"') }
|
76
|
+
end
|
77
|
+
|
78
|
+
context "when regexp" do
|
79
|
+
it { expect(have_file_content(/a/).description).to eq('have file content: /a/') }
|
80
|
+
end
|
81
|
+
|
82
|
+
context "when matcher" do
|
83
|
+
it { expect(have_file_content(a_string_starting_with "a").description).to eq('have file content: a string starting with "a"') }
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
describe 'failure messages' do
|
88
|
+
def fail_with(message)
|
89
|
+
raise_error(RSpec::Expectations::ExpectationNotMetError, message)
|
90
|
+
end
|
91
|
+
|
92
|
+
example 'for a string' do
|
93
|
+
expect do
|
94
|
+
expect(@file_name).to have_file_content("z")
|
95
|
+
end.to fail_with('expected "test.txt" to have file content: "z"')
|
96
|
+
end
|
97
|
+
|
98
|
+
example 'for a string' do
|
99
|
+
expect do
|
100
|
+
expect(@file_name).to have_file_content(/z/)
|
101
|
+
end.to fail_with('expected "test.txt" to have file content: /z/')
|
102
|
+
end
|
103
|
+
|
104
|
+
example 'for a matcher' do
|
105
|
+
expect do
|
106
|
+
expect(@file_name).to have_file_content(a_string_starting_with "z")
|
107
|
+
end.to fail_with('expected "test.txt" to have file content: a string starting with "z"')
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
describe 'to_have_file_size' do
|
113
|
+
context 'when file exists' do
|
114
|
+
before :each do
|
115
|
+
File.write(@file_path, '')
|
116
|
+
end
|
117
|
+
|
118
|
+
context 'and file size is equal' do
|
119
|
+
it { expect(@file_name).to have_file_size(0) }
|
120
|
+
end
|
121
|
+
|
122
|
+
context 'and file size is not equal' do
|
123
|
+
it { expect(@file_name).not_to have_file_size(1) }
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
context 'when file does not exist' do
|
128
|
+
it { expect(@file_name).not_to have_file_size(0) }
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
@@ -0,0 +1,85 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe 'Path Matchers' do
|
4
|
+
include_context 'uses aruba API'
|
5
|
+
|
6
|
+
def expand_path(*args)
|
7
|
+
@aruba.expand_path(*args)
|
8
|
+
end
|
9
|
+
|
10
|
+
describe 'to_match_path_pattern' do
|
11
|
+
context 'when pattern is string' do
|
12
|
+
context 'when there is file which matches path pattern' do
|
13
|
+
before :each do
|
14
|
+
File.write(@file_path, '')
|
15
|
+
end
|
16
|
+
|
17
|
+
it { expect(all_paths).to match_path_pattern(expand_path(@file_name)) }
|
18
|
+
end
|
19
|
+
|
20
|
+
context 'when there is not file which matches path pattern' do
|
21
|
+
it { expect(all_paths).not_to match_path_pattern('test') }
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
context 'when pattern is regex' do
|
26
|
+
context 'when there is file which matches path pattern' do
|
27
|
+
before :each do
|
28
|
+
File.write(@file_path, '')
|
29
|
+
end
|
30
|
+
|
31
|
+
it { expect(all_paths).to match_path_pattern(/test/) }
|
32
|
+
end
|
33
|
+
|
34
|
+
context 'when there is not file which matches path pattern' do
|
35
|
+
it { expect(all_paths).not_to match_path_pattern(/test/) }
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
describe 'to_be_absolute_path' do
|
41
|
+
let(:name) { @file_name }
|
42
|
+
let(:path) { File.expand_path(File.join(@aruba.current_directory, name)) }
|
43
|
+
|
44
|
+
context 'when is absolute path' do
|
45
|
+
it { expect(path).to be_absolute_path }
|
46
|
+
end
|
47
|
+
|
48
|
+
context 'when is relative path' do
|
49
|
+
it { expect(name).not_to be_absolute_path }
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
describe 'to_be_existing_path' do
|
54
|
+
context 'when file' do
|
55
|
+
context 'exists' do
|
56
|
+
before :each do
|
57
|
+
File.write(@file_path, '')
|
58
|
+
end
|
59
|
+
|
60
|
+
it { expect(@file_name).to be_existing_path }
|
61
|
+
end
|
62
|
+
|
63
|
+
context 'does not exist' do
|
64
|
+
it { expect(@file_name).not_to be_existing_path }
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
context 'when directory' do
|
69
|
+
let(:name) { 'test.d' }
|
70
|
+
let(:path) { File.join(@aruba.current_directory, name) }
|
71
|
+
|
72
|
+
context 'exists' do
|
73
|
+
before :each do
|
74
|
+
FileUtils.mkdir_p path
|
75
|
+
end
|
76
|
+
|
77
|
+
it { expect(name).to be_existing_path }
|
78
|
+
end
|
79
|
+
|
80
|
+
context 'does not exist' do
|
81
|
+
it { expect(name).not_to be_existing_path }
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
@@ -1,45 +1,63 @@
|
|
1
|
-
require 'aruba/spawn_process'
|
1
|
+
require 'aruba/processes/spawn_process'
|
2
2
|
|
3
|
-
|
4
|
-
|
3
|
+
RSpec.describe Aruba::Processes::SpawnProcess do
|
4
|
+
subject(:process) { described_class.new(command, exit_timeout, io_wait, working_directory) }
|
5
5
|
|
6
|
-
|
6
|
+
let(:command) { 'echo "yo"' }
|
7
|
+
let(:exit_timeout) { 1 }
|
8
|
+
let(:io_wait) { 1 }
|
9
|
+
let(:working_directory) { Dir.getwd }
|
7
10
|
|
8
|
-
|
9
|
-
|
11
|
+
describe "#stdout" do
|
12
|
+
before(:each) { process.run! }
|
10
13
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
+
context 'when invoked once' do
|
15
|
+
it { expect(process.stdout).to eq "yo\n" }
|
16
|
+
end
|
17
|
+
|
18
|
+
context 'when invoked twice' do
|
19
|
+
it { 2.times { expect(process.stdout).to eq "yo\n" } }
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
describe "#stderr" do
|
24
|
+
let(:command) { 'features/fixtures/spawn_process/stderr.sh yo' }
|
25
|
+
|
26
|
+
before(:each) { process.run! }
|
14
27
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
end
|
28
|
+
context 'when invoked once' do
|
29
|
+
it { expect(process.stderr).to eq "yo\n" }
|
30
|
+
end
|
19
31
|
|
32
|
+
context 'when invoked twice' do
|
33
|
+
it { 2.times { expect(process.stderr).to eq "yo\n" } }
|
20
34
|
end
|
35
|
+
end
|
21
36
|
|
22
|
-
|
23
|
-
|
37
|
+
describe "#stop" do
|
38
|
+
let(:reader) { double('reader') }
|
24
39
|
|
25
|
-
|
26
|
-
reader = double( 'null_object' )
|
27
|
-
allow( reader ).to receive( :stderr )
|
28
|
-
expect( reader ).to receive( :stdout ).with("yo\n")
|
40
|
+
before(:each) { process.run! }
|
29
41
|
|
30
|
-
|
31
|
-
|
42
|
+
before :each do
|
43
|
+
allow(reader).to receive(:stderr)
|
44
|
+
expect(reader).to receive(:stdout).with("yo\n")
|
32
45
|
end
|
33
46
|
|
34
|
-
|
35
|
-
|
36
|
-
|
47
|
+
context 'when stopped successfully' do
|
48
|
+
it { process.stop(reader) }
|
49
|
+
end
|
50
|
+
end
|
37
51
|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
end
|
52
|
+
describe "#run!" do
|
53
|
+
context "when process run succeeds" do
|
54
|
+
it { expect { process.run! }.not_to raise_error }
|
42
55
|
end
|
43
56
|
|
57
|
+
context "when process run fails" do
|
58
|
+
let(:command) { 'does_not_exists' }
|
59
|
+
|
60
|
+
it { expect {process.run!}.to raise_error Aruba::LaunchError }
|
61
|
+
end
|
44
62
|
end
|
45
63
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,13 +1,18 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
$LOAD_PATH << ::File.expand_path('../../lib', __FILE__)
|
4
|
+
|
5
|
+
require 'simplecov'
|
6
|
+
SimpleCov.command_name 'rspec'
|
7
|
+
SimpleCov.start
|
8
|
+
|
9
|
+
# Pull in all of the gems including those in the `test` group
|
10
|
+
require 'bundler'
|
11
|
+
Bundler.require
|
12
|
+
|
13
|
+
# Loading support files
|
14
|
+
Dir.glob(::File.expand_path('../support/*.rb', __FILE__)).each { |f| require_relative f }
|
15
|
+
Dir.glob(::File.expand_path('../support/**/*.rb', __FILE__)).each { |f| require_relative f }
|
16
|
+
|
17
|
+
# Avoid writing "describe LocalPac::MyClass do [..]" but "describe MyClass do [..]"
|
18
|
+
include Aruba
|