aruba 0.9.0 → 0.10.0.pre
Sign up to get free protection for your applications and to get access to all the features.
- 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
|