cucumber 2.0.0.rc.4 → 4.0.0.rc.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (518) hide show
  1. checksums.yaml +5 -5
  2. data/{History.md → CHANGELOG.md} +734 -283
  3. data/CONTRIBUTING.md +26 -23
  4. data/LICENSE +1 -1
  5. data/README.md +25 -8
  6. data/bin/cucumber +3 -3
  7. data/lib/autotest/cucumber.rb +2 -0
  8. data/lib/autotest/cucumber_mixin.rb +45 -48
  9. data/lib/autotest/cucumber_rails.rb +2 -0
  10. data/lib/autotest/cucumber_rails_rspec.rb +2 -0
  11. data/lib/autotest/cucumber_rails_rspec2.rb +2 -0
  12. data/lib/autotest/cucumber_rspec.rb +2 -0
  13. data/lib/autotest/cucumber_rspec2.rb +2 -0
  14. data/lib/autotest/discover.rb +4 -2
  15. data/lib/cucumber.rb +3 -9
  16. data/lib/cucumber/cli/configuration.rb +23 -106
  17. data/lib/cucumber/cli/main.rb +45 -25
  18. data/lib/cucumber/cli/options.rb +411 -223
  19. data/lib/cucumber/cli/profile_loader.rb +64 -38
  20. data/lib/cucumber/cli/rerun_file.rb +31 -0
  21. data/lib/cucumber/configuration.rb +240 -8
  22. data/lib/cucumber/constantize.rb +9 -10
  23. data/lib/cucumber/core_ext/string.rb +3 -1
  24. data/lib/cucumber/deprecate.rb +30 -0
  25. data/lib/cucumber/encoding.rb +7 -0
  26. data/lib/cucumber/errors.rb +17 -8
  27. data/lib/cucumber/events.rb +40 -0
  28. data/lib/cucumber/events/gherkin_source_parsed.rb +11 -0
  29. data/lib/cucumber/events/gherkin_source_read.rb +14 -0
  30. data/lib/cucumber/events/step_activated.rb +26 -0
  31. data/lib/cucumber/events/step_definition_registered.rb +20 -0
  32. data/lib/cucumber/events/test_case_finished.rb +14 -0
  33. data/lib/cucumber/events/test_case_started.rb +11 -0
  34. data/lib/cucumber/events/test_run_finished.rb +11 -0
  35. data/lib/cucumber/events/test_run_started.rb +14 -0
  36. data/lib/cucumber/events/test_step_finished.rb +14 -0
  37. data/lib/cucumber/events/test_step_started.rb +11 -0
  38. data/lib/cucumber/file_specs.rb +8 -6
  39. data/lib/cucumber/filters.rb +4 -0
  40. data/lib/cucumber/filters/activate_steps.rb +48 -7
  41. data/lib/cucumber/filters/apply_after_hooks.rb +2 -0
  42. data/lib/cucumber/filters/apply_after_step_hooks.rb +2 -0
  43. data/lib/cucumber/filters/apply_around_hooks.rb +2 -0
  44. data/lib/cucumber/filters/apply_before_hooks.rb +2 -0
  45. data/lib/cucumber/filters/broadcast_test_run_started_event.rb +28 -0
  46. data/lib/cucumber/filters/gated_receiver.rb +2 -2
  47. data/lib/cucumber/filters/prepare_world.rb +13 -11
  48. data/lib/cucumber/filters/quit.rb +4 -7
  49. data/lib/cucumber/filters/randomizer.rb +10 -5
  50. data/lib/cucumber/filters/retry.rb +32 -0
  51. data/lib/cucumber/filters/tag_limits.rb +6 -5
  52. data/lib/cucumber/filters/tag_limits/test_case_index.rb +2 -2
  53. data/lib/cucumber/filters/tag_limits/verifier.rb +5 -7
  54. data/lib/cucumber/formatter/ansicolor.rb +39 -45
  55. data/lib/cucumber/formatter/ast_lookup.rb +165 -0
  56. data/lib/cucumber/formatter/backtrace_filter.rb +54 -0
  57. data/lib/cucumber/formatter/console.rb +93 -115
  58. data/lib/cucumber/formatter/console_counts.rb +39 -0
  59. data/lib/cucumber/formatter/console_issues.rb +61 -0
  60. data/lib/cucumber/formatter/duration.rb +3 -1
  61. data/lib/cucumber/formatter/duration_extractor.rb +31 -0
  62. data/lib/cucumber/formatter/fail_fast.rb +23 -0
  63. data/lib/cucumber/formatter/fanout.rb +4 -3
  64. data/lib/cucumber/formatter/ignore_missing_messages.rb +3 -4
  65. data/lib/cucumber/formatter/interceptor.rb +13 -14
  66. data/lib/cucumber/formatter/io.rb +10 -5
  67. data/lib/cucumber/formatter/json.rb +310 -8
  68. data/lib/cucumber/formatter/junit.rb +175 -110
  69. data/lib/cucumber/formatter/pretty.rb +359 -154
  70. data/lib/cucumber/formatter/progress.rb +78 -72
  71. data/lib/cucumber/formatter/rerun.rb +34 -17
  72. data/lib/cucumber/formatter/stepdefs.rb +3 -2
  73. data/lib/cucumber/formatter/steps.rb +7 -7
  74. data/lib/cucumber/formatter/summary.rb +50 -20
  75. data/lib/cucumber/formatter/unicode.rb +17 -18
  76. data/lib/cucumber/formatter/usage.rb +61 -54
  77. data/lib/cucumber/gherkin/data_table_parser.rb +44 -0
  78. data/lib/cucumber/gherkin/formatter/ansi_escapes.rb +97 -0
  79. data/lib/cucumber/gherkin/formatter/escaping.rb +19 -0
  80. data/lib/cucumber/gherkin/i18n.rb +17 -0
  81. data/lib/cucumber/gherkin/steps_parser.rb +42 -0
  82. data/lib/cucumber/{rb_support/rb_dsl.rb → glue/dsl.rb} +47 -26
  83. data/lib/cucumber/glue/hook.rb +51 -0
  84. data/lib/cucumber/glue/invoke_in_world.rb +65 -0
  85. data/lib/cucumber/glue/proto_world.rb +219 -0
  86. data/lib/cucumber/glue/registry_and_more.rb +192 -0
  87. data/lib/cucumber/glue/snippet.rb +205 -0
  88. data/lib/cucumber/glue/step_definition.rb +142 -0
  89. data/lib/cucumber/glue/world_factory.rb +21 -0
  90. data/lib/cucumber/hooks.rb +34 -21
  91. data/lib/cucumber/load_path.rb +2 -0
  92. data/lib/cucumber/multiline_argument.rb +10 -24
  93. data/lib/cucumber/multiline_argument/data_table.rb +157 -253
  94. data/lib/cucumber/multiline_argument/data_table/diff_matrices.rb +154 -0
  95. data/lib/cucumber/multiline_argument/doc_string.rb +3 -2
  96. data/lib/cucumber/platform.rb +7 -10
  97. data/lib/cucumber/project_initializer.rb +44 -0
  98. data/lib/cucumber/rake/task.rb +37 -29
  99. data/lib/cucumber/rspec/disable_option_parser.rb +11 -8
  100. data/lib/cucumber/rspec/doubles.rb +3 -1
  101. data/lib/cucumber/running_test_case.rb +60 -0
  102. data/lib/cucumber/runtime.rb +84 -78
  103. data/lib/cucumber/runtime/after_hooks.rb +10 -7
  104. data/lib/cucumber/runtime/before_hooks.rb +12 -6
  105. data/lib/cucumber/runtime/for_programming_languages.rb +14 -44
  106. data/lib/cucumber/runtime/step_hooks.rb +8 -4
  107. data/lib/cucumber/runtime/support_code.rb +55 -159
  108. data/lib/cucumber/runtime/user_interface.rb +15 -24
  109. data/lib/cucumber/step_definition_light.rb +10 -6
  110. data/lib/cucumber/step_definitions.rb +6 -4
  111. data/lib/cucumber/step_match.rb +58 -38
  112. data/lib/cucumber/step_match_search.rb +67 -0
  113. data/lib/cucumber/term/ansicolor.rb +40 -39
  114. data/lib/cucumber/unit.rb +2 -0
  115. data/lib/cucumber/version +1 -0
  116. data/{spec → lib}/simplecov_setup.rb +3 -1
  117. metadata +260 -607
  118. data/.coveralls.yml +0 -1
  119. data/.rspec +0 -1
  120. data/.ruby-gemset +0 -1
  121. data/.travis.yml +0 -18
  122. data/.yardopts +0 -1
  123. data/Gemfile +0 -11
  124. data/Rakefile +0 -22
  125. data/bin/cuke +0 -60
  126. data/cucumber.gemspec +0 -50
  127. data/cucumber.yml +0 -20
  128. data/examples/i18n/README.textile +0 -3
  129. data/examples/i18n/Rakefile +0 -33
  130. data/examples/i18n/ar/Rakefile +0 -6
  131. data/examples/i18n/ar/features/addition.feature +0 -17
  132. data/examples/i18n/ar/features/step_definitions/calculator_steps.rb +0 -24
  133. data/examples/i18n/ar/lib/calculator.rb +0 -11
  134. data/examples/i18n/bg/Rakefile +0 -6
  135. data/examples/i18n/bg/features/addition.feature +0 -12
  136. data/examples/i18n/bg/features/consecutive_calculations.feature +0 -19
  137. data/examples/i18n/bg/features/division.feature +0 -17
  138. data/examples/i18n/bg/features/step_definitions/calculator_steps.rb +0 -24
  139. data/examples/i18n/bg/features/support/env.rb +0 -5
  140. data/examples/i18n/bg/features/support/world.rb +0 -8
  141. data/examples/i18n/bg/lib/calculator.rb +0 -24
  142. data/examples/i18n/ca/Rakefile +0 -6
  143. data/examples/i18n/ca/features/step_definitions/calculator_steps.rb +0 -21
  144. data/examples/i18n/ca/features/suma.feature +0 -17
  145. data/examples/i18n/ca/lib/calculadora.rb +0 -16
  146. data/examples/i18n/cs/Rakefile +0 -6
  147. data/examples/i18n/cs/features/addition.feature +0 -17
  148. data/examples/i18n/cs/features/division.feature +0 -11
  149. data/examples/i18n/cs/features/step_definitions/calculator_steps.rb +0 -24
  150. data/examples/i18n/cs/lib/calculator.rb +0 -14
  151. data/examples/i18n/da/Rakefile +0 -6
  152. data/examples/i18n/da/features/sammenlaegning.feature +0 -18
  153. data/examples/i18n/da/features/step_definitions/lommeregner_steps.rb +0 -24
  154. data/examples/i18n/da/lib/lommeregner.rb +0 -11
  155. data/examples/i18n/de/Rakefile +0 -6
  156. data/examples/i18n/de/features/addition.feature +0 -17
  157. data/examples/i18n/de/features/division.feature +0 -10
  158. data/examples/i18n/de/features/step_definitions/calculator_steps.rb +0 -24
  159. data/examples/i18n/de/lib/calculator.rb +0 -14
  160. data/examples/i18n/el/Rakefile +0 -6
  161. data/examples/i18n/el/features/addition.feature +0 -17
  162. data/examples/i18n/el/features/division.feature +0 -10
  163. data/examples/i18n/el/features/step_definitions/calculator_steps.rb +0 -24
  164. data/examples/i18n/el/lib/calculator.rb +0 -14
  165. data/examples/i18n/en-lol/Rakefile +0 -4
  166. data/examples/i18n/en-lol/features/step_definitions/cucumbrz_steps.rb +0 -16
  167. data/examples/i18n/en-lol/features/stuffing.feature +0 -8
  168. data/examples/i18n/en-lol/features/support/env.rb +0 -7
  169. data/examples/i18n/en-lol/lib/basket.rb +0 -12
  170. data/examples/i18n/en-lol/lib/belly.rb +0 -11
  171. data/examples/i18n/en/Rakefile +0 -6
  172. data/examples/i18n/en/features/addition.feature +0 -17
  173. data/examples/i18n/en/features/division.feature +0 -10
  174. data/examples/i18n/en/features/step_definitions/calculator_steps.rb +0 -24
  175. data/examples/i18n/en/lib/calculator.rb +0 -14
  176. data/examples/i18n/eo/Rakefile +0 -6
  177. data/examples/i18n/eo/features/adicio.feature +0 -17
  178. data/examples/i18n/eo/features/divido.feature +0 -10
  179. data/examples/i18n/eo/features/step_definitions/calculator_steps.rb +0 -24
  180. data/examples/i18n/eo/lib/calculator.rb +0 -14
  181. data/examples/i18n/es/Rakefile +0 -6
  182. data/examples/i18n/es/features/adicion.feature +0 -17
  183. data/examples/i18n/es/features/step_definitions/calculador_steps.rb +0 -21
  184. data/examples/i18n/es/lib/calculador.rb +0 -14
  185. data/examples/i18n/et/Rakefile +0 -6
  186. data/examples/i18n/et/features/jagamine.feature +0 -10
  187. data/examples/i18n/et/features/liitmine.feature +0 -17
  188. data/examples/i18n/et/features/step_definitions/kalkulaator_steps.rb +0 -24
  189. data/examples/i18n/et/lib/kalkulaator.rb +0 -14
  190. data/examples/i18n/fi/Rakefile +0 -6
  191. data/examples/i18n/fi/features/jakolasku.feature +0 -10
  192. data/examples/i18n/fi/features/step_definitions/laskin_steps.rb +0 -24
  193. data/examples/i18n/fi/features/yhteenlasku.feature +0 -17
  194. data/examples/i18n/fi/lib/laskin.rb +0 -14
  195. data/examples/i18n/fr/Rakefile +0 -8
  196. data/examples/i18n/fr/features/addition.feature +0 -18
  197. data/examples/i18n/fr/features/addition2.feature +0 -17
  198. data/examples/i18n/fr/features/step_definitions/calculatrice_steps.rb +0 -32
  199. data/examples/i18n/fr/features/support/env.rb +0 -5
  200. data/examples/i18n/fr/lib/calculatrice.rb +0 -10
  201. data/examples/i18n/he/Rakefile +0 -6
  202. data/examples/i18n/he/features/addition.feature +0 -17
  203. data/examples/i18n/he/features/division.feature +0 -10
  204. data/examples/i18n/he/features/step_definitions/calculator_steps.rb +0 -24
  205. data/examples/i18n/he/lib/calculator.rb +0 -15
  206. data/examples/i18n/hi/Rakefile +0 -6
  207. data/examples/i18n/hi/features/addition.feature +0 -16
  208. data/examples/i18n/hi/features/division.feature +0 -10
  209. data/examples/i18n/hi/features/step_definitions/calculator_steps.rb +0 -24
  210. data/examples/i18n/hi/lib/calculator.rb +0 -15
  211. data/examples/i18n/hu/Rakefile +0 -6
  212. data/examples/i18n/hu/features/osszeadas.feature +0 -17
  213. data/examples/i18n/hu/features/osztas.feature +0 -10
  214. data/examples/i18n/hu/features/step_definitions/calculator_steps.rb +0 -25
  215. data/examples/i18n/hu/lib/calculator.rb +0 -14
  216. data/examples/i18n/id/Rakefile +0 -6
  217. data/examples/i18n/id/features/addition.feature +0 -17
  218. data/examples/i18n/id/features/division.feature +0 -10
  219. data/examples/i18n/id/features/step_definitions/calculator_steps.rb +0 -24
  220. data/examples/i18n/id/lib/calculator.rb +0 -14
  221. data/examples/i18n/it/Rakefile +0 -6
  222. data/examples/i18n/it/features/somma.feature +0 -11
  223. data/examples/i18n/it/features/step_definitions/calcolatrice_steps.rb +0 -24
  224. data/examples/i18n/it/lib/calcolatrice.rb +0 -11
  225. data/examples/i18n/ja/Rakefile +0 -6
  226. data/examples/i18n/ja/features/addition.feature +0 -17
  227. data/examples/i18n/ja/features/division.feature +0 -10
  228. data/examples/i18n/ja/features/step_definitions/calculator_steps.rb +0 -19
  229. data/examples/i18n/ja/features/support/env.rb +0 -5
  230. data/examples/i18n/ja/lib/calculator.rb +0 -14
  231. data/examples/i18n/ko/Rakefile +0 -6
  232. data/examples/i18n/ko/features/addition.feature +0 -17
  233. data/examples/i18n/ko/features/division.feature +0 -11
  234. data/examples/i18n/ko/features/step_definitions/calculator_steps.rb +0 -24
  235. data/examples/i18n/ko/lib/calculator.rb +0 -14
  236. data/examples/i18n/lt/Rakefile +0 -6
  237. data/examples/i18n/lt/features/addition.feature +0 -17
  238. data/examples/i18n/lt/features/division.feature +0 -10
  239. data/examples/i18n/lt/features/step_definitions/calculator_steps.rb +0 -24
  240. data/examples/i18n/lt/lib/calculator.rb +0 -14
  241. data/examples/i18n/lv/Rakefile +0 -6
  242. data/examples/i18n/lv/features/addition.feature +0 -17
  243. data/examples/i18n/lv/features/division.feature +0 -10
  244. data/examples/i18n/lv/features/step_definitions/calculator_steps.rb +0 -24
  245. data/examples/i18n/lv/lib/calculator.rb +0 -14
  246. data/examples/i18n/no/Rakefile +0 -6
  247. data/examples/i18n/no/features/step_definitions/kalkulator_steps.rb +0 -17
  248. data/examples/i18n/no/features/summering.feature +0 -19
  249. data/examples/i18n/no/features/support/env.rb +0 -6
  250. data/examples/i18n/no/lib/kalkulator.rb +0 -11
  251. data/examples/i18n/pl/Rakefile +0 -6
  252. data/examples/i18n/pl/features/addition.feature +0 -17
  253. data/examples/i18n/pl/features/division.feature +0 -10
  254. data/examples/i18n/pl/features/step_definitions/calculator_steps.rb +0 -24
  255. data/examples/i18n/pl/features/support/env.rb +0 -5
  256. data/examples/i18n/pl/lib/calculator.rb +0 -14
  257. data/examples/i18n/pt/Rakefile +0 -6
  258. data/examples/i18n/pt/features/adicao.feature +0 -11
  259. data/examples/i18n/pt/features/step_definitions/calculadora_steps.rb +0 -20
  260. data/examples/i18n/pt/features/support/env.rb +0 -5
  261. data/examples/i18n/pt/lib/calculadora.rb +0 -10
  262. data/examples/i18n/ro/Rakefile +0 -6
  263. data/examples/i18n/ro/features/adunare.feature +0 -12
  264. data/examples/i18n/ro/features/step_definitions/calculator_steps.rb +0 -21
  265. data/examples/i18n/ro/lib/calculator.rb +0 -11
  266. data/examples/i18n/ru/Rakefile +0 -6
  267. data/examples/i18n/ru/features/addition.feature +0 -11
  268. data/examples/i18n/ru/features/consecutive_calculations.feature +0 -17
  269. data/examples/i18n/ru/features/division.feature +0 -16
  270. data/examples/i18n/ru/features/step_definitions/calculator_steps.rb +0 -19
  271. data/examples/i18n/ru/features/support/env.rb +0 -5
  272. data/examples/i18n/ru/features/support/world.rb +0 -8
  273. data/examples/i18n/ru/lib/calculator.rb +0 -24
  274. data/examples/i18n/sk/Rakefile +0 -6
  275. data/examples/i18n/sk/features/addition.feature +0 -17
  276. data/examples/i18n/sk/features/division.feature +0 -10
  277. data/examples/i18n/sk/features/step_definitions/calculator_steps.rb +0 -24
  278. data/examples/i18n/sk/lib/calculator.rb +0 -14
  279. data/examples/i18n/sr-Cyrl/Rakefile +0 -6
  280. data/examples/i18n/sr-Cyrl/features/sabiranje.feature +0 -18
  281. data/examples/i18n/sr-Cyrl/features/step_definitions/calculator_steps.rb +0 -20
  282. data/examples/i18n/sr-Cyrl/features/support/env.rb +0 -5
  283. data/examples/i18n/sr-Cyrl/lib/calculator.rb +0 -12
  284. data/examples/i18n/sr-Latn/Rakefile +0 -6
  285. data/examples/i18n/sr-Latn/features/sabiranje.feature +0 -18
  286. data/examples/i18n/sr-Latn/features/step_definitions/calculator_steps.rb +0 -24
  287. data/examples/i18n/sr-Latn/lib/calculator.rb +0 -12
  288. data/examples/i18n/sv/Rakefile +0 -6
  289. data/examples/i18n/sv/features/step_definitions/kalkulator_steps.rb +0 -24
  290. data/examples/i18n/sv/features/summering.feature +0 -18
  291. data/examples/i18n/sv/lib/kalkulator.rb +0 -11
  292. data/examples/i18n/tr/Rakefile +0 -6
  293. data/examples/i18n/tr/features/bolme.feature +0 -10
  294. data/examples/i18n/tr/features/step_definitions/hesap_makinesi_adimlari.rb +0 -24
  295. data/examples/i18n/tr/features/toplama.feature +0 -18
  296. data/examples/i18n/tr/lib/hesap_makinesi.rb +0 -15
  297. data/examples/i18n/uk/Rakefile +0 -6
  298. data/examples/i18n/uk/features/addition.feature +0 -11
  299. data/examples/i18n/uk/features/consecutive_calculations.feature +0 -17
  300. data/examples/i18n/uk/features/division.feature +0 -16
  301. data/examples/i18n/uk/features/step_definitions/calculator_steps.rb +0 -19
  302. data/examples/i18n/uk/features/support/env.rb +0 -5
  303. data/examples/i18n/uk/features/support/world.rb +0 -8
  304. data/examples/i18n/uk/lib/calculator.rb +0 -24
  305. data/examples/i18n/uz/Rakefile +0 -6
  306. data/examples/i18n/uz/features/addition.feature +0 -10
  307. data/examples/i18n/uz/features/consecutive_calculations.feature +0 -17
  308. data/examples/i18n/uz/features/division.feature +0 -17
  309. data/examples/i18n/uz/features/step_definitions/calculator_steps.rb +0 -19
  310. data/examples/i18n/uz/features/support/env.rb +0 -5
  311. data/examples/i18n/uz/features/support/world.rb +0 -8
  312. data/examples/i18n/uz/lib/calculator.rb +0 -24
  313. data/examples/i18n/zh-CN/Rakefile +0 -4
  314. data/examples/i18n/zh-CN/features/addition.feature +0 -18
  315. data/examples/i18n/zh-CN/features/step_definitions/calculator_steps.rb +0 -26
  316. data/examples/i18n/zh-CN/lib/calculator.rb +0 -10
  317. data/examples/i18n/zh-TW/Rakefile +0 -4
  318. data/examples/i18n/zh-TW/features/addition.feature +0 -17
  319. data/examples/i18n/zh-TW/features/division.feature +0 -11
  320. data/examples/i18n/zh-TW/features/step_definitions/calculator_steps.rb +0 -24
  321. data/examples/i18n/zh-TW/lib/calculator.rb +0 -14
  322. data/examples/rspec_doubles/Rakefile +0 -4
  323. data/examples/rspec_doubles/features/mocking.feature +0 -9
  324. data/examples/rspec_doubles/features/step_definitions/calvin_steps.rb +0 -19
  325. data/examples/rspec_doubles/features/support/env.rb +0 -12
  326. data/examples/sinatra/README.textile +0 -13
  327. data/examples/sinatra/Rakefile +0 -6
  328. data/examples/sinatra/app.rb +0 -14
  329. data/examples/sinatra/features/add.feature +0 -11
  330. data/examples/sinatra/features/step_definitions/add_steps.rb +0 -15
  331. data/examples/sinatra/features/support/env.rb +0 -10
  332. data/examples/sinatra/views/add.erb +0 -7
  333. data/examples/sinatra/views/layout.erb +0 -8
  334. data/examples/tcl/README.textile +0 -11
  335. data/examples/tcl/Rakefile +0 -6
  336. data/examples/tcl/features/fibonnacci.feature +0 -17
  337. data/examples/tcl/features/step_definitions/fib_steps.rb +0 -7
  338. data/examples/tcl/features/support/env.rb +0 -6
  339. data/examples/tcl/src/fib.tcl +0 -3
  340. data/examples/test_unit/Gemfile +0 -4
  341. data/examples/test_unit/Rakefile +0 -6
  342. data/examples/test_unit/features/step_definitions/test_unit_steps.rb +0 -20
  343. data/examples/test_unit/features/test_unit.feature +0 -9
  344. data/examples/watir/README.textile +0 -16
  345. data/examples/watir/Rakefile +0 -12
  346. data/examples/watir/cucumber.yml +0 -1
  347. data/examples/watir/features/search.feature +0 -12
  348. data/examples/watir/features/step_definitions/search_steps.rb +0 -26
  349. data/examples/watir/features/support/env.rb +0 -35
  350. data/examples/watir/features/support/screenshots.rb +0 -47
  351. data/features/docs/api/list_step_defs_as_json.feature +0 -50
  352. data/features/docs/api/run_cli_main_with_existing_runtime.feature +0 -29
  353. data/features/docs/cli/backtraces.feature +0 -36
  354. data/features/docs/cli/dry_run.feature +0 -25
  355. data/features/docs/cli/exclude_files.feature +0 -19
  356. data/features/docs/cli/execute_with_tag_filter.feature +0 -117
  357. data/features/docs/cli/randomize.feature +0 -46
  358. data/features/docs/cli/require.feature +0 -27
  359. data/features/docs/cli/run_scenarios_matching_name.feature +0 -104
  360. data/features/docs/cli/run_specific_scenarios.feature +0 -130
  361. data/features/docs/cli/showing_differences.feature +0 -43
  362. data/features/docs/cli/specifying_multiple_formatters.feature +0 -44
  363. data/features/docs/cli/strict_mode.feature +0 -41
  364. data/features/docs/defining_steps/nested_steps.feature +0 -129
  365. data/features/docs/defining_steps/nested_steps_i18n.feature +0 -34
  366. data/features/docs/defining_steps/nested_steps_with_second_arg.feature +0 -73
  367. data/features/docs/defining_steps/one_line_step_definitions.feature +0 -65
  368. data/features/docs/defining_steps/printing_messages.feature +0 -148
  369. data/features/docs/defining_steps/skip_scenario.feature +0 -62
  370. data/features/docs/defining_steps/snippets.feature +0 -56
  371. data/features/docs/defining_steps/table_diffing.feature +0 -50
  372. data/features/docs/defining_steps/transforms.feature +0 -63
  373. data/features/docs/exception_in_after_hook.feature +0 -126
  374. data/features/docs/exception_in_after_step_hook.feature +0 -102
  375. data/features/docs/exception_in_before_hook.feature +0 -96
  376. data/features/docs/extending_cucumber/custom_filter.feature +0 -29
  377. data/features/docs/extending_cucumber/custom_formatter.feature +0 -94
  378. data/features/docs/formatters/debug_formatter.feature +0 -47
  379. data/features/docs/formatters/formatter_step_file_colon_line.feature +0 -44
  380. data/features/docs/formatters/html_formatter.feature +0 -90
  381. data/features/docs/formatters/json_formatter.feature +0 -696
  382. data/features/docs/formatters/junit_formatter.feature +0 -276
  383. data/features/docs/formatters/pretty_formatter.feature +0 -73
  384. data/features/docs/formatters/progress_formatter.feature +0 -31
  385. data/features/docs/formatters/rerun_formatter.feature +0 -136
  386. data/features/docs/formatters/usage_formatter.feature +0 -102
  387. data/features/docs/getting_started.feature +0 -27
  388. data/features/docs/gherkin/background.feature +0 -559
  389. data/features/docs/gherkin/doc_strings.feature +0 -74
  390. data/features/docs/gherkin/expand_option_for_outlines.feature +0 -46
  391. data/features/docs/gherkin/language_from_header.feature +0 -32
  392. data/features/docs/gherkin/language_help.feature +0 -37
  393. data/features/docs/gherkin/outlines.feature +0 -158
  394. data/features/docs/gherkin/unicode_table.feature +0 -32
  395. data/features/docs/gherkin/using_descriptions.feature +0 -88
  396. data/features/docs/gherkin/using_star_notation.feature +0 -37
  397. data/features/docs/iso-8859-1.feature +0 -6
  398. data/features/docs/post_configuration_hook.feature +0 -49
  399. data/features/docs/profiles.feature +0 -120
  400. data/features/docs/rake_task.feature +0 -141
  401. data/features/docs/raketask.feature +0 -44
  402. data/features/docs/report_called_undefined_steps.feature +0 -57
  403. data/features/docs/wire_protocol.feature +0 -337
  404. data/features/docs/wire_protocol_erb.feature +0 -56
  405. data/features/docs/wire_protocol_table_diffing.feature +0 -125
  406. data/features/docs/wire_protocol_tags.feature +0 -86
  407. data/features/docs/wire_protocol_timeouts.feature +0 -63
  408. data/features/docs/work_in_progress.feature +0 -154
  409. data/features/docs/writing_support_code/after_hooks.feature +0 -56
  410. data/features/docs/writing_support_code/around_hooks.feature +0 -229
  411. data/features/docs/writing_support_code/before_hook.feature +0 -61
  412. data/features/docs/writing_support_code/hook_order.feature +0 -61
  413. data/features/docs/writing_support_code/load_path.feature +0 -17
  414. data/features/docs/writing_support_code/state.feature +0 -32
  415. data/features/docs/writing_support_code/tagged_hooks.feature +0 -57
  416. data/features/lib/step_definitions/aruba_steps.rb +0 -22
  417. data/features/lib/step_definitions/cucumber_steps.rb +0 -50
  418. data/features/lib/step_definitions/iso-8859-1_steps.rb +0 -12
  419. data/features/lib/step_definitions/json_steps.rb +0 -7
  420. data/features/lib/step_definitions/junit_steps.rb +0 -13
  421. data/features/lib/step_definitions/language_steps.rb +0 -8
  422. data/features/lib/step_definitions/profile_steps.rb +0 -15
  423. data/features/lib/step_definitions/ruby_steps.rb +0 -3
  424. data/features/lib/step_definitions/wire_steps.rb +0 -41
  425. data/features/lib/support/env.rb +0 -21
  426. data/features/lib/support/fake_wire_server.rb +0 -77
  427. data/features/lib/support/feature_factory.rb +0 -67
  428. data/features/lib/support/normalise_output.rb +0 -33
  429. data/gem_tasks/contributors.rake +0 -15
  430. data/gem_tasks/cov.rake +0 -5
  431. data/gem_tasks/cucumber.rake +0 -25
  432. data/gem_tasks/downloads.rb +0 -7
  433. data/gem_tasks/environment.rake +0 -7
  434. data/gem_tasks/examples.rake +0 -11
  435. data/gem_tasks/fix_cr_lf.rake +0 -10
  436. data/gem_tasks/flog.rake +0 -4
  437. data/gem_tasks/rspec.rake +0 -6
  438. data/gem_tasks/sass.rake +0 -4
  439. data/gem_tasks/stats +0 -16
  440. data/gem_tasks/versions.txt +0 -74
  441. data/lib/cucumber/ast.rb +0 -13
  442. data/lib/cucumber/ast/facade.rb +0 -117
  443. data/lib/cucumber/core_ext/instance_exec.rb +0 -70
  444. data/lib/cucumber/core_ext/proc.rb +0 -36
  445. data/lib/cucumber/formatter/cucumber.css +0 -285
  446. data/lib/cucumber/formatter/cucumber.sass +0 -247
  447. data/lib/cucumber/formatter/debug.rb +0 -35
  448. data/lib/cucumber/formatter/gherkin_formatter_adapter.rb +0 -201
  449. data/lib/cucumber/formatter/gpretty.rb +0 -24
  450. data/lib/cucumber/formatter/html.rb +0 -674
  451. data/lib/cucumber/formatter/jquery-min.js +0 -154
  452. data/lib/cucumber/formatter/json_pretty.rb +0 -10
  453. data/lib/cucumber/formatter/legacy_api/adapter.rb +0 -1024
  454. data/lib/cucumber/formatter/legacy_api/ast.rb +0 -376
  455. data/lib/cucumber/formatter/legacy_api/results.rb +0 -51
  456. data/lib/cucumber/formatter/legacy_api/runtime_facade.rb +0 -30
  457. data/lib/cucumber/language_support.rb +0 -30
  458. data/lib/cucumber/language_support/language_methods.rb +0 -71
  459. data/lib/cucumber/rb_support/rb_hook.rb +0 -18
  460. data/lib/cucumber/rb_support/rb_language.rb +0 -160
  461. data/lib/cucumber/rb_support/rb_step_definition.rb +0 -122
  462. data/lib/cucumber/rb_support/rb_transform.rb +0 -59
  463. data/lib/cucumber/rb_support/rb_world.rb +0 -142
  464. data/lib/cucumber/rb_support/regexp_argument_matcher.rb +0 -21
  465. data/lib/cucumber/rb_support/snippet.rb +0 -149
  466. data/lib/cucumber/wire_support/configuration.rb +0 -38
  467. data/lib/cucumber/wire_support/connection.rb +0 -61
  468. data/lib/cucumber/wire_support/request_handler.rb +0 -32
  469. data/lib/cucumber/wire_support/wire_exception.rb +0 -32
  470. data/lib/cucumber/wire_support/wire_language.rb +0 -68
  471. data/lib/cucumber/wire_support/wire_packet.rb +0 -34
  472. data/lib/cucumber/wire_support/wire_protocol.rb +0 -43
  473. data/lib/cucumber/wire_support/wire_protocol/requests.rb +0 -133
  474. data/lib/cucumber/wire_support/wire_step_definition.rb +0 -19
  475. data/spec/cucumber/cli/configuration_spec.rb +0 -503
  476. data/spec/cucumber/cli/main_spec.rb +0 -105
  477. data/spec/cucumber/cli/options_spec.rb +0 -335
  478. data/spec/cucumber/cli/profile_loader_spec.rb +0 -46
  479. data/spec/cucumber/configuration_spec.rb +0 -23
  480. data/spec/cucumber/constantize_spec.rb +0 -19
  481. data/spec/cucumber/core_ext/proc_spec.rb +0 -69
  482. data/spec/cucumber/file_specs_spec.rb +0 -60
  483. data/spec/cucumber/filters/activate_steps_spec.rb +0 -57
  484. data/spec/cucumber/filters/gated_receiver_spec.rb +0 -47
  485. data/spec/cucumber/filters/tag_limits/test_case_index_spec.rb +0 -38
  486. data/spec/cucumber/filters/tag_limits/verifier_spec.rb +0 -57
  487. data/spec/cucumber/filters/tag_limits_spec.rb +0 -59
  488. data/spec/cucumber/formatter/ansicolor_spec.rb +0 -32
  489. data/spec/cucumber/formatter/debug_spec.rb +0 -64
  490. data/spec/cucumber/formatter/duration_spec.rb +0 -22
  491. data/spec/cucumber/formatter/html_spec.rb +0 -459
  492. data/spec/cucumber/formatter/interceptor_spec.rb +0 -136
  493. data/spec/cucumber/formatter/junit_spec.rb +0 -196
  494. data/spec/cucumber/formatter/legacy_api/adapter_spec.rb +0 -2002
  495. data/spec/cucumber/formatter/pretty_spec.rb +0 -810
  496. data/spec/cucumber/formatter/progress_spec.rb +0 -85
  497. data/spec/cucumber/formatter/rerun_spec.rb +0 -107
  498. data/spec/cucumber/formatter/spec_helper.rb +0 -67
  499. data/spec/cucumber/hooks_spec.rb +0 -30
  500. data/spec/cucumber/multiline_argument/data_table_spec.rb +0 -514
  501. data/spec/cucumber/rake/forked_spec.rb +0 -53
  502. data/spec/cucumber/rb_support/rb_language_spec.rb +0 -279
  503. data/spec/cucumber/rb_support/rb_step_definition_spec.rb +0 -152
  504. data/spec/cucumber/rb_support/rb_transform_spec.rb +0 -46
  505. data/spec/cucumber/rb_support/regexp_argument_matcher_spec.rb +0 -22
  506. data/spec/cucumber/rb_support/snippet_spec.rb +0 -137
  507. data/spec/cucumber/runtime/for_programming_languages_spec.rb +0 -36
  508. data/spec/cucumber/runtime/support_code_spec.rb +0 -123
  509. data/spec/cucumber/runtime_spec.rb +0 -46
  510. data/spec/cucumber/sell_cucumbers.feature +0 -19
  511. data/spec/cucumber/step_match_spec.rb +0 -79
  512. data/spec/cucumber/wire_support/configuration_spec.rb +0 -64
  513. data/spec/cucumber/wire_support/connection_spec.rb +0 -64
  514. data/spec/cucumber/wire_support/wire_exception_spec.rb +0 -50
  515. data/spec/cucumber/wire_support/wire_language_spec.rb +0 -46
  516. data/spec/cucumber/wire_support/wire_packet_spec.rb +0 -44
  517. data/spec/cucumber/world/pending_spec.rb +0 -46
  518. data/spec/spec_helper.rb +0 -32
