aruba 1.0.0.pre.alpha.2 → 1.0.0.pre.alpha.3

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.
Files changed (113) hide show
  1. checksums.yaml +5 -5
  2. data/.github/PULL_REQUEST_TEMPLATE.md +2 -1
  3. data/.rubocop.yml +6 -181
  4. data/.rubocop_todo.yml +364 -0
  5. data/.travis.yml +63 -34
  6. data/.yardopts +3 -0
  7. data/CHANGELOG.md +1121 -0
  8. data/CONTRIBUTING.md +179 -78
  9. data/Gemfile +29 -44
  10. data/README.md +41 -11
  11. data/Rakefile +35 -35
  12. data/appveyor.yml +6 -5
  13. data/aruba.gemspec +14 -16
  14. data/bin/console +2 -11
  15. data/cucumber.yml +0 -7
  16. data/fixtures/cli-app/README.md +1 -1
  17. data/fixtures/cli-app/Rakefile +1 -1
  18. data/fixtures/cli-app/cli-app.gemspec +1 -0
  19. data/fixtures/cli-app/lib/cli/app/suppress_simple_cov_output.rb +3 -3
  20. data/fixtures/cli-app/lib/cli/app/version.rb +1 -1
  21. data/fixtures/empty-app/Rakefile +1 -1
  22. data/fixtures/empty-app/cli-app.gemspec +1 -0
  23. data/fixtures/empty-app/lib/cli/app/version.rb +1 -1
  24. data/fixtures/getting-started-app/Gemfile +1 -1
  25. data/lib/aruba/api.rb +3 -10
  26. data/lib/aruba/api/bundler.rb +16 -0
  27. data/lib/aruba/api/commands.rb +249 -0
  28. data/lib/aruba/api/core.rb +24 -10
  29. data/lib/aruba/api/environment.rb +12 -7
  30. data/lib/aruba/api/filesystem.rb +22 -20
  31. data/lib/aruba/api/text.rb +3 -9
  32. data/lib/aruba/aruba_path.rb +3 -18
  33. data/lib/aruba/basic_configuration.rb +3 -19
  34. data/lib/aruba/cli.rb +1 -1
  35. data/lib/aruba/colorizer.rb +33 -33
  36. data/lib/aruba/command.rb +4 -0
  37. data/lib/aruba/config_wrapper.rb +1 -1
  38. data/lib/aruba/configuration.rb +78 -0
  39. data/lib/aruba/console.rb +5 -5
  40. data/lib/aruba/console/help.rb +1 -1
  41. data/lib/aruba/cucumber.rb +0 -1
  42. data/lib/aruba/cucumber/command.rb +55 -115
  43. data/lib/aruba/cucumber/environment.rb +1 -1
  44. data/lib/aruba/cucumber/file.rb +9 -21
  45. data/lib/aruba/cucumber/hooks.rb +6 -62
  46. data/lib/aruba/event_bus/name_resolver.rb +1 -2
  47. data/lib/aruba/hooks.rb +1 -1
  48. data/lib/aruba/initializer.rb +3 -3
  49. data/lib/aruba/matchers/base/base_matcher.rb +2 -2
  50. data/lib/aruba/matchers/base/message_indenter.rb +19 -0
  51. data/lib/aruba/matchers/base/object_formatter.rb +2 -2
  52. data/lib/aruba/matchers/collection/include_an_object.rb +7 -9
  53. data/lib/aruba/matchers/command/be_successfully_executed.rb +2 -4
  54. data/lib/aruba/matchers/command/have_exit_status.rb +1 -1
  55. data/lib/aruba/matchers/command/have_finished_in_time.rb +2 -4
  56. data/lib/aruba/matchers/command/have_output.rb +9 -4
  57. data/lib/aruba/matchers/command/have_output_on_stderr.rb +1 -1
  58. data/lib/aruba/matchers/command/have_output_on_stdout.rb +1 -1
  59. data/lib/aruba/matchers/command/have_output_size.rb +1 -1
  60. data/lib/aruba/matchers/directory/be_an_existing_directory.rb +4 -6
  61. data/lib/aruba/matchers/directory/have_sub_directory.rb +4 -6
  62. data/lib/aruba/matchers/file/be_a_command_found_in_path.rb +2 -4
  63. data/lib/aruba/matchers/file/be_an_existing_executable.rb +4 -6
  64. data/lib/aruba/matchers/file/be_an_existing_file.rb +4 -6
  65. data/lib/aruba/matchers/file/have_file_content.rb +4 -4
  66. data/lib/aruba/matchers/file/have_file_size.rb +6 -8
  67. data/lib/aruba/matchers/file/have_same_file_content.rb +9 -12
  68. data/lib/aruba/matchers/path/a_path_matching_pattern.rb +2 -4
  69. data/lib/aruba/matchers/path/be_an_absolute_path.rb +3 -5
  70. data/lib/aruba/matchers/path/be_an_existing_path.rb +4 -6
  71. data/lib/aruba/matchers/path/have_permissions.rb +6 -8
  72. data/lib/aruba/matchers/string/include_output_string.rb +8 -10
  73. data/lib/aruba/matchers/string/match_output_string.rb +9 -11
  74. data/lib/aruba/matchers/string/output_string_eq.rb +7 -9
  75. data/lib/aruba/platform.rb +0 -1
  76. data/lib/aruba/platforms/announcer.rb +26 -70
  77. data/lib/aruba/platforms/aruba_file_creator.rb +1 -1
  78. data/lib/aruba/platforms/aruba_fixed_size_file_creator.rb +2 -2
  79. data/lib/aruba/platforms/aruba_logger.rb +22 -2
  80. data/lib/aruba/platforms/command_monitor.rb +2 -125
  81. data/lib/aruba/platforms/filesystem_status.rb +9 -9
  82. data/lib/aruba/platforms/local_environment.rb +2 -2
  83. data/lib/aruba/platforms/simple_table.rb +3 -3
  84. data/lib/aruba/platforms/unix_command_string.rb +7 -4
  85. data/lib/aruba/platforms/unix_environment_variables.rb +9 -13
  86. data/lib/aruba/platforms/unix_platform.rb +2 -27
  87. data/lib/aruba/platforms/unix_which.rb +2 -1
  88. data/lib/aruba/platforms/windows_command_string.rb +20 -7
  89. data/lib/aruba/platforms/windows_environment_variables.rb +35 -30
  90. data/lib/aruba/platforms/windows_which.rb +4 -3
  91. data/lib/aruba/processes/basic_process.rb +11 -15
  92. data/lib/aruba/processes/debug_process.rb +5 -0
  93. data/lib/aruba/processes/in_process.rb +17 -8
  94. data/lib/aruba/processes/spawn_process.rb +35 -23
  95. data/lib/aruba/rspec.rb +9 -22
  96. data/lib/aruba/runtime.rb +7 -5
  97. data/lib/aruba/setup.rb +6 -4
  98. data/lib/aruba/tasks/docker_helpers.rb +1 -1
  99. data/lib/aruba/version.rb +1 -1
  100. metadata +37 -57
  101. data/History.md +0 -612
  102. data/bin/bootstrap +0 -34
  103. data/fixtures/spawn_process/stderr.sh +0 -3
  104. data/lib/aruba/api/command.rb +0 -309
  105. data/lib/aruba/api/deprecated.rb +0 -895
  106. data/lib/aruba/api/rvm.rb +0 -44
  107. data/lib/aruba/config.rb +0 -101
  108. data/lib/aruba/cucumber/rvm.rb +0 -3
  109. data/lib/aruba/in_process.rb +0 -14
  110. data/lib/aruba/jruby.rb +0 -4
  111. data/lib/aruba/matchers/path/match_path_pattern.rb +0 -41
  112. data/lib/aruba/matchers/rspec_matcher_include_regexp.rb +0 -25
  113. data/lib/aruba/spawn_process.rb +0 -11
data/Rakefile CHANGED
@@ -6,46 +6,31 @@ require 'aruba/platform'
6
6
  require 'bundler'
7
7
  Bundler.setup
8
8
 
9
- task :default => :test
9
+ task default: [:lint, :test]
10
10
 
11
- desc 'Run the whole test suite. Any failure will stop rake going on'
12
- task :test => %w(lint:travis lint:coding_guidelines lint:licenses test:rspec test:cucumber test:cucumber_wip)
11
+ desc 'Run all linters.'
12
+ task lint: %w(lint:travis lint:coding_guidelines lint:licenses)
13
13
 
14
- task :cucumber do
15
- Aruba.platform.deprecated 'The use of task "cucumber" is deprecated. Please use "test:cucumber"'
16
- Rake::Task['test:cucumber'].invoke
17
- end
18
-
19
- task :cucumber_wip do
20
- Aruba.platform.deprecated 'The use of task "cucumber_wip" is deprecated. Please use "test:cucumber_wip"'
21
- Rake::Task['test:cucumber_wip'].invoke
22
- end
14
+ desc 'Run the whole test suite.'
15
+ task test: %w(test:rspec test:cucumber test:cucumber_wip)
23
16
 
24
- task :spec do
25
- Aruba.platform.deprecated 'The use of task "spec" is deprecated. Please use "test:rspec"'
26
- Rake::Task['test:rspec'].invoke
27
- end
28
-
29
- task :rubocop do
30
- Aruba.platform.deprecated 'The use of task "rubocop" is deprecated. Please use "lint:coding_guidelines"'
31
- Rake::Task['test:coding_guidelines'].invoke
32
- end
17
+ require 'cucumber/rake/task'
18
+ require 'rspec/core/rake_task'
33
19
 
