aruba 1.0.0.pre.alpha.4 → 1.0.0.pre.alpha.5
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/.rspec +0 -1
- data/.rubocop.yml +19 -1
- data/.rubocop_todo.yml +10 -116
- data/.travis.yml +24 -26
- data/CHANGELOG.md +112 -19
- data/CONTRIBUTING.md +7 -7
- data/Gemfile +2 -50
- data/Rakefile +20 -37
- data/appveyor.yml +3 -5
- data/aruba.gemspec +16 -6
- data/bin/console +1 -1
- data/cucumber.yml +4 -15
- data/exe/aruba +1 -1
- data/fixtures/cli-app/bin/aruba-test-cli +1 -1
- data/fixtures/cli-app/cli-app.gemspec +1 -3
- data/fixtures/cli-app/lib/cli/app.rb +1 -1
- data/fixtures/cli-app/spec/spec_helper.rb +1 -1
- data/fixtures/empty-app/cli-app.gemspec +1 -3
- data/fixtures/empty-app/lib/cli/app.rb +0 -2
- data/fixtures/getting-started-app/Gemfile +1 -1
- data/lib/aruba/api.rb +6 -6
- data/lib/aruba/api/commands.rb +25 -1
- data/lib/aruba/api/core.rb +17 -4
- data/lib/aruba/api/environment.rb +8 -4
- data/lib/aruba/api/filesystem.rb +19 -6
- data/lib/aruba/colorizer.rb +10 -99
- data/lib/aruba/config/jruby.rb +15 -5
- data/lib/aruba/config_wrapper.rb +3 -1
- data/lib/aruba/configuration.rb +24 -12
- data/lib/aruba/cucumber.rb +0 -2
- data/lib/aruba/cucumber/command.rb +123 -45
- data/lib/aruba/cucumber/file.rb +13 -15
- data/lib/aruba/cucumber/testing_frameworks.rb +74 -50
- data/lib/aruba/in_config_wrapper.rb +5 -1
- data/lib/aruba/initializer.rb +28 -28
- data/lib/aruba/matchers/command/be_successfully_executed.rb +4 -0
- data/lib/aruba/matchers/command/have_exit_status.rb +13 -3
- data/lib/aruba/matchers/command/have_finished_in_time.rb +1 -1
- data/lib/aruba/matchers/command/have_output.rb +1 -1
- data/lib/aruba/matchers/command/have_output_on_stderr.rb +1 -1
- data/lib/aruba/matchers/command/have_output_on_stdout.rb +1 -1
- data/lib/aruba/matchers/command/have_output_size.rb +1 -1
- data/lib/aruba/matchers/directory/be_an_existing_directory.rb +1 -1
- data/lib/aruba/matchers/file/be_an_existing_file.rb +1 -1
- data/lib/aruba/platform.rb +0 -7
- data/lib/aruba/platforms/announcer.rb +16 -11
- data/lib/aruba/platforms/command_monitor.rb +36 -0
- data/lib/aruba/platforms/simple_table.rb +2 -10
- data/lib/aruba/platforms/unix_environment_variables.rb +2 -10
- data/lib/aruba/platforms/unix_platform.rb +7 -3
- data/lib/aruba/platforms/windows_command_string.rb +2 -2
- data/lib/aruba/platforms/windows_environment_variables.rb +7 -1
- data/lib/aruba/platforms/windows_platform.rb +4 -0
- data/lib/aruba/processes/basic_process.rb +11 -11
- data/lib/aruba/processes/debug_process.rb +7 -3
- data/lib/aruba/processes/spawn_process.rb +13 -8
- data/lib/aruba/rspec.rb +1 -1
- data/lib/aruba/setup.rb +5 -5
- data/lib/aruba/version.rb +1 -1
- metadata +153 -20
- data/bin/build +0 -3
- data/bin/release +0 -3
@@ -23,7 +23,8 @@ module Aruba
|
|
23
23
|
aruba.environment[name] = value
|
24
24
|
new_environment = aruba.environment.to_h
|
25
25
|
|
26
|
-
|
26
|
+
environment_change = { old: old_environment, new: new_environment, changed: { name: name, value: value } }
|
27
|
+
aruba.event_bus.notify Events::AddedEnvironmentVariable.new(environment_change)
|
27
28
|
|
28
29
|
self
|
29
30
|
end
|
@@ -45,7 +46,8 @@ module Aruba
|
|
45
46
|
aruba.environment.append name, value
|
46
47
|
new_environment = aruba.environment.to_h
|
47
48
|
|
48
|
-
|
49
|
+
environment_change = { old: old_environment, new: new_environment, changed: { name: name, value: value } }
|
50
|
+
aruba.event_bus.notify Events::ChangedEnvironmentVariable.new(environment_change)
|
49
51
|
|
50
52
|
self
|
51
53
|
end
|
@@ -67,7 +69,8 @@ module Aruba
|
|
67
69
|
aruba.environment.prepend name, value
|
68
70
|
new_environment = aruba.environment.to_h
|
69
71
|
|
70
|
-
|
72
|
+
environment_change = { old: old_environment, new: new_environment, changed: { name: name, value: value } }
|
73
|
+
aruba.event_bus.notify Events::ChangedEnvironmentVariable.new(environment_change)
|
71
74
|
|
72
75
|
self
|
73
76
|
end
|
@@ -85,7 +88,8 @@ module Aruba
|
|
85
88
|
aruba.environment.delete name
|
86
89
|
new_environment = aruba.environment.to_h
|
87
90
|
|
88
|
-
|
91
|
+
environment_change = { old: old_environment, new: new_environment, changed: { name: name, value: '' } }
|
92
|
+
aruba.event_bus.notify Events::ChangedEnvironmentVariable.new(environment_change)
|
89
93
|
|
90
94
|
self
|
91
95
|
end
|
data/lib/aruba/api/filesystem.rb
CHANGED
@@ -104,7 +104,9 @@ module Aruba
|
|
104
104
|
# The content of directory
|
105
105
|
def list(name)
|
106
106
|
fail ArgumentError, %(Path "#{name}" does not exist.) unless exist? name
|
107
|
-
|
107
|
+
unless directory? name
|
108
|
+
fail ArgumentError, %(Only directories are supported. Path "#{name}" is not a directory.)
|
109
|
+
end
|
108
110
|
|
109
111
|
existing_files = Dir.glob(expand_path(File.join(name, '**', '*')))
|
110
112
|
current_working_directory = ArubaPath.new(expand_path('.'))
|
@@ -181,8 +183,13 @@ module Aruba
|
|
181
183
|
raise ArgumentError, %(The following source "#{s}" does not exist.) unless exist? s
|
182
184
|
end
|
183
185
|
|
184
|
-
|
185
|
-
|
186
|
+
if destination.start_with? aruba.config.fixtures_path_prefix
|
187
|
+
raise ArgumentError, "Using a fixture as destination (#{destination}) is not supported"
|
188
|
+
end
|
189
|
+
|
190
|
+
if source.count > 1 && exist?(destination) && !directory?(destination)
|
191
|
+
raise ArgumentError, 'Multiples sources can only be copied to a directory'
|
192
|
+
end
|
186
193
|
|
187
194
|
source_paths = source.map { |f| expand_path(f) }
|
188
195
|
destination_path = expand_path(destination)
|
@@ -219,16 +226,22 @@ module Aruba
|
|
219
226
|
source = args
|
220
227
|
|
221
228
|
source.each do |s|
|
222
|
-
|
229
|
+
if s.start_with? aruba.config.fixtures_path_prefix
|
230
|
+
raise ArgumentError, "Using a fixture as source (#{source}) is not supported"
|
231
|
+
end
|
223
232
|
end
|
224
233
|
|
225
|
-
|
234
|
+
if destination.start_with? aruba.config.fixtures_path_prefix
|
235
|
+
raise ArgumentError, "Using a fixture as destination (#{destination}) is not supported"
|
236
|
+
end
|
226
237
|
|
227
238
|
source.each do |s|
|
228
239
|
raise ArgumentError, %(The following source "#{s}" does not exist.) unless exist? s
|
229
240
|
end
|
230
241
|
|
231
|
-
|
242
|
+
if source.count > 1 && exist?(destination) && !directory?(destination)
|
243
|
+
raise ArgumentError, 'Multiple sources can only be copied to a directory'
|
244
|
+
end
|
232
245
|
|
233
246
|
source_paths = source.map { |f| expand_path(f) }
|
234
247
|
destination_path = expand_path(destination)
|
data/lib/aruba/colorizer.rb
CHANGED
@@ -1,108 +1,19 @@
|
|
1
|
+
# Aruba
|
1
2
|
module Aruba
|
2
|
-
#
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
ATTRIBUTES = [
|
7
|
-
[:clear, 0],
|
8
|
-
[:reset, 0], # synonym for :clear
|
9
|
-
[:bold, 1],
|
10
|
-
[:dark, 2],
|
11
|
-
[:italic, 3], # not widely implemented
|
12
|
-
[:underline, 4],
|
13
|
-
[:underscore, 4], # synonym for :underline
|
14
|
-
[:blink, 5],
|
15
|
-
[:rapid_blink, 6], # not widely implemented
|
16
|
-
[:negative, 7], # no reverse because of String#reverse
|
17
|
-
[:concealed, 8],
|
18
|
-
[:strikethrough, 9], # not widely implemented
|
19
|
-
[:black, 30],
|
20
|
-
[:red, 31],
|
21
|
-
[:green, 32],
|
22
|
-
[:yellow, 33],
|
23
|
-
[:blue, 34],
|
24
|
-
[:magenta, 35],
|
25
|
-
[:cyan, 36],
|
26
|
-
[:white, 37],
|
27
|
-
[:on_black, 40],
|
28
|
-
[:on_red, 41],
|
29
|
-
[:on_green, 42],
|
30
|
-
[:on_yellow, 43],
|
31
|
-
[:on_blue, 44],
|
32
|
-
[:on_magenta, 45],
|
33
|
-
[:on_cyan, 46],
|
34
|
-
[:on_white, 47]
|
35
|
-
].freeze
|
36
|
-
|
37
|
-
ATTRIBUTE_NAMES = ATTRIBUTES.transpose.first
|
38
|
-
# :startdoc:
|
39
|
-
|
40
|
-
# Returns true, if the coloring function of this module
|
41
|
-
# is switched on, false otherwise.
|
42
|
-
def self.coloring?
|
43
|
-
@coloring
|
44
|
-
end
|
45
|
-
|
46
|
-
# Turns the coloring on or off globally, so you can easily do
|
47
|
-
# this for example:
|
48
|
-
# Cucumber::Term::ANSIColor::coloring = STDOUT.isatty
|
49
|
-
def self.coloring=(val)
|
50
|
-
@coloring = val
|
51
|
-
end
|
52
|
-
self.coloring = true
|
53
|
-
|
54
|
-
ATTRIBUTES.each do |c, v|
|
55
|
-
define_method(c) do |string|
|
56
|
-
result = ''
|
57
|
-
result << "\e[#{v}m" if Aruba::AnsiColor.coloring?
|
58
|
-
if block_given?
|
59
|
-
result << yield
|
60
|
-
elsif string
|
61
|
-
result << string
|
62
|
-
elsif respond_to?(:to_str)
|
63
|
-
result << to_str
|
64
|
-
else
|
65
|
-
return result # only switch on
|
66
|
-
end
|
67
|
-
result << "\e[0m" if Aruba::AnsiColor.coloring?
|
68
|
-
result
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
# Regular expression that is used to scan for ANSI-sequences while
|
73
|
-
# uncoloring strings.
|
74
|
-
COLORED_REGEXP = /\e\[(?:[34][0-7]|[0-9])?m/
|
75
|
-
|
76
|
-
def self.included(klass)
|
77
|
-
return unless klass == String
|
3
|
+
# Simple colorizer class. Only supports the color cyan
|
4
|
+
class Colorizer
|
5
|
+
class << self
|
6
|
+
attr_accessor :coloring
|
78
7
|
|
79
|
-
|
80
|
-
ATTRIBUTE_NAMES.delete(:clear)
|
8
|
+
alias coloring? coloring
|
81
9
|
end
|
82
10
|
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
if block_given?
|
87
|
-
yield.gsub(COLORED_REGEXP, '')
|
88
|
-
elsif string
|
89
|
-
string.gsub(COLORED_REGEXP, '')
|
90
|
-
elsif respond_to?(:to_str)
|
91
|
-
to_str.gsub(COLORED_REGEXP, '')
|
11
|
+
def cyan(string)
|
12
|
+
if self.class.coloring?
|
13
|
+
"\e[36m#{string}\e[0m"
|
92
14
|
else
|
93
|
-
|
15
|
+
string
|
94
16
|
end
|
95
17
|
end
|
96
|
-
|
97
|
-
# Returns an array of all Aruba::Platforms::AnsiColor attributes as symbols.
|
98
|
-
def attributes
|
99
|
-
ATTRIBUTE_NAMES
|
100
|
-
end
|
101
|
-
end
|
102
|
-
end
|
103
|
-
|
104
|
-
module Aruba
|
105
|
-
class Colorizer
|
106
|
-
include Aruba::AnsiColor
|
107
18
|
end
|
108
19
|
end
|
data/lib/aruba/config/jruby.rb
CHANGED
@@ -2,16 +2,26 @@ require 'rbconfig'
|
|
2
2
|
|
3
3
|
# ideas taken from: http://blog.headius.com/2010/03/jruby-startup-time-tips.html
|
4
4
|
Aruba.configure do |config|
|
5
|
-
config.before :command do
|
5
|
+
config.before :command do |command|
|
6
6
|
next unless RUBY_PLATFORM == 'java'
|
7
7
|
|
8
|
+
env = command.environment
|
9
|
+
|
10
|
+
jruby_opts = env['JRUBY_OPTS'] || ''
|
11
|
+
|
8
12
|
# disable JIT since these processes are so short lived
|
9
|
-
|
13
|
+
jruby_opts = "-X-C #{jruby_opts}" unless jruby_opts.include? '-X-C'
|
10
14
|
|
11
15
|
# Faster startup for jruby
|
12
|
-
|
16
|
+
jruby_opts = "--dev #{jruby_opts}" unless jruby_opts.include? '--dev'
|
17
|
+
|
18
|
+
env['JRUBY_OPTS'] = jruby_opts
|
19
|
+
|
20
|
+
if RbConfig::CONFIG['host_os'] =~ /solaris|sunos/i
|
21
|
+
java_opts = env['JAVA_OPTS'] || ''
|
13
22
|
|
14
|
-
|
15
|
-
|
23
|
+
# force jRuby to use client JVM for faster startup times
|
24
|
+
env['JAVA_OPTS'] = "-d32 #{java_opts}" unless java_opts.include?('-d32')
|
25
|
+
end
|
16
26
|
end
|
17
27
|
end
|
data/lib/aruba/config_wrapper.rb
CHANGED
@@ -30,7 +30,9 @@ module Aruba
|
|
30
30
|
# If one method ends with "=", e.g. ":option1=", then notify the event
|
31
31
|
# queue, that the user changes the value of "option1"
|
32
32
|
def method_missing(name, *args, &block)
|
33
|
-
|
33
|
+
if name.to_s.end_with? '='
|
34
|
+
event_bus.notify Events::ChangedConfiguration.new(changed: { name: name.to_s.gsub(/=$/, ''), value: args.first })
|
35
|
+
end
|
34
36
|
|
35
37
|
config.send(name, *args, &block)
|
36
38
|
end
|
data/lib/aruba/configuration.rb
CHANGED
@@ -19,7 +19,9 @@ module Aruba
|
|
19
19
|
class Configuration < BasicConfiguration
|
20
20
|
option_reader :root_directory, contract: { None => String }, default: Dir.getwd
|
21
21
|
|
22
|
-
option_accessor :working_directory,
|
22
|
+
option_accessor :working_directory,
|
23
|
+
contract: { Aruba::Contracts::RelativePath => Aruba::Contracts::RelativePath },
|
24
|
+
default: 'tmp/aruba'
|
23
25
|
|
24
26
|
option_reader :fixtures_path_prefix, contract: { None => String }, default: '%'
|
25
27
|
|
@@ -27,26 +29,36 @@ module Aruba
|
|
27
29
|
option_accessor :stop_signal, contract: { Maybe[String] => Maybe[String] }, default: nil
|
28
30
|
option_accessor :io_wait_timeout, contract: { Num => Num }, default: 0.1
|
29
31
|
option_accessor :startup_wait_time, contract: { Num => Num }, default: 0
|
30
|
-
option_accessor :fixtures_directories,
|
32
|
+
option_accessor :fixtures_directories,
|
33
|
+
contract: { Array => ArrayOf[String] },
|
34
|
+
default: %w(features/fixtures spec/fixtures test/fixtures fixtures)
|
35
|
+
|
31
36
|
option_accessor :command_runtime_environment, contract: { Hash => Hash }, default: {}
|
32
|
-
|
33
|
-
|
34
|
-
|
37
|
+
option_accessor :command_search_paths,
|
38
|
+
contract: { ArrayOf[String] => ArrayOf[String] } do |config|
|
39
|
+
[File.join(config.root_directory.value, 'bin'), File.join(config.root_directory.value, 'exe')]
|
40
|
+
end
|
35
41
|
option_accessor :remove_ansi_escape_sequences, contract: { Bool => Bool }, default: true
|
36
|
-
|
37
|
-
|
42
|
+
option_accessor :command_launcher,
|
43
|
+
contract: { Aruba::Contracts::Enum[:in_process, :spawn, :debug] => Aruba::Contracts::Enum[:in_process, :spawn, :debug] },
|
44
|
+
default: :spawn
|
38
45
|
option_accessor :main_class, contract: { Class => Maybe[Class] }, default: nil
|
39
46
|
|
40
|
-
option_accessor :home_directory,
|
41
|
-
|
42
|
-
|
47
|
+
option_accessor :home_directory,
|
48
|
+
contract: { Or[Aruba::Contracts::AbsolutePath, Aruba::Contracts::RelativePath] => Or[Aruba::Contracts::AbsolutePath, Aruba::Contracts::RelativePath] } do |config|
|
49
|
+
File.join(config.root_directory.value, config.working_directory.value)
|
50
|
+
end
|
43
51
|
|
44
|
-
option_accessor :log_level,
|
52
|
+
option_accessor :log_level,
|
53
|
+
contract: { Aruba::Contracts::Enum[:fatal, :warn, :debug, :info, :error, :unknown, :silent] => Aruba::Contracts::Enum[:fatal, :warn, :debug, :info, :error, :unknown, :silent] },
|
54
|
+
default: :info
|
45
55
|
|
46
56
|
# TODO: deprecate this value and replace with "filesystem allocation unit"
|
47
57
|
# equal to 4096 by default. "filesystem allocation unit" would represent
|
48
58
|
# the actual MINIMUM space taken in bytes by a 1-byte file
|
49
|
-
option_accessor :physical_block_size,
|
59
|
+
option_accessor :physical_block_size,
|
60
|
+
contract: { Aruba::Contracts::IsPowerOfTwo => Aruba::Contracts::IsPowerOfTwo },
|
61
|
+
default: 512
|
50
62
|
option_accessor :console_history_file, contract: { String => String }, default: '~/.aruba_history'
|
51
63
|
|
52
64
|
option_accessor :activate_announcer_on_command_failure, contract: { ArrayOf[Symbol] => ArrayOf[Symbol] }, default: []
|
data/lib/aruba/cucumber.rb
CHANGED
@@ -23,8 +23,7 @@ When(/^I run the following (?:commands|script)(?: (?:with|in) `([^`]+)`)?:$/) do
|
|
23
23
|
end
|
24
24
|
|
25
25
|
When(/^I run `([^`]*)` interactively$/) do |cmd|
|
26
|
-
|
27
|
-
@interactive = run_command(cmd)
|
26
|
+
run_command(sanitize_text(cmd))
|
28
27
|
end
|
29
28
|
|
30
29
|
# Merge interactive and background after refactoring with event queue
|
@@ -119,7 +118,25 @@ Then(/^the output should be (\d+) bytes long$/) do |size|
|
|
119
118
|
expect(last_command_started.output).to have_output_size size.to_i
|
120
119
|
end
|
121
120
|
|
122
|
-
|
121
|
+
## the stderr should contain "hello"
|
122
|
+
Then(/^(?:the )?(output|stderr|stdout) should( not)? contain( exactly)? "([^"]*)"$/) do |channel, negated, exactly, expected|
|
123
|
+
combined_output = send("all_#{channel}")
|
124
|
+
|
125
|
+
output_string_matcher = if exactly
|
126
|
+
:an_output_string_being_eq
|
127
|
+
else
|
128
|
+
:an_output_string_including
|
129
|
+
end
|
130
|
+
|
131
|
+
if negated
|
132
|
+
expect(combined_output).not_to send(output_string_matcher, expected)
|
133
|
+
else
|
134
|
+
expect(combined_output).to send(output_string_matcher, expected)
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
## the stderr from "echo -n 'Hello'" should contain "hello"
|
139
|
+
Then(/^(?:the )?(output|stderr|stdout) from "([^"]*)" should( not)? contain( exactly)? "([^"]*)"$/) do |channel, cmd, negated, exactly, expected|
|
123
140
|
matcher = case channel.to_sym
|
124
141
|
when :output
|
125
142
|
:have_output
|
@@ -129,11 +146,7 @@ Then(/^(?:the )?(output|stderr|stdout)(?: from "([^"]*)")? should( not)? contain
|
|
129
146
|
:have_output_on_stdout
|
130
147
|
end
|
131
148
|
|
132
|
-
|
133
|
-
[aruba.command_monitor.find(Aruba.platform.detect_ruby(cmd))]
|
134
|
-
else
|
135
|
-
all_commands
|
136
|
-
end
|
149
|
+
command = aruba.command_monitor.find(Aruba.platform.detect_ruby(cmd))
|
137
150
|
|
138
151
|
output_string_matcher = if exactly
|
139
152
|
:an_output_string_being_eq
|
@@ -142,17 +155,62 @@ Then(/^(?:the )?(output|stderr|stdout)(?: from "([^"]*)")? should( not)? contain
|
|
142
155
|
end
|
143
156
|
|
144
157
|
if negated
|
145
|
-
expect(
|
158
|
+
expect(command).not_to send(matcher, send(output_string_matcher, expected))
|
146
159
|
else
|
147
|
-
expect(
|
160
|
+
expect(command).to send(matcher, send(output_string_matcher, expected))
|
148
161
|
end
|
149
162
|
end
|
150
163
|
|
151
|
-
## the stderr should contain
|
152
|
-
|
164
|
+
## the stderr should not contain exactly:
|
165
|
+
Then(/^(?:the )?(output|stderr|stdout) should not contain( exactly)?:$/) do |channel, exactly, expected|
|
166
|
+
combined_output = send("all_#{channel}")
|
167
|
+
|
168
|
+
output_string_matcher = if exactly
|
169
|
+
:an_output_string_being_eq
|
170
|
+
else
|
171
|
+
:an_output_string_including
|
172
|
+
end
|
173
|
+
|
174
|
+
expect(combined_output).not_to send(output_string_matcher, expected)
|
175
|
+
end
|
176
|
+
|
153
177
|
## the stderr should contain exactly:
|
178
|
+
Then(/^(?:the )?(output|stderr|stdout) should contain( exactly)?:$/) do |channel, exactly, expected|
|
179
|
+
combined_output = send("all_#{channel}")
|
180
|
+
|
181
|
+
output_string_matcher = if exactly
|
182
|
+
:an_output_string_being_eq
|
183
|
+
else
|
184
|
+
:an_output_string_including
|
185
|
+
end
|
186
|
+
|
187
|
+
expect(combined_output).to send(output_string_matcher, expected)
|
188
|
+
end
|
189
|
+
|
190
|
+
## the stderr from "echo -n 'Hello'" should not contain exactly:
|
191
|
+
Then(/^(?:the )?(output|stderr|stdout) from "([^"]*)" should not contain( exactly)?:$/) do |channel, cmd, exactly, expected|
|
192
|
+
matcher = case channel.to_sym
|
193
|
+
when :output
|
194
|
+
:have_output
|
195
|
+
when :stderr
|
196
|
+
:have_output_on_stderr
|
197
|
+
when :stdout
|
198
|
+
:have_output_on_stdout
|
199
|
+
end
|
200
|
+
|
201
|
+
command = aruba.command_monitor.find(Aruba.platform.detect_ruby(cmd))
|
202
|
+
|
203
|
+
output_string_matcher = if exactly
|
204
|
+
:an_output_string_being_eq
|
205
|
+
else
|
206
|
+
:an_output_string_including
|
207
|
+
end
|
208
|
+
|
209
|
+
expect(command).not_to send(matcher, send(output_string_matcher, expected))
|
210
|
+
end
|
211
|
+
|
154
212
|
## the stderr from "echo -n 'Hello'" should contain exactly:
|
155
|
-
Then(/^(?:the )?(output|stderr|stdout)
|
213
|
+
Then(/^(?:the )?(output|stderr|stdout) from "([^"]*)" should contain( exactly)?:$/) do |channel, cmd, exactly, expected|
|
156
214
|
matcher = case channel.to_sym
|
157
215
|
when :output
|
158
216
|
:have_output
|
@@ -160,15 +218,9 @@ Then(/^(?:the )?(output|stderr|stdout)(?: from "([^"]*)")? should( not)? contain
|
|
160
218
|
:have_output_on_stderr
|
161
219
|
when :stdout
|
162
220
|
:have_output_on_stdout
|
163
|
-
else
|
164
|
-
fail ArgumentError, %(Invalid channel "#{channel}" chosen. Only "output", "stderr" or "stdout" are allowed.)
|
165
221
|
end
|
166
222
|
|
167
|
-
|
168
|
-
[aruba.command_monitor.find(Aruba.platform.detect_ruby(cmd))]
|
169
|
-
else
|
170
|
-
all_commands
|
171
|
-
end
|
223
|
+
command = aruba.command_monitor.find(Aruba.platform.detect_ruby(cmd))
|
172
224
|
|
173
225
|
output_string_matcher = if exactly
|
174
226
|
:an_output_string_being_eq
|
@@ -176,11 +228,7 @@ Then(/^(?:the )?(output|stderr|stdout)(?: from "([^"]*)")? should( not)? contain
|
|
176
228
|
:an_output_string_including
|
177
229
|
end
|
178
230
|
|
179
|
-
|
180
|
-
expect(commands).not_to include_an_object send(matcher, send(output_string_matcher, expected))
|
181
|
-
else
|
182
|
-
expect(commands).to include_an_object send(matcher, send(output_string_matcher, expected))
|
183
|
-
end
|
231
|
+
expect(command).to send(matcher, send(output_string_matcher, expected))
|
184
232
|
end
|
185
233
|
|
186
234
|
# "the output should match" allows regex in the partial_output, if
|
@@ -223,7 +271,7 @@ Then(/^the exit status should( not)? be (\d+)$/) do |negated, exit_status|
|
|
223
271
|
end
|
224
272
|
end
|
225
273
|
|
226
|
-
Then(/^it should
|
274
|
+
Then(/^it should not (pass|fail) with "(.*?)"$/) do |pass_fail, expected|
|
227
275
|
last_command_started.stop
|
228
276
|
|
229
277
|
if pass_fail == 'pass'
|
@@ -232,14 +280,22 @@ Then(/^it should( not)? (pass|fail) with "(.*?)"$/) do |negated, pass_fail, expe
|
|
232
280
|
expect(last_command_stopped).not_to be_successfully_executed
|
233
281
|
end
|
234
282
|
|
235
|
-
|
236
|
-
|
283
|
+
expect(last_command_stopped).not_to have_output an_output_string_including(expected)
|
284
|
+
end
|
285
|
+
|
286
|
+
Then(/^it should (pass|fail) with "(.*?)"$/) do |pass_fail, expected|
|
287
|
+
last_command_started.stop
|
288
|
+
|
289
|
+
if pass_fail == 'pass'
|
290
|
+
expect(last_command_stopped).to be_successfully_executed
|
237
291
|
else
|
238
|
-
expect(last_command_stopped).
|
292
|
+
expect(last_command_stopped).not_to be_successfully_executed
|
239
293
|
end
|
294
|
+
|
295
|
+
expect(last_command_stopped).to have_output an_output_string_including(expected)
|
240
296
|
end
|
241
297
|
|
242
|
-
Then(/^it should
|
298
|
+
Then(/^it should not (pass|fail) with:$/) do |pass_fail, expected|
|
243
299
|
last_command_started.stop
|
244
300
|
|
245
301
|
if pass_fail == 'pass'
|
@@ -248,14 +304,22 @@ Then(/^it should( not)? (pass|fail) with:$/) do |negated, pass_fail, expected|
|
|
248
304
|
expect(last_command_stopped).not_to be_successfully_executed
|
249
305
|
end
|
250
306
|
|
251
|
-
|
252
|
-
|
307
|
+
expect(last_command_stopped).not_to have_output an_output_string_including(expected)
|
308
|
+
end
|
309
|
+
|
310
|
+
Then(/^it should (pass|fail) with:$/) do |pass_fail, expected|
|
311
|
+
last_command_started.stop
|
312
|
+
|
313
|
+
if pass_fail == 'pass'
|
314
|
+
expect(last_command_stopped).to be_successfully_executed
|
253
315
|
else
|
254
|
-
expect(last_command_stopped).
|
316
|
+
expect(last_command_stopped).not_to be_successfully_executed
|
255
317
|
end
|
318
|
+
|
319
|
+
expect(last_command_stopped).to have_output an_output_string_including(expected)
|
256
320
|
end
|
257
321
|
|
258
|
-
Then(/^it should
|
322
|
+
Then(/^it should not (pass|fail) with exactly:$/) do |pass_fail, expected|
|
259
323
|
last_command_started.stop
|
260
324
|
|
261
325
|
if pass_fail == 'pass'
|
@@ -264,14 +328,22 @@ Then(/^it should( not)? (pass|fail) with exactly:$/) do |negated, pass_fail, exp
|
|
264
328
|
expect(last_command_stopped).not_to be_successfully_executed
|
265
329
|
end
|
266
330
|
|
267
|
-
|
268
|
-
|
331
|
+
expect(last_command_stopped).not_to have_output an_output_string_eq(expected)
|
332
|
+
end
|
333
|
+
|
334
|
+
Then(/^it should (pass|fail) with exactly:$/) do |pass_fail, expected|
|
335
|
+
last_command_started.stop
|
336
|
+
|
337
|
+
if pass_fail == 'pass'
|
338
|
+
expect(last_command_stopped).to be_successfully_executed
|
269
339
|
else
|
270
|
-
expect(last_command_stopped).
|
340
|
+
expect(last_command_stopped).not_to be_successfully_executed
|
271
341
|
end
|
342
|
+
|
343
|
+
expect(last_command_stopped).to have_output an_output_string_being_eq(expected)
|
272
344
|
end
|
273
345
|
|
274
|
-
Then(/^it should
|
346
|
+
Then(/^it should not (pass|fail) (?:with regexp?|matching):$/) do |pass_fail, expected|
|
275
347
|
last_command_started.stop
|
276
348
|
|
277
349
|
if pass_fail == 'pass'
|
@@ -280,11 +352,19 @@ Then(/^it should( not)? (pass|fail) (?:with regexp?|matching):$/) do |negated, p
|
|
280
352
|
expect(last_command_stopped).not_to be_successfully_executed
|
281
353
|
end
|
282
354
|
|
283
|
-
|
284
|
-
|
355
|
+
expect(last_command_stopped).not_to have_output an_output_string_matching(expected)
|
356
|
+
end
|
357
|
+
|
358
|
+
Then(/^it should (pass|fail) (?:with regexp?|matching):$/) do |pass_fail, expected|
|
359
|
+
last_command_started.stop
|
360
|
+
|
361
|
+
if pass_fail == 'pass'
|
362
|
+
expect(last_command_stopped).to be_successfully_executed
|
285
363
|
else
|
286
|
-
expect(last_command_stopped).
|
364
|
+
expect(last_command_stopped).not_to be_successfully_executed
|
287
365
|
end
|
366
|
+
|
367
|
+
expect(last_command_stopped).to have_output an_output_string_matching(expected)
|
288
368
|
end
|
289
369
|
|
290
370
|
Then(/^(?:the )?(output|stderr|stdout) should not contain anything$/) do |channel|
|
@@ -295,8 +375,6 @@ Then(/^(?:the )?(output|stderr|stdout) should not contain anything$/) do |channe
|
|
295
375
|
:have_output_on_stderr
|
296
376
|
when :stdout
|
297
377
|
:have_output_on_stdout
|
298
|
-
else
|
299
|
-
fail ArgumentError, %(Invalid channel "#{channel}" chosen. Only "output", "stdout" and "stderr" are supported.)
|
300
378
|
end
|
301
379
|
|
302
380
|
expect(all_commands).to include_an_object send(matcher, be_nil.or(be_empty))
|
@@ -311,10 +389,10 @@ Then(/^(?:the )?(output|stdout|stderr) should( not)? contain all of these lines:
|
|
311
389
|
:have_output_on_stderr
|
312
390
|
when :stdout
|
313
391
|
:have_output_on_stdout
|
314
|
-
else
|
315
|
-
fail ArgumentError, %(Invalid channel "#{channel}" chosen. Only "output", "stdout" and "stderr" are supported.)
|
316
392
|
end
|
317
393
|
|
394
|
+
# TODO: This isn't actually using the above. It's hardcoded to use have_output only
|
395
|
+
|
318
396
|
if negated
|
319
397
|
expect(all_commands).not_to include_an_object have_output an_output_string_including(expected)
|
320
398
|
else
|