macros4cuke 0.2.08 → 0.2.09

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.
data/HISTORY.md CHANGED
@@ -1,3 +1,10 @@
1
+ ## [0.2.09]
2
+ #### Changes:
3
+ * Added one dedicated capturing group in regexp of macro defining step.
4
+ * Class MacroStep: initialize method and others. Added an explicit argument for use table mode.
5
+ * This impacts the MacroSupport module and the MacroCollection class.
6
+
7
+
1
8
  ## [0.2.08]
2
9
  #### Changes:
3
10
  * Class MacroStep: method validate_params is now private, the signature of expand method has changed.
data/lib/macro_steps.rb CHANGED
@@ -13,15 +13,17 @@
13
13
  # And I fill in "Password" with "unguessable"
14
14
  # And I click "Submit"
15
15
  # """
16
- Given(/^I define the step "(?:Given|When|Then) I \[((?:[^\\\]]|\\.)+\]:?)" to mean:$/) do |macro_phrase, template|
17
- add_macro(macro_phrase, template)
16
+ # The regexp has two capturing group: one for the phrase, a second for the terminating colon (:)
17
+ Given(/^I define the step "(?:Given|When|Then) I \[((?:[^\\\]]|\\.)+)\](:?)" to mean:$/) do |macro_phrase, colon_present, template|
18
+ use_table = (colon_present == ':')
19
+ add_macro(macro_phrase, template, use_table)
18
20
  end
19
21
 
20
22
  # This step is used to invoke a simple macro-step
21
23
  # Example:
22
24
  # When I [log in as "guest"]
23
25
  #
24
- When(/^I \[((?:[^\\\]]|\\.)+\])$/) do |macro_phrase|
26
+ When(/^I \[((?:[^\\\]]|\\.)+)\]$/) do |macro_phrase|
25
27
  invoke_macro(macro_phrase) # This will call the macro with the given phrase
26
28
  end
27
29
 
@@ -31,7 +33,7 @@ end
31
33
  # When I [enter my credentials as]:
32
34
  # |userid |guest |
33
35
  # |password|unguessable|
34
- When(/^I \[([^\]]+\]:)$/) do |macro_phrase, table_argument|
36
+ When(/^I \[([^\]]+)\]:$/) do |macro_phrase, table_argument|
35
37
  # Ensure that the second argument is of the correct type
36
38
  unless table_argument.kind_of?(Cucumber::Ast::Table)
37
39
  raise StandardError, "This step must have a data table as an argument."
@@ -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.2.08'
6
+ Version = '0.2.09'
7
7
 
8
8
  Description = "Macros for Cucumber"
9
9
 
@@ -31,14 +31,14 @@ public
31
31
  # Pre-condition: there is no existing macro with the same key.
32
32
  # [aPhrase] The text that is enclosed between the square brackets.
33
33
  # [aTemplate] A text that consists of a sequence of Cucumber steps.
34
- # These steps
35
- def add_macro(aPhrase, aTemplate)
36
- new_macro = MacroStep.new(aPhrase, aTemplate)
34
+ # [useTable] A boolean that indicates whether a table should be used to pass actual values.
35
+ def add_macro(aPhrase, aTemplate, useTable)
36
+ new_macro = MacroStep.new(aPhrase, aTemplate, useTable)
37
37
 
38
38
  # Prevent collision of macros (macros with same phrase).
39
39
  # This can occur if a macro was defined in a background section.
40
40
  # An exception is raised if the phrase syntax of both macros are the
41
- raise DuplicateMacroError.new(aPhrase) if find_macro(aPhrase)
41
+ raise DuplicateMacroError.new(aPhrase) if find_macro(aPhrase, useTable)
42
42
 
43
43
  @macro_steps[new_macro.key] = new_macro
44
44
 
@@ -52,8 +52,8 @@ public
52
52
  # Each couple is of the form: argument name, a value.
53
53
  # Multiple rows with same argument name are acceptable.
54
54
  def render_steps(aPhrase, rawData = nil)
55
-
56
- macro = find_macro(aPhrase)
55
+ useTable = ! rawData.nil?
56
+ macro = find_macro(aPhrase, useTable)
57
57
  raise UnknownMacroError.new(aPhrase) if macro.nil?
58
58
 
59
59
  # Render the steps
@@ -62,8 +62,8 @@ public
62
62
 
63
63
  private
64
64
  # Retrieve the macro, given a phrase.
65
- def find_macro(aMacroPhrase)
66
- return @macro_steps[MacroStep::macro_key(aMacroPhrase, :invokation)]
65
+ def find_macro(aMacroPhrase, useTable)
66
+ return @macro_steps[MacroStep::macro_key(aMacroPhrase, useTable, :invokation)]
67
67
  end
68
68
 
69
69
  end # class
@@ -26,9 +26,9 @@ public
26
26
  # Pre-condition: there is no existing macro with the same key.