34
20
  namespace :test do
35
- desc 'Run cucumber tests'
36
- task :cucumber do
37
- sh 'bundle exec cucumber'
21
+ Cucumber::Rake::Task.new do |t|
22
+ t.cucumber_opts = %w{--format progress}
38
23
  end
39
24
 
40
- desc 'Run cucumber tests which are "WORK IN PROGRESS" and are allowed to fail'
41
- task :cucumber_wip do
42
- sh 'bundle exec cucumber -p wip'
25
+ Cucumber::Rake::Task.new(:cucumber_wip, 'Run Cucumber features '\
26
+ 'which are "WORK IN PROGRESS" and '\
27
+ 'are allowed to fail') do |t|
28
+ t.cucumber_opts = %w{--format progress}
29
+ t.profile = 'wip'
43
30
  end
44
31
 
45
- desc 'Run rspec tests'
46
- task :rspec do
47
- sh 'bundle exec rspec'
48
- end
32
+ desc 'Run RSpec tests'
33
+ RSpec::Core::RakeTask.new(:rspec)
49
34
  end
50
35
 
51
36
  namespace :lint do
@@ -63,12 +48,27 @@ namespace :lint do
63
48
 
64
49
  desc 'Lint our code with "rubocop"'
65
50
  task :coding_guidelines do
66
- sh 'bundle exec rubocop --fail-level E'
51
+ if RUBY_VERSION >= '2'
52
+ sh 'bundle exec rubocop --fail-level E'
53
+ else
54
+ warn 'Your ruby version is not supported for code linting'
55
+ end
67
56
  end
68
57
 
69
58
  desc 'Check for relevant licenses in project'
70
59
  task :licenses do
71
- sh 'bundle exec license_finder'
60
+ if RUBY_VERSION >= '2.3'
61
+ sh 'bundle exec license_finder'
62
+ else
63
+ warn 'Your ruby version is not supported for license checking'
64
+ end
65
+ end
66
+
67
+ begin
68
+ require 'yard-junk/rake'
69
+ YardJunk::Rake.define_task
70
+ rescue LoadError
71
+ warn 'yard-junk requires Ruby 2.3.0. Rake task lint:yard:junk not loaded.'
72
72
  end
73
73
  end
74
74
 
@@ -79,8 +79,8 @@ end
79
79
  namespace :docker do
80
80
  desc 'Build docker image'
81
81
  task :build, :cache, :version do |_, args|
82
- args.with_defaults(:version => 'latest')
83
- args.with_defaults(:cache => true)
82
+ args.with_defaults(version: 'latest')
83
+ args.with_defaults(cache: true)
84
84
 
85
85
  docker_compose_file = Aruba::DockerComposeFile.new(File.expand_path('../docker-compose.yml', __FILE__))
86
86
  docker_run_instance = Aruba::DockerRunInstance.new(docker_compose_file, :base)
@@ -6,6 +6,7 @@ version: "{build}"
6
6
  branches:
7
7
  only:
8
8
  - master
9
+ - still
9
10
 
10
11
  # Disable normal Windows builds in favor of our test script.
11
12
  build: off
@@ -14,18 +15,18 @@ install:
14
15
  - SET PATH=C:\Ruby%ruby_version%\bin;%PATH%
15
16
  - ruby --version
16
17
  - gem --version
17
- - gem install bundler
18
18
  - bundler --version
19
19
  - bundle install
20
20
  - cinst ansicon
21
21
 
22
22
  test_script:
23
- - bundle exec rake test --trace
23
+ - bundle exec rake test:rspec --trace
24
24
 
25
25
  environment:
26
26
  matrix:
27
- - ruby_version: '19'
28
- - ruby_version: '20'
29
- - ruby_version: '21'
30
27
  - ruby_version: '22'
28
+ - ruby_version: '23'
29
+ - ruby_version: '24'
30
+ - ruby_version: '25'
31
+ - ruby_version: '26'
31
32
 
@@ -1,4 +1,5 @@
1
1
  # -*- encoding: utf-8 -*-
2
+
2
3
  lib = ::File.expand_path('../lib', __FILE__)
3
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
5
  require 'aruba/version'
@@ -6,33 +7,30 @@ require 'aruba/version'
6
7
  Gem::Specification.new do |spec|
7
8
  spec.name = 'aruba'
8
9
  spec.version = Aruba::VERSION
9
- spec.author = "Aslak Hellesøy, Matt Wynne and other Aruba Contributors"
10
+ spec.author = 'Aslak Hellesøy, Matt Wynne and other Aruba Contributors'
10
11
  spec.description = 'Extension for popular TDD and BDD frameworks like "Cucumber", "RSpec" and "Minitest" to make testing commandline applications meaningful, easy and fun.'
11
12
  spec.summary = "aruba-#{spec.version}"
12
13
  spec.license = 'MIT'
13
14
  spec.email = 'cukes@googlegroups.com'
14
- spec.homepage = 'http://github.com/cucumber/aruba'
15
+ spec.homepage = 'https://github.com/cucumber/aruba'
15
16
 
16
- spec.add_runtime_dependency 'cucumber', '~> 2.4', '>= 2.4.0'
17
- spec.add_runtime_dependency 'childprocess', '~> 0.7.1'
18
- spec.add_runtime_dependency 'ffi', '~> 1.9', '>= 1.9.10'
19
- spec.add_runtime_dependency 'rspec-expectations', '~> 3.4', '>= 3.4.0'
20
- spec.add_runtime_dependency 'contracts', '~> 0.14'
17
+ spec.add_runtime_dependency 'childprocess', '~> 1.0'
18
+ spec.add_runtime_dependency 'contracts', '~> 0.13'
19
+ spec.add_runtime_dependency 'cucumber', '~> 2.4'
20
+ spec.add_runtime_dependency 'ffi', '~> 1.9'
21
+ spec.add_runtime_dependency 'rspec-expectations', '~> 3.4'
21
22
  spec.add_runtime_dependency 'thor', '~> 0.19'
22
23
 
23
- spec.add_development_dependency 'bundler', '~> 1.11'
24
- spec.rubygems_version = ">= 1.6.1"
25
- spec.required_ruby_version = '>= 1.9.3'
26
-
27
- # spec.post_install_message = <<-EOS
28
- # EOS
24
+ spec.add_development_dependency 'bundler', ['>= 1.7.0', '< 3.0']
25
+ spec.rubygems_version = '>= 1.6.1'
26
+ spec.required_ruby_version = '>= 2.2'
29
27
 
30
28
  spec.files = `git ls-files -z`.split("\x0").reject do |f|
31
29
  f.match(%r{^(test|spec|features)/})
32
30
  end
33
31
 
34
32
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
35
- spec.rdoc_options = ["--charset=UTF-8"]
36
- spec.bindir = "exe"
37
- spec.require_paths = ["lib"]
33
+ spec.rdoc_options = ['--charset=UTF-8']
34
+ spec.bindir = 'exe'
35
+ spec.require_paths = ['lib']
38
36
  end
@@ -2,15 +2,6 @@
2
2
 
3
3
  $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
4
4
 
5
- require 'pry'
5
+ require 'aruba/console'
6
6
 
7
- require 'aruba/api'
8
-
9
- module Aruba
10
- class MyConsole
11
- include Aruba::Api
12
- end
13
- end
14
-
15
- include Aruba
16
- Pry.start MyConsole.new
7
+ Aruba::Console.new.start
@@ -11,13 +11,6 @@ java_wip_opts = "--tags @wip-jruby-java-1.6:3" if defined?(JRUBY_VERSION) &&
11
11
 