@@ -13,13 +13,24 @@ We appreciate that. But before you do, please learn our basic rules:
13
13
 
14
14
  # Contributing to Cucumber
15
15
 
16
- This document is a guide for those maintaining Cucumber, and others who would like to submit patches.
16
+ The rest of this document is a guide for those maintaining Cucumber, and others who would like to submit patches.
17
17
 
18
- ## WARNING
18
+ ## Talking with other devs
19
19
 
20
- The master branch is the in-development branch for version 2.0 of Cucumber. This code is work in progress and some way off
21
- release. If you have a minor change that you'd like released soon, we suggest submitting a pull request against the
22
- `1.3.x-bugfix` branch.
20
+ You can chat with the core team on https://gitter.im/cucumber/contributors. We try to have office hours on Fridays.
21
+
22
+ ## Installing your own gems
23
+
24
+ A `Gemfile.local`-file can be used to have your own gems installed to support
25
+ your normal development workflow.
26
+
27
+ Example:
28
+
29
+ ~~~ruby
30
+ gem 'pry'
31
+ gem 'pry-byebug'
32
+ gem 'byebug'
33
+ ~~~
23
34
 
24
35
  ## Note on Patches/Pull Requests
25
36
 
@@ -39,30 +50,22 @@ release. If you have a minor change that you'd like released soon, we suggest su
39
50
 
