macros4cuke 0.5.14 → 0.5.15

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +7 -9
  3. data/CHANGELOG.md +20 -11
  4. data/Gemfile +2 -2
  5. data/LICENSE.txt +1 -1
  6. data/README.md +43 -42
  7. data/Rakefile +54 -54
  8. data/appveyor.yml +20 -0
  9. data/bin/macros4cuke +14 -15
  10. data/lib/macro_steps.rb +3 -3
  11. data/lib/macros4cuke/application.rb +1 -3
  12. data/lib/macros4cuke/cli/cmd-line.rb +1 -3
  13. data/lib/macros4cuke/coll-walker-factory.rb +1 -1
  14. data/lib/macros4cuke/constants.rb +2 -2
  15. data/lib/macros4cuke/formatter/all-notifications.rb +1 -1
  16. data/lib/macros4cuke/formatter/to-gherkin.rb +4 -6
  17. data/lib/macros4cuke/formatter/to-null.rb +14 -14
  18. data/lib/macros4cuke/formatter/to-trace.rb +1 -3
  19. data/lib/macros4cuke/formatting-service.rb +2 -2
  20. data/lib/macros4cuke/macro-collection.rb +4 -6
  21. data/lib/macros4cuke/macro-step-support.rb +0 -2
  22. data/lib/macros4cuke/macro-step.rb +18 -19
  23. data/lib/macros4cuke/templating/comment.rb +0 -2
  24. data/lib/macros4cuke/templating/engine.rb +26 -29
  25. data/lib/macros4cuke/templating/eo-line.rb +18 -21
  26. data/lib/macros4cuke/templating/placeholder.rb +12 -12
  27. data/lib/macros4cuke/templating/section.rb +1 -5
  28. data/lib/macros4cuke/templating/static-text.rb +0 -2
  29. data/lib/macros4cuke/templating/template-element.rb +6 -7
  30. data/spec/macros4cuke/cli/cmd-line_spec.rb +4 -4
  31. data/spec/macros4cuke/coll-walker-factory_spec.rb +42 -42
  32. data/spec/macros4cuke/formatter/to-trace_spec.rb +148 -149
  33. data/spec/macros4cuke/macro-collection_spec.rb +2 -2
  34. data/spec/macros4cuke/macro-step-support_spec.rb +10 -9
  35. data/spec/macros4cuke/macro-step_spec.rb +10 -9
  36. data/spec/macros4cuke/templating/comment_spec.rb +37 -38
  37. data/spec/macros4cuke/templating/engine_spec.rb +19 -22
  38. data/spec/macros4cuke/templating/eo-line_spec.rb +31 -32
  39. data/spec/macros4cuke/templating/placeholder_spec.rb +1 -2
  40. data/spec/macros4cuke/templating/section_spec.rb +10 -7
  41. data/spec/macros4cuke/templating/static_text_spec.rb +38 -39
  42. data/spec/macros4cuke/use-sample-collection.rb +3 -3
  43. metadata +9 -8
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7cb356982999fd02630dd75bbda6beb095efb947
4
- data.tar.gz: 54a135b208d24ee455ed7fb58da0c85c0a616400
3
+ metadata.gz: 1f585f9021fd1f335181c02c792d82f651012e5a
4
+ data.tar.gz: 71ecc879f73740225a10181a4068417f45c6a5da
5
5
  SHA512:
6
- metadata.gz: d3e9d7bb5e298df844b119c64e4486d3f048352a14d4ef94fb75c7070f7f4996f94f21638277d6e4ed5c390518b58fed16dd54564f1b2ae7abf43a755d6e750b
7
- data.tar.gz: f9fd3bb3a6563c05a41528ea048ac701c4685af8168b7a81eb1ce88e35df3a46b2af3a18cae4f507f1c6609cbf4bc0086cb39b7abf65508df62f6604f9a2644b
6
+ metadata.gz: a8bf9ed9629fcd69f8df584bb006b24dc531144f2e1b7f345a587f3f4595f3f5f4dab9483ad4452e00d489aef92aba803da6963910e0b57e763ee6b5c98717cd
7
+ data.tar.gz: 5c3f819372840ecc854d7b4b9a150a96b00fac39d8fe51389a9795e3d42a5a45458e8dc87917b64ac8e57d9a7c7a6fc6dbcbabb6a1907396620462ae7d6cd1b2
data/.travis.yml CHANGED
@@ -1,20 +1,18 @@
1
1
  language: ruby
2
2
  rvm:
3
3
  - ruby-head
4
- - 2.2.2
5
- - 2.2.0
6
- - 2.1.0
7
- - 2.0.0
8
- - 1.9.3
9
- - jruby-head
10
- - jruby-19mode
11
-
4
+ - jruby-head
5
+ - 2.3.3
6
+ - 2.2.6
7
+ - 2.1.9
8
+ - 2.0.0
9
+ - jruby
12
10
 