12
12
  ignore_opts = []
13
13
  ignore_opts << '--tags ~@ignore'
14
- ignore_opts << '--tags ~@unsupported-on-platform-java' if RUBY_PLATFORM.include? 'java'
15
- ignore_opts << '--tags ~@unsupported-on-platform-mri' if !RUBY_PLATFORM.include? 'java'
16
- ignore_opts << '--tags ~@unsupported-on-platform-windows' if FFI::Platform.windows?
17
- ignore_opts << '--tags ~@unsupported-on-platform-unix' if FFI::Platform.unix?
18
- ignore_opts << '--tags ~@unsupported-on-platform-mac' if FFI::Platform.mac?
19
- ignore_opts << '--tags ~@unsupported-on-ruby-older-2' if RUBY_VERSION < '2'
20
- ignore_opts << '--tags ~@requires-aruba-version-1' if Aruba::VERSION < '1'
21
14
  ignore_opts = ignore_opts.join(' ')
22
15
  %>
23
16
  default: <%= std_opts %> --tags ~@wip <%= java_default_opts %> <%= ignore_opts %>
@@ -31,7 +31,7 @@ cli
31
31
 
32
32
  ### Library
33
33
 
34
- You can use `bin/console` to load your library.
34
+ You can use `script/console` to load your library.
35
35
 
36
36
  ### Fixture
37
37
 
@@ -1 +1 @@
1
- require "bundler/gem_tasks"
1
+ require 'bundler/gem_tasks'
@@ -1,4 +1,5 @@
1
1
  # coding: utf-8
2
+
2
3
  lib = File.expand_path('../lib', __FILE__)
3
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
5
  require 'cli/app/version'
@@ -2,12 +2,12 @@ module SimpleCov
2
2
  module Formatter
3
3
  class HTMLFormatter
4
4
  def format(result)
5
- Dir[File.join(File.dirname(__FILE__), "../public/*")].each do |path|
5
+ Dir[File.join(File.dirname(__FILE__), '../public/*')].each do |path|
6
6
  FileUtils.cp_r(path, asset_output_path)
7
7
  end
8
8
 
9
- File.open(File.join(output_path, "index.html"), "wb") do |file|
10
- file.puts template("layout").result(binding)
9
+ File.open(File.join(output_path, 'index.html'), 'wb') do |file|
10
+ file.puts template('layout').result(binding)
11
11
  end
12
12
  end
13
13
  end
@@ -1,5 +1,5 @@
1
1
  module Cli
2
2
  module App
3
- VERSION = "0.1.0".freeze
3
+ VERSION = '0.1.0'.freeze
4
4
  end
5
5
  end
@@ -1 +1 @@
1
- require "bundler/gem_tasks"
1
+ require 'bundler/gem_tasks'
@@ -1,4 +1,5 @@
1
1
  # coding: utf-8
2
+
2
3
  lib = File.expand_path('../lib', __FILE__)
3
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
5
  require 'cli/app/version'
@@ -1,5 +1,5 @@
1
1
  module Cli
2
2
  module App
3
- VERSION = "0.1.0".freeze
3
+ VERSION = '0.1.0'.freeze
4
4
  end
5
5
  end
@@ -1,4 +1,4 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- gem 'cucumber'
4
3
  gem 'aruba', path: File.expand_path('../../../../', __FILE__)
4
+ gem 'cucumber'
@@ -6,16 +6,12 @@ require 'aruba/extensions/string/strip'
6
6
 
7
7
  require 'aruba/platform'
8
8
  require 'aruba/api/core'
9
- require 'aruba/api/command'
10
-
11
- if Aruba::VERSION <= '1.1.0'
12
- require 'aruba/api/deprecated'
13
- end
9
+ require 'aruba/api/commands'
14
10
 
15
11
  require 'aruba/api/environment'
16
12
  require 'aruba/api/filesystem'
17
13
  require 'aruba/api/text'
18
- require 'aruba/api/rvm'
14
+ require 'aruba/api/bundler'
19
15
 
20
16
  Aruba.platform.require_matching_files('../matchers/**/*.rb', __FILE__)
21
17
 
@@ -27,10 +23,7 @@ module Aruba
27
23
  include Aruba::Api::Commands
28
24
  include Aruba::Api::Environment