40
51
  To get code coverage results, run `bundle exec rake cov`
41
52
 
53
+ ## First timer? No problem!
54
+
55
+ If you are new to the project or to OSS, check the label
56
+ [Easy](https://github.com/cucumber/cucumber-ruby/labels/Easy). Also, you can
57
+ help us to correct style violations reported here:
58
+ [.rubocop_todo.yml](https://github.com/cucumber/cucumber-ruby/blob/master/.rubocop_todo.yml).
59
+
42
60
  ## Release Process
43
61
 
44
- * Bump the version number in `lib/cucumber/platform.rb`.
45
- * Make sure `History.md` is updated with the upcoming version number, and has entries for all fixes.
46
- * No need to add a `History.md` header at this point - this should be done when a new change is made, later.
47
- * Make sure you have up-to-date and clean copy of cucumber/cucumber.github.com.git at the same level as cucumber repo.
62
+ * Bump the version number in `lib/cucumber/version`.
63
+ * Make sure `CHANGELOG.md` is updated with the upcoming version number, and has entries for all fixes.
48
64
 
49
65
  Now release it
50
66
 
51
67
  bundle update
52
68
  bundle exec rake
53
69
  git commit -m "Release X.Y.Z"
70
+ # Make sure you run gem signin as the cukebot@cucumber.io user before running the following step. Credentials can be found in 1Password
54
71
  rake release
55
-
56
- ## Gaining Release Karma
57
-
58
- To become a release manager, create a pull request adding your name to the list below, and include your Rubygems email address in the ticket. One of the existing Release managers will then add you.
59
-
60
- Current release managers:
61
- * Matt Wynne
62
- * Aslak Hellesøy
63
- * Oleg Sukhodolsky
64
- * Steve Tooke
65
-
66
- To grant release karma, issue the following command:
67
-
68
- gem owner cucumber --add <NEW OWNER RUBYGEMS EMAIL>
data/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License
2
2
 
3
- Copyright (c) 2008-2013 Aslak Hellesøy
3
+ Copyright (c) Aslak Hellesøy
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining
6
6
  a copy of this software and associated documentation files (the
data/README.md CHANGED
@@ -1,22 +1,39 @@
1
- [![Build Status](https://secure.travis-ci.org/cucumber/cucumber.png)](http://travis-ci.org/cucumber/cucumber) [![Code Climate](https://codeclimate.com/github/cucumber/cucumber.png)](https://codeclimate.com/github/cucumber/cucumber) [![Coverage Status](https://coveralls.io/repos/cucumber/cucumber/badge.png?branch=master)](https://coveralls.io/r/cucumber/cucumber?branch=master) [![Dependency Status](https://gemnasium.com/cucumber/cucumber.png)](https://gemnasium.com/cucumber/cucumber)
1
+ [![OpenCollective](https://opencollective.com/cucumber/backers/badge.svg)](https://opencollective.com/cucumber)
2
+ [![OpenCollective](https://opencollective.com/cucumber/sponsors/badge.svg)](https://opencollective.com/cucumber)
3
+
4
+ [![CircleCI](https://circleci.com/gh/cucumber/cucumber-ruby.svg?style=svg)](https://circleci.com/gh/cucumber/cucumber-ruby)
5
+
6
+ [![Code Climate](https://codeclimate.com/github/cucumber/cucumber-ruby.svg)](https://codeclimate.com/github/cucumber/cucumber-ruby)
7
+ [![Coverage Status](https://coveralls.io/repos/cucumber/cucumber-ruby/badge.svg?branch=master)](https://coveralls.io/r/cucumber/cucumber-ruby?branch=master)
2
8
 
3
9
  # Cucumber
4
10
 
5
11
  Cucumber is a tool for running automated tests written in plain language. Because they're
6
- written in plain language, they can be read by anyone on your team. Because they can be
12
+ written in plain language, they can be read by anyone on your team. Because they can be
7
13
  read by anyone, you can use them to help improve communication, collaboration and trust on
8
14
  your team.
9
15
 
10
16
  Where to get more info:
11
17
 
12
- * The main website: http://cukes.info/
13
- * Documentation: https://wiki.github.com/cucumber/cucumber/
14
- * API Documentation: http://cukes.info/api/cucumber/ruby/yardoc/
15
- * Support forum: https://groups.google.com/forum/?fromgroups#!forum/cukes
16
- * IRC channel: irc://irc.freenode.net/cucumber
18
+ * The main website: https://cucumber.io/
19
+ * Documentation: https://cucumber.io/docs
20
+ * Ruby API Documentation: http://www.rubydoc.info/github/cucumber/cucumber-ruby/
21
+ * Support forum: https://groups.google.com/group/cukes
22
+ * Chat: ([Slack](https://cucumber.io/support#slack) and [Gitter](https://cucumber.io/support#gitter))
17
23
 
18
24
  See [CONTRIBUTING.md](CONTRIBUTING.md) for info on contributing to Cucumber.
19
25
 
26
+ ## Supported platforms
27
+ * Ruby 2.6
28
+ * Ruby 2.5
29
+ * Ruby 2.4
30
+ * Ruby 2.3
31
+ * JRuby 9.1
32
+
33
+ ## Code of Conduct
34
+
35
+ Everyone interacting in this codebase and issue tracker is expected to follow the Cucumber [code of conduct](https://github.com/cucumber/cucumber/blob/master/CODE_OF_CONDUCT.md).
36
+
20
37
  ## Copyright
21
38
 
22
- Copyright (c) 2008-2013 Aslak Hellesøy and Contributors. See LICENSE for details.
39
+ Copyright (c) Cucumber Ltd. and Contributors. See LICENSE for details.
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env ruby
2
- $:.unshift(File.dirname(__FILE__) + '/../lib') unless $:.include?(File.dirname(__FILE__) + '/../lib')
3
-
4
- load File.expand_path(File.dirname(__FILE__) + '/../spec/simplecov_setup.rb')
2
+ file_name = File.dirname(__FILE__) + '/../lib'
3
+ $LOAD_PATH.unshift(file_name) unless $LOAD_PATH.include?(file_name)
5
4
 
5
+ require 'simplecov_setup'
6
6
  require 'cucumber/rspec/disable_option_parser'
7
7
  require 'cucumber/cli/main'
8
8
  # The dup is to keep ARGV intact, so that tools like ruby-debug can respawn.
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'autotest'
2
4
  require 'autotest/cucumber_mixin'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'autotest'
2
4
  require 'tempfile'
3
5
  require 'cucumber'
@@ -5,7 +7,7 @@ require 'cucumber/cli/profile_loader'
5
7
 
6
8
  module Autotest::CucumberMixin
7
9
  def self.included(receiver)
8
- receiver::ALL_HOOKS << [:run_features, :ran_features]
10
+ receiver::ALL_HOOKS << %i[run_features ran_features]
9
11
  end
10
12
 
11
13
  attr_accessor :features_to_run
@@ -21,12 +23,10 @@ module Autotest::CucumberMixin
21
23
  reset_features
22
24
  add_sigint_handler
23
25
 
24
- self.last_mtime = Time.now if $f
25
-
26
26
  loop do # ^c handler
27
27
  begin
28
28
  get_to_green
29
- if self.tainted then
29
+ if tainted
30
30
  rerun_all_tests
31
31
  rerun_all_features if all_good
32
32
  else
@@ -37,7 +37,7 @@ module Autotest::CucumberMixin
37
37
  # time a file is changed to see if anything breaks.
38
38
  reset_features
39
39
  rescue Interrupt
40
- break if self.wants_to_quit
40
+ break if wants_to_quit
41
41
  reset
42
42
  reset_features
43
43
  end
@@ -46,15 +46,16 @@ module Autotest::CucumberMixin
46
46
  end
47
47
 
48
48
  def all_features_good
49
- features_to_run == ""
49
+ features_to_run == ''
50
50
  end
51
51
 
52
- def get_to_green
53
- begin
52
+ def get_to_green # rubocop:disable Naming/AccessorMethodName
53
+ loop do
54
54
  super
55
55
  run_features
56
56
  wait_for_changes unless all_features_good
57
- end until all_features_good
57
+ break if all_features_good
58
+ end
58
59
  end
59
60
 
60
61
  def rerun_all_features
@@ -69,67 +70,63 @@ module Autotest::CucumberMixin
69
70
  def run_features
70
71
  hook :run_features
71
72
  Tempfile.open('autotest-cucumber') do |dirty_features_file|
72
- cmd = self.make_cucumber_cmd(self.features_to_run, dirty_features_file.path)
73
- return if cmd.empty?
74
- puts cmd unless $q
73
+ cmd = make_cucumber_cmd(features_to_run, dirty_features_file.path)
74
+ break if cmd.empty?
75
75
  old_sync = $stdout.sync
76
76
  $stdout.sync = true
77
77
  self.results = []
78
78
  line = []
79
79
  begin
80
- open("| #{cmd}", "r") do |f|
81
- until f.eof? do
82
- c = f.getc or break
83
- if RUBY_VERSION >= "1.9" then
84
- print c
85
- else
86
- putc c
87
- end
80
+ open("| #{cmd}", 'r') do |f| # rubocop:disable Security/Open
81
+ until f.eof?
82
+ c = f.getc || break
83
+ print(c)
88
84
  line << c
89
- if c == ?\n then
90
- self.results << if RUBY_VERSION >= "1.9" then
91
- line.join
92
- else
93
- line.pack "c*"
94
- end
95
- line.clear
96
- end
85
+ next unless c == "\n"
86
+ results << line.join
87
+ line.clear
97
88
  end
98
89
  end
99
90
  ensure
100
91
  $stdout.sync = old_sync
101
92
  end
102
93
  self.features_to_run = dirty_features_file.read.strip
103
- self.tainted = true unless self.features_to_run == ''
94
+ self.tainted = true unless features_to_run == ''
104
95
  end
105
96
  hook :ran_features
106
97
  end
107
98
 
108
- def make_cucumber_cmd(features_to_run, dirty_features_filename)
109
- return '' if features_to_run == ''
99
+ def make_cucumber_cmd(features_to_run, _dirty_features_filename)
100
+ return '' if features_to_run.empty?
110
101
 
111
102
  profile_loader = Cucumber::Cli::ProfileLoader.new
112
103
 
113
- profile ||= "autotest-all" if profile_loader.has_profile?("autotest-all") && features_to_run == :all
114
- profile ||= "autotest" if profile_loader.has_profile?("autotest")
115
- profile ||= nil
104
+ profile = profile(profile_loader)
116
105
 
117
- if profile
118
- args = ["--profile", profile]
119
- else
120
- args = %w{--format} << (features_to_run == :all ? "progress" : "pretty")
121
- end
122
- # No --color option as some IDEs (Netbeans) don't output them very well (1 failed step)
123
- args += %w{--format rerun --out} << dirty_features_filename
124
- args << (features_to_run == :all ? "" : features_to_run)
106
+ args = created_args(features_to_run, profile)
125
107
 
126
- # Unless I do this, all the steps turn up undefined during the rerun...
127
- unless features_to_run == :all
128
- args << 'features/step_definitions' << 'features/support'
129
- end
108
+ "#{Cucumber::RUBY_BINARY} #{Cucumber::BINARY} #{args}"
109
+ end
110
+
111
+ def profile(profile_loader)
112
+ profile ||= 'autotest-all' if profile_loader.profile?('autotest-all') && features_to_run == :all
113
+ profile ||= 'autotest' if profile_loader.profile?('autotest')
114
+ profile || nil
115
+ end
116
+
117
+ def created_args(features_to_run, profile)
118
+ args = if profile
119
+ ['--profile', profile]
120
+ else
121
+ %w[--format] << (features_to_run == :all ? 'progress' : 'pretty')
122
+ end
123
+ # No --color option as some IDEs (Netbeans) don't output them very well (1 failed step)
124
+ args += %w[--format rerun --out] << dirty_features_filename
125
+ args << (features_to_run == :all ? '' : features_to_run)
130
126
 
131
- args = args.join(' ')
127
+ # All steps becom undefined during rerun unless the following is run.
128
+ args << 'features/step_definitions' << 'features/support' unless features_to_run == :all
132
129
 
133
- return "#{Cucumber::RUBY_BINARY} #{Cucumber::BINARY} #{args}"
130
+ args.join(' ')
134
131
  end
135
132
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'autotest/rails'
2
4
  require 'autotest/cucumber_mixin'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'autotest/cucumber_mixin'
2
4
  require 'autotest/rails_rspec'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'autotest/cucumber_mixin'
2
4
  require 'autotest/rails_rspec2'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'autotest/cucumber_mixin'
2
4
  require 'autotest/rspec'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'autotest/cucumber_mixin'
2
4
  require 'autotest/rspec2'
3
5
 
@@ -1,11 +1,13 @@
1
+ # frozen_string_literal: true
2
+
1
3
  Autotest.add_discovery do
2
4
  if File.directory?('features')
3
5
  if ENV['AUTOFEATURE'] =~ /true/i
4
- "cucumber"
6
+ 'cucumber'
5
7
  elsif ENV['AUTOFEATURE'] =~ /false/i
6
8
  # noop
7
9
  else
8
- puts "(Not running features. To run features in autotest, set AUTOFEATURE=true.)"
10
+ puts '(Not running features. To run features in autotest, set AUTOFEATURE=true.)'
9
11
  end
10
12
  end
11
13
  end
@@ -1,7 +1,7 @@
1
- $:.unshift(File.dirname(__FILE__)) unless
2
- $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
1
+ # frozen_string_literal: true
3
2
 
4
3
  require 'yaml'
4
+ require 'cucumber/encoding'
5
5
  require 'cucumber/platform'
6
6
  require 'cucumber/runtime'
7
7
  require 'cucumber/cli/main'
@@ -10,7 +10,7 @@ require 'cucumber/term/ansicolor'
10
10
 
11
11
  module Cucumber
12
12
  class << self
13
- attr_accessor :wants_to_quit
13
+ attr_accessor :wants_to_quit, :use_legacy_autoloader
14
14
 
15
15
  def logger
16
16
  return @log if @log
@@ -22,11 +22,5 @@ module Cucumber
22
22
  def logger=(logger)
23
23
  @log = logger
24
24
  end
25
-
26
- def deprecate(class_name, method, message)
27
- return self # deprecation warnings will come in v2.1
28
- called_by = caller[1]
29
- warn("Deprecated: #{class_name}##{method} #{message}. Caller: #{called_by}")
30
- end
31
25
  end
32
26
  end
@@ -1,7 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'logger'
2
4
  require 'cucumber/cli/options'
5
+ require 'cucumber/cli/rerun_file'
3
6
  require 'cucumber/constantize'
4
- require 'gherkin/tag_expression'
7
+ require 'cucumber'
5
8
 
6
9
  module Cucumber
7
10
  module Cli
@@ -17,16 +20,14 @@ module Cucumber
17
20
  def initialize(out_stream = STDOUT, error_stream = STDERR)
18
21
  @out_stream = out_stream
19
22
  @error_stream = error_stream
20
- @options = Options.new(@out_stream, @error_stream, :default_profile => 'default')
23
+ @options = Options.new(@out_stream, @error_stream, default_profile: 'default')
21
24
  end
22
25
 
23
26
  def parse!(args)
24
27
  @args = args
25
28
  @options.parse!(args)
26
29
  arrange_formats
27
- raise("You can't use both --strict and --wip") if strict? && wip?
28
- # todo: remove
29
- @options[:tag_expression] = Gherkin::TagExpression.new(@options[:tag_expressions])
30
+ raise("You can't use both --strict and --wip") if strict.strict? && wip?
30
31
  set_environment_variables
31
32
  end
32
33
 
@@ -42,7 +43,7 @@ module Cucumber
42
43
  Integer(@options[:seed] || rand(0xFFFF))
43
44
  end
44
45
 
45
- def strict?
46
+ def strict
46
47
  @options[:strict]
47
48
  end
48
49
 
@@ -62,81 +63,28 @@ module Cucumber
62
63
  @options[:expand]
63
64
  end
64
65
 
65
- def snippet_type
66
- @options[:snippet_type] || :regexp
67
- end
68
-
69
- def formatter_class(format)
70
- if(builtin = Options::BUILTIN_FORMATS[format])
71
- constantize(builtin[0])
72
- else
73
- constantize(format)
74
- end
75
- end
76
-
77
- def all_files_to_load
78
- requires = @options[:require].empty? ? require_dirs : @options[:require]
79
- files = requires.map do |path|
80
- path = path.gsub(/\\/, '/') # In case we're on windows. Globs don't work with backslashes.
81
- path = path.gsub(/\/$/, '') # Strip trailing slash.
82
- File.directory?(path) ? Dir["#{path}/**/*"] : path
83
- end.flatten.uniq
84
- remove_excluded_files_from(files)
85
- files.reject! {|f| !File.file?(f)}
86
- files.reject! {|f| File.extname(f) == '.feature' }
87
- files.reject! {|f| f =~ /^http/}
88
- files.sort
66
+ def fail_fast?
67
+ @options[:fail_fast]
89
68
  end
90
69
 
91
- def step_defs_to_load
92
- all_files_to_load.reject {|f| f =~ %r{/support/} }
70
+ def retry_attempts
71
+ @options[:retry]
93
72
  end
94
73
 
95
- def support_to_load
96
- support_files = all_files_to_load.select {|f| f =~ %r{/support/} }
97
- env_files = support_files.select {|f| f =~ %r{/support/env\..*} }
98
- other_files = support_files - env_files
99
- @options[:dry_run] ? other_files : env_files + other_files
100
- end
101
-
102
- def feature_files
103
- potential_feature_files = with_default_features_path(paths).map do |path|
104
- path = path.gsub(/\\/, '/') # In case we're on windows. Globs don't work with backslashes.
105
- path = path.chomp('/')
106
- if File.directory?(path)
107
- Dir["#{path}/**/*.feature"].sort
108
- elsif path[0..0] == '@' and # @listfile.txt
109
- File.file?(path[1..-1]) # listfile.txt is a file
110
- IO.read(path[1..-1]).split(/(.*?\.feature.*?) /).collect(&:strip).reject(&:empty?)
111
- else
112
- path
113
- end
114
- end.flatten.uniq
115
- remove_excluded_files_from(potential_feature_files)
116
- potential_feature_files
117
- end
118
-
119
- def feature_dirs
120
- dirs = paths.map { |f| File.directory?(f) ? f : File.dirname(f) }.uniq
121
- dirs.delete('.') unless paths.include?('.')
122
- with_default_features_path(dirs)
74
+ def snippet_type
75
+ @options[:snippet_type] || :cucumber_expression
123
76
  end
124
77
 
125
78
  def log
126
79
  logger = Logger.new(@out_stream)
127
80
  logger.formatter = LogFormatter.new
128
81
  logger.level = Logger::INFO
129
- logger.level = Logger::DEBUG if self.verbose?
82
+ logger.level = Logger::DEBUG if verbose?
130
83
  logger
131
84
  end
132
85
 
133
- # todo: remove
134
- def tag_expression
135
- Gherkin::TagExpression.new(@options[:tag_expressions])
136
- end
137
-
138
86
  def tag_limits
139
- tag_expression.limits.to_hash
87
+ @options[:tag_limits]
140
88
  end
141
89
 
142
90
  def tag_expressions
@@ -155,38 +103,18 @@ module Cucumber
155
103
  @options[:formats]
156
104
  end
157
105
 
158
- def options
159
- warn("Deprecated: Configuration#options will be removed from the next release of Cucumber. Please use the configuration object directly instead.")
160
- @options
161
- end
162
-
163
106
  def paths
164
107
  @options[:paths]
165
108
  end
166
109
 
167
- def formatter_factories
168
- @options[:formats].map do |format_and_out|
169
- format = format_and_out[0]
170
- path_or_io = format_and_out[1]
171
- begin
172
- factory = formatter_class(format)
173
- yield factory, path_or_io, @options
174
- rescue Exception => e
175
- e.message << "\nError creating formatter: #{format}"
176
- raise e
177
- end
178
- end
110
+ def to_hash
111
+ Hash(@options).merge(out_stream: @out_stream, error_stream: @error_stream, seed: seed)
179
112
  end
180
113
 
181
114
  private
182
115
 
183
- def with_default_features_path(paths)
184
- return ['features'] if paths.empty?
185
- paths
186
- end
187
-
188
116
  class LogFormatter < ::Logger::Formatter
189
- def call(severity, time, progname, msg)
117
+ def call(_severity, _time, _progname, msg)
190
118
  msg
191
119
  end
192
120
  end
@@ -198,24 +126,13 @@ module Cucumber
198
126
  end
199
127
 
200
128
  def arrange_formats
201
- @options[:formats] << ['pretty', @out_stream] if @options[:formats].empty?
202
- @options[:formats] = @options[:formats].sort_by{|f| f[1] == @out_stream ? -1 : 1}
203
- @options[:formats].uniq!
204
- streams = @options[:formats].map { |(_, stream)| stream }
205
- if streams != streams.uniq
206
- raise "All but one formatter must use --out, only one can print to each stream (or STDOUT)"
129
+ @options[:formats] << ['pretty', {}, @out_stream] if @options[:formats].empty?
130
+ @options[:formats] = @options[:formats].sort_by do |f|
131
+ f[2] == @out_stream ? -1 : 1
207
132
  end
133
+ @options[:formats].uniq!
134
+ @options.check_formatter_stream_conflicts
208
135
  end
209
-
210
- def remove_excluded_files_from(files)
211
- files.reject! {|path| @options[:excludes].detect {|pattern| path =~ pattern } }
212
- end
213
-
214
- def require_dirs
215
- feature_dirs + Dir['vendor/{gems,plugins}/*/cucumber']
216
- end
217
-
218
136
  end
219
-
220
137
  end
221
138
  end