13
11
  # Workaround issue of jruby-head configuration on Travis CI
14
12
  matrix:
15
13
  allow_failures:
16
- - rvm: jruby-head
17
14
  - rvm: ruby-head
15
+ - rvm: jruby-head
18
16
 
19
17
  gemfile:
20
18
  - Gemfile
data/CHANGELOG.md CHANGED
@@ -1,3 +1,12 @@
1
+ ### 0.5.15 / 2016-12-21
2
+ * [NEW] File `appveyor.yml`: Added AppVeyor CI so that Macros4Cuke builds also
3
+ can be tested on Windows. This complements the Travis CI which runs on Linux.
4
+ * [CHANGE] File `README.md` Added AppVeyor badge
5
+ * [CHANGE] A pass to adapt code style in order to please Rubocop 0.46.0
6
+ * [CHANGE] File `.travis.yml` Added support for Ruby 2.3.x, dropped Ruby 1.9.3
7
+ * [CHANGE] File `macros4cuke.gemspec` Minimal Ruby version supported is now Ruby 2.0.0
8
+
9
+
1
10
  ### 0.5.14 / 2016-03-16
2
11
  * [FIX] File `macro_steps`: Cucumber complained about allusion to deprecated class `Cucumber::Ast::Table`.
3
12
 
@@ -106,9 +115,9 @@
106
115
  * [CHANGE] File `.rubocop.yml`: Disabled a few new 0.15.0 cops
107
116
  * [CHANGE] Files from `lib` and `spec` dirs updated for Rubocop 0.15.0
108
117
 
109
- ### 0.4.00 / 2013-11-17
118
+ ### 0.4.00 / 2013-11-17
110
119
  #### Version number bumped. New feature: to list all encountered macro definitions into a single feature file.
111
- * [FEATURE] Sample `demo07.feature` file illustrates the new step that will list all macro definitions.
120
+ * [FEATURE] Sample `demo07.feature` file illustrates the new step that will list all macro definitions.
112
121
  * [NEW] Class CollWalkerFactory. Creates specialized Enumerators that walk over the macro collection.
113
122
  * [NEW] Module Formatter. Purpose: Grouping of all classes that render macro definitions
114
123
  * [NEW] File `all-notifications.rb` List of macro collection visit events.
@@ -145,16 +154,16 @@
145
154
  ### 0.3.37 / 2013-06-27
146
155
  * [FIX] File `macros4cuke.gemspec`: added README.md in extra_rdoc_files option.
147
156
  * [CHANGE] File `README.md`: Re-formatting so that it is better rendered with darkfish (from YARD).
148
- * [CHANGE] File `.yardopts` : grouped the exclude options on one line.
157
+ * [CHANGE] File `.yardopts` : grouped the exclude options on one line.
149
158
 
150
159
  ### 0.3.36 / 2013-06-27
151
160
  * [FIX] File `macros4cuke.gemspec`: corrected the rdoc_options to exclude doc from examples, features and spec folders.
152
161
  This was necessary because all but the latest versions of RDoc have difficulties to cope with utf-8.
153
- * [CHANGE] File `.yardopts` : added more folders to exclude from documentation generation.
162
+ * [CHANGE] File `.yardopts` : added more folders to exclude from documentation generation.
154
163
 
155
164
  ### 0.3.35 / 2013-06-27
156
165
  * [CHANGE] File `macros4cuke.gemspec`: added rdoc_options to exclude doc from examples, features and spec folders.
157
- This was necessary because all but the latest versions of RDoc have difficulties to cope with utf-8.
166
+ This was necessary because all but the latest versions of RDoc have difficulties to cope with utf-8.
158
167
 
159
168
  ### 0.3.34 / 2013-06-20
160
169
  * [CHANGE] Most files: Except for the i18n sample files, the utf-8 encoding comment was in all Ruby files of the project.
@@ -243,7 +252,7 @@
243
252
 
244
253
  ### 0.3.16 / 2013-05-20
245
254
  * [CHANGE] File `demo06.feature`: Added a scenario that causes a specific exception to be raised.
246
- * [CHANGE] File `demo_steps.rb`: Added a specific step that raises a TableNotException. It is captured and compared to expectations.
255
+ * [CHANGE] File `demo_steps.rb`: Added a specific step that raises a TableNotException. It is captured and compared to expectations.
247
256
  * [CHANGE] File `engine.rb`: Removed two lines that were never executed.
248
257
 
249
258
  ### 0.3.15 / 2013-05-20
@@ -289,7 +298,7 @@
289
298
  * [NEW] File `.travis.yml`: Added for integration with Travis CI
290
299
  * [NEW] File `Gemfile`: Added for integration with Bundler
291
300
  * [NEW] File `Rakefile`: Added with test tasks
292
- * [CHANGE] File `macros4cuke.gemspec`: added development dependency on rake.
301
+ * [CHANGE] File `macros4cuke.gemspec`: added development dependency on rake.
293
302
 
294
303
  ### 0.3.03 / 2013-05-11
295
304
  * [CHANGE] File `README.md`: added section on conditional section.
@@ -304,7 +313,7 @@
304
313
  * [CHANGE] Method `Engine#compile_sction` completed and tested to support section elements.
305
314
  * [CHANGE] Method `Section#variables` expanded to support section elements.
306
315
  * [CHANGE] Method `Engine#variables` expanded to support section elements.
307
- * [CHANGE] Method `Engine#compile_line` added two formatting rules.
316
+ * [CHANGE] Method `Engine#compile_line` added two formatting rules.
308
317
  * [CHANGE] Method `MacroStep#scan_arguments` now un-escape the \" sequence into plain quote.
309
318
  * [CHANGE] examples/ folder expanded and reorganized
310
319
  * [FIX] Method `Section#render` fixed typo in call to __method__
@@ -428,7 +437,7 @@
428
437
 
429
438
  ### 0.2.01 / 2013-4-26
430
439
 
431
- * [CHANGE] Regexps in step definitions accept escape character sequence.
440
+ * [CHANGE] Regexps in step definitions accept escape character sequence.
432
441
  * [CHANGE] Expanded `README.md` file.
433
442
  * [FIX] Corrected remnant of Mustache template in `travelling_demo.feature` file.
434
443
 
@@ -457,7 +466,7 @@
457
466
  ### 0.1.05 / Unreleased
458
467
 
459
468
  * [CHANGE] `demo_steps.rb`. Added few step definitions that emit output to the screen (so that at least something is shown in the demo).
460
- * [CHANGE] `MacroStep` class: regexp slightly reworked to accept escaped double quotes in actual values.
469
+ * [CHANGE] `MacroStep` class: regexp slightly reworked to accept escaped double quotes in actual values.
461
470
  * [CHANGE] `travelling_demo.feature`: Added one example with escaped quotes in actual value.
462
471
 
463
472
 
@@ -481,4 +490,4 @@
481
490
 
482
491
  ### 0.0.01 / 2013-04-21
483
492
 
484
- * [FEATURE] Initial public working version
493
+ * [FEATURE] Initial public working version
data/Gemfile CHANGED
@@ -4,7 +4,7 @@ source 'https://rubygems.org'
4
4
  gem 'cucumber', ['>= 1.3.18']
5
5
 
6
6
  group :development do
7
- gem 'rake', '>= 0.9.2'
7
+ gem 'rake', '>= 10.0.0'
8
8
  gem 'rspec', '>= 3.0.0'
9
- gem 'simplecov', '>= 0.6.2'
9
+ gem 'simplecov', '>= 0.7.0'
10
10
  end