29
25
  include Aruba::Api::Filesystem
30
- include Aruba::Api::Rvm
31
- if Aruba::VERSION <= '1.1.0'
32
- include Aruba::Api::Deprecated
33
- end
34
26
  include Aruba::Api::Text
27
+ include Aruba::Api::Bundler
35
28
  end
36
29
  end
@@ -0,0 +1,16 @@
1
+ require 'aruba/api/environment'
2
+
3
+ module Aruba
4
+ module Api
5
+ module Bundler
6
+ include Environment
7
+
8
+ # Unset variables used by bundler
9
+ def unset_bundler_env_vars
10
+ %w[RUBYOPT BUNDLE_PATH BUNDLE_BIN_PATH BUNDLE_GEMFILE].each do |key|
11
+ delete_environment_variable(key)
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,249 @@
1
+ require 'pathname'
2
+
3
+ require 'aruba/platform'
4
+ require 'aruba/command'
5
+
6
+ # require 'win32/file' if File::ALT_SEPARATOR
7
+
8
+ # Aruba
9
+ module Aruba
10
+ # Api
11
+ module Api
12
+ # Command module
13
+ module Commands
14
+ # Resolve path for command using the PATH-environment variable
15
+ #
16
+ # @param [#to_s] program
17
+ # The name of the program which should be resolved
18
+ #
19
+ # @param [String] path
20
+ # The PATH, a string concatenated with ":", e.g. /usr/bin/:/bin on a
21
+ # UNIX-system
22
+ def which(program, path = nil)
23
+ with_environment do
24
+ # ENV is set within this block
25
+ path = ENV['PATH'] if path.nil?
26
+
27
+ Aruba.platform.which(program, path)
28
+ end
29
+ end
30
+
31
+ # Pipe data in file
32
+ #
33
+ # @param [String] file_name
34
+ # The file which should be used to pipe in data
35
+ def pipe_in_file(file_name)
36
+ file_name = expand_path(file_name)
37
+
38
+ File.open(file_name, 'r').each_line do |line|
39
+ last_command_started.write(line)
40
+ end
41
+ end
42
+
43
+ # Return all commands
44
+ #
45
+ # @return [Array]
46
+ # List of commands
47
+ def all_commands
48
+ aruba.command_monitor.registered_commands
49
+ end
50
+
51
+ # Last command started
52
+ def last_command_started
53
+ aruba.command_monitor.last_command_started
54
+ end
55
+
56
+ # Last command stopped
57
+ def last_command_stopped
58
+ aruba.command_monitor.last_command_stopped
59
+ end
60
+
61
+ # Stop all commands
62
+ #
63
+ # @yield [Command]
64
+ # If block is given use it to filter the commands which should be
65
+ # stoppend.
66
+ def stop_all_commands(&block)
67
+ cmds = if block_given?
68
+ all_commands.select(&block)
69
+ else
70
+ all_commands
71
+ end
72
+
73
+ cmds.each(&:stop)
74
+
75
+ self
76
+ end
77
+
78
+ # Terminate all commands
79
+ #
80
+ # @yield [Command]
81
+ # If block is given use it to filter the commands which should be
82
+ # terminated.
83
+ def terminate_all_commands(&block)
84
+ cmds = if block_given?
85
+ all_commands.select(&block)
86
+ else
87
+ all_commands
88
+ end
89
+
90
+ cmds.each(&:terminate)
91
+
92
+ self
93
+ end
94
+
95
+ # Find a started command
96
+ #
97
+ # @param [String, Command] commandline
98
+ # The commandline
99
+ def find_command(commandline)
100
+ aruba.command_monitor.find(commandline)
101
+ end
102
+
103
+ # Run given command and stop it if timeout is reached
104
+ #
105
+ # @param [String] cmd
106
+ # The command which should be executed
107
+ #
108
+ # @param [Hash] opts
109
+ # Options
110
+ #
111
+ # @option opts [Numeric] exit_timeout
112
+ # If the timeout is reached the command will be killed
113
+ #
114
+ # @option opts [Numeric] io_wait_timeout
115
+ # Wait for IO to finish
116
+ #
117
+ # @option opts [Numeric] startup_wait_time
118
+ # Wait for a command to start
119
+ #
120
+ # @option opts [String] stop_signal
121
+ # Use signal to stop command
122
+ #
123
+ # @yield [SpawnProcess]
124
+ # Run block with process
125
+ #
126
+ def run_command(cmd, opts = {})
127
+ command = prepare_command(cmd, opts)
128
+
129
+ unless command.interactive?
130
+ raise NotImplementedError,
131
+ 'Running interactively is not supported with this process launcher.'
132
+ end
133
+
134
+ start_command(command)
135
+
136
+ block_given? ? yield(command) : command
137
+ end
138
+
139
+ # Run a command with aruba
140
+ #
141
+ # Checks for error during command execution and checks the output to detect
142
+ # an timeout error.
143
+ #
144
+ # @param [String] cmd
145
+ # The command to be executed
146
+ #
147
+ # @param [Hash] options
148
+ # Options for aruba
149
+ #
150
+ # @option options [Boolean] fail_on_error
151
+ # Should aruba fail on error?
152
+ #
153
+ # @option options [Numeric] exit_timeout
154
+ # Timeout for execution
155
+ #
156
+ # @option options [Numeric] io_wait_timeout
157
+ # Timeout for IO - STDERR, STDOUT
158
+ #
159
+ def run_command_and_stop(cmd, opts = {})
160
+ fail_on_error = if opts.key?(:fail_on_error)
161
+ opts.delete(:fail_on_error) == true
162
+ else
163
+ true
164
+ end
165
+
166
+ command = prepare_command(cmd, opts)
167
+ start_command(command)
168
+ command.stop
169
+
170
+ return unless fail_on_error
171
+
172
+ begin
173
+ expect(command).to have_finished_in_time
174
+ expect(command).to be_successfully_executed
175
+ rescue ::RSpec::Expectations::ExpectationNotMetError => e
176
+ aruba.announcer.activate(aruba.config.activate_announcer_on_command_failure)
177
+ aruba.event_bus.notify Events::CommandStopped.new(command)
178
+ raise e
179
+ end
180
+ end
181
+
182
+ # Provide data to command via stdin
183
+ #
184
+ # @param [String] input
185
+ # The input for the command
186
+ def type(input)
187
+ return close_input if input == "\u0004"
188
+
189
+ last_command_started.write(input << "\n")
190
+ end
191
+
192
+ # Close stdin
193
+ def close_input
194
+ last_command_started.close_io(:stdin)
195
+ end
196
+
197
+ private
198
+
199
+ # rubocop:disable Metrics/MethodLength
200
+ def prepare_command(cmd, opts)
201
+ exit_timeout = opts[:exit_timeout].nil? ? aruba.config.exit_timeout : opts[:exit_timeout]
202
+ io_wait_timeout = opts[:io_wait_timeout].nil? ? aruba.config.io_wait_timeout : opts[:io_wait_timeout]
203
+ stop_signal = opts[:stop_signal].nil? ? aruba.config.stop_signal : opts[:stop_signal]
204
+ startup_wait_time = opts[:startup_wait_time].nil? ? aruba.config.startup_wait_time : opts[:startup_wait_time]
205
+
206
+ cmd = replace_variables(cmd)
207
+
208
+ @commands ||= []
209
+ @commands << cmd
210
+
211
+ environment = aruba.environment
212
+ working_directory = expand_path('.')
213
+ event_bus = aruba.event_bus
214
+
215
+ cmd = Aruba.platform.detect_ruby(cmd)
216
+
217
+ mode = aruba.config.command_launcher
218
+
219
+ main_class = aruba.config.main_class
220
+
221
+ Command.new(
222
+ cmd,
223
+ mode: mode,
224
+ exit_timeout: exit_timeout,
225
+ io_wait_timeout: io_wait_timeout,
226
+ working_directory: working_directory,
227
+ environment: environment.to_hash,
228
+ main_class: main_class,
229
+ stop_signal: stop_signal,
230
+ startup_wait_time: startup_wait_time,
231
+ event_bus: event_bus
232
+ )
233
+ end
234
+
235
+ # rubocop:enable Metrics/MethodLength
236
+
237
+ def start_command(command)
238
+ aruba.config.before(:command, self, command)
239
+
240
+ command.start
241
+
242
+ stop_signal = command.stop_signal
243
+ aruba.announcer.announce(:stop_signal, command.pid, stop_signal) if stop_signal
244
+
245
+ aruba.config.after(:command, self, command)
246
+ end
247
+ end
248
+ end
249
+ end