aruba-win-fix 0.14.2
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 +7 -0
- data/.document +5 -0
- data/.gitignore +37 -0
- data/.rspec +3 -0
- data/.rubocop.yml +188 -0
- data/.simplecov +34 -0
- data/.travis.yml +47 -0
- data/.yardopts +8 -0
- data/CONTRIBUTING.md +71 -0
- data/Gemfile +83 -0
- data/History.md +579 -0
- data/LICENSE +20 -0
- data/README.md +226 -0
- data/Rakefile +49 -0
- data/TODO.md +13 -0
- data/appveyor.yml +32 -0
- data/aruba.gemspec +48 -0
- data/bin/aruba +7 -0
- data/config/.gitignore +1 -0
- data/cucumber.yml +26 -0
- data/features/.nav +72 -0
- data/features/api/command/find_command.feature +83 -0
- data/features/api/command/last_command_started.feature +50 -0
- data/features/api/command/last_command_stopped.feature +89 -0
- data/features/api/command/run.feature +414 -0
- data/features/api/command/run_simple.feature +242 -0
- data/features/api/command/send_signal.feature +53 -0
- data/features/api/command/stderr.feature +46 -0
- data/features/api/command/stdout.feature +46 -0
- data/features/api/command/stop.feature +131 -0
- data/features/api/command/stop_all_commands.feature +53 -0
- data/features/api/command/terminate_all_commands.feature +53 -0
- data/features/api/command/which.feature +37 -0
- data/features/api/core/expand_path.feature +88 -0
- data/features/api/environment/append_environment_variable.feature +128 -0
- data/features/api/environment/delete_environment_variable.feature +63 -0
- data/features/api/environment/prepend_environment_variable.feature +128 -0
- data/features/api/environment/set_environment_variable.feature +376 -0
- data/features/api/filesystem/cd.feature +184 -0
- data/features/api/filesystem/create_directory.feature +57 -0
- data/features/api/filesystem/disk_usage.feature +152 -0
- data/features/api/filesystem/does_exist.feature +62 -0
- data/features/api/filesystem/fixtures.feature +104 -0
- data/features/api/filesystem/is_absolute.feature +48 -0
- data/features/api/filesystem/is_directory.feature +53 -0
- data/features/api/filesystem/is_file.feature +54 -0
- data/features/api/filesystem/is_relative.feature +48 -0
- data/features/api/filesystem/move.feature +119 -0
- data/features/api/text/extract_text.feature +87 -0
- data/features/api/text/replace_variables.feature +45 -0
- data/features/api/text/sanitize_text.feature +228 -0
- data/features/api/text/unescape_text.feature +127 -0
- data/features/cli/console.feature +52 -0
- data/features/cli/init.feature +79 -0
- data/features/configuration/activate_announcer_on_command_failure.feature +38 -0
- data/features/configuration/command_runtime_environment.feature +129 -0
- data/features/configuration/console_history_file.feature +38 -0
- data/features/configuration/exit_timeout.feature +52 -0
- data/features/configuration/fixtures_directories.feature +38 -0
- data/features/configuration/fixtures_path_prefix.feature +23 -0
- data/features/configuration/home_directory.feature +80 -0
- data/features/configuration/io_timeout.feature +30 -0
- data/features/configuration/keep_ansi.feature +30 -0
- data/features/configuration/log_level.feature +38 -0
- data/features/configuration/physical_block_size.feature +53 -0
- data/features/configuration/remove_ansi_escape_sequences.feature +38 -0
- data/features/configuration/root_directory.feature +30 -0
- data/features/configuration/startup_wait_time.feature +48 -0
- data/features/configuration/usage.feature +159 -0
- data/features/configuration/working_directory.feature +33 -0
- data/features/development/build.feature +15 -0
- data/features/development/test.feature +24 -0
- data/features/getting_started/cleanup.feature +67 -0
- data/features/getting_started/install.feature +8 -0
- data/features/getting_started/run_commands.feature +177 -0
- data/features/getting_started/supported_testing_frameworks.feature +104 -0
- data/features/getting_started/writing_good_feature_tests.feature +38 -0
- data/features/hooks/after/command.feature +44 -0
- data/features/hooks/before/command.feature +71 -0
- data/features/matchers/collection/include_an_object.feature +72 -0
- data/features/matchers/directory/have_sub_directory.feature +110 -0
- data/features/matchers/file/be_a_command_found_in_path.feature +115 -0
- data/features/matchers/file/be_existing_executable.feature +88 -0
- data/features/matchers/file/be_existing_file.feature +82 -0
- data/features/matchers/file/have_file_content.feature +123 -0
- data/features/matchers/file/have_file_size.feature +107 -0
- data/features/matchers/path/be_an_absolute_path.feature +74 -0
- data/features/matchers/path/be_an_existing_path.feature +97 -0
- data/features/matchers/path/have_permissions.feature +118 -0
- data/features/matchers/timeouts.feature +48 -0
- data/features/platforms/jruby.feature +14 -0
- data/features/rspec/integration.feature +179 -0
- data/features/step_definitions/aruba_dev_steps.rb +56 -0
- data/features/step_definitions/hooks.rb +96 -0
- data/features/steps/command/debug.feature +92 -0
- data/features/steps/command/exit_statuses.feature +136 -0
- data/features/steps/command/in_process.feature +485 -0
- data/features/steps/command/interactive.feature +90 -0
- data/features/steps/command/output.feature +588 -0
- data/features/steps/command/run.feature +66 -0
- data/features/steps/command/send_signal.feature +104 -0
- data/features/steps/command/shell.feature +155 -0
- data/features/steps/command/stderr.feature +68 -0
- data/features/steps/command/stdout.feature +109 -0
- data/features/steps/command/stop.feature +313 -0
- data/features/steps/core/announce.feature +283 -0
- data/features/steps/environment/append_environment_variable.feature +52 -0
- data/features/steps/environment/home_variable.feature +62 -0
- data/features/steps/environment/prepend_environment_variable.feature +52 -0
- data/features/steps/environment/set_environment_variable.feature +49 -0
- data/features/steps/filesystem/append_to_file.feature +45 -0
- data/features/steps/filesystem/cd_to_directory.feature +33 -0
- data/features/steps/filesystem/check_file_content.feature +61 -0
- data/features/steps/filesystem/check_permissions_of_file.feature +39 -0
- data/features/steps/filesystem/compare_files.feature +42 -0
- data/features/steps/filesystem/copy.feature +45 -0
- data/features/steps/filesystem/create_directory.feature +57 -0
- data/features/steps/filesystem/create_file.feature +76 -0
- data/features/steps/filesystem/existence_of_directory.feature +57 -0
- data/features/steps/filesystem/existence_of_file.feature +43 -0
- data/features/steps/filesystem/file_content.feature +86 -0
- data/features/steps/filesystem/fixtures.feature +64 -0
- data/features/steps/filesystem/move.feature +45 -0
- data/features/steps/filesystem/non_existence_of_directory.feature +69 -0
- data/features/steps/filesystem/non_existence_of_file.feature +80 -0
- data/features/steps/filesystem/overwrite_file.feature +72 -0
- data/features/steps/filesystem/remove_directory.feature +38 -0
- data/features/steps/filesystem/remove_file.feature +38 -0
- data/features/steps/filesystem/use_fixture.feature +77 -0
- data/features/steps/overview.feature +60 -0
- data/features/support/aruba.rb +7 -0
- data/features/support/env.rb +33 -0
- data/features/support/jruby.rb +5 -0
- data/features/support/simplecov_setup.rb +8 -0
- data/fixtures/cli-app/.gitignore +9 -0
- data/fixtures/cli-app/.rspec +2 -0
- data/fixtures/cli-app/README.md +39 -0
- data/fixtures/cli-app/Rakefile +1 -0
- data/fixtures/cli-app/bin/cli +6 -0
- data/fixtures/cli-app/cli-app.gemspec +26 -0
- data/fixtures/cli-app/features/support/env.rb +1 -0
- data/fixtures/cli-app/lib/cli/app.rb +13 -0
- data/fixtures/cli-app/lib/cli/app/suppress_simple_cov_output.rb +15 -0
- data/fixtures/cli-app/lib/cli/app/version.rb +5 -0
- data/fixtures/cli-app/script/console +14 -0
- data/fixtures/cli-app/spec/spec_helper.rb +9 -0
- data/fixtures/cli-app/spec/support/aruba.rb +1 -0
- data/fixtures/copy/file.txt +1 -0
- data/fixtures/empty-app/.gitignore +9 -0
- data/fixtures/empty-app/.rspec +2 -0
- data/fixtures/empty-app/README.md +24 -0
- data/fixtures/empty-app/Rakefile +1 -0
- data/fixtures/empty-app/cli-app.gemspec +26 -0
- data/fixtures/empty-app/lib/cli/app.rb +13 -0
- data/fixtures/empty-app/lib/cli/app/version.rb +5 -0
- data/fixtures/getting-started-app/.gitignore +4 -0
- data/fixtures/getting-started-app/Gemfile +4 -0
- data/fixtures/getting-started-app/README.md +3 -0
- data/fixtures/getting-started-app/features/support/env.rb +1 -0
- data/fixtures/spawn_process/stderr.sh +3 -0
- data/lib/aruba.rb +1 -0
- data/lib/aruba/api.rb +34 -0
- data/lib/aruba/api/command.rb +307 -0
- data/lib/aruba/api/core.rb +191 -0
- data/lib/aruba/api/deprecated.rb +897 -0
- data/lib/aruba/api/environment.rb +89 -0
- data/lib/aruba/api/filesystem.rb +392 -0
- data/lib/aruba/api/rvm.rb +44 -0
- data/lib/aruba/api/text.rb +56 -0
- data/lib/aruba/aruba_path.rb +133 -0
- data/lib/aruba/basic_configuration.rb +240 -0
- data/lib/aruba/basic_configuration/option.rb +32 -0
- data/lib/aruba/cli.rb +26 -0
- data/lib/aruba/colorizer.rb +108 -0
- data/lib/aruba/command.rb +74 -0
- data/lib/aruba/config.rb +108 -0
- data/lib/aruba/config/jruby.rb +17 -0
- data/lib/aruba/config_wrapper.rb +58 -0
- data/lib/aruba/console.rb +70 -0
- data/lib/aruba/console/help.rb +35 -0
- data/lib/aruba/contracts/absolute_path.rb +20 -0
- data/lib/aruba/contracts/enum.rb +26 -0
- data/lib/aruba/contracts/is_power_of_two.rb +22 -0
- data/lib/aruba/contracts/relative_path.rb +20 -0
- data/lib/aruba/cucumber.rb +13 -0
- data/lib/aruba/cucumber/command.rb +422 -0
- data/lib/aruba/cucumber/core.rb +5 -0
- data/lib/aruba/cucumber/environment.rb +42 -0
- data/lib/aruba/cucumber/file.rb +201 -0
- data/lib/aruba/cucumber/hooks.rb +160 -0
- data/lib/aruba/cucumber/rvm.rb +3 -0
- data/lib/aruba/cucumber/testing_frameworks.rb +95 -0
- data/lib/aruba/errors.rb +37 -0
- data/lib/aruba/event_bus.rb +59 -0
- data/lib/aruba/event_bus/name_resolver.rb +168 -0
- data/lib/aruba/events.rb +39 -0
- data/lib/aruba/extensions/string/strip.rb +25 -0
- data/lib/aruba/file_size.rb +63 -0
- data/lib/aruba/generators/script_file.rb +46 -0
- data/lib/aruba/hooks.rb +56 -0
- data/lib/aruba/in_config_wrapper.rb +24 -0
- data/lib/aruba/in_process.rb +14 -0
- data/lib/aruba/initializer.rb +222 -0
- data/lib/aruba/jruby.rb +4 -0
- data/lib/aruba/matchers/base/base_matcher.rb +96 -0
- data/lib/aruba/matchers/base/object_formatter.rb +114 -0
- data/lib/aruba/matchers/collection.rb +1 -0
- data/lib/aruba/matchers/collection/all.rb +11 -0
- data/lib/aruba/matchers/collection/include_an_object.rb +122 -0
- data/lib/aruba/matchers/command.rb +1 -0
- data/lib/aruba/matchers/command/be_successfully_executed.rb +34 -0
- data/lib/aruba/matchers/command/have_exit_status.rb +38 -0
- data/lib/aruba/matchers/command/have_finished_in_time.rb +37 -0
- data/lib/aruba/matchers/command/have_output.rb +36 -0
- data/lib/aruba/matchers/command/have_output_on_stderr.rb +32 -0
- data/lib/aruba/matchers/command/have_output_on_stdout.rb +32 -0
- data/lib/aruba/matchers/command/have_output_size.rb +28 -0
- data/lib/aruba/matchers/directory.rb +1 -0
- data/lib/aruba/matchers/directory/be_an_existing_directory.rb +38 -0
- data/lib/aruba/matchers/directory/have_sub_directory.rb +53 -0
- data/lib/aruba/matchers/environment.rb +1 -0
- data/lib/aruba/matchers/file.rb +1 -0
- data/lib/aruba/matchers/file/be_a_command_found_in_path.rb +36 -0
- data/lib/aruba/matchers/file/be_an_existing_executable.rb +37 -0
- data/lib/aruba/matchers/file/be_an_existing_file.rb +38 -0
- data/lib/aruba/matchers/file/have_file_content.rb +62 -0
- data/lib/aruba/matchers/file/have_file_size.rb +47 -0
- data/lib/aruba/matchers/file/have_same_file_content.rb +48 -0
- data/lib/aruba/matchers/path.rb +1 -0
- data/lib/aruba/matchers/path/a_path_matching_pattern.rb +25 -0
- data/lib/aruba/matchers/path/be_an_absolute_path.rb +36 -0
- data/lib/aruba/matchers/path/be_an_existing_path.rb +37 -0
- data/lib/aruba/matchers/path/have_permissions.rb +64 -0
- data/lib/aruba/matchers/path/match_path_pattern.rb +41 -0
- data/lib/aruba/matchers/rspec_matcher_include_regexp.rb +25 -0
- 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/platform.rb +25 -0
- data/lib/aruba/platforms/announcer.rb +232 -0
- data/lib/aruba/platforms/aruba_file_creator.rb +35 -0
- data/lib/aruba/platforms/aruba_fixed_size_file_creator.rb +35 -0
- data/lib/aruba/platforms/aruba_logger.rb +81 -0
- data/lib/aruba/platforms/command_monitor.rb +229 -0
- data/lib/aruba/platforms/determine_disk_usage.rb +28 -0
- data/lib/aruba/platforms/determine_file_size.rb +22 -0
- data/lib/aruba/platforms/disk_usage_calculator.rb +20 -0
- data/lib/aruba/platforms/filesystem_status.rb +68 -0
- data/lib/aruba/platforms/local_environment.rb +29 -0
- data/lib/aruba/platforms/simple_table.rb +54 -0
- data/lib/aruba/platforms/unix_command_string.rb +27 -0
- data/lib/aruba/platforms/unix_environment_variables.rb +220 -0
- data/lib/aruba/platforms/unix_platform.rb +276 -0
- data/lib/aruba/platforms/unix_which.rb +85 -0
- data/lib/aruba/platforms/windows_command_string.rb +31 -0
- data/lib/aruba/platforms/windows_environment_variables.rb +89 -0
- data/lib/aruba/platforms/windows_platform.rb +42 -0
- data/lib/aruba/platforms/windows_which.rb +106 -0
- data/lib/aruba/processes/basic_process.rb +143 -0
- data/lib/aruba/processes/debug_process.rb +69 -0
- data/lib/aruba/processes/in_process.rb +125 -0
- data/lib/aruba/processes/spawn_process.rb +278 -0
- data/lib/aruba/reporting.rb +126 -0
- data/lib/aruba/rspec.rb +107 -0
- data/lib/aruba/runtime.rb +96 -0
- data/lib/aruba/setup.rb +90 -0
- data/lib/aruba/spawn_process.rb +11 -0
- data/lib/aruba/version.rb +3 -0
- data/script/bootstrap +28 -0
- data/script/console +16 -0
- data/script/test +3 -0
- data/spec/aruba/api/environment/restore_env_spec.rb +65 -0
- data/spec/aruba/api/environment/set_env_spec.rb +42 -0
- data/spec/aruba/api/filesystem/file_size_spec.rb +28 -0
- data/spec/aruba/api/runtime_spec.rb +28 -0
- data/spec/aruba/api_spec.rb +1209 -0
- data/spec/aruba/aruba_path_spec.rb +103 -0
- data/spec/aruba/basic_configuration_spec.rb +5 -0
- data/spec/aruba/configuration_spec.rb +5 -0
- data/spec/aruba/hooks_spec.rb +17 -0
- data/spec/aruba/in_config_wrapper_spec.rb +25 -0
- data/spec/aruba/jruby_spec.rb +55 -0
- data/spec/aruba/matchers/command/have_output_size_spec.rb +25 -0
- data/spec/aruba/matchers/command_spec.rb +174 -0
- data/spec/aruba/matchers/directory_spec.rb +57 -0
- data/spec/aruba/matchers/file_spec.rb +127 -0
- data/spec/aruba/matchers/path_spec.rb +88 -0
- data/spec/aruba/platform/simple_table_spec.rb +23 -0
- data/spec/aruba/platform/windows_environment_variables_spec.rb +500 -0
- data/spec/aruba/rspec_spec.rb +15 -0
- data/spec/aruba/runtime_spec.rb +29 -0
- data/spec/aruba/spawn_process_spec.rb +60 -0
- data/spec/event_bus/name_resolver_spec.rb +68 -0
- data/spec/event_bus_spec.rb +160 -0
- data/spec/spec_helper.rb +23 -0
- data/spec/support/configs/.keep +0 -0
- data/spec/support/configs/aruba.rb +5 -0
- data/spec/support/configs/pry.rb +3 -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/matchers/option.rb +35 -0
- data/spec/support/shared_contexts/.keep +0 -0
- data/spec/support/shared_contexts/aruba.rb +48 -0
- data/spec/support/shared_examples/.keep +0 -0
- data/spec/support/shared_examples/configuration.rb +116 -0
- data/spec/support/shared_examples/directory.rb +7 -0
- data/spec/support/shared_examples/file.rb +7 -0
- data/templates/css/console.css +24 -0
- data/templates/css/filesystem.css +42 -0
- data/templates/css/pygments-autumn.css +59 -0
- data/templates/files.erb +14 -0
- data/templates/images/LICENSE +22 -0
- data/templates/images/folder.png +0 -0
- data/templates/images/page_white.png +0 -0
- data/templates/images/page_white_gherkin.png +0 -0
- data/templates/images/page_white_ruby.png +0 -0
- data/templates/index.erb +20 -0
- data/templates/js/filesystem.js +5 -0
- data/templates/js/jquery-1.11.3.min.js +5 -0
- data/templates/main.erb +34 -0
- metadata +629 -0
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
When /^I do aruba (.*)$/ do |aruba_step|
|
|
2
|
+
@aruba_exception = StandardError.new
|
|
3
|
+
|
|
4
|
+
begin
|
|
5
|
+
step(aruba_step)
|
|
6
|
+
rescue => e
|
|
7
|
+
@aruba_exception = e
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
# Useful for debugging timing problems
|
|
12
|
+
When /^sleep (\d+)$/ do |time|
|
|
13
|
+
sleep time.to_i
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
When /^I set env variable "(\w+)" to "([^"]*)"$/ do |var, value|
|
|
17
|
+
ENV[var] = value
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
Then /^aruba should fail with "([^"]*)"$/ do |error_message|
|
|
21
|
+
expect(@aruba_exception.message).to include sanitize_text(error_message)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
Then /^the following step should fail with Spec::Expectations::ExpectationNotMetError:$/ do |multiline_step|
|
|
25
|
+
expect{steps multiline_step.to_s}.to raise_error(RSpec::Expectations::ExpectationNotMetError)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
Given(/^the default executable$/) do
|
|
29
|
+
step 'an executable named "bin/cli" with:', <<-EOS
|
|
30
|
+
#!/usr/bin/env ruby
|
|
31
|
+
|
|
32
|
+
$LOAD_PATH << File.expand_path('../../lib', __FILE__)
|
|
33
|
+
require 'cli/app'
|
|
34
|
+
|
|
35
|
+
exit 0
|
|
36
|
+
EOS
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
Given(/^the default feature-test$/) do
|
|
40
|
+
step(
|
|
41
|
+
'a file named "features/default.feature" with:',
|
|
42
|
+
<<-EOS.strip_heredoc
|
|
43
|
+
Feature: Default Feature
|
|
44
|
+
|
|
45
|
+
This is the default feature
|
|
46
|
+
|
|
47
|
+
Scenario: Run command
|
|
48
|
+
Given I successfully run `cli`
|
|
49
|
+
EOS
|
|
50
|
+
)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
Then(/^aruba should be installed on the local system$/) do
|
|
54
|
+
run('gem list aruba')
|
|
55
|
+
expect(last_command_started).to have_output(/aruba/)
|
|
56
|
+
end
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
require 'cucumber/platform'
|
|
2
|
+
|
|
3
|
+
Before '@requires-ruby-version-193' do |scenario|
|
|
4
|
+
next if RUBY_VERSION >= '1.9.3'
|
|
5
|
+
|
|
6
|
+
if Cucumber::VERSION < '2'
|
|
7
|
+
scenario.skip_invoke!
|
|
8
|
+
else
|
|
9
|
+
skip_this_scenario
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
Before '@requires-ruby-version-19' do |scenario|
|
|
14
|
+
next if RUBY_VERSION >= '1.9'
|
|
15
|
+
|
|
16
|
+
if Cucumber::VERSION < '2'
|
|
17
|
+
scenario.skip_invoke!
|
|
18
|
+
else
|
|
19
|
+
skip_this_scenario
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
Before '@requires-ruby-version-2' do |scenario|
|
|
24
|
+
next if RUBY_VERSION >= '2'
|
|
25
|
+
|
|
26
|
+
if Cucumber::VERSION < '2'
|
|
27
|
+
scenario.skip_invoke!
|
|
28
|
+
else
|
|
29
|
+
skip_this_scenario
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
Before '@requires-aruba-version-1' do |scenario|
|
|
34
|
+
next if Aruba::VERSION > '1'
|
|
35
|
+
|
|
36
|
+
if Cucumber::VERSION < '2'
|
|
37
|
+
scenario.skip_invoke!
|
|
38
|
+
else
|
|
39
|
+
skip_this_scenario
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
Before '@requires-ruby-platform-java' do |scenario|
|
|
44
|
+
# leave if java
|
|
45
|
+
next if RUBY_PLATFORM.include? 'java'
|
|
46
|
+
|
|
47
|
+
if Cucumber::VERSION < '2'
|
|
48
|
+
scenario.skip_invoke!
|
|
49
|
+
else
|
|
50
|
+
skip_this_scenario
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
Before '@requires-ruby-platform-mri' do |scenario|
|
|
55
|
+
# leave if not java
|
|
56
|
+
next unless RUBY_PLATFORM.include? 'java'
|
|
57
|
+
|
|
58
|
+
if Cucumber::VERSION < '2'
|
|
59
|
+
scenario.skip_invoke!
|
|
60
|
+
else
|
|
61
|
+
skip_this_scenario
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
Before '@unsupported-on-platform-windows' do |scenario|
|
|
66
|
+
# leave if not windows
|
|
67
|
+
next unless FFI::Platform.windows?
|
|
68
|
+
|
|
69
|
+
if Cucumber::VERSION < '2'
|
|
70
|
+
scenario.skip_invoke!
|
|
71
|
+
else
|
|
72
|
+
skip_this_scenario
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
Before '@unsupported-on-platform-unix' do |scenario|
|
|
77
|
+
# leave if not windows
|
|
78
|
+
next unless FFI::Platform.unix?
|
|
79
|
+
|
|
80
|
+
if Cucumber::VERSION < '2'
|
|
81
|
+
scenario.skip_invoke!
|
|
82
|
+
else
|
|
83
|
+
skip_this_scenario
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
Before '@unsupported-on-platform-mac' do |scenario|
|
|
88
|
+
# leave if not windows
|
|
89
|
+
next unless FFI::Platform.mac?
|
|
90
|
+
|
|
91
|
+
if Cucumber::VERSION < '2'
|
|
92
|
+
scenario.skip_invoke!
|
|
93
|
+
else
|
|
94
|
+
skip_this_scenario
|
|
95
|
+
end
|
|
96
|
+
end
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
Feature: Debug your command in cucumber-test-run
|
|
2
|
+
|
|
3
|
+
As a developer
|
|
4
|
+
I want to use some debugger in my code and therefor need system() to execute my program
|
|
5
|
+
In order to find a bug
|
|
6
|
+
|
|
7
|
+
Background:
|
|
8
|
+
Given I use a fixture named "cli-app"
|
|
9
|
+
And the default aruba exit timeout is 60 seconds
|
|
10
|
+
|
|
11
|
+
Scenario: Can handle exit status 0
|
|
12
|
+
Given an executable named "bin/cli" with:
|
|
13
|
+
"""bash
|
|
14
|
+
#!/usr/bin/env bash
|
|
15
|
+
|
|
16
|
+
exit 0
|
|
17
|
+
"""
|
|
18
|
+
And a file named "features/debug.feature" with:
|
|
19
|
+
"""cucumber
|
|
20
|
+
Feature: Exit status in debug environment
|
|
21
|
+
|
|
22
|
+
@debug
|
|
23
|
+
Scenario: Run program with debug code
|
|
24
|
+
When I run `cli`
|
|
25
|
+
Then the exit status should be 0
|
|
26
|
+
"""
|
|
27
|
+
When I successfully run `cucumber`
|
|
28
|
+
Then the features should all pass
|
|
29
|
+
|
|
30
|
+
Scenario: Can handle exit status 1
|
|
31
|
+
Given an executable named "bin/cli" with:
|
|
32
|
+
"""bash
|
|
33
|
+
#!/usr/bin/env bash
|
|
34
|
+
|
|
35
|
+
exit 1
|
|
36
|
+
"""
|
|
37
|
+
And a file named "features/debug.feature" with:
|
|
38
|
+
"""cucumber
|
|
39
|
+
Feature: Exit status in debug environment
|
|
40
|
+
|
|
41
|
+
@debug
|
|
42
|
+
Scenario: Run program with debug code
|
|
43
|
+
When I run `cli`
|
|
44
|
+
Then the exit status should be 1
|
|
45
|
+
"""
|
|
46
|
+
When I successfully run `cucumber`
|
|
47
|
+
Then the features should all pass
|
|
48
|
+
|
|
49
|
+
Scenario: You can use a debug repl in your cli program
|
|
50
|
+
|
|
51
|
+
If you want to debug a strange error, which only occures in one of your
|
|
52
|
+
`cucumber`-tests, the `@debug`-tag becomes handy. You can add `@debug` in
|
|
53
|
+
front of your feature/scenario to make `binding.pry` or `byebug` work in
|
|
54
|
+
your program.
|
|
55
|
+
|
|
56
|
+
Please make sure, that there's a statement after the `binding.pry`-call.
|
|
57
|
+
Otherwise you might not get an interactive shell, because your program will
|
|
58
|
+
just exit.
|
|
59
|
+
|
|
60
|
+
We are going to demonstrate this using `pry`, but any other interactive
|
|
61
|
+
debugger for any other programming language should also work.
|
|
62
|
+
|
|
63
|
+
Given an executable named "bin/cli" with:
|
|
64
|
+
"""ruby
|
|
65
|
+
#!/usr/bin/env ruby
|
|
66
|
+
|
|
67
|
+
$stderr.sync = true
|
|
68
|
+
$stdout.sync = true
|
|
69
|
+
|
|
70
|
+
require 'pry'
|
|
71
|
+
binding.pry
|
|
72
|
+
|
|
73
|
+
exit 0
|
|
74
|
+
"""
|
|
75
|
+
And a file named "features/debug.feature" with:
|
|
76
|
+
"""cucumber
|
|
77
|
+
Feature: Exit status in debug environment
|
|
78
|
+
|
|
79
|
+
@debug
|
|
80
|
+
Scenario: Run program with debug code
|
|
81
|
+
When I run `cli`
|
|
82
|
+
Then the exit status should be 0
|
|
83
|
+
"""
|
|
84
|
+
When I run `cucumber` interactively
|
|
85
|
+
And I stop the command started last if output contains:
|
|
86
|
+
"""
|
|
87
|
+
pry(main)>
|
|
88
|
+
"""
|
|
89
|
+
Then the output should match:
|
|
90
|
+
"""
|
|
91
|
+
7:\s+binding.pry
|
|
92
|
+
"""
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
Feature: Check exit status of commands
|
|
2
|
+
|
|
3
|
+
Use the `the exit status should be \d`-step to check the exit status of the
|
|
4
|
+
last command which was executed.
|
|
5
|
+
|
|
6
|
+
Background:
|
|
7
|
+
Given I use a fixture named "cli-app"
|
|
8
|
+
|
|
9
|
+
Scenario: Test for exit status of 0
|
|
10
|
+
Given an executable named "bin/cli" with:
|
|
11
|
+
"""
|
|
12
|
+
#!/bin/bash
|
|
13
|
+
exit 0
|
|
14
|
+
"""
|
|
15
|
+
And a file named "features/exit_status.feature" with:
|
|
16
|
+
"""
|
|
17
|
+
Feature: Exit status
|
|
18
|
+
Scenario: Run command
|
|
19
|
+
When I run `cli`
|
|
20
|
+
Then the exit status should be 0
|
|
21
|
+
"""
|
|
22
|
+
When I run `cucumber`
|
|
23
|
+
Then the features should all pass
|
|
24
|
+
|
|
25
|
+
Scenario: Test for exit status 1
|
|
26
|
+
Given an executable named "bin/cli" with:
|
|
27
|
+
"""
|
|
28
|
+
#!/bin/bash
|
|
29
|
+
exit 1
|
|
30
|
+
"""
|
|
31
|
+
And a file named "features/exit_status.feature" with:
|
|
32
|
+
"""
|
|
33
|
+
Feature: Failing program
|
|
34
|
+
Scenario: Run command
|
|
35
|
+
When I run `cli`
|
|
36
|
+
Then the exit status should be 1
|
|
37
|
+
"""
|
|
38
|
+
When I run `cucumber`
|
|
39
|
+
Then the features should all pass
|
|
40
|
+
|
|
41
|
+
Scenario: Test for non-zero exit status
|
|
42
|
+
Given an executable named "bin/cli" with:
|
|
43
|
+
"""
|
|
44
|
+
#!/bin/bash
|
|
45
|
+
exit 1
|
|
46
|
+
"""
|
|
47
|
+
And a file named "features/exit_status.feature" with:
|
|
48
|
+
"""
|
|
49
|
+
Feature: Failing program
|
|
50
|
+
Scenario: Run command
|
|
51
|
+
When I run `cli`
|
|
52
|
+
Then the exit status should not be 0
|
|
53
|
+
"""
|
|
54
|
+
When I run `cucumber`
|
|
55
|
+
Then the features should all pass
|
|
56
|
+
|
|
57
|
+
Scenario: Successfully run something
|
|
58
|
+
Given an executable named "bin/cli" with:
|
|
59
|
+
"""
|
|
60
|
+
#!/bin/bash
|
|
61
|
+
exit 0
|
|
62
|
+
"""
|
|
63
|
+
And a file named "features/exit_status.feature" with:
|
|
64
|
+
"""
|
|
65
|
+
Feature: Failing program
|
|
66
|
+
Scenario: Run command
|
|
67
|
+
When I successfully run `cli`
|
|
68
|
+
"""
|
|
69
|
+
When I run `cucumber`
|
|
70
|
+
Then the features should all pass
|
|
71
|
+
|
|
72
|
+
Scenario: Fail to run something successfully
|
|
73
|
+
Given an executable named "bin/cli" with:
|
|
74
|
+
"""
|
|
75
|
+
#!/bin/bash
|
|
76
|
+
exit 1
|
|
77
|
+
"""
|
|
78
|
+
And a file named "features/exit_status.feature" with:
|
|
79
|
+
"""
|
|
80
|
+
Feature: Failing program
|
|
81
|
+
Scenario: Run command
|
|
82
|
+
When I successfully run `cli`
|
|
83
|
+
"""
|
|
84
|
+
When I run `cucumber`
|
|
85
|
+
Then the features should not all pass
|
|
86
|
+
|
|
87
|
+
Scenario: Overwrite the default exit timeout via step
|
|
88
|
+
Given an executable named "bin/cli" with:
|
|
89
|
+
"""
|
|
90
|
+
#!/bin/bash
|
|
91
|
+
sleep 1
|
|
92
|
+
"""
|
|
93
|
+
And a file named "features/exit_status.feature" with:
|
|
94
|
+
"""
|
|
95
|
+
Feature: Failing program
|
|
96
|
+
Scenario: Run command
|
|
97
|
+
Given the default aruba exit timeout is 2 seconds
|
|
98
|
+
When I successfully run `cli`
|
|
99
|
+
"""
|
|
100
|
+
When I run `cucumber`
|
|
101
|
+
Then the features should all pass
|
|
102
|
+
|
|
103
|
+
Scenario: Successfully run something longer then the default time
|
|
104
|
+
Given an executable named "bin/cli" with:
|
|
105
|
+
"""
|
|
106
|
+
#!/bin/bash
|
|
107
|
+
sleep 1
|
|
108
|
+
"""
|
|
109
|
+
And a file named "features/exit_status.feature" with:
|
|
110
|
+
"""
|
|
111
|
+
Feature: Failing program
|
|
112
|
+
Scenario: Run command
|
|
113
|
+
Given the default aruba exit timeout is 0 seconds
|
|
114
|
+
When I successfully run `cli` for up to 2 seconds
|
|
115
|
+
"""
|
|
116
|
+
When I run `cucumber`
|
|
117
|
+
Then the features should all pass
|
|
118
|
+
|
|
119
|
+
Scenario: Unsuccessfully run something that takes too long
|
|
120
|
+
Given an executable named "bin/cli" with:
|
|
121
|
+
"""
|
|
122
|
+
#!/bin/bash
|
|
123
|
+
sleep 2
|
|
124
|
+
"""
|
|
125
|
+
And a file named "features/exit_status.feature" with:
|
|
126
|
+
"""
|
|
127
|
+
Feature: Failing program
|
|
128
|
+
Scenario: Run command
|
|
129
|
+
Given the default aruba exit timeout is 0 seconds
|
|
130
|
+
When I successfully run `cli` for up to 1 seconds
|
|
131
|
+
"""
|
|
132
|
+
When I run `cucumber`
|
|
133
|
+
Then the features should not all pass with:
|
|
134
|
+
"""
|
|
135
|
+
expected "cli" to have finished in time
|
|
136
|
+
"""
|
|
@@ -0,0 +1,485 @@
|
|
|
1
|
+
Feature: Run commands in ruby process
|
|
2
|
+
Running a lot of scenarios where each scenario uses Aruba
|
|
3
|
+
to spawn a new ruby process can be time consuming.
|
|
4
|
+
|
|
5
|
+
Aruba lets you plug in your own process class that can
|
|
6
|
+
run a command in the same ruby process as Cucumber/Aruba.
|
|
7
|
+
|
|
8
|
+
We expect that the command supports the following API. It needs to accept:
|
|
9
|
+
argv, stdin, stdout, stderr and kernel on `#initialize` and it needs to have
|
|
10
|
+
an `execute!`-method.
|
|
11
|
+
|
|
12
|
+
```ruby
|
|
13
|
+
module Cli
|
|
14
|
+
module App
|
|
15
|
+
class Runner
|
|
16
|
+
def initialize(argv, stdin, stdout, stderr, kernel)
|
|
17
|
+
\@argv = argv
|
|
18
|
+
\@stdin = stdin
|
|
19
|
+
\@stdout = stdout
|
|
20
|
+
\@stderr = stderr
|
|
21
|
+
\@kernel = kernel
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def execute!
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
The switch to the working directory takes place around the `execute!`-method.
|
|
32
|
+
If needed make sure, that you determine the current working directory within
|
|
33
|
+
code called by the `execute!`-method or just use `Dir.getwd` during "runtime"
|
|
34
|
+
and not during "loadtime", when the `ruby`-interpreter reads in you class
|
|
35
|
+
files.
|
|
36
|
+
|
|
37
|
+
*Pros*:
|
|
38
|
+
* Very fast compared to spawning processes
|
|
39
|
+
* You can use libraries like
|
|
40
|
+
[simplecov](https://github.com/colszowka/simplecov) more easily, because
|
|
41
|
+
there is only one "process" which adds data to `simplecov`'s database
|
|
42
|
+
|
|
43
|
+
*Cons*:
|
|
44
|
+
* You might oversee some bugs: You might forget to require libraries in your
|
|
45
|
+
"production" code, because you have required them in your testing code
|
|
46
|
+
* Using `:in_process` interactively is not supported
|
|
47
|
+
|
|
48
|
+
**WARNING**: Using `:in_process` interactively is not supported
|
|
49
|
+
|
|
50
|
+
Background:
|
|
51
|
+
Given I use a fixture named "cli-app"
|
|
52
|
+
And a file named "features/support/cli_app.rb" with:
|
|
53
|
+
"""
|
|
54
|
+
require 'cli/app/runner'
|
|
55
|
+
"""
|
|
56
|
+
And a file named "features/support/in_proccess.rb" with:
|
|
57
|
+
"""
|
|
58
|
+
require 'aruba/cucumber'
|
|
59
|
+
|
|
60
|
+
Before('@in-process') do
|
|
61
|
+
aruba.config.command_launcher = :in_process
|
|
62
|
+
aruba.config.main_class = Cli::App::Runner
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
After('@in-process') do
|
|
66
|
+
aruba.config.command_launcher = :spawn
|
|
67
|
+
end
|
|
68
|
+
"""
|
|
69
|
+
|
|
70
|
+
Scenario: Run custom code
|
|
71
|
+
Given a file named "lib/cli/app/runner.rb" with:
|
|
72
|
+
"""
|
|
73
|
+
module Cli
|
|
74
|
+
module App
|
|
75
|
+
class Runner
|
|
76
|
+
def initialize(argv, stdin, stdout, stderr, kernel)
|
|
77
|
+
@argv = argv
|
|
78
|
+
@stdin = stdin
|
|
79
|
+
@stdout = stdout
|
|
80
|
+
@stderr = stderr
|
|
81
|
+
@kernel = kernel
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def execute!
|
|
85
|
+
@stdout.puts(@argv.map(&:reverse).join(' '))
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
"""
|
|
91
|
+
And a file named "features/in_process.feature" with:
|
|
92
|
+
"""
|
|
93
|
+
Feature: Run a command in process
|
|
94
|
+
@in-process
|
|
95
|
+
Scenario: Run command
|
|
96
|
+
When I run `reverse.rb Hello World`
|
|
97
|
+
Then the output should contain:
|
|
98
|
+
\"\"\"
|
|
99
|
+
olleH dlroW
|
|
100
|
+
\"\"\"
|
|
101
|
+
"""
|
|
102
|
+
When I run `cucumber`
|
|
103
|
+
Then the features should all pass
|
|
104
|
+
|
|
105
|
+
Scenario: Mixing custom code and normal cli
|
|
106
|
+
Given an executable named "bin/cli" with:
|
|
107
|
+
"""
|
|
108
|
+
#!/bin/bash
|
|
109
|
+
echo $*
|
|
110
|
+
"""
|
|
111
|
+
And a file named "lib/cli/app/runner.rb" with:
|
|
112
|
+
"""
|
|
113
|
+
module Cli
|
|
114
|
+
module App
|
|
115
|
+
class Runner
|
|
116
|
+
def initialize(argv, stdin, stdout, stderr, kernel)
|
|
117
|
+
@argv = argv
|
|
118
|
+
@stdin = stdin
|
|
119
|
+
@stdout = stdout
|
|
120
|
+
@stderr = stderr
|
|
121
|
+
@kernel = kernel
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
def execute!
|
|
125
|
+
@stdout.puts(@argv.map(&:reverse).join(' '))
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
"""
|
|
131
|
+
And a file named "features/in_process.feature" with:
|
|
132
|
+
"""
|
|
133
|
+
Feature: Run a command in process
|
|
134
|
+
@in-process
|
|
135
|
+
Scenario: Run command in process
|
|
136
|
+
When I run `reverse.rb Hello World`
|
|
137
|
+
Then the output should contain:
|
|
138
|
+
\"\"\"
|
|
139
|
+
olleH dlroW
|
|
140
|
+
\"\"\"
|
|
141
|
+
|
|
142
|
+
Scenario: Run command
|
|
143
|
+
When I run `cli Hello World`
|
|
144
|
+
Then the output should contain:
|
|
145
|
+
\"\"\"
|
|
146
|
+
Hello World
|
|
147
|
+
\"\"\"
|
|
148
|
+
"""
|
|
149
|
+
When I run `cucumber`
|
|
150
|
+
Then the features should all pass
|
|
151
|
+
|
|
152
|
+
Scenario: The current working directory is changed as well
|
|
153
|
+
Given a file named "lib/cli/app/runner.rb" with:
|
|
154
|
+
"""
|
|
155
|
+
module Cli
|
|
156
|
+
module App
|
|
157
|
+
class Runner
|
|
158
|
+
def initialize(argv, stdin, stdout, stderr, kernel)
|
|
159
|
+
@argv = argv
|
|
160
|
+
@stdin = stdin
|
|
161
|
+
@stdout = stdout
|
|
162
|
+
@stderr = stderr
|
|
163
|
+
@kernel = kernel
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
def execute!
|
|
167
|
+
@stdout.puts("PWD-ENV is " + Dir.getwd)
|
|
168
|
+
end
|
|
169
|
+
end
|
|
170
|
+
end
|
|
171
|
+
end
|
|
172
|
+
"""
|
|
173
|
+
And a file named "features/in_process.feature" with:
|
|
174
|
+
"""
|
|
175
|
+
Feature: Run a command in process
|
|
176
|
+
@in-process
|
|
177
|
+
Scenario: Run command
|
|
178
|
+
When I run `pwd.rb`
|
|
179
|
+
Then the output should match %r<PWD-ENV.*tmp/aruba>
|
|
180
|
+
"""
|
|
181
|
+
When I run `cucumber`
|
|
182
|
+
Then the features should all pass
|
|
183
|
+
|
|
184
|
+
Scenario: The PWD environment is changed to current working directory
|
|
185
|
+
Given a file named "lib/cli/app/runner.rb" with:
|
|
186
|
+
"""
|
|
187
|
+
module Cli
|
|
188
|
+
module App
|
|
189
|
+
class Runner
|
|
190
|
+
def initialize(argv, stdin, stdout, stderr, kernel)
|
|
191
|
+
@argv = argv
|
|
192
|
+
@stdin = stdin
|
|
193
|
+
@stdout = stdout
|
|
194
|
+
@stderr = stderr
|
|
195
|
+
@kernel = kernel
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
def execute!
|
|
199
|
+
@stdout.puts("PWD-ENV is " + ENV['PWD'])
|
|
200
|
+
end
|
|
201
|
+
end
|
|
202
|
+
end
|
|
203
|
+
end
|
|
204
|
+
"""
|
|
205
|
+
And a file named "features/in_process.feature" with:
|
|
206
|
+
"""
|
|
207
|
+
Feature: Run a command in process
|
|
208
|
+
@in-process
|
|
209
|
+
Scenario: Run command
|
|
210
|
+
When I run `pwd.rb`
|
|
211
|
+
Then the output should match %r<PWD-ENV.*tmp/aruba>
|
|
212
|
+
"""
|
|
213
|
+
When I run `cucumber`
|
|
214
|
+
Then the features should all pass
|
|
215
|
+
|
|
216
|
+
Scenario: Set runner via "Aruba.process ="-method (deprecated)
|
|
217
|
+
Given a file named "features/support/in_proccess.rb" with:
|
|
218
|
+
"""
|
|
219
|
+
require 'aruba/cucumber'
|
|
220
|
+
require 'aruba/processes/in_process'
|
|
221
|
+
|
|
222
|
+
Before('@in-process') do
|
|
223
|
+
Aruba.process = Aruba::Processes::InProcess
|
|
224
|
+
Aruba.process.main_class = Cli::App::Runner
|
|
225
|
+
end
|
|
226
|
+
|
|
227
|
+
After('@in-process') do
|
|
228
|
+
Aruba.process = Aruba::Processes::SpawnProcess
|
|
229
|
+
end
|
|
230
|
+
"""
|
|
231
|
+
Given a file named "lib/cli/app/runner.rb" with:
|
|
232
|
+
"""
|
|
233
|
+
module Cli
|
|
234
|
+
module App
|
|
235
|
+
class Runner
|
|
236
|
+
def initialize(argv, stdin, stdout, stderr, kernel)
|
|
237
|
+
@argv = argv
|
|
238
|
+
@stdin = stdin
|
|
239
|
+
@stdout = stdout
|
|
240
|
+
@stderr = stderr
|
|
241
|
+
@kernel = kernel
|
|
242
|
+
end
|
|
243
|
+
|
|
244
|
+
def execute!
|
|
245
|
+
@stdout.puts(@argv.map(&:reverse).join(' '))
|
|
246
|
+
end
|
|
247
|
+
end
|
|
248
|
+
end
|
|
249
|
+
end
|
|
250
|
+
"""
|
|
251
|
+
And a file named "features/in_process.feature" with:
|
|
252
|
+
"""
|
|
253
|
+
Feature: Run a command in process
|
|
254
|
+
@in-process
|
|
255
|
+
Scenario: Run command
|
|
256
|
+
When I run `reverse.rb Hello World`
|
|
257
|
+
Then the output should contain:
|
|
258
|
+
\"\"\"
|
|
259
|
+
olleH dlroW
|
|
260
|
+
\"\"\"
|
|
261
|
+
"""
|
|
262
|
+
When I run `cucumber`
|
|
263
|
+
Then the features should all pass
|
|
264
|
+
|
|
265
|
+
Scenario: Set runner via "Aruba.process ="-method and use old class name Aruba::InProcess (deprecated)
|
|
266
|
+
Given a file named "features/support/in_proccess.rb" with:
|
|
267
|
+
"""
|
|
268
|
+
require 'aruba/cucumber'
|
|
269
|
+
require 'aruba/in_process'
|
|
270
|
+
require 'aruba/spawn_process'
|
|
271
|
+
|
|
272
|
+
Before('@in-process') do
|
|
273
|
+
Aruba.process = Aruba::InProcess
|
|
274
|
+
Aruba.process.main_class = Cli::App::Runner
|
|
275
|
+
end
|
|
276
|
+
|
|
277
|
+
After('@in-process') do
|
|
278
|
+
Aruba.process = Aruba::SpawnProcess
|
|
279
|
+
end
|
|
280
|
+
"""
|
|
281
|
+
Given a file named "lib/cli/app/runner.rb" with:
|
|
282
|
+
"""
|
|
283
|
+
module Cli
|
|
284
|
+
module App
|
|
285
|
+
class Runner
|
|
286
|
+
def initialize(argv, stdin, stdout, stderr, kernel)
|
|
287
|
+
@argv = argv
|
|
288
|
+
@stdin = stdin
|
|
289
|
+
@stdout = stdout
|
|
290
|
+
@stderr = stderr
|
|
291
|
+
@kernel = kernel
|
|
292
|
+
end
|
|
293
|
+
|
|
294
|
+
def execute!
|
|
295
|
+
@stdout.puts(@argv.map(&:reverse).join(' '))
|
|
296
|
+
end
|
|
297
|
+
end
|
|
298
|
+
end
|
|
299
|
+
end
|
|
300
|
+
"""
|
|
301
|
+
And a file named "features/in_process.feature" with:
|
|
302
|
+
"""
|
|
303
|
+
Feature: Run a command in process
|
|
304
|
+
@in-process
|
|
305
|
+
Scenario: Run command
|
|
306
|
+
When I run `reverse.rb Hello World`
|
|
307
|
+
Then the output should contain:
|
|
308
|
+
\"\"\"
|
|
309
|
+
olleH dlroW
|
|
310
|
+
\"\"\"
|
|
311
|
+
"""
|
|
312
|
+
When I run `cucumber`
|
|
313
|
+
Then the features should all pass
|
|
314
|
+
|
|
315
|
+
Scenario: Use $stderr, $stdout and $stdin to access IO
|
|
316
|
+
|
|
317
|
+
May may need/want to use the default `STDERR`, `STDOUT`, `STDIN`-constants
|
|
318
|
+
to access IO from within your script. Unfortunately this does not work with
|
|
319
|
+
the `:in_process`-command launcher. You need to use `$stderr`, `$stdout`
|
|
320
|
+
and `$stdin` instead.
|
|
321
|
+
|
|
322
|
+
For this example I chose `thor` to parse ARGV. Its `.start`-method accepts
|
|
323
|
+
an "Array" as ARGV and a "Hash" for some other options – `.start <ARGV>, <OPTIONS>`
|
|
324
|
+
|
|
325
|
+
Given a file named "lib/cli/app/runner.rb" with:
|
|
326
|
+
"""
|
|
327
|
+
require 'cli/app/cli_parser'
|
|
328
|
+
|
|
329
|
+
module Cli
|
|
330
|
+
module App
|
|
331
|
+
class Runner
|
|
332
|
+
def initialize(argv, stdin, stdout, stderr, kernel)
|
|
333
|
+
@argv = argv
|
|
334
|
+
$kernel = kernel
|
|
335
|
+
$stdin = stdin
|
|
336
|
+
$stdout = stdout
|
|
337
|
+
$stderr = stderr
|
|
338
|
+
end
|
|
339
|
+
|
|
340
|
+
def execute!
|
|
341
|
+
Cli::App::CliParser.start @argv
|
|
342
|
+
end
|
|
343
|
+
end
|
|
344
|
+
end
|
|
345
|
+
end
|
|
346
|
+
"""
|
|
347
|
+
And a file named "lib/cli/app/cli_parser.rb" with:
|
|
348
|
+
"""
|
|
349
|
+
require 'thor'
|
|
350
|
+
|
|
351
|
+
module Cli
|
|
352
|
+
module App
|
|
353
|
+
class CliParser < Thor
|
|
354
|
+
def self.exit_on_failure?
|
|
355
|
+
true
|
|
356
|
+
end
|
|
357
|
+
|
|
358
|
+
desc 'do_it', 'Reverse input'
|
|
359
|
+
def do_it(*args)
|
|
360
|
+
$stderr.puts 'Hey ya, Hey ya, check, check, check'
|
|
361
|
+
$stdout.puts(args.flatten.map(&:reverse).join(' '))
|
|
362
|
+
end
|
|
363
|
+
end
|
|
364
|
+
end
|
|
365
|
+
end
|
|
366
|
+
"""
|
|
367
|
+
And a file named "features/in_process.feature" with:
|
|
368
|
+
"""
|
|
369
|
+
Feature: Run a command in process
|
|
370
|
+
@in-process
|
|
371
|
+
Scenario: Run command
|
|
372
|
+
When I run `reverse.rb do_it Hello World`
|
|
373
|
+
Then the stdout should contain:
|
|
374
|
+
\"\"\"
|
|
375
|
+
olleH dlroW
|
|
376
|
+
\"\"\"
|
|
377
|
+
And the stderr should contain:
|
|
378
|
+
\"\"\"
|
|
379
|
+
Hey ya, Hey ya, check, check, check
|
|
380
|
+
\"\"\"
|
|
381
|
+
"""
|
|
382
|
+
When I run `cucumber`
|
|
383
|
+
Then the features should all pass
|
|
384
|
+
|
|
385
|
+
Scenario: Use $kernel to use Kernel to capture exit code
|
|
386
|
+
|
|
387
|
+
Ruby's `Kernel`-module provides some helper methods like `exit`.
|
|
388
|
+
Unfortunately running `#exit` with `:in_process` would make the whole ruby
|
|
389
|
+
interpreter exit. So you might want to use our `FakeKernel`-module module
|
|
390
|
+
instead which overwrites `#exit`. This will also make our tests for
|
|
391
|
+
checking the exit code work. This example also uses the `thor`-library.
|
|
392
|
+
|
|
393
|
+
Given a file named "lib/cli/app/runner.rb" with:
|
|
394
|
+
"""
|
|
395
|
+
require 'cli/app/cli_parser'
|
|
396
|
+
|
|
397
|
+
module Cli
|
|
398
|
+
module App
|
|
399
|
+
class Runner
|
|
400
|
+
def initialize(argv, stdin, stdout, stderr, kernel)
|
|
401
|
+
@argv = argv
|
|
402
|
+
$kernel = kernel
|
|
403
|
+
$stdin = stdin
|
|
404
|
+
$stdout = stdout
|
|
405
|
+
$stderr = stderr
|
|
406
|
+
end
|
|
407
|
+
|
|
408
|
+
def execute!
|
|
409
|
+
Cli::App::CliParser.start @argv
|
|
410
|
+
end
|
|
411
|
+
end
|
|
412
|
+
end
|
|
413
|
+
end
|
|
414
|
+
"""
|
|
415
|
+
And a file named "lib/cli/app/cli_parser.rb" with:
|
|
416
|
+
"""
|
|
417
|
+
require 'thor'
|
|
418
|
+
|
|
419
|
+
module Cli
|
|
420
|
+
module App
|
|
421
|
+
class CliParser < Thor
|
|
422
|
+
def self.exit_on_failure?
|
|
423
|
+
true
|
|
424
|
+
end
|
|
425
|
+
|
|
426
|
+
desc 'do_it', 'Reverse input'
|
|
427
|
+
def do_it(*args)
|
|
428
|
+
$kernel.exit 5
|
|
429
|
+
end
|
|
430
|
+
end
|
|
431
|
+
end
|
|
432
|
+
end
|
|
433
|
+
"""
|
|
434
|
+
And a file named "features/in_process.feature" with:
|
|
435
|
+
"""
|
|
436
|
+
Feature: Run a command in process
|
|
437
|
+
@in-process
|
|
438
|
+
Scenario: Run command
|
|
439
|
+
When I run `reverse.rb do_it`
|
|
440
|
+
Then the exit status should be 5
|
|
441
|
+
"""
|
|
442
|
+
When I run `cucumber`
|
|
443
|
+
Then the features should all pass
|
|
444
|
+
|
|
445
|
+
Scenario: Using `:in_process` interactively is not supported
|
|
446
|
+
|
|
447
|
+
Reading from STDIN blocks ruby from going on. But writing to STDIN - e.g.
|
|
448
|
+
type some letters on keyboard - can only appear later, but this point is
|
|
449
|
+
never reached, because ruby is blocked.
|
|
450
|
+
|
|
451
|
+
Given the default aruba exit timeout is 5 seconds
|
|
452
|
+
And a file named "lib/cli/app/runner.rb" with:
|
|
453
|
+
"""
|
|
454
|
+
module Cli
|
|
455
|
+
module App
|
|
456
|
+
class Runner
|
|
457
|
+
def initialize(argv, stdin, stdout, stderr, kernel)
|
|
458
|
+
@stdin = stdin
|
|
459
|
+
end
|
|
460
|
+
|
|
461
|
+
def execute!
|
|
462
|
+
while res = @stdin.gets.to_s.chomp
|
|
463
|
+
break if res == 'quit'
|
|
464
|
+
puts res.reverse
|
|
465
|
+
end
|
|
466
|
+
end
|
|
467
|
+
end
|
|
468
|
+
end
|
|
469
|
+
end
|
|
470
|
+
"""
|
|
471
|
+
And a file named "features/in_process.feature" with:
|
|
472
|
+
"""
|
|
473
|
+
Feature: Run a command in process
|
|
474
|
+
@in-process
|
|
475
|
+
Scenario: Run command
|
|
476
|
+
Given the default aruba exit timeout is 2 seconds
|
|
477
|
+
When I run `reverse.rb do_it` interactively
|
|
478
|
+
When I type "hello"
|
|
479
|
+
Then the output should contain:
|
|
480
|
+
\"\"\"
|
|
481
|
+
hello
|
|
482
|
+
\"\"\"
|
|
483
|
+
"""
|
|
484
|
+
When I run `cucumber`
|
|
485
|
+
Then the exit status should not be 0
|