data/LICENSE.txt CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2013-2016 Dimitri Geshef
1
+ Copyright (c) 2013-2017 Dimitri Geshef
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining a copy
4
4
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -4,7 +4,8 @@ _Extend Cucumber with macro-steps._
4
4
  [Homepage](https://github.com/famished-tiger/Macros4Cuke)
5
5
  [Documentation] (https://www.relishapp.com/famished-tiger/macros4cuke/docs)
6
6
 
7
- [![Build Status](https://travis-ci.org/famished-tiger/Macros4Cuke.png?branch=master)](https://travis-ci.org/famished-tiger/Macros4Cuke)
7
+ [![Linux Build Status](https://travis-ci.org/famished-tiger/Macros4Cuke.png?branch=master)](https://travis-ci.org/famished-tiger/Macros4Cuke)
8
+ [![Windows Build status](https://ci.appveyor.com/api/projects/status/amsdudnqo1jqfody?svg=true)](https://ci.appveyor.com/project/famished-tiger/macros4cuke)
8
9
  [![Code Climate](https://codeclimate.com/github/famished-tiger/Macros4Cuke.png)](https://codeclimate.com/github/famished-tiger/Macros4Cuke.png)
9
10
  [![Gem Version](https://badge.fury.io/rb/macros4cuke.png)](http://badge.fury.io/rb/macros4cuke)
10
11
  [![Dependency Status](https://gemnasium.com/famished-tiger/Macros4Cuke.png)](https://gemnasium.com/famished-tiger/Macros4Cuke)
@@ -15,17 +16,17 @@ __Macros4Cuke__ is a Cucumber extension that adds a macro facility for your Cucu
15
16
  All this can be done directly in your feature files without programming step definitions.
16
17
 
17
18
  ### Highlights ###
18
- * Works with out-of-the-box Cucumber (including version 2.0.0!)
19
+ * Works with out-of-the-box Cucumber
19
20
  * Simple installation and setup (no programming required),
20
21
  * Familiar syntax for macro-step definitions,
21
- * Substep sequence can be of arbitrary length,
22
+ * Sub-step sequence can be of arbitrary length,
22
23
  * Macro-steps may have data arguments,
23
24
  * Data values can be passed to the sub-steps,
24
25
  * Domain neutral: applicable to any kind of application that can be driven with Cucumber,
25
26
  * A group of sub-steps can be made conditional.
26
27
 
27
28
 
28
- Since version 0.4.00, it is also possible to [list all the encountered macro definitions](#listing-all-the-macro-definitions).
29
+ Since version 0.4.00, it is also possible to [list all the encountered macro definitions](#listing-all-the-macro-definitions).
29
30
 
30
31
  ## A quick example ##
31
32
  Here is a macro-step example taken from our demo files:
@@ -49,13 +50,13 @@ the macro-step is invoked(used) elsewhere in a feature file.
49
50
 
50
51
  That macro-step can then be used/invoked in a scenario like this:
51
52
 
52
- ```cucumber
53
+ ```cucumber
53
54
  When I [enter my userid "jdoe" and password "hello-world"]
54
55
  ```
55
56
 
56
57
  Once it is executing, the invoked macro-step should be equivalent to:
57
58
 
58
- ```cucumber
59
+ ```cucumber
59
60
  Given I landed in the homepage
60
61
  When I click "Sign in"
61
62
  And I fill in "Username" with "jdoe"
@@ -84,27 +85,27 @@ Macros4Cuke requires Cucumber.
84
85
  ### Installation ###
85
86
  The macros4cuke gem installation is fairly standard.
86
87
  If you have a `Gemfile`, add `macros4cuke` to it. Otherwise, install the gem like this:
87
-
88
+
88
89
  ```bash
89
90
  $[sudo] gem install macros4cuke
90
91
  ```
91
92
 
92
93
  ### Configuring your Cucumber projects ####
93
94
  The procedure to add support for macros in an existing Cucumber project
94
- was simplified since version 0.5.00.
95
-
95
+ was simplified since version 0.5.00.
96
+
96
97
  There are two possible ways to do it:
97
98
  - By editing manually a support file; or,
98
99
  - Let Macros4cuke configure your project.
99
-
100
+
100
101
  #### Alternative 1: manually add one line in a support file
101
102
  Require the library in one of your ruby files under `features/support` (e.g. `env.rb`):
102
-
103
+
103
104
  ```ruby
104
105
  # /features/support/env.rb
105
106
  # Add the next single line
106
107
  require 'macros4cuke/cucumber'
107
- ```
108
+ ```
108
109
 
109
110
  That's it! Now you can start writing macros in your Cucumber project.
110
111
 
@@ -121,7 +122,7 @@ already the directory containing the Cucumber project, then the
121
122
  command-line is simply:
122
123
  ```bash
123
124
  $[sudo] macros4cuke --setup .
124
- ```
125
+ ```
125
126
 
126
127
  Notice that ending dot above means "the current directory".
127
128
 
@@ -174,7 +175,7 @@ A phrase can be without argument as in:
174
175
  # A phrase without argument
175
176
  [enter my credentials]
176
177
  ```
177
-
178
+
178
179
  Alternatively, a phrase can have one or more arguments enclosed between chevrons <...>.
179
180
  For instance, the next first phrase has two arguments, the second has three arguments:
180
181
 
@@ -186,13 +187,13 @@ For instance, the next first phrase has two arguments, the second has three argu
186
187
  Each argument (variable) is enclosed between <...> chevrons. In our last example,
187
188
  the argument names are: _origin_ and _destination_. Notice that _origin_ and _destination_ are
188
189
  variable names that will take a value (if any) when the step is invoked _(more on this later)_.
189
-
190
+
190
191
 
191
192
  #### Specifying the sub-steps of a macro-step ####
192
- The sub-steps are placed in a Gherkin multiline text, that is, a text that is enclosed between
193
+ The sub-steps are placed in a Gherkin multiline text, that is, a text that is enclosed between
193
194
  triple quotes ("""). In the next example,
194
195
 
195
- ```cucumber
196
+ ```cucumber
196
197
  Given I define the step "When I [enter my credentials]" to mean:
197
198
  """
198
199
  Given I landed in the homepage
@@ -201,12 +202,12 @@ The sub-steps are placed in a Gherkin multiline text, that is, a text that is en
201
202
  And I click "Sign in"
202
203
  """
203
204
  ```
204
-
205
+
205
206
  the text between triple quotes enumerates the sub-steps associated with the macro-step.
206
207
  A pleasing aspect is the familiar syntax the sub-steps have: they closely look to genuine steps of a scenario.
207
- Sub-steps can also have macro arguments.
208
+ Sub-steps can also have macro arguments.
208
209
  For instance, the previous step sequence could have two arguments called _userid_ and _password_:
209
-
210
+
210
211
  ```cucumber
211
212
  """
212
213
  Given I landed in the homepage
@@ -214,7 +215,7 @@ Sub-steps can also have macro arguments.
214
215
  And I fill in "Password" with "<password>"
215
216
  And I click "Sign in"
216
217
  """
217
- ```
218
+ ```
218
219
 
219
220
  ### Using (invoking) a macro-step ###
220
221
  A macro-step can only be invoked after its definition has been read by Cucumber.
@@ -226,7 +227,7 @@ The syntax rules for using a given macro-step in a scenario are pretty straightf
226
227
  Consider the following macro-step definition:
227
228
 
228
229
  ```cucumber
229
- Given I define the step "When I [log in as <userid>]" to mean:
230
+ Given I define the step "When I [log in as <userid>]" to mean:
230
231
  """
231
232
  # Sub-steps come here...
232
233
  """
@@ -234,7 +235,7 @@ Consider the following macro-step definition:
234
235
 
235
236
  Its quoted sentence is ```"When I [log in as <userid>]"```, therefore
236
237
  the macro-step can be invoked in a scenario like this:
237
-
238
+
238
239
  ```cucumber
239
240
  Given I do this ...
240
241
  When I [log in as "jdoe"]
@@ -245,7 +246,7 @@ Its quoted sentence is ```"When I [log in as <userid>]"```, therefore
245
246
  Here is another -partial- macro-step definition:
246
247
 
247
248
  ```cucumber
248
- Given I define the step "When I [travel from <origin> to <destination> via <stop>]" to mean:
249
+ Given I define the step "When I [travel from <origin> to <destination> via <stop>]" to mean:
249
250
  """
250
251
  # Sub-steps come here...
251
252
  """
@@ -293,17 +294,17 @@ This step can be used like this:
293
294
  |city| Old White Castle|
294
295
  |postcode|JK345|
295
296
  ```
296
-
297
+
297
298
  Here are few observations worth noticing:
298
299
  - The data table has two columns.
299
300
  - Each row is of the form: |argument name| actual value|. For instance, the argument _street_address_ takes
300
301
  the value "Main Street, 22".
301
- - Data rows don't have to follow strictly the order of the arguments in the sub-step sequence.
302
+ - Data rows don't have to follow strictly the order of the arguments in the sub-step sequence.
302
303
 
303
304
  ## Macro-step arguments ##
304
305
 
305
306
  ### Argument names ###
306
- In line with most computer languages, Macros4Cuke accepts argument names containing alphanumeric characters and
307
+ In line with most computer languages, Macros4Cuke accepts argument names containing alphanumeric characters and
307
308
  underscores.
308
309
  In fact, the only characters that are not allowed in argument names are the following punctuation or delimiting
309
310
  signs:
@@ -315,7 +316,7 @@ An argument appearing in the phrase MUST always be bound to a value at the step
315
316
  Taking again a previous example of a -partial- macro-step definition:
316
317
 
317
318
  ```cucumber
318
- Given I define the step "When I [travel from <origin> to <destination> via <stop>]" to mean:
319
+ Given I define the step "When I [travel from <origin> to <destination> via <stop>]" to mean:
319
320
  """
320
321
  # Sub-steps come here...
321
322
  """
@@ -334,7 +335,7 @@ The next invokation is syntactically correct for Macros4Cuke:
334
335
  When I [travel from "San Francisco" to "" via "Las Vegas"]
335
336
  ```
336
337
 
337
- The _destination_ argument gets an empty text as actual value.
338
+ The _destination_ argument gets an empty text as actual value.
338
339
 
339
340
  For any argument that can receive a value through a data table, three situations can occur:
340
341
  1. A row for that argument together with a text value are specified at invokation. The argument is bound to that text value.
@@ -361,7 +362,7 @@ Consider the following attempt of a macro-step definition:
361
362
  ```
362
363
 
363
364
  This will result in an error. The issue is caused by the nesting of triple quotes:
364
- Cucumber simply doesn't allow this. In fact, the error is reported by [Gherkin](https://github.com/cucumber/gherkin),
365
+ Cucumber simply doesn't allow this. In fact, the error is reported by [Gherkin](https://github.com/cucumber/gherkin),
365
366
  a component used by Cucumber.
366
367
  As Gherkin has other [issues](https://github.com/cucumber/gherkin/issues/124) with docstrings, we
367
368
  need a workaround today until the fixes are applied.
@@ -387,8 +388,8 @@ Thus to make the previous example work, one must change it like follows:
387
388
 
388
389
  ## Conditional sections in substeps. ##
389
390
  To make the macros more flexible, it is possible to define conditional sections in the substep sequence.
390
- The general pattern for the conditional section is:
391
-
391
+ The general pattern for the conditional section is:
392
+
392
393
  ```cucumber
393
394
  <?foobar>
394
395
  substep1
@@ -423,7 +424,7 @@ Consider the following example:
423
424
  ```
424
425
 
425
426
  When invoked like this:
426
-
427
+
427
428
  ```cucumber
428
429
  When I [fill in the form with]:
429
430
  |firstname |Alice|
@@ -454,7 +455,7 @@ the email macro argument.
454
455
 
455
456
 
456
457
  A typical use case for conditional sections is to prevent the execution of one or more steps in
457
- absence of a given data item. This simulates, for instance, the behaviour of a user that skips
458
+ absence of a given data item. This simulates, for instance, the behaviour of a user that skips
458
459
  one or more widgets in a page/screen. From a user interface testing viewpoint, entering an empty
459
460
  text in an entry field may be noticeably different than skipping that same entry field.
460
461
  Think of specific UI-events that can trigger some special system response.
@@ -480,7 +481,7 @@ This specialized step has the following syntax:
480
481
  ```
481
482
 
482
483
  Where `all_macros.feature` is a feature file that will be generated when Cucumber
483
- terminates. The resulting feature file lists all the macros (one per scenario) in
484
+ terminates. The resulting feature file lists all the macros (one per scenario) in
484
485
  the familiar Gherkin syntax. The file is placed in the current directory (i.e. the directory where
485
486
  Cucumber was launched).
486
487
 
@@ -488,12 +489,12 @@ Cucumber was launched).
488
489
 
489
490
  ## A word on Step Argument Transforms##
490
491
  Cucumber provides a handy facility that helps to convert implicitly the values of step arguments.
491
- A first description of this lesser-known functionality is available at
492
+ A first description of this lesser-known functionality is available at
492
493
  [Step Argument Transforms] (https://github.com/cucumber/cucumber/wiki/Step-Argument-Transforms).
493
494
  Does Macros4Cuke provide such a facility for its own macro-step arguments?
494
495
  The answer is no: if macro-steps had their own kind of transformations, then these would have interfere with the ones defined directly in Cucumber.
495
496
  In fact, Cucumber will happily apply transformations on any step, including the macro definition steps and the
496
- steps invoking macros. Stated otherwise, all the rules pertaining to the Step Argument Transforms work as usual. Or almost.
497
+ steps invoking macros. Stated otherwise, all the rules pertaining to the Step Argument Transforms work as usual. Or almost.
497
498
  There is one very specific case where Cucumber behaves slightly differently: the transforms aren't applied when a sub-step is executed.
498
499
  Internally, Macros4Cuke calls the `Cucumber::RbSupport::RbWorld::#steps` method that allows to run a Gherkin snippet (the substeps),
499
500
  and it appears that this method does not trigger the transforms. In practice, this doesn't prevent the use of transforms together
@@ -503,7 +504,7 @@ with Macros4Cuke. In the vast majority of cases both will work fine as expected.
503
504
  ## FAQ ##
504
505
  __Q__: Can I define a macro in one scenario and invoke it in another scenario in the same feature file?
505
506
  __A__: Yes. Once a macro is defined in a feature file it can be invoked in any scenario that follows the definition.
506
- In fact, the macro can be invoked in any scenario from any feature file, provided the invokation takes place _after_ the
507
+ In fact, the macro can be invoked in any scenario from any feature file, provided the invokation takes place _after_ the
507
508
  macro definition.
508
509
 
509
510
  __Q__: So, a macro can be shared between multiple files.
@@ -518,7 +519,7 @@ __Q__: Can I define a macro-step in a `Background` section?
518
519
  __A__: No. Here is why: every step from the Background section is executed in each scenario (outline).
519
520
  If a macro were defined in the Background, then the macro definition will occur multiple times, which is
520
521
  flagged as an error by Macros4Cuke.
521
-
522
+
522
523
  __Q__: Can I define a macro-step in a `Scenario Outline`?
523
524
  __A__: No, if the scenario outline has multiple rows then an error will occur. Bear in mind,
524
525
  that steps in a scenario outline are repeating n times, n being the number of rows in the example table.
@@ -533,7 +534,7 @@ __A__: Yes. As a macro-step can be invoked multiple times.
533
534
  ## Changelog
534
535
 
535
536
  Macros4Cuke's changelog is available [here](CHANGELOG.md).
536
-
537
+
537
538
  ## More resources:
538
539
  - [**Detailed CI status**](https://travis-ci.org/famished-tiger/Macros4Cuke)
539
540
  - [**Suggest an improvement**](https://github.com/famished-tiger/Macros4Cuke/issues)
@@ -550,7 +551,7 @@ In addition __Macros4Cuke__ allows advanced users to craft their own steps witho
550
551
  This last argument becomes important in the context of user acceptance testing, a domain where the assumption that
551
552
  every tester is also Rubyist is -alas!- far from the truth.
552
553
 
553
-
554
+
554
555
  Macros with Cucumber is a hot topic, so it is good to know what other people say about it:
555
556
  [Support for Macros] (https://github.com/cucumber/gherkin/issues/178)
556
557
  [Substeps - macro request for the nth time] (http://grokbase.com/t/gg/cukes/133ey063b8/cucumber-substeps-macro-request-for-the-nth-time)
@@ -558,4 +559,4 @@ Macros with Cucumber is a hot topic, so it is good to know what other people say
558
559
 
559
560
  Copyright
560
561
  ---------
561
- Copyright (c) 2014-2016, Dimitri Geshef. Macros4Cuke is released under the MIT License see [LICENSE.txt](https://github.com/famished-tiger/Macros4Cuke/blob/master/LICENSE.txt) for details.
562
+ Copyright (c) 2014-2017, Dimitri Geshef. Macros4Cuke is released under the MIT License see [LICENSE.txt](https://github.com/famished-tiger/Macros4Cuke/blob/master/LICENSE.txt) for details.
data/Rakefile CHANGED
@@ -1,54 +1,54 @@
1
- require 'rubygems'
2
- require_relative './lib/macros4cuke/constants'
3
-
4
- namespace :gem do
5
- desc 'Push the gem to rubygems.org'
6
- task :push do
7
- system("gem push macros4cuke-#{Macros4Cuke::Version}.gem")
8
- end
9
- end # namespace
10
-
11
- # Testing-specific tasks
12
-
13
- # Cucumber as testing tool
14
- require 'cucumber/rake/task'
15
- # UGLY workaround for bug in Cucumber's rake task
16
- if Gem::VERSION[0].to_i >= 2 && Cucumber::VERSION <= '1.3.2'
17
- # Monkey-patch a buggy method
18
- module Cucumber
19
- module Rake
20
- class Task
21
- class ForkedCucumberRunner
22
- def gem_available?(gemname)
23
- if Gem::VERSION[0].to_i >= 2
24
- gem_available_new_rubygems?(gemname)
25
- else
26
- gem_available_old_rubygems?(gemname)
27
- end
28
- end
29
- end # class
30
- end # class
31
- end # module
32
- end # module
33
- end
34
-
35
- Cucumber::Rake::Task.new do |_|
36
- end
37
-
38
- # RSpec as testing tool
39
- require 'rspec/core/rake_task'
40
- desc 'Run RSpec'
41
- RSpec::Core::RakeTask.new do |spec|
42
- spec.pattern = 'spec/**/*_spec.rb'
43
- end
44
-
45
-
46
- # Combine RSpec and Cucumber tests
47
- desc 'Run tests, with RSpec and Cucumber'
48
- task test: [:spec, :cucumber]
49
-
50
-
51
- # Default rake task
52
- task default: :test
53
-
54
- # End of file
1
+ require 'rubygems'
2
+ require_relative './lib/macros4cuke/constants'
3
+
4
+ namespace :gem do
5
+ desc 'Push the gem to rubygems.org'
6
+ task :push do
7
+ system("gem push macros4cuke-#{Macros4Cuke::Version}.gem")
8
+ end
9
+ end # namespace
10
+
11
+ # Testing-specific tasks
12
+
13
+ # Cucumber as testing tool
14
+ require 'cucumber/rake/task'
15
+ # UGLY workaround for bug in Cucumber's rake task
16
+ if Gem::VERSION[0].to_i >= 2 && Cucumber::VERSION <= '1.3.2'
17
+ # Monkey-patch a buggy method
18
+ module Cucumber
19
+ module Rake
20
+ class Task
21
+ class ForkedCucumberRunner
22
+ def gem_available?(gemname)
23
+ if Gem::VERSION[0].to_i >= 2
24
+ gem_available_new_rubygems?(gemname)
25
+ else
26
+ gem_available_old_rubygems?(gemname)
27
+ end
28
+ end
29
+ end # class
30
+ end # class
31
+ end # module
32
+ end # module
33
+ end
34
+
35
+ Cucumber::Rake::Task.new do |_|
36
+ end
37
+
38
+ # RSpec as testing tool
39
+ require 'rspec/core/rake_task'
40
+ desc 'Run RSpec'
41
+ RSpec::Core::RakeTask.new do |spec|
42
+ spec.pattern = 'spec/**/*_spec.rb'
43
+ end
44
+
45
+
46
+ # Combine RSpec and Cucumber tests
47
+ desc 'Run tests, with RSpec and Cucumber'
48
+ task test: [:spec, :cucumber]
49
+
50
+
51
+ # Default rake task
52
+ task default: :test
53
+
54
+ # End of file
data/appveyor.yml ADDED
@@ -0,0 +1,20 @@
1
+ version: '{build}'
2
+ max_jobs: 3
3
+ environment:
4
+ matrix:
5
+ - Ruby_version: 200
6
+ - Ruby_version: 200-x64
7
+ - Ruby_version: 21
8
+ - Ruby_version: 21-x64
9
+ - Ruby_version: 22
10
+ - Ruby_version: 22-x64
11
+ - Ruby_version: 23
12
+ - Ruby_version: 23-x64
13
+ install:
14
+ - cmd: >-
15
+ SET PATH=C:\Ruby%Ruby_version%\bin;%PATH%
16
+
17
+ bundle install --retry=3 --clean
18
+ build: off
19
+ test_script:
20
+ - cmd: bundle exec rake
data/bin/macros4cuke CHANGED
@@ -1,15 +1,14 @@
1
- #!/usr/bin/env ruby
2
- # File: macros4cuke
3
- # The 'executable' of the Macros4Cuke library.
4
-
5
- mydir = File.dirname(__FILE__)
6
- lib_dir = mydir + '/../lib'
7
- $LOAD_PATH.unshift lib_dir unless $LOAD_PATH.include?(lib_dir)
8
-
9
- require 'macros4cuke' # Load the Cukedep::Application class
10
-
11
- # The application's entry point
12
- app = Macros4Cuke::Application.new
13
- app.run!(ARGV.dup)
14
-
15
- # End of file
1
+ #!/usr/bin/env ruby
2
+ # File: macros4cuke
3
+ # The 'executable' of the Macros4Cuke library.
4
+ mydir = File.dirname(__FILE__)
5
+ lib_dir = mydir + '/../lib'
6
+ $LOAD_PATH.unshift lib_dir unless $LOAD_PATH.include?(lib_dir)
7
+
8
+ require 'macros4cuke' # Load the Cukedep::Application class
9
+
10
+ # The application's entry point
11
+ app = Macros4Cuke::Application.new
12
+ app.run!(ARGV.dup)
13
+
14
+ # End of file
data/lib/macro_steps.rb CHANGED
@@ -34,7 +34,7 @@ end
34
34
  # When I [log in as "guest"]
35
35
  #
36
36
  When(/^I \[((?:[^\\\]]|\\.)+)\]$/) do |macro_phrase|
37
- invoke_macro(macro_phrase) # This will call the macro with the given phrase
37
+ invoke_macro(macro_phrase) # This will call the macro with the given phrase
38
38
  end
39
39
 
40
40
 
@@ -47,9 +47,9 @@ end
47
47
  # |password|unguessable|
48
48
  When(/^I \[([^\]]+)\]:$/) do |macro_phrase, table_argument|
49
49
  # Ensure that the second argument is of the correct type
50
- #unless table_argument.is_a?(Cucumber::Ast::Table)
50
+ # unless table_argument.is_a?(Cucumber::Ast::Table)
51
51
  unless table_argument.is_a?(Cucumber::MultilineArgument::DataTable)
52
- fail(Macros4Cuke::DataTableNotFound.new(macro_phrase))
52
+ raise(Macros4Cuke::DataTableNotFound.new(macro_phrase))
53
53
  end
54
54
 
55
55
  # This will call the macro with the given phrase.
@@ -9,8 +9,6 @@ module Macros4Cuke # Module used as a namespace
9
9
  class Application
10
10
  attr_reader(:options)
11
11
 
12
- public
13
-
14
12
  def initialize()
15
13
  @options = {}
16
14
  end
@@ -43,7 +41,7 @@ class Application
43
41
  destination = prefix + aPath.to_s + '/' + file_name + '.rb'
44
42
 
45
43
  begin
46
- fail SupportFileExists.new(destination) if File.exist?(destination)
44
+ raise SupportFileExists.new(destination) if File.exist?(destination)
47
45
 
48
46
  template_pathname =
49
47
  Macros4Cuke::RootDir + 'templates/use_macros4cuke.erb'