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,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 &ndash; `.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