aruba 0.9.0 → 0.10.0.pre
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 +6 -0
- data/Gemfile +2 -0
- data/History.md +23 -1
- data/README.md +2 -2
- data/aruba.gemspec +1 -1
- data/cucumber.yml +4 -0
- data/features/api/command/run.feature +18 -0
- data/features/api/environment/remove_environment_variable.feature +63 -0
- data/features/api/environment/set_environment_variable.feature +47 -10
- data/features/api/{command → text}/extract_text.feature +4 -24
- data/features/api/text/sanitize_text.feature +228 -0
- data/features/api/{command → text}/unescape_text.feature +9 -13
- data/features/cli/init.feature +79 -0
- data/features/commands/output/all_output.feature +1 -0
- data/features/getting_started/supported_testing_frameworks.feature +104 -0
- data/features/output.feature +3 -2
- data/features/step_definitions/aruba_dev_steps.rb +1 -60
- data/features/step_definitions/hooks.rb +6 -0
- data/fixtures/empty-app/README.md +1 -11
- data/lib/aruba/api.rb +2 -0
- data/lib/aruba/api/command.rb +0 -19
- data/lib/aruba/api/deprecated.rb +6 -3
- data/lib/aruba/api/environment.rb +18 -0
- data/lib/aruba/api/filesystem.rb +1 -1
- data/lib/aruba/api/text.rb +41 -0
- data/lib/aruba/cli.rb +11 -0
- data/lib/aruba/console.rb +3 -2
- data/lib/aruba/cucumber.rb +1 -0
- data/lib/aruba/cucumber/command.rb +44 -88
- data/lib/aruba/cucumber/environment.rb +7 -3
- data/lib/aruba/cucumber/file.rb +14 -17
- data/lib/aruba/cucumber/hooks.rb +1 -0
- data/lib/aruba/cucumber/testing_frameworks.rb +95 -0
- data/lib/aruba/initializer.rb +185 -0
- data/lib/aruba/matchers/collection/all.rb +9 -0
- data/lib/aruba/matchers/command/have_output.rb +1 -2
- data/lib/aruba/matchers/command/have_output_on_stderr.rb +1 -2
- data/lib/aruba/matchers/command/have_output_on_stdout.rb +1 -2
- data/lib/aruba/matchers/string.rb +1 -0
- data/lib/aruba/matchers/string/include_output_string.rb +36 -0
- data/lib/aruba/matchers/string/match_output_string.rb +37 -0
- data/lib/aruba/matchers/string/output_string_eq.rb +35 -0
- data/lib/aruba/platforms/local_environment.rb +2 -0
- data/lib/aruba/platforms/unix_environment_variables.rb +10 -0
- data/lib/aruba/platforms/unix_platform.rb +3 -1
- data/lib/aruba/platforms/windows_environment_variables.rb +4 -0
- data/lib/aruba/processes/spawn_process.rb +6 -2
- data/lib/aruba/version.rb +1 -1
- metadata +28 -16
- data/fixtures/empty-app/bin/cli +0 -6
- data/fixtures/empty-app/script/console +0 -14
- data/fixtures/empty-app/spec/spec_helper.rb +0 -9
- data/lib/aruba/matchers/collection/all_objects.rb +0 -2
data/lib/aruba/cucumber/file.rb
CHANGED
@@ -29,14 +29,11 @@ Given(/^(?:an|the) executable(?: named)? "([^"]*)" with:$/) do |file_name, file_
|
|
29
29
|
end
|
30
30
|
|
31
31
|
Given(/^(?:a|the) file(?: named)? "([^"]*)" with "([^"]*)"$/) do |file_name, file_content|
|
32
|
-
|
33
|
-
file_content = extract_text(file_content) if !aruba.config.keep_ansi || aruba.config.remove_ansi_escape_sequences
|
34
|
-
|
35
|
-
write_file(file_name, file_content)
|
32
|
+
write_file(file_name, unescape_text(file_content))
|
36
33
|
end
|
37
34
|
|
38
35
|
Given(/^(?:a|the) file(?: named)? "([^"]*)" with mode "([^"]*)" and with:$/) do |file_name, file_mode, file_content|
|
39
|
-
write_file(file_name, file_content)
|
36
|
+
write_file(file_name, unescape_text(file_content))
|
40
37
|
chmod(file_mode, file_name)
|
41
38
|
end
|
42
39
|
|
@@ -95,7 +92,7 @@ Then(/^the following files should (not )?exist:$/) do |negated, files|
|
|
95
92
|
if negated
|
96
93
|
expect(files).not_to include an_existing_file
|
97
94
|
else
|
98
|
-
expect(files).to
|
95
|
+
expect(files).to Aruba::Matchers.all be_an_existing_file
|
99
96
|
end
|
100
97
|
end
|
101
98
|
|
@@ -109,9 +106,9 @@ end
|
|
109
106
|
|
110
107
|
Then(/^(?:a|the) file matching %r<(.*?)> should (not )?exist$/) do |pattern, expect_match|
|
111
108
|
if expect_match
|
112
|
-
expect(all_paths).not_to include
|
109
|
+
expect(all_paths).not_to include a_file_name_matching(pattern)
|
113
110
|
else
|
114
|
-
expect(all_paths).to include match
|
111
|
+
expect(all_paths).to include match a_file_name_matching(pattern)
|
115
112
|
end
|
116
113
|
end
|
117
114
|
|
@@ -129,7 +126,7 @@ Then(/^the following directories should (not )?exist:$/) do |negated, directorie
|
|
129
126
|
if negated
|
130
127
|
expect(directories).not_to include an_existing_directory
|
131
128
|
else
|
132
|
-
expect(directories).to
|
129
|
+
expect(directories).to Aruba::Matchers.all be_an_existing_directory
|
133
130
|
end
|
134
131
|
end
|
135
132
|
|
@@ -143,17 +140,17 @@ end
|
|
143
140
|
|
144
141
|
Then(/^(?:a|the) file(?: named)? "([^"]*)" should (not )?contain "([^"]*)"$/) do |file, negated, content|
|
145
142
|
if negated
|
146
|
-
expect(file).not_to have_file_content
|
143
|
+
expect(file).not_to have_file_content file_content_including(content.chomp)
|
147
144
|
else
|
148
|
-
expect(file).to have_file_content
|
145
|
+
expect(file).to have_file_content file_content_including(content.chomp)
|
149
146
|
end
|
150
147
|
end
|
151
148
|
|
152
149
|
Then(/^(?:a|the) file(?: named)? "([^"]*)" should (not )?contain:$/) do |file, negated, content|
|
153
150
|
if negated
|
154
|
-
expect(file).not_to have_file_content
|
151
|
+
expect(file).not_to have_file_content file_content_including(content.chomp)
|
155
152
|
else
|
156
|
-
expect(file).to have_file_content
|
153
|
+
expect(file).to have_file_content file_content_including(content.chomp)
|
157
154
|
end
|
158
155
|
end
|
159
156
|
|
@@ -167,17 +164,17 @@ end
|
|
167
164
|
|
168
165
|
Then(/^(?:a|the) file(?: named)? "([^"]*)" should (not )?match %r<([^\/]*)>$/) do |file, negated, content|
|
169
166
|
if negated
|
170
|
-
expect(file).not_to have_file_content
|
167
|
+
expect(file).not_to have_file_content file_content_matching(content)
|
171
168
|
else
|
172
|
-
expect(file).to have_file_content
|
169
|
+
expect(file).to have_file_content file_content_matching(content)
|
173
170
|
end
|
174
171
|
end
|
175
172
|
|
176
173
|
Then(/^(?:a|the) file(?: named)? "([^"]*)" should (not )?match \/([^\/]*)\/$/) do |file, negated, content|
|
177
174
|
if negated
|
178
|
-
expect(file).not_to have_file_content
|
175
|
+
expect(file).not_to have_file_content file_content_matching(content)
|
179
176
|
else
|
180
|
-
expect(file).to have_file_content
|
177
|
+
expect(file).to have_file_content file_content_matching(content)
|
181
178
|
end
|
182
179
|
end
|
183
180
|
|
data/lib/aruba/cucumber/hooks.rb
CHANGED
@@ -0,0 +1,95 @@
|
|
1
|
+
# Cucumber
|
2
|
+
Then /^the feature(?:s)? should( not)?(?: all)? pass$/ do |negated|
|
3
|
+
if negated
|
4
|
+
step 'the output should contain " failed)"'
|
5
|
+
step 'the exit status should be 1'
|
6
|
+
else
|
7
|
+
step 'the output should not contain " failed)"'
|
8
|
+
step 'the output should not contain " undefined)"'
|
9
|
+
step 'the exit status should be 0'
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
# Cucumber
|
14
|
+
Then /^the feature(?:s)? should( not)?(?: all)? pass with( regex)?:$/ do |negated, regex, string|
|
15
|
+
if negated
|
16
|
+
step 'the output should contain " failed)"'
|
17
|
+
step 'the exit status should be 1'
|
18
|
+
else
|
19
|
+
step 'the output should not contain " failed)"'
|
20
|
+
step 'the output should not contain " undefined)"'
|
21
|
+
step 'the exit status should be 0'
|
22
|
+
end
|
23
|
+
|
24
|
+
if regex
|
25
|
+
step "the output should match %r<#{string}>"
|
26
|
+
else
|
27
|
+
step 'the output should contain:', string
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
# RSpec
|
32
|
+
Then /^the spec(?:s)? should( not)?(?: all)? pass(?: with (\d+) failures?)?$/ do |negated, count_failures|
|
33
|
+
if negated
|
34
|
+
if count_failures.nil?
|
35
|
+
step 'the output should not contain "0 failures"'
|
36
|
+
else
|
37
|
+
step %(the output should contain "#{count_failures} failures")
|
38
|
+
end
|
39
|
+
|
40
|
+
step 'the exit status should be 1'
|
41
|
+
else
|
42
|
+
step 'the output should contain "0 failures"'
|
43
|
+
step 'the exit status should be 0'
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
# RSpec
|
48
|
+
Then /^the spec(?:s)? should( not)?(?: all)? pass with( regex)?:$/ do |negated, regex, string|
|
49
|
+
if negated
|
50
|
+
step 'the output should contain " failed)"'
|
51
|
+
step 'the exit status should be 1'
|
52
|
+
else
|
53
|
+
step 'the output should not contain " failed)"'
|
54
|
+
step 'the exit status should be 0'
|
55
|
+
end
|
56
|
+
|
57
|
+
if regex
|
58
|
+
step "the output should match %r<#{string}>"
|
59
|
+
else
|
60
|
+
step 'the output should contain:', string
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
# Minitest
|
65
|
+
Then /^the tests(?:s)? should( not)?(?: all)? pass(?: with (\d+) failures?)?$/ do |negated, count_failures|
|
66
|
+
if negated
|
67
|
+
if count_failures.nil?
|
68
|
+
step 'the output should not contain "0 errors"'
|
69
|
+
else
|
70
|
+
step %(the output should contain "#{count_failures} errors")
|
71
|
+
end
|
72
|
+
|
73
|
+
step 'the exit status should be 1'
|
74
|
+
else
|
75
|
+
step 'the output should contain "0 errors"'
|
76
|
+
step 'the exit status should be 0'
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
# Minitest
|
81
|
+
Then /^the test(?:s)? should( not)?(?: all)? pass with( regex)?:$/ do |negated, regex, string|
|
82
|
+
if negated
|
83
|
+
step 'the output should contain "0 errors"'
|
84
|
+
step 'the exit status should be 1'
|
85
|
+
else
|
86
|
+
step 'the output should not contain "0 errors"'
|
87
|
+
step 'the exit status should be 0'
|
88
|
+
end
|
89
|
+
|
90
|
+
if regex
|
91
|
+
step "the output should match %r<#{string}>"
|
92
|
+
else
|
93
|
+
step 'the output should contain:', string
|
94
|
+
end
|
95
|
+
end
|
@@ -0,0 +1,185 @@
|
|
1
|
+
require 'thor/group'
|
2
|
+
require 'thor/actions'
|
3
|
+
|
4
|
+
module Aruba
|
5
|
+
module Initializers
|
6
|
+
class CommonInitializer < Thor::Group
|
7
|
+
include Thor::Actions
|
8
|
+
|
9
|
+
def add_gem
|
10
|
+
file = 'Gemfile'
|
11
|
+
creator = if File.exist? file
|
12
|
+
:append_to_file
|
13
|
+
else
|
14
|
+
:create_file
|
15
|
+
end
|
16
|
+
|
17
|
+
content = if File.exist? file
|
18
|
+
%(gem 'aruba', '~> #{Aruba::VERSION}')
|
19
|
+
else
|
20
|
+
%(source 'https://rubygems.org'\ngem 'aruba', '~> #{Aruba::VERSION}'\n)
|
21
|
+
end
|
22
|
+
send creator, file, content
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
module Aruba
|
29
|
+
module Initializers
|
30
|
+
class FailingInitializer
|
31
|
+
class << self
|
32
|
+
def match?(*)
|
33
|
+
true
|
34
|
+
end
|
35
|
+
|
36
|
+
def start(*)
|
37
|
+
fail ArgumentError, %(Unknown test framework. Please use one of :rspec, :cucumber or :minitest)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
module Aruba
|
45
|
+
module Initializers
|
46
|
+
class RSpecInitializer < Thor::Group
|
47
|
+
include Thor::Actions
|
48
|
+
|
49
|
+
no_commands do
|
50
|
+
def self.match?(framework)
|
51
|
+
:rspec == framework.downcase.to_sym
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def create_helper
|
56
|
+
file = 'spec/spec_helper.rb'
|
57
|
+
creator = if File.exist? file
|
58
|
+
:append_to_file
|
59
|
+
else
|
60
|
+
:create_file
|
61
|
+
end
|
62
|
+
|
63
|
+
send creator, file, <<-EOS
|
64
|
+
$LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
|
65
|
+
|
66
|
+
if RUBY_VERSION < '1.9.3'
|
67
|
+
::Dir.glob(::File.expand_path('../support/*.rb', __FILE__)).each { |f| require File.join(File.dirname(f), File.basename(f, '.rb')) }
|
68
|
+
::Dir.glob(::File.expand_path('../support/**/*.rb', __FILE__)).each { |f| require File.join(File.dirname(f), File.basename(f, '.rb')) }
|
69
|
+
else
|
70
|
+
::Dir.glob(::File.expand_path('../support/*.rb', __FILE__)).each { |f| require_relative f }
|
71
|
+
::Dir.glob(::File.expand_path('../support/**/*.rb', __FILE__)).each { |f| require_relative f }
|
72
|
+
end
|
73
|
+
EOS
|
74
|
+
end
|
75
|
+
|
76
|
+
def create_support_file
|
77
|
+
create_file 'spec/support/aruba.rb', <<-EOS
|
78
|
+
require 'aruba/rspec'
|
79
|
+
EOS
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
module Aruba
|
86
|
+
module Initializers
|
87
|
+
class CucumberInitializer < Thor::Group
|
88
|
+
include Thor::Actions
|
89
|
+
|
90
|
+
no_commands do
|
91
|
+
def self.match?(framework)
|
92
|
+
:cucumber == framework.downcase.to_sym
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
def create_support_file
|
97
|
+
create_file 'features/support/aruba.rb', <<-EOS
|
98
|
+
require 'aruba/cucumber'
|
99
|
+
EOS
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
module Aruba
|
106
|
+
module Initializers
|
107
|
+
class MiniTestInitializer < Thor::Group
|
108
|
+
include Thor::Actions
|
109
|
+
|
110
|
+
no_commands do
|
111
|
+
def self.match?(framework)
|
112
|
+
:minitest == framework.downcase.to_sym
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
def create_helper
|
117
|
+
file = 'test/test_helper.rb'
|
118
|
+
creator = if File.exist? file
|
119
|
+
:append_to_file
|
120
|
+
else
|
121
|
+
:create_file
|
122
|
+
end
|
123
|
+
|
124
|
+
send creator, file, <<-EOS
|
125
|
+
$LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
|
126
|
+
|
127
|
+
if RUBY_VERSION < '1.9.3'
|
128
|
+
::Dir.glob(::File.expand_path('../support/*.rb', __FILE__)).each { |f| require File.join(File.dirname(f), File.basename(f, '.rb')) }
|
129
|
+
::Dir.glob(::File.expand_path('../support/**/*.rb', __FILE__)).each { |f| require File.join(File.dirname(f), File.basename(f, '.rb')) }
|
130
|
+
else
|
131
|
+
::Dir.glob(::File.expand_path('../support/*.rb', __FILE__)).each { |f| require_relative f }
|
132
|
+
::Dir.glob(::File.expand_path('../support/**/*.rb', __FILE__)).each { |f| require_relative f }
|
133
|
+
end
|
134
|
+
EOS
|
135
|
+
end
|
136
|
+
|
137
|
+
def create_example
|
138
|
+
create_file 'test/use_aruba_with_minitest.rb', <<-EOS
|
139
|
+
$LOAD_PATH.unshift File.expand_path('../test', __FILE__)
|
140
|
+
|
141
|
+
require 'test_helper'
|
142
|
+
require 'minitest/autorun'
|
143
|
+
require 'aruba/api'
|
144
|
+
|
145
|
+
class FirstRun < Minitest::Test
|
146
|
+
include Aruba::Api
|
147
|
+
|
148
|
+
def setup
|
149
|
+
aruba_setup
|
150
|
+
end
|
151
|
+
end
|
152
|
+
EOS
|
153
|
+
end
|
154
|
+
end
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
module Aruba
|
159
|
+
class Initializer
|
160
|
+
private
|
161
|
+
|
162
|
+
attr_reader :initializers
|
163
|
+
|
164
|
+
public
|
165
|
+
|
166
|
+
def initialize
|
167
|
+
@initializers = []
|
168
|
+
@initializers << Initializers::RSpecInitializer
|
169
|
+
@initializers << Initializers::CucumberInitializer
|
170
|
+
@initializers << Initializers::MiniTestInitializer
|
171
|
+
@initializers << Initializers::FailingInitializer
|
172
|
+
end
|
173
|
+
|
174
|
+
def call(test_framework)
|
175
|
+
begin
|
176
|
+
initializers.find { |i| i.match? test_framework }.start [], {}
|
177
|
+
rescue ArgumentError => e
|
178
|
+
$stderr.puts e.message
|
179
|
+
exit 0
|
180
|
+
end
|
181
|
+
|
182
|
+
Initializers::CommonInitializer.start [], {}
|
183
|
+
end
|
184
|
+
end
|
185
|
+
end
|
@@ -30,8 +30,7 @@ RSpec::Matchers.define :have_output do |expected|
|
|
30
30
|
|
31
31
|
@old_actual.stop(@announcer) unless @old_actual.stopped?
|
32
32
|
|
33
|
-
@actual =
|
34
|
-
@actual = extract_text(@actual) if !aruba.config.keep_ansi || aruba.config.remove_ansi_escape_sequences
|
33
|
+
@actual = sanitize_text(actual.output)
|
35
34
|
|
36
35
|
values_match?(expected, @actual)
|
37
36
|
end
|
@@ -30,8 +30,7 @@ RSpec::Matchers.define :have_output_on_stderr do |expected|
|
|
30
30
|
|
31
31
|
@old_actual.stop(@announcer) unless @old_actual.stopped?
|
32
32
|
|
33
|
-
@actual =
|
34
|
-
@actual = extract_text(@actual) if !aruba.config.keep_ansi || aruba.config.remove_ansi_escape_sequences
|
33
|
+
@actual = sanitize_text(actual.stderr)
|
35
34
|
|
36
35
|
values_match?(expected, @actual)
|
37
36
|
end
|
@@ -30,8 +30,7 @@ RSpec::Matchers.define :have_output_on_stdout do |expected|
|
|
30
30
|
|
31
31
|
@old_actual.stop(@announcer) unless @old_actual.stopped?
|
32
32
|
|
33
|
-
@actual =
|
34
|
-
@actual = extract_text(@actual) if !aruba.config.keep_ansi || aruba.config.remove_ansi_escape_sequences
|
33
|
+
@actual = sanitize_text(actual.stdout)
|
35
34
|
|
36
35
|
values_match?(expected, @actual)
|
37
36
|
end
|
@@ -0,0 +1 @@
|
|
1
|
+
Aruba.platform.require_matching_files('../string/**/*.rb', __FILE__)
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# @!method include_output_string(string)
|
2
|
+
# This matchers checks if the output string of a command includes string.
|
3
|
+
#
|
4
|
+
# @param [Integer] status
|
5
|
+
# The value of the exit status
|
6
|
+
#
|
7
|
+
# @return [TrueClass, FalseClass] The result
|
8
|
+
#
|
9
|
+
# false:
|
10
|
+
# * if the output string does not include string
|
11
|
+
# true:
|
12
|
+
# * if the output string includes string
|
13
|
+
#
|
14
|
+
# @example Use matcher
|
15
|
+
#
|
16
|
+
# RSpec.describe do
|
17
|
+
# it { expect(last_command_started).to have_output an_output_string_including string) }
|
18
|
+
# it { expect(last_command_started).to have_output include_output_string string) }
|
19
|
+
# end
|
20
|
+
RSpec::Matchers.define :include_output_string do |expected|
|
21
|
+
match do |actual|
|
22
|
+
@expected = Regexp.new(Regexp.escape(sanitize_text(expected.to_s)), Regexp::MULTILINE)
|
23
|
+
@actual = sanitize_text(actual)
|
24
|
+
|
25
|
+
values_match? @expected, @actual
|
26
|
+
end
|
27
|
+
|
28
|
+
diffable
|
29
|
+
|
30
|
+
description { "string includes: #{description_of expected}" }
|
31
|
+
end
|
32
|
+
|
33
|
+
if RSpec::Expectations::Version::STRING >= '3.0'
|
34
|
+
RSpec::Matchers.alias_matcher :an_output_string_including, :include_output_string
|
35
|
+
RSpec::Matchers.alias_matcher :file_content_including, :include_output_string
|
36
|
+
end
|