27
27
  # [aPhrase] The text that is enclosed between the square brackets.
28
28
  # [aTemplate] A text that consists of a sequence of Cucumber steps.
29
- # These steps
30
- def add_macro(aPhrase, aTemplate)
31
- MacroCollection::instance.add_macro(aPhrase, aTemplate)
29
+ # [useTable] A boolean that indicates whether a table should be used to pass actual values.
30
+ def add_macro(aPhrase, aTemplate, useTable)
31
+ MacroCollection::instance.add_macro(aPhrase, aTemplate, useTable)
32
32
  end
33
33
 
34
34
 
@@ -26,8 +26,9 @@ class MacroStep
26
26
  # Constructor.
27
27
  # [aMacroPhrase] The text from the macro step definition that is between the square brackets.
28
28
  # [theSubsteps] The source text of the steps to be expanded upon macro invokation.
29
- def initialize(aMacroPhrase, theSubsteps)
30
- @key = self.class.macro_key(aMacroPhrase, :definition)
29
+ # [useTable] A boolean that indicates whether a table should be used to pass actual values.
30
+ def initialize(aMacroPhrase, theSubsteps, useTable)
31
+ @key = self.class.macro_key(aMacroPhrase, useTable, :definition)
31
32
 
32
33
  # Retrieve the macro arguments embedded in the phrase.
33
34
  @phrase_args = scan_arguments(aMacroPhrase, :definition)
@@ -51,11 +52,14 @@ class MacroStep
51
52
  # - Each underscore character is removed.
52
53
  # - Every sequence of one or more space(s) is converted into an underscore
53
54
  # - Each placeholder (i.e. = delimiters + enclosed text) is converted into a letter X.
54
- # - The endings are transformed as follows: ] => '', ]: => _T
55
+ # - when useTable is true, concatenate: _T
55
56
  # Example:
56
57
  # Consider the macro phrase: 'create the following "contactType" contact]:'
57
58
  # The resulting macro_key is: 'create_the_following_X_contact_T'
58
- def self.macro_key(aMacroPhrase, mode)
59
+ # [aMacroPhrase] The text from the macro step definition that is between the square brackets.
60
+ # [useTable] A boolean that indicates whether a table should be used to pass actual values.
61
+ # [mode] one of the following: :definition, :invokation
62
+ def self.macro_key(aMacroPhrase, useTable, mode)
59
63
  stripped_phrase = aMacroPhrase.strip # Remove leading ... trailing space(s)
60
64
 
61
65
  # Remove every underscore
@@ -77,12 +81,7 @@ class MacroStep
77
81
  # Each text between quotes or chevron is replaced by the letter X
78
82
  normalized = stripped_phrase.gsub(pattern, 'X')
79
83
 
80
- # Drop the "]" ending or replace the "]:# ending by "_T"
81
- key = if normalized.end_with?("]")
82
- normalized.chop()
83
- else
84
- normalized.sub(/\]:/, '_T')
85
- end
84
+ key = normalized + (useTable ? '_T' : '')
86
85
 
87
86
  return key
88
87
  end
@@ -9,7 +9,7 @@ require_relative '../../lib/macros4cuke/macro-step' # The class under test
9
9
  module Macros4Cuke # Open the module to avoid lengthy qualified names
10
10
 
11
11
  describe MacroStep do
12
- let(:sample_phrase) { "enter my credentials as <userid>]:" }
12
+ let(:sample_phrase) { "enter my credentials as <userid>" }
13
13
 
14
14
  let(:sample_template) do
15
15
  snippet = <<-SNIPPET
@@ -24,12 +24,13 @@ SNIPPET
24
24
  end
25
25
 
26
26
  # Default instantiation rule
27
- subject { MacroStep.new(sample_phrase, sample_template) }
27
+ subject { MacroStep.new(sample_phrase, sample_template, true) }
28
28
 
29
29
 
30
30
  context "Creation & initialization" do
31
- it "should be created with a phrase and a template" do
32
- lambda { MacroStep.new(sample_phrase, sample_template) }.should_not raise_error
31
+ it "should be created with a phrase, substeps and a table use indicator" do
32
+ lambda { MacroStep.new(sample_phrase, sample_template, true) }.should_not raise_error
33
+ lambda { MacroStep.new(sample_phrase, sample_template, false) }.should_not raise_error
33
34
  end
34
35
 
35
36
 
@@ -50,7 +51,7 @@ end
50
51
 
51
52
  context "Provided services" do
52
53
 
53
- let(:phrase_instance) {%Q|enter my credentials as "nobody"]:|}
54
+ let(:phrase_instance) {%Q|enter my credentials as "nobody"|}
54
55
 
55
56
  it "should render the substeps" do
56
57
  text = subject.expand(phrase_instance, [ ['password', 'no-secret'] ])
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.2.08
4
+ version: 0.2.09
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: