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,85 @@
|
|
|
1
|
+
# Aruba
|
|
2
|
+
module Aruba
|
|
3
|
+
# Platforms
|
|
4
|
+
module Platforms
|
|
5
|
+
# Implement `which(command)` for UNIX/Linux
|
|
6
|
+
#
|
|
7
|
+
# @private
|
|
8
|
+
class UnixWhich
|
|
9
|
+
# Bail out because this should never be reached
|
|
10
|
+
class DefaultWhich
|
|
11
|
+
def self.match?(*)
|
|
12
|
+
true
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def call(program, path)
|
|
16
|
+
fail %(Invalid input program "#{program}" and/or path "#{path}".)
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# Find path for absolute or relative command
|
|
21
|
+
class AbsoluteOrRelativePathWhich
|
|
22
|
+
def self.match?(program)
|
|
23
|
+
Aruba.platform.absolute_path?(program) || Aruba.platform.relative_command?(program)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def call(program, path)
|
|
27
|
+
return File.expand_path(program) if Aruba.platform.executable?(program)
|
|
28
|
+
|
|
29
|
+
nil
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# Find path for command
|
|
34
|
+
class ProgramWhich
|
|
35
|
+
def self.match?(program)
|
|
36
|
+
Aruba.platform.command?(program)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# rubocop:disable Metrics/CyclomaticComplexity
|
|
40
|
+
# rubocop:disable Metrics/MethodLength
|
|
41
|
+
def call(program, path)
|
|
42
|
+
# Iterate over each path glob the dir + program.
|
|
43
|
+
path.split(File::PATH_SEPARATOR).each do |dir|
|
|
44
|
+
dir = Aruba.platform.expand_path(dir, Dir.getwd)
|
|
45
|
+
next unless Aruba.platform.exist?(dir) # In case of bogus second argument
|
|
46
|
+
|
|
47
|
+
found = Dir[File.join(dir, program)].first
|
|
48
|
+
return found if found && Aruba.platform.executable?(found)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
nil
|
|
52
|
+
end
|
|
53
|
+
# rubocop:enable Metrics/CyclomaticComplexity
|
|
54
|
+
# rubocop:enable Metrics/MethodLength
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
private
|
|
58
|
+
|
|
59
|
+
attr_reader :whiches
|
|
60
|
+
|
|
61
|
+
public
|
|
62
|
+
|
|
63
|
+
def initialize
|
|
64
|
+
@whiches = []
|
|
65
|
+
@whiches << AbsoluteOrRelativePathWhich
|
|
66
|
+
@whiches << ProgramWhich
|
|
67
|
+
@whiches << DefaultWhich
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# Find fully quallified path for program
|
|
71
|
+
#
|
|
72
|
+
# @param [String] program
|
|
73
|
+
# Name of program
|
|
74
|
+
#
|
|
75
|
+
# @param [String] path
|
|
76
|
+
# ENV['PATH']
|
|
77
|
+
def call(program, path = ENV['PATH'])
|
|
78
|
+
raise ArgumentError, "ENV['PATH'] cannot be empty" if path.nil? || path.empty?
|
|
79
|
+
program = program.to_s
|
|
80
|
+
|
|
81
|
+
whiches.find { |w| w.match? program }.new.call(program, path)
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
require 'delegate'
|
|
2
|
+
|
|
3
|
+
# Aruba
|
|
4
|
+
module Aruba
|
|
5
|
+
# Platforms
|
|
6
|
+
module Platforms
|
|
7
|
+
# This is a command which should be run
|
|
8
|
+
#
|
|
9
|
+
# This adds `cmd.exec` in front of commmand
|
|
10
|
+
#
|
|
11
|
+
# @private
|
|
12
|
+
class WindowsCommandString < SimpleDelegator
|
|
13
|
+
def initialize(cmd)
|
|
14
|
+
__setobj__ format('%s /c "%s"', Aruba.platform.which('cmd.exe'), cmd)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# Convert to array
|
|
18
|
+
def to_a
|
|
19
|
+
Shellwords.split( __getobj__.gsub('\\', 'ARUBA_TMP_PATHSEPARATOR') ).
|
|
20
|
+
map { |w| w.gsub('ARUBA_TMP_PATHSEPARATOR', '\\') }
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
if RUBY_VERSION < '1.9'
|
|
24
|
+
def to_s
|
|
25
|
+
__getobj__.to_s
|
|
26
|
+
end
|
|
27
|
+
alias inspect to_s
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
require 'aruba/platforms/unix_environment_variables'
|
|
2
|
+
|
|
3
|
+
# Aruba
|
|
4
|
+
module Aruba
|
|
5
|
+
# Platforms
|
|
6
|
+
module Platforms
|
|
7
|
+
# Windows is case-insensitive when it accesses its environment variables.
|
|
8
|
+
# That means that at the Windows command line:
|
|
9
|
+
#
|
|
10
|
+
# C:>set Path
|
|
11
|
+
# C:>Path=.;.\bin;c:\rubys\ruby-2.1.6-p336\bin;
|
|
12
|
+
# C:>set PATH
|
|
13
|
+
# C:>Path=.;.\bin;c:\rubys\ruby-2.1.6-p336\bin;
|
|
14
|
+
#
|
|
15
|
+
# If you access environment variables through ENV, you can access values no
|
|
16
|
+
# matter the case of the key:
|
|
17
|
+
#
|
|
18
|
+
# irb: > ENV["Path"]
|
|
19
|
+
# => ".;.\bin;c:\rubys\ruby-2.1.6-p336\bin;"
|
|
20
|
+
# irb: > ENV["Path"]
|
|
21
|
+
# => ".;.\bin;c:\rubys\ruby-2.1.6-p336\bin;"
|
|
22
|
+
#
|
|
23
|
+
# But if you copy the ENV to a hash, Ruby treats the keys as case sensitive:
|
|
24
|
+
#
|
|
25
|
+
# irb: > env_copy = ENV.to_hash
|
|
26
|
+
# => {"ALLUSERSPROFILE"=>"C:\\ProgramData", "ANSICON"=>"119x1000 (119x58)", "ANSICON_DEF"=>"7", APPDATA"=>"C:\\Users\\blorf\\AppData\\Roaming", ....}
|
|
27
|
+
# irb: > env["Path"]
|
|
28
|
+
# => ".;.\bin;c:\rubys\ruby-2.1.6-p336\bin;"
|
|
29
|
+
# irb: > env["PATH"]
|
|
30
|
+
# => nil
|
|
31
|
+
#
|
|
32
|
+
# Thus we turn all of the environment variable keys to upper case so that
|
|
33
|
+
# aruba is ensured that accessing environment variables with upper case keys
|
|
34
|
+
# will always work.
|
|
35
|
+
class WindowsEnvironmentVariables < UnixEnvironmentVariables
|
|
36
|
+
def initialize(env = ENV.to_hash)
|
|
37
|
+
@actions = []
|
|
38
|
+
|
|
39
|
+
@env = if RUBY_VERSION <= '1.9.3'
|
|
40
|
+
# rubocop:disable Style/EachWithObject
|
|
41
|
+
env.inject({}) { |a, (k,v)| a[k.to_s.upcase] = v; a }
|
|
42
|
+
# rubocop:enable Style/EachWithObject
|
|
43
|
+
else
|
|
44
|
+
env.each_with_object({}) { |(k,v), a| a[k.to_s.upcase] = v }
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def update(other_env, &block)
|
|
49
|
+
other_env = if RUBY_VERSION <= '1.9.3'
|
|
50
|
+
# rubocop:disable Style/EachWithObject
|
|
51
|
+
other_env.inject({}) { |a, (k,v)| a[k.to_s.upcase] = v; a }
|
|
52
|
+
# rubocop:enable Style/EachWithObject
|
|
53
|
+
else
|
|
54
|
+
other_env.each_with_object({}) { |(k,v), a| a[k.to_s.upcase] = v }
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
super(other_env, &block)
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def fetch(name, default = UnixEnvironmentVariables::UNDEFINED)
|
|
61
|
+
super(name.upcase, default)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def key?(name)
|
|
65
|
+
super(name.upcase)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def [](name)
|
|
69
|
+
super(name.upcase)
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def []=(name, value)
|
|
73
|
+
super(name.upcase, value)
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def append(name, value)
|
|
77
|
+
super(name.upcase, value)
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def prepend(name, value)
|
|
81
|
+
super(name.upcase, value)
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def delete(name, value)
|
|
85
|
+
super(name.upcase, value)
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
require 'ffi'
|
|
2
|
+
|
|
3
|
+
require 'aruba/platforms/unix_platform'
|
|
4
|
+
require 'aruba/platforms/windows_command_string'
|
|
5
|
+
require 'aruba/platforms/windows_environment_variables'
|
|
6
|
+
require 'aruba/platforms/windows_which'
|
|
7
|
+
|
|
8
|
+
# Aruba
|
|
9
|
+
module Aruba
|
|
10
|
+
# This abstracts OS-specific things
|
|
11
|
+
module Platforms
|
|
12
|
+
# WARNING:
|
|
13
|
+
# All methods found here are not considered part of the public API of aruba.
|
|
14
|
+
#
|
|
15
|
+
# Those methods can be changed at any time in the feature or removed without
|
|
16
|
+
# any further notice.
|
|
17
|
+
#
|
|
18
|
+
# This includes all methods for the Windows platform
|
|
19
|
+
#
|
|
20
|
+
# @private
|
|
21
|
+
class WindowsPlatform < UnixPlatform
|
|
22
|
+
def self.match?
|
|
23
|
+
FFI::Platform.windows?
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# @see UnixPlatform#command_string
|
|
27
|
+
def command_string
|
|
28
|
+
WindowsCommandString
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# @see UnixPlatform#environment_variables
|
|
32
|
+
def environment_variables
|
|
33
|
+
WindowsEnvironmentVariables
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# @see UnixPlatform#which
|
|
37
|
+
def which(program, path = ENV['PATH'])
|
|
38
|
+
WindowsWhich.new.call(program, path)
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
# Aruba
|
|
2
|
+
module Aruba
|
|
3
|
+
# Platforms
|
|
4
|
+
module Platforms
|
|
5
|
+
# Implement `which(command)` for windows
|
|
6
|
+
#
|
|
7
|
+
# @private
|
|
8
|
+
class WindowsWhich
|
|
9
|
+
# Bail out because this should never be reached
|
|
10
|
+
class DefaultWhich
|
|
11
|
+
def self.match?(*)
|
|
12
|
+
true
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def call(program, path)
|
|
16
|
+
fail %(Invalid input program "#{program}" and/or path "#{path}".)
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# Find path for absolute or relative command
|
|
21
|
+
class AbsoluteOrRelativePathWhich
|
|
22
|
+
def self.match?(program)
|
|
23
|
+
Aruba.platform.absolute_path?(program) || Aruba.platform.relative_command?(program)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def call(program, path)
|
|
27
|
+
# Expand `#path_exts`
|
|
28
|
+
found = Dir[program].first
|
|
29
|
+
|
|
30
|
+
return File.expand_path(found) if found && Aruba.platform.executable?(found)
|
|
31
|
+
nil
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# Find path for command
|
|
36
|
+
class ProgramWhich
|
|
37
|
+
def self.match?(program)
|
|
38
|
+
Aruba.platform.command?(program)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# rubocop:disable Metrics/CyclomaticComplexity
|
|
42
|
+
# rubocop:disable Metrics/MethodLength
|
|
43
|
+
def call(program, path)
|
|
44
|
+
# Iterate over each path glob the dir + program.
|
|
45
|
+
path.split(File::PATH_SEPARATOR).each do |dir|
|
|
46
|
+
dir = Aruba.platform.expand_path(dir, Dir.getwd)
|
|
47
|
+
|
|
48
|
+
next unless Aruba.platform.exist?(dir) # In case of bogus second argument
|
|
49
|
+
|
|
50
|
+
file = File.join(dir, program)
|
|
51
|
+
# Dir[] doesn't handle backslashes properly, so convert them. Also, if
|
|
52
|
+
# the program name doesn't have an extension, try them all.
|
|
53
|
+
file = file.tr("\\", "/")
|
|
54
|
+
|
|
55
|
+
found = Dir[file].first
|
|
56
|
+
|
|
57
|
+
# Convert all forward slashes to backslashes if supported
|
|
58
|
+
if found && Aruba.platform.executable?(found)
|
|
59
|
+
found.tr!(File::SEPARATOR, File::ALT_SEPARATOR)
|
|
60
|
+
return found
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
nil
|
|
65
|
+
end
|
|
66
|
+
# rubocop:enable Metrics/CyclomaticComplexity
|
|
67
|
+
# rubocop:enable Metrics/MethodLength
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
private
|
|
71
|
+
|
|
72
|
+
attr_reader :whiches
|
|
73
|
+
|
|
74
|
+
public
|
|
75
|
+
|
|
76
|
+
def initialize
|
|
77
|
+
@whiches = []
|
|
78
|
+
@whiches << AbsoluteOrRelativePathWhich
|
|
79
|
+
@whiches << ProgramWhich
|
|
80
|
+
@whiches << DefaultWhich
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
# Find fully quallified path for program
|
|
84
|
+
#
|
|
85
|
+
# @param [String] program
|
|
86
|
+
# Name of program
|
|
87
|
+
#
|
|
88
|
+
# @param [String] path
|
|
89
|
+
# ENV['PATH']
|
|
90
|
+
def call(program, path = ENV['PATH'])
|
|
91
|
+
raise ArgumentError, "ENV['PATH'] cannot be empty" if path.nil? || path.empty?
|
|
92
|
+
|
|
93
|
+
program = program.to_s
|
|
94
|
+
program += windows_executable_extentions if File.extname(program).empty?
|
|
95
|
+
|
|
96
|
+
whiches.find { |w| w.match? program }.new.call(program, path)
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
private
|
|
100
|
+
|
|
101
|
+
def windows_executable_extentions
|
|
102
|
+
ENV['PATHEXT'] ? format('.{%s}', ENV['PATHEXT'].tr(';', ',').tr('.','')).downcase : '.{exe,com,bat}'
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
end
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
require 'aruba/platform'
|
|
2
|
+
require 'shellwords'
|
|
3
|
+
|
|
4
|
+
# Aruba
|
|
5
|
+
module Aruba
|
|
6
|
+
# Processes
|
|
7
|
+
module Processes
|
|
8
|
+
# Basic Process
|
|
9
|
+
#
|
|
10
|
+
# `BasicProcess` is not meant for direct use - `BasicProcess.new` - by users.
|
|
11
|
+
#
|
|
12
|
+
# @private
|
|
13
|
+
class BasicProcess
|
|
14
|
+
attr_reader :exit_status, :environment, :working_directory, :main_class, :io_wait_timeout, :exit_timeout, :startup_wait_time
|
|
15
|
+
|
|
16
|
+
def initialize(cmd, exit_timeout, io_wait_timeout, working_directory, environment = ENV.to_hash.dup, main_class = nil, stop_signal = nil, startup_wait_time = 0)
|
|
17
|
+
@cmd = cmd
|
|
18
|
+
@working_directory = working_directory
|
|
19
|
+
@environment = environment
|
|
20
|
+
@main_class = main_class
|
|
21
|
+
@exit_status = nil
|
|
22
|
+
@stop_signal = stop_signal
|
|
23
|
+
@startup_wait_time = startup_wait_time
|
|
24
|
+
|
|
25
|
+
@exit_timeout = exit_timeout
|
|
26
|
+
@io_wait_timeout = io_wait_timeout
|
|
27
|
+
|
|
28
|
+
@started = false
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# Return command line
|
|
32
|
+
def commandline
|
|
33
|
+
@cmd
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# Output pid of process
|
|
37
|
+
def pid
|
|
38
|
+
'No implemented'
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# Output stderr and stdout
|
|
42
|
+
def output(opts = {})
|
|
43
|
+
stdout(opts) + stderr(opts)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def write(*)
|
|
47
|
+
NotImplementedError
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def stdin(*)
|
|
51
|
+
NotImplementedError
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def stdout(*)
|
|
55
|
+
NotImplementedError
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def stderr(*)
|
|
59
|
+
NotImplementedError
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def close_io(*)
|
|
63
|
+
NotImplementedError
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def send_signal(*)
|
|
67
|
+
NotImplementedError
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def filesystem_status
|
|
71
|
+
NotImplementedError
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def content
|
|
75
|
+
NotImplementedError
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def wait
|
|
79
|
+
NotImplementedError
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
# Restart a command
|
|
83
|
+
def restart
|
|
84
|
+
stop
|
|
85
|
+
start
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
# Was process already stopped
|
|
89
|
+
def stopped?
|
|
90
|
+
@started == false
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
# Was process already started
|
|
94
|
+
def started?
|
|
95
|
+
@started == true
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
# Does the process failed to stop in time
|
|
99
|
+
def timed_out?
|
|
100
|
+
@timed_out == true
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
# @deprecated
|
|
104
|
+
# @private
|
|
105
|
+
def run!
|
|
106
|
+
Aruba.platform.deprecated('The use of "command#run!" is deprecated. You can simply use "command#start" instead.')
|
|
107
|
+
|
|
108
|
+
start
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
# Hook which is run before command is run
|
|
112
|
+
def before_run; end
|
|
113
|
+
|
|
114
|
+
# Hook which is run after command is run
|
|
115
|
+
def after_run; end
|
|
116
|
+
|
|
117
|
+
def inspect
|
|
118
|
+
out = stdout(:wait_for_io => 0) + stderr(:wait_for_io => 0)
|
|
119
|
+
|
|
120
|
+
out = if out.length > 76
|
|
121
|
+
out[0, 75] + ' ...'
|
|
122
|
+
else
|
|
123
|
+
out
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
format '#<%s:%s commandline="%s": output="%s">', self.class, self.object_id, commandline, out
|
|
127
|
+
end
|
|
128
|
+
alias to_s inspect
|
|
129
|
+
|
|
130
|
+
private
|
|
131
|
+
|
|
132
|
+
def command
|
|
133
|
+
Shellwords.split(commandline).first
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
def arguments
|
|
137
|
+
return Shellwords.split(commandline)[1..-1] if Shellwords.split(commandline).size > 1
|
|
138
|
+
|
|
139
|
+
[]
|
|
140
|
+
end
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
end
|