macros4cuke 0.1.03 → 0.1.04

Sign up to get free protection for your applications and to get access to all the features.
data/HISTORY.md CHANGED
@@ -1,3 +1,10 @@
1
+ ## [0.1.04]
2
+ ## New features:
3
+ * Gherkin comments are allowed in sub-steps sequence. Previous version supported only Mustache comments.
4
+ ## Changes:
5
+ * Added a few more examples in the 'travelling-demo.feature' file.
6
+
7
+
1
8
  ## [0.1.03]
2
9
  ### Documentation
3
10
  * README.md: slightly reworked and added link to Mustache.
@@ -34,7 +34,7 @@ When(/^I arrive in (.+)$/) do |city|
34
34
  show "I arrive in #{city}"
35
35
  end
36
36
 
37
- When(/^I type (.+)$/) do |text|
37
+ When(/^I type \"([^"]*)\"$/) do |text|
38
38
  show text
39
39
  end
40
40
 
@@ -21,10 +21,11 @@ Scenario: Do a simple travel
21
21
  # I arrive in Rome
22
22
 
23
23
 
24
+
24
25
  Scenario: Defining a macro calling other macro(s)
25
26
  Given I define the step "When I [travel from {{origin}} to {{destination}} and back]" to mean:
26
27
  """
27
- {{! The next two steps are, in fact, macro-step invokations}}
28
+ # The next two steps are, in fact, macro-step invokations
28
29
  When I [travel from "{{origin}}" to "{{destination}}"]
29
30
  When I [travel from "{{destination}}" to "{{origin}}"]
30
31
  """
@@ -42,20 +43,22 @@ Scenario: Do a travel back and forth
42
43
  Scenario: Defining a macro that requires a data table
43
44
  Given I define the step "When I [fill in the form with]:" to mean:
44
45
  """
45
- When I type {{firstname}}
46
- And I type {{lastname}}
47
- And I type {{street_address}}
48
- And I type {{city}}
49
- And I type {{country}}
46
+ When I type "{{firstname}}"
47
+ And I type "{{lastname}}"
48
+ And I type "{{street_address}}"
49
+ And I type "{{postcode}}"
50
+ And I type "{{city}}"
51
+ And I type "{{country}}"
50
52
  """
51
53
 
52
54
  Scenario: Using a macro-step with a data table
53
55
  When I [fill in the form with]:
54
56
  |firstname| Sherlock|
55
- |lastname|Holmes|
57
+ |lastname | Holmes |
56
58
  |street_address| 221B, Baker Street|
57
- |city|London|
58
- |country|U.K.|
59
+ |city |London |
60
+ |postcode|NW1 6XE |
61
+ |country | U.K. |
59
62
 
60
63
  # You should see the output:
61
64
  # Sherlock
@@ -63,3 +66,44 @@ Scenario: Using a macro-step with a data table
63
66
  # 221B, Baker Street
64
67
  # London
65
68
  # U.K.
69
+
70
+
71
+ When I [fill in the form with]:
72
+ |firstname| Albert |
73
+ |lastname | Einstein|
74
+ |street_address| 22, Mercer Street|
75
+ |city |Princeton|
76
+ |country| U.S.A |
77
+
78
+ # You should see the output:
79
+ # Albert
80
+ # Einstein
81
+ # 22, Mercer Street
82
+
83
+ # Princeton
84
+ # U.S.A
85
+
86
+ # Did you notice the empty line in the previous output.
87
+ # Guess what? We forgot to specify a value for the postcode argument.
88
+
89
+
90
+ Scenario: Demonstrate that it is possible to use a sub-step with a data table
91
+ Given I define the step "When I [fill in, as a Londonian, the form with]:" to mean:
92
+ """
93
+ When I [fill in the form with]:
94
+ |firstname| {{firstname}}|
95
+ |lastname | {{lastname}} |
96
+ |street_address| {{street_address}}|
97
+ |postcode|{{postcode}} |
98
+ # The next two lines have hard-coded values
99
+ |city |London |
100
+ |country | U.K. |
101
+ """
102
+
103
+ # Let's try...
104
+ When I [fill in, as a Londonian, the form with]:
105
+ |firstname| Prime|
106
+ |lastname | Minister |
107
+ |street_address| 10, Downing Street|
108
+
109
+
@@ -3,7 +3,7 @@
3
3
 
4
4
  module Macros4Cuke # Module used as a namespace
5
5
  # This constant keeps the current version of the gem.
6
- Version = '0.1.03'
6
+ Version = '0.1.04'
7
7
 
8
8
  Description = "Macros for Cucumber"
9
9
 
@@ -22,18 +22,21 @@ class MacroStep
22
22
 
23
23
 
24
24
  # Constructor.
25
- # [aMacroPhrase]
26
- # [aTemplate] The source text of the steps to be expanded upon macro invokation.
27
- def initialize(aMacroPhrase, aTemplate)
25
+ # [aMacroPhrase] The text from the macro step definition that is between the square brackets.
26
+ # [theSubsteps] The source text of the steps to be expanded upon macro invokation.
27
+ def initialize(aMacroPhrase, theSubsteps)
28
28
  @name = self.class.macro_key(aMacroPhrase, :definition)
29
29
 
30
30
  # Retrieve the macro arguments embedded in the phrase.
31
31
  @phrase_args = scan_arguments(aMacroPhrase, :definition)
32
32
  @args = @phrase_args.dup()
33
33
 
34
+ # Manipulate the substeps source text (e.g. remove comment lines)
35
+ substeps_processed = preprocess(theSubsteps)
36
+
34
37
  # The expansion text is a Mustache template
35
38
  @renderer = Mustache.new
36
- renderer.template = aTemplate
39
+ renderer.template = substeps_processed
37
40
 
38
41
  # Retrieve the Mustache tag names from the template and add them as macro arguments
39
42
  add_tags_multi(renderer.template.tokens())
@@ -148,6 +151,18 @@ private
148
151
  raw_result = aMacroPhrase.scan(pattern)
149
152
  return raw_result.flatten.compact
150
153
  end
154
+
155
+ # Return the substeps text after some transformation
156
+ # [theSubstepsSource] The source text of the steps to be expanded upon macro invokation.
157
+ def preprocess(theSubstepsSource)
158
+ # Split text into lines
159
+ lines = theSubstepsSource.split(/\r\n?|\n/)
160
+
161
+ # Reject comment lines. This necessary because Cucumber::RbSupport::RbWorld#steps complains when it sees a comment.
162
+ processed = lines.reject { |a_line| a_line =~ /\s*#/ }
163
+
164
+ return processed.join("\n")
165
+ end
151
166
 
152
167
  # Visit an array of tokens of which the first element is the :multi symbol.
153
168
  # Every found template variable is added to the 'args' attribute.
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: macros4cuke
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.03
4
+ version: 0.1.04
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: