macros4cuke 0.3.29 → 0.3.30
Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
### 0.3.30 / 2013-06-13
|
2
|
+
* [CHANGE] File `README.md`: Added section `A word on Step Argument Transforms`.
|
3
|
+
* [CHANGE] File `engine.rb`: Changed a few case statements in order to please Rubocop.
|
4
|
+
* [CHANGE] `engine_spec.rb`: A test assertion was missing in a test.
|
5
|
+
* [TESTED] Regression testing with Cucumber 1.3.2. Pass.
|
6
|
+
|
1
7
|
### 0.3.29 / 2013-06-05
|
2
8
|
* [CHANGE] `MacroStep#validate_params` method: `Extract Method` Refactoring, resulting in new method `MacroStep#validate_row`.
|
3
9
|
* [CHANGE] `README.md`: Few editorial changes. Added section `More resources`.
|
data/README.md
CHANGED
@@ -410,6 +410,19 @@ text in an entry field may be noticeably different than skipping that same entry
|
|
410
410
|
Think of specific UI-events that can trigger some special system response.
|
411
411
|
|
412
412
|
|
413
|
+
## A word on Step Argument Transforms##
|
414
|
+
Cucumber provides a handy facility that helps to convert implicitly the values of step arguments.
|
415
|
+
A first description of this lesser-known functionality is available at
|
416
|
+
[Step Argument Transforms] (https://github.com/cucumber/cucumber/wiki/Step-Argument-Transforms).
|
417
|
+
Does Macros4Cuke provide such a facility for its own macro-step arguments?
|
418
|
+
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.
|
419
|
+
In fact, Cucumber will happily apply transformations on any step, including the macro definition steps and the
|
420
|
+
steps invoking macros. Stated otherwise, the rules pertaining the Step Argument Transforms work as usual. Or almost.
|
421
|
+
There is one very specific case where Cucumber behaves slightly differently: the transforms aren't applied when a sub-step is executed.
|
422
|
+
Internally, Macros4Cuke calls the `Cucumber::RbSupport::RbWorld::#steps` method that allows to run a Gherkin snippet (the substeps),
|
423
|
+
and it appears that this method does not trigger the transforms. In practice, this doesn't prevent the use of transforms together
|
424
|
+
with Macros4Cuke. In the vast majority of cases both will work fine as expected.
|
425
|
+
|
413
426
|
|
414
427
|
## FAQ ##
|
415
428
|
__Q__: Can I define a macro in one scenario and invoke it in another scenario in the same feature file?
|
@@ -440,6 +453,7 @@ __Q__: Can I __invoke/call__ a macro-step in a `Background` or `Scenario Outline
|
|
440
453
|
__A__: Yes. As a macro-step can be invoked multiple times.
|
441
454
|
|
442
455
|
|
456
|
+
|
443
457
|
## Changelog
|
444
458
|
|
445
459
|
Macros4Cuke's changelog is available [here](CHANGELOG.md).
|
@@ -450,7 +464,7 @@ Macros4Cuke's changelog is available [here](CHANGELOG.md).
|
|
450
464
|
- [**Report a bug**](https://github.com/famished-tiger/Macros4Cuke/issues)
|
451
465
|
|
452
466
|
|
453
|
-
|
467
|
+
### With great power comes great responsibility. ###
|
454
468
|
_Stan Lee_
|
455
469
|
|
456
470
|
Our experience is that macro-steps change deeply the way one designs and writes feature files.
|
@@ -142,12 +142,12 @@ public
|
|
142
142
|
def variables()
|
143
143
|
all_vars = children.each_with_object([]) do |a_child, subResult|
|
144
144
|
case a_child
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
145
|
+
when Placeholder
|
146
|
+
subResult << a_child.name
|
147
|
+
when Section
|
148
|
+
subResult.concat(a_child.variables)
|
149
|
+
else
|
150
|
+
# Do nothing
|
151
151
|
end
|
152
152
|
end
|
153
153
|
|
@@ -277,14 +277,14 @@ public
|
|
277
277
|
@variables ||= begin
|
278
278
|
vars = @representation.each_with_object([]) do |element, subResult|
|
279
279
|
case element
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
280
|
+
when Placeholder
|
281
|
+
subResult << element.name
|
282
|
+
|
283
|
+
when Section
|
284
|
+
subResult.concat(element.variables)
|
285
|
+
|
286
|
+
else
|
287
|
+
# Do nothing
|
288
288
|
end
|
289
289
|
end
|
290
290
|
|
@@ -333,10 +333,8 @@ private
|
|
333
333
|
|
334
334
|
no_escaped.each_char do |ch|
|
335
335
|
case ch
|
336
|
-
|
337
|
-
|
338
|
-
when '>'
|
339
|
-
unbalance -= 1
|
336
|
+
when '<' then unbalance += 1
|
337
|
+
when '>' then unbalance -= 1
|
340
338
|
end
|
341
339
|
|
342
340
|
raise StandardError, "Nested opening chevron '<'." if unbalance > 1
|
@@ -379,18 +377,18 @@ private
|
|
379
377
|
section_item = nil
|
380
378
|
line_to_squeeze = line_rep.all? do |item|
|
381
379
|
case item
|
382
|
-
|
383
|
-
|
384
|
-
|
385
|
-
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
else
|
390
|
-
false
|
391
|
-
end
|
380
|
+
when StaticText
|
381
|
+
item.source =~ /\s+/
|
382
|
+
|
383
|
+
when Section, SectionEndMarker
|
384
|
+
if section_item.nil?
|
385
|
+
section_item = item
|
386
|
+
true
|
392
387
|
else
|
393
388
|
false
|
389
|
+
end
|
390
|
+
else
|
391
|
+
false
|
394
392
|
end
|
395
393
|
end
|
396
394
|
if line_to_squeeze && ! section_item.nil?
|
@@ -423,12 +421,9 @@ private
|
|
423
421
|
(kind, text) = aCouple
|
424
422
|
|
425
423
|
result = case kind
|
426
|
-
|
427
|
-
|
428
|
-
|
429
|
-
when :dynamic
|
430
|
-
parse_tag(text)
|
431
|
-
end
|
424
|
+
when :static then StaticText.new(text)
|
425
|
+
when :dynamic then parse_tag(text)
|
426
|
+
end
|
432
427
|
|
433
428
|
return result
|
434
429
|
end
|
@@ -465,20 +460,19 @@ private
|
|
465
460
|
|
466
461
|
compiled = flat_sequence.each_with_object([]) do |element, subResult|
|
467
462
|
case element
|
468
|
-
|
469
|
-
|
470
|
-
|
471
|
-
|
472
|
-
|
473
|
-
|
474
|
-
|
463
|
+
when Section
|
464
|
+
open_sections << element
|
465
|
+
|
466
|
+
when SectionEndMarker
|
467
|
+
validate_section_end(element, open_sections)
|
468
|
+
subResult << open_sections.pop()
|
469
|
+
|
470
|
+
else
|
471
|
+
if open_sections.empty?
|
472
|
+
subResult << element
|
475
473
|
else
|
476
|
-
|
477
|
-
|
478
|
-
else
|
479
|
-
open_sections.last.add_child(element)
|
480
|
-
end
|
481
|
-
|
474
|
+
open_sections.last.add_child(element)
|
475
|
+
end
|
482
476
|
end
|
483
477
|
end
|
484
478
|
|
@@ -29,7 +29,7 @@ describe MacroStepSupport do
|
|
29
29
|
# Rule to build a custom world object
|
30
30
|
let(:world) { MyWorld.new }
|
31
31
|
|
32
|
-
let(:
|
32
|
+
let(:phrase1) { 'enter the credentials' }
|
33
33
|
|
34
34
|
let(:m1_substeps) do
|
35
35
|
ssteps = <<-SNIPPET
|
@@ -44,13 +44,13 @@ SNIPPET
|
|
44
44
|
|
45
45
|
context 'Defining macro(s):' do
|
46
46
|
it 'should add valid new macro' do
|
47
|
-
expect { world.add_macro
|
47
|
+
expect { world.add_macro phrase1, m1_substeps, true }.not_to raise_error
|
48
48
|
end
|
49
49
|
|
50
50
|
it 'should complain when entering the same macro again' do
|
51
51
|
# Error case: trying to register another macro with same key/phrase.
|
52
52
|
msg = "A macro-step with phrase 'enter the credentials' already exist."
|
53
|
-
expect { world.add_macro(
|
53
|
+
expect { world.add_macro(phrase1, m1_substeps, true) }.to raise_error(
|
54
54
|
Macros4Cuke::DuplicateMacroError, msg)
|
55
55
|
end
|
56
56
|
|
@@ -251,7 +251,7 @@ SNIPPET
|
|
251
251
|
|
252
252
|
it 'should know the variable(s) it contains' do
|
253
253
|
# Case using the sample template
|
254
|
-
subject.variables == [
|
254
|
+
expect(subject.variables).to be == ['userid', 'password']
|
255
255
|
|
256
256
|
# Case of an empty source template text
|
257
257
|
instance = Engine.new ''
|
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.3.
|
4
|
+
version: 0.3.30
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-06-
|
12
|
+
date: 2013-06-13 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: cucumber
|