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.
Files changed (324) hide show
  1. checksums.yaml +7 -0
  2. data/.document +5 -0
  3. data/.gitignore +37 -0
  4. data/.rspec +3 -0
  5. data/.rubocop.yml +188 -0
  6. data/.simplecov +34 -0
  7. data/.travis.yml +47 -0
  8. data/.yardopts +8 -0
  9. data/CONTRIBUTING.md +71 -0
  10. data/Gemfile +83 -0
  11. data/History.md +579 -0
  12. data/LICENSE +20 -0
  13. data/README.md +226 -0
  14. data/Rakefile +49 -0
  15. data/TODO.md +13 -0
  16. data/appveyor.yml +32 -0
  17. data/aruba.gemspec +48 -0
  18. data/bin/aruba +7 -0
  19. data/config/.gitignore +1 -0
  20. data/cucumber.yml +26 -0
  21. data/features/.nav +72 -0
  22. data/features/api/command/find_command.feature +83 -0
  23. data/features/api/command/last_command_started.feature +50 -0
  24. data/features/api/command/last_command_stopped.feature +89 -0
  25. data/features/api/command/run.feature +414 -0
  26. data/features/api/command/run_simple.feature +242 -0
  27. data/features/api/command/send_signal.feature +53 -0
  28. data/features/api/command/stderr.feature +46 -0
  29. data/features/api/command/stdout.feature +46 -0
  30. data/features/api/command/stop.feature +131 -0
  31. data/features/api/command/stop_all_commands.feature +53 -0
  32. data/features/api/command/terminate_all_commands.feature +53 -0
  33. data/features/api/command/which.feature +37 -0
  34. data/features/api/core/expand_path.feature +88 -0
  35. data/features/api/environment/append_environment_variable.feature +128 -0
  36. data/features/api/environment/delete_environment_variable.feature +63 -0
  37. data/features/api/environment/prepend_environment_variable.feature +128 -0
  38. data/features/api/environment/set_environment_variable.feature +376 -0
  39. data/features/api/filesystem/cd.feature +184 -0
  40. data/features/api/filesystem/create_directory.feature +57 -0
  41. data/features/api/filesystem/disk_usage.feature +152 -0
  42. data/features/api/filesystem/does_exist.feature +62 -0
  43. data/features/api/filesystem/fixtures.feature +104 -0
  44. data/features/api/filesystem/is_absolute.feature +48 -0
  45. data/features/api/filesystem/is_directory.feature +53 -0
  46. data/features/api/filesystem/is_file.feature +54 -0
  47. data/features/api/filesystem/is_relative.feature +48 -0
  48. data/features/api/filesystem/move.feature +119 -0
  49. data/features/api/text/extract_text.feature +87 -0
  50. data/features/api/text/replace_variables.feature +45 -0
  51. data/features/api/text/sanitize_text.feature +228 -0
  52. data/features/api/text/unescape_text.feature +127 -0
  53. data/features/cli/console.feature +52 -0
  54. data/features/cli/init.feature +79 -0
  55. data/features/configuration/activate_announcer_on_command_failure.feature +38 -0
  56. data/features/configuration/command_runtime_environment.feature +129 -0
  57. data/features/configuration/console_history_file.feature +38 -0
  58. data/features/configuration/exit_timeout.feature +52 -0
  59. data/features/configuration/fixtures_directories.feature +38 -0
  60. data/features/configuration/fixtures_path_prefix.feature +23 -0
  61. data/features/configuration/home_directory.feature +80 -0
  62. data/features/configuration/io_timeout.feature +30 -0
  63. data/features/configuration/keep_ansi.feature +30 -0
  64. data/features/configuration/log_level.feature +38 -0
  65. data/features/configuration/physical_block_size.feature +53 -0
  66. data/features/configuration/remove_ansi_escape_sequences.feature +38 -0
  67. data/features/configuration/root_directory.feature +30 -0
  68. data/features/configuration/startup_wait_time.feature +48 -0
  69. data/features/configuration/usage.feature +159 -0
  70. data/features/configuration/working_directory.feature +33 -0
  71. data/features/development/build.feature +15 -0
  72. data/features/development/test.feature +24 -0
  73. data/features/getting_started/cleanup.feature +67 -0
  74. data/features/getting_started/install.feature +8 -0
  75. data/features/getting_started/run_commands.feature +177 -0
  76. data/features/getting_started/supported_testing_frameworks.feature +104 -0
  77. data/features/getting_started/writing_good_feature_tests.feature +38 -0
  78. data/features/hooks/after/command.feature +44 -0
  79. data/features/hooks/before/command.feature +71 -0
  80. data/features/matchers/collection/include_an_object.feature +72 -0
  81. data/features/matchers/directory/have_sub_directory.feature +110 -0
  82. data/features/matchers/file/be_a_command_found_in_path.feature +115 -0
  83. data/features/matchers/file/be_existing_executable.feature +88 -0
  84. data/features/matchers/file/be_existing_file.feature +82 -0
  85. data/features/matchers/file/have_file_content.feature +123 -0
  86. data/features/matchers/file/have_file_size.feature +107 -0
  87. data/features/matchers/path/be_an_absolute_path.feature +74 -0
  88. data/features/matchers/path/be_an_existing_path.feature +97 -0
  89. data/features/matchers/path/have_permissions.feature +118 -0
  90. data/features/matchers/timeouts.feature +48 -0
  91. data/features/platforms/jruby.feature +14 -0
  92. data/features/rspec/integration.feature +179 -0
  93. data/features/step_definitions/aruba_dev_steps.rb +56 -0
  94. data/features/step_definitions/hooks.rb +96 -0
  95. data/features/steps/command/debug.feature +92 -0
  96. data/features/steps/command/exit_statuses.feature +136 -0
  97. data/features/steps/command/in_process.feature +485 -0
  98. data/features/steps/command/interactive.feature +90 -0
  99. data/features/steps/command/output.feature +588 -0
  100. data/features/steps/command/run.feature +66 -0
  101. data/features/steps/command/send_signal.feature +104 -0
  102. data/features/steps/command/shell.feature +155 -0
  103. data/features/steps/command/stderr.feature +68 -0
  104. data/features/steps/command/stdout.feature +109 -0
  105. data/features/steps/command/stop.feature +313 -0
  106. data/features/steps/core/announce.feature +283 -0
  107. data/features/steps/environment/append_environment_variable.feature +52 -0
  108. data/features/steps/environment/home_variable.feature +62 -0
  109. data/features/steps/environment/prepend_environment_variable.feature +52 -0
  110. data/features/steps/environment/set_environment_variable.feature +49 -0
  111. data/features/steps/filesystem/append_to_file.feature +45 -0
  112. data/features/steps/filesystem/cd_to_directory.feature +33 -0
  113. data/features/steps/filesystem/check_file_content.feature +61 -0
  114. data/features/steps/filesystem/check_permissions_of_file.feature +39 -0
  115. data/features/steps/filesystem/compare_files.feature +42 -0
  116. data/features/steps/filesystem/copy.feature +45 -0
  117. data/features/steps/filesystem/create_directory.feature +57 -0
  118. data/features/steps/filesystem/create_file.feature +76 -0
  119. data/features/steps/filesystem/existence_of_directory.feature +57 -0
  120. data/features/steps/filesystem/existence_of_file.feature +43 -0
  121. data/features/steps/filesystem/file_content.feature +86 -0
  122. data/features/steps/filesystem/fixtures.feature +64 -0
  123. data/features/steps/filesystem/move.feature +45 -0
  124. data/features/steps/filesystem/non_existence_of_directory.feature +69 -0
  125. data/features/steps/filesystem/non_existence_of_file.feature +80 -0
  126. data/features/steps/filesystem/overwrite_file.feature +72 -0
  127. data/features/steps/filesystem/remove_directory.feature +38 -0
  128. data/features/steps/filesystem/remove_file.feature +38 -0
  129. data/features/steps/filesystem/use_fixture.feature +77 -0
  130. data/features/steps/overview.feature +60 -0
  131. data/features/support/aruba.rb +7 -0
  132. data/features/support/env.rb +33 -0
  133. data/features/support/jruby.rb +5 -0
  134. data/features/support/simplecov_setup.rb +8 -0
  135. data/fixtures/cli-app/.gitignore +9 -0
  136. data/fixtures/cli-app/.rspec +2 -0
  137. data/fixtures/cli-app/README.md +39 -0
  138. data/fixtures/cli-app/Rakefile +1 -0
  139. data/fixtures/cli-app/bin/cli +6 -0
  140. data/fixtures/cli-app/cli-app.gemspec +26 -0
  141. data/fixtures/cli-app/features/support/env.rb +1 -0
  142. data/fixtures/cli-app/lib/cli/app.rb +13 -0
  143. data/fixtures/cli-app/lib/cli/app/suppress_simple_cov_output.rb +15 -0
  144. data/fixtures/cli-app/lib/cli/app/version.rb +5 -0
  145. data/fixtures/cli-app/script/console +14 -0
  146. data/fixtures/cli-app/spec/spec_helper.rb +9 -0
  147. data/fixtures/cli-app/spec/support/aruba.rb +1 -0
  148. data/fixtures/copy/file.txt +1 -0
  149. data/fixtures/empty-app/.gitignore +9 -0
  150. data/fixtures/empty-app/.rspec +2 -0
  151. data/fixtures/empty-app/README.md +24 -0
  152. data/fixtures/empty-app/Rakefile +1 -0
  153. data/fixtures/empty-app/cli-app.gemspec +26 -0
  154. data/fixtures/empty-app/lib/cli/app.rb +13 -0
  155. data/fixtures/empty-app/lib/cli/app/version.rb +5 -0
  156. data/fixtures/getting-started-app/.gitignore +4 -0
  157. data/fixtures/getting-started-app/Gemfile +4 -0
  158. data/fixtures/getting-started-app/README.md +3 -0
  159. data/fixtures/getting-started-app/features/support/env.rb +1 -0
  160. data/fixtures/spawn_process/stderr.sh +3 -0
  161. data/lib/aruba.rb +1 -0
  162. data/lib/aruba/api.rb +34 -0
  163. data/lib/aruba/api/command.rb +307 -0
  164. data/lib/aruba/api/core.rb +191 -0
  165. data/lib/aruba/api/deprecated.rb +897 -0
  166. data/lib/aruba/api/environment.rb +89 -0
  167. data/lib/aruba/api/filesystem.rb +392 -0
  168. data/lib/aruba/api/rvm.rb +44 -0
  169. data/lib/aruba/api/text.rb +56 -0
  170. data/lib/aruba/aruba_path.rb +133 -0
  171. data/lib/aruba/basic_configuration.rb +240 -0
  172. data/lib/aruba/basic_configuration/option.rb +32 -0
  173. data/lib/aruba/cli.rb +26 -0
  174. data/lib/aruba/colorizer.rb +108 -0
  175. data/lib/aruba/command.rb +74 -0
  176. data/lib/aruba/config.rb +108 -0
  177. data/lib/aruba/config/jruby.rb +17 -0
  178. data/lib/aruba/config_wrapper.rb +58 -0
  179. data/lib/aruba/console.rb +70 -0
  180. data/lib/aruba/console/help.rb +35 -0
  181. data/lib/aruba/contracts/absolute_path.rb +20 -0
  182. data/lib/aruba/contracts/enum.rb +26 -0
  183. data/lib/aruba/contracts/is_power_of_two.rb +22 -0
  184. data/lib/aruba/contracts/relative_path.rb +20 -0
  185. data/lib/aruba/cucumber.rb +13 -0
  186. data/lib/aruba/cucumber/command.rb +422 -0
  187. data/lib/aruba/cucumber/core.rb +5 -0
  188. data/lib/aruba/cucumber/environment.rb +42 -0
  189. data/lib/aruba/cucumber/file.rb +201 -0
  190. data/lib/aruba/cucumber/hooks.rb +160 -0
  191. data/lib/aruba/cucumber/rvm.rb +3 -0
  192. data/lib/aruba/cucumber/testing_frameworks.rb +95 -0
  193. data/lib/aruba/errors.rb +37 -0
  194. data/lib/aruba/event_bus.rb +59 -0
  195. data/lib/aruba/event_bus/name_resolver.rb +168 -0
  196. data/lib/aruba/events.rb +39 -0
  197. data/lib/aruba/extensions/string/strip.rb +25 -0
  198. data/lib/aruba/file_size.rb +63 -0
  199. data/lib/aruba/generators/script_file.rb +46 -0
  200. data/lib/aruba/hooks.rb +56 -0
  201. data/lib/aruba/in_config_wrapper.rb +24 -0
  202. data/lib/aruba/in_process.rb +14 -0
  203. data/lib/aruba/initializer.rb +222 -0
  204. data/lib/aruba/jruby.rb +4 -0
  205. data/lib/aruba/matchers/base/base_matcher.rb +96 -0
  206. data/lib/aruba/matchers/base/object_formatter.rb +114 -0
  207. data/lib/aruba/matchers/collection.rb +1 -0
  208. data/lib/aruba/matchers/collection/all.rb +11 -0
  209. data/lib/aruba/matchers/collection/include_an_object.rb +122 -0
  210. data/lib/aruba/matchers/command.rb +1 -0
  211. data/lib/aruba/matchers/command/be_successfully_executed.rb +34 -0
  212. data/lib/aruba/matchers/command/have_exit_status.rb +38 -0
  213. data/lib/aruba/matchers/command/have_finished_in_time.rb +37 -0
  214. data/lib/aruba/matchers/command/have_output.rb +36 -0
  215. data/lib/aruba/matchers/command/have_output_on_stderr.rb +32 -0
  216. data/lib/aruba/matchers/command/have_output_on_stdout.rb +32 -0
  217. data/lib/aruba/matchers/command/have_output_size.rb +28 -0
  218. data/lib/aruba/matchers/directory.rb +1 -0
  219. data/lib/aruba/matchers/directory/be_an_existing_directory.rb +38 -0
  220. data/lib/aruba/matchers/directory/have_sub_directory.rb +53 -0
  221. data/lib/aruba/matchers/environment.rb +1 -0
  222. data/lib/aruba/matchers/file.rb +1 -0
  223. data/lib/aruba/matchers/file/be_a_command_found_in_path.rb +36 -0
  224. data/lib/aruba/matchers/file/be_an_existing_executable.rb +37 -0
  225. data/lib/aruba/matchers/file/be_an_existing_file.rb +38 -0
  226. data/lib/aruba/matchers/file/have_file_content.rb +62 -0
  227. data/lib/aruba/matchers/file/have_file_size.rb +47 -0
  228. data/lib/aruba/matchers/file/have_same_file_content.rb +48 -0
  229. data/lib/aruba/matchers/path.rb +1 -0
  230. data/lib/aruba/matchers/path/a_path_matching_pattern.rb +25 -0
  231. data/lib/aruba/matchers/path/be_an_absolute_path.rb +36 -0
  232. data/lib/aruba/matchers/path/be_an_existing_path.rb +37 -0
  233. data/lib/aruba/matchers/path/have_permissions.rb +64 -0
  234. data/lib/aruba/matchers/path/match_path_pattern.rb +41 -0
  235. data/lib/aruba/matchers/rspec_matcher_include_regexp.rb +25 -0
  236. data/lib/aruba/matchers/string.rb +1 -0
  237. data/lib/aruba/matchers/string/include_output_string.rb +36 -0
  238. data/lib/aruba/matchers/string/match_output_string.rb +37 -0
  239. data/lib/aruba/matchers/string/output_string_eq.rb +35 -0
  240. data/lib/aruba/platform.rb +25 -0
  241. data/lib/aruba/platforms/announcer.rb +232 -0
  242. data/lib/aruba/platforms/aruba_file_creator.rb +35 -0
  243. data/lib/aruba/platforms/aruba_fixed_size_file_creator.rb +35 -0
  244. data/lib/aruba/platforms/aruba_logger.rb +81 -0
  245. data/lib/aruba/platforms/command_monitor.rb +229 -0
  246. data/lib/aruba/platforms/determine_disk_usage.rb +28 -0
  247. data/lib/aruba/platforms/determine_file_size.rb +22 -0
  248. data/lib/aruba/platforms/disk_usage_calculator.rb +20 -0
  249. data/lib/aruba/platforms/filesystem_status.rb +68 -0
  250. data/lib/aruba/platforms/local_environment.rb +29 -0
  251. data/lib/aruba/platforms/simple_table.rb +54 -0
  252. data/lib/aruba/platforms/unix_command_string.rb +27 -0
  253. data/lib/aruba/platforms/unix_environment_variables.rb +220 -0
  254. data/lib/aruba/platforms/unix_platform.rb +276 -0
  255. data/lib/aruba/platforms/unix_which.rb +85 -0
  256. data/lib/aruba/platforms/windows_command_string.rb +31 -0
  257. data/lib/aruba/platforms/windows_environment_variables.rb +89 -0
  258. data/lib/aruba/platforms/windows_platform.rb +42 -0
  259. data/lib/aruba/platforms/windows_which.rb +106 -0
  260. data/lib/aruba/processes/basic_process.rb +143 -0
  261. data/lib/aruba/processes/debug_process.rb +69 -0
  262. data/lib/aruba/processes/in_process.rb +125 -0
  263. data/lib/aruba/processes/spawn_process.rb +278 -0
  264. data/lib/aruba/reporting.rb +126 -0
  265. data/lib/aruba/rspec.rb +107 -0
  266. data/lib/aruba/runtime.rb +96 -0
  267. data/lib/aruba/setup.rb +90 -0
  268. data/lib/aruba/spawn_process.rb +11 -0
  269. data/lib/aruba/version.rb +3 -0
  270. data/script/bootstrap +28 -0
  271. data/script/console +16 -0
  272. data/script/test +3 -0
  273. data/spec/aruba/api/environment/restore_env_spec.rb +65 -0
  274. data/spec/aruba/api/environment/set_env_spec.rb +42 -0
  275. data/spec/aruba/api/filesystem/file_size_spec.rb +28 -0
  276. data/spec/aruba/api/runtime_spec.rb +28 -0
  277. data/spec/aruba/api_spec.rb +1209 -0
  278. data/spec/aruba/aruba_path_spec.rb +103 -0
  279. data/spec/aruba/basic_configuration_spec.rb +5 -0
  280. data/spec/aruba/configuration_spec.rb +5 -0
  281. data/spec/aruba/hooks_spec.rb +17 -0
  282. data/spec/aruba/in_config_wrapper_spec.rb +25 -0
  283. data/spec/aruba/jruby_spec.rb +55 -0
  284. data/spec/aruba/matchers/command/have_output_size_spec.rb +25 -0
  285. data/spec/aruba/matchers/command_spec.rb +174 -0
  286. data/spec/aruba/matchers/directory_spec.rb +57 -0
  287. data/spec/aruba/matchers/file_spec.rb +127 -0
  288. data/spec/aruba/matchers/path_spec.rb +88 -0
  289. data/spec/aruba/platform/simple_table_spec.rb +23 -0
  290. data/spec/aruba/platform/windows_environment_variables_spec.rb +500 -0
  291. data/spec/aruba/rspec_spec.rb +15 -0
  292. data/spec/aruba/runtime_spec.rb +29 -0
  293. data/spec/aruba/spawn_process_spec.rb +60 -0
  294. data/spec/event_bus/name_resolver_spec.rb +68 -0
  295. data/spec/event_bus_spec.rb +160 -0
  296. data/spec/spec_helper.rb +23 -0
  297. data/spec/support/configs/.keep +0 -0
  298. data/spec/support/configs/aruba.rb +5 -0
  299. data/spec/support/configs/pry.rb +3 -0
  300. data/spec/support/configs/rspec.rb +15 -0
  301. data/spec/support/helpers/.keep +0 -0
  302. data/spec/support/helpers/reporting.rb +44 -0
  303. data/spec/support/matchers/.keep +0 -0
  304. data/spec/support/matchers/option.rb +35 -0
  305. data/spec/support/shared_contexts/.keep +0 -0
  306. data/spec/support/shared_contexts/aruba.rb +48 -0
  307. data/spec/support/shared_examples/.keep +0 -0
  308. data/spec/support/shared_examples/configuration.rb +116 -0
  309. data/spec/support/shared_examples/directory.rb +7 -0
  310. data/spec/support/shared_examples/file.rb +7 -0
  311. data/templates/css/console.css +24 -0
  312. data/templates/css/filesystem.css +42 -0
  313. data/templates/css/pygments-autumn.css +59 -0
  314. data/templates/files.erb +14 -0
  315. data/templates/images/LICENSE +22 -0
  316. data/templates/images/folder.png +0 -0
  317. data/templates/images/page_white.png +0 -0
  318. data/templates/images/page_white_gherkin.png +0 -0
  319. data/templates/images/page_white_ruby.png +0 -0
  320. data/templates/index.erb +20 -0
  321. data/templates/js/filesystem.js +5 -0
  322. data/templates/js/jquery-1.11.3.min.js +5 -0
  323. data/templates/main.erb +34 -0
  324. 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