macros4cuke 0.1.02 → 0.1.03
Sign up to get free protection for your applications and to get access to all the features.
- data/HISTORY.md +8 -0
- data/README.md +44 -27
- data/features/step_definitions/demo_steps.rb +7 -3
- data/features/support/env.rb +10 -14
- data/features/support/macro_support.rb +16 -0
- data/features/travelling-demo.feature +65 -0
- data/lib/macros4cuke/constants.rb +1 -1
- metadata +4 -2
data/HISTORY.md
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
## [0.1.03]
|
2
|
+
### Documentation
|
3
|
+
* README.md: slightly reworked and added link to Mustache.
|
4
|
+
### Changes:
|
5
|
+
* env.rb: All dependencies on Macros4Cuke were moved to the file macro_support.rb
|
6
|
+
* travelling-demo.feature: Demo feature file with output on the screen (the other demos don't display any result).
|
7
|
+
|
8
|
+
|
1
9
|
## [0.0.02]
|
2
10
|
### Documentation
|
3
11
|
* In README: added a reference to the features folder.
|
data/README.md
CHANGED
@@ -1,17 +1,24 @@
|
|
1
1
|
Macros4Cuke
|
2
2
|
===========
|
3
3
|
|
4
|
-
|
4
|
+
_Add macros to your Cucumber scenarios._
|
5
5
|
[Homepage](https://github.com/famished-tiger/Macros4Cuke)
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
a scenario.
|
7
|
+
__Macros4Cuke__ gives you the opportunity to factor out repeated steps
|
8
|
+
in your Cucumber scenarios. You can create (macro-)steps directly in feature files.
|
9
|
+
To each macro-step, it is possible to associate a sequence of sub-steps
|
10
|
+
that will be executed every time a macro-step occurs in a scenario.
|
11
11
|
|
12
|
-
|
13
|
-
|
12
|
+
### Highlights ###
|
13
|
+
* Works with out-of-the-box Cucumber
|
14
|
+
* Simple installation and setup (no programming required),
|
15
|
+
* Substep sequence can be of arbitrary length,
|
16
|
+
* Macro-steps may have data arguments,
|
17
|
+
* Data values can be passed to the sub-steps.
|
14
18
|
|
19
|
+
## Synopsis ##
|
20
|
+
Here is an example taken from our demo files:
|
21
|
+
```cucumber
|
15
22
|
Given I define the step "When I [enter my userid {{userid}} and password {{password}}]" to mean:
|
16
23
|
"""
|
17
24
|
Given I landed in the homepage
|
@@ -20,35 +27,45 @@ Here follows an example taken from our demo files:
|
|
20
27
|
And I fill in "Password" with "{{password}}"
|
21
28
|
And I click "Submit"
|
22
29
|
"""
|
23
|
-
|
24
|
-
That macro step can be used in a scenario like this:
|
25
|
-
When I [enter my userid "jdoe" and password "hello-world"]
|
30
|
+
```
|
26
31
|
|
32
|
+
Notice how the arguments are enclosed between curly braces {{..}}. In its current incarnation,
|
33
|
+
Macros4Cuke relies on the [Mustache](http://mustache.github.io/mustache.5.html) template engine
|
34
|
+
for generating the sub-steps.
|
35
|
+
|
36
|
+
That macro-step can then be used in a scenario like this:
|
37
|
+
```cucumber
|
38
|
+
When I [enter my userid "jdoe" and password "hello-world"]
|
39
|
+
```
|
27
40
|
|
28
41
|
See also the working examples in the features folder.
|
29
42
|
|
43
|
+
## Install and setup ##
|
44
|
+
* Step 1: Install the macros4cuke gem:
|
45
|
+
```bash
|
46
|
+
gem install macros4cuke
|
47
|
+
```
|
30
48
|
|
31
|
-
## What do I need to start? ##
|
32
|
-
* Install the macros4cuke gem:
|
33
|
-
- gem install macros4cuke
|
34
|
-
|
35
|
-
* In your 'env.rb' file
|
36
|
-
- 1. Load the modules and classes from the gem:
|
37
|
-
require 'macros4cuke'
|
38
|
-
|
39
|
-
|
40
|
-
- 2. Extend the world object like this:
|
41
|
-
World(Macros4Cuke::MacroStepSupport)
|
42
49
|
|
50
|
+
* Step 2: Add support for macros in your Cucumber project
|
51
|
+
In your /features/support/ folder:
|
52
|
+
- Create a Ruby file (e.g. 'macro\_support.rb') with the following contents:
|
53
|
+
```ruby
|
54
|
+
require 'macros4cuke'
|
55
|
+
|
56
|
+
World(Macros4Cuke::MacroStepSupport)
|
57
|
+
```
|
43
58
|
|
44
|
-
*
|
45
|
-
|
46
|
-
Create a ruby file (say, '
|
47
|
-
|
48
|
-
|
59
|
+
* Step 3: Import the macro-management steps
|
60
|
+
In your /features/step_definitions/ folder:
|
61
|
+
- Create a ruby file (say, 'use\_macro\_steps.rb') with the following line:
|
62
|
+
```ruby
|
63
|
+
require 'macros4cuke/../macro_steps'
|
64
|
+
```
|
49
65
|
|
50
|
-
|
66
|
+
Now, you can start writing macros in your Cucumber project.
|
51
67
|
|
68
|
+
---
|
52
69
|
|
53
70
|
Copyright
|
54
71
|
---------
|
@@ -21,17 +21,21 @@ end
|
|
21
21
|
|
22
22
|
|
23
23
|
When(/^I leave (.+)$/) do |city|
|
24
|
-
|
24
|
+
show "I leave #{city}"
|
25
25
|
end
|
26
26
|
|
27
27
|
|
28
28
|
When(/^I visit (.+)$/) do |city|
|
29
|
-
|
29
|
+
show "I visit #{city}"
|
30
30
|
end
|
31
31
|
|
32
32
|
|
33
33
|
When(/^I arrive in (.+)$/) do |city|
|
34
|
-
|
34
|
+
show "I arrive in #{city}"
|
35
|
+
end
|
36
|
+
|
37
|
+
When(/^I type (.+)$/) do |text|
|
38
|
+
show text
|
35
39
|
end
|
36
40
|
|
37
41
|
|
data/features/support/env.rb
CHANGED
@@ -4,16 +4,13 @@
|
|
4
4
|
# It also demonstrate what to do in your env.rb file to use the Macros4Cuke gem.
|
5
5
|
|
6
6
|
|
7
|
-
# Macros4Cuke step one: Load modules and classes from the gem.
|
8
|
-
require 'macros4cuke'
|
9
7
|
|
8
|
+
module DemoMacros4Cuke # Use the module as a namespace
|
10
9
|
|
11
|
-
|
10
|
+
|
11
|
+
# Class created just for testing and demonstration purposes.
|
12
|
+
# Its instance, will record the output emitted by the steps.
|
12
13
|
|
13
|
-
=begin
|
14
|
-
Class created just for testing and demonstration purposes.
|
15
|
-
Its instance, will record the output emitted by the steps.
|
16
|
-
=end
|
17
14
|
class TracingWorld
|
18
15
|
# Will contain the text emitted by the steps
|
19
16
|
attr_reader(:trace_steps)
|
@@ -25,6 +22,11 @@ class TracingWorld
|
|
25
22
|
end
|
26
23
|
|
27
24
|
public
|
25
|
+
# Write the given text to the error console
|
26
|
+
|
27
|
+
def show(someText)
|
28
|
+
$stderr.puts(someText)
|
29
|
+
end
|
28
30
|
|
29
31
|
|
30
32
|
end # class
|
@@ -33,14 +35,8 @@ end # module
|
|
33
35
|
|
34
36
|
# For testing purpose we override the default Cucumber behaviour
|
35
37
|
# making our world object an instance of the TracingWorld class
|
36
|
-
World {
|
37
|
-
|
38
|
-
|
39
|
-
# Macros4Cuke step two: extend the world object with the mix-in module
|
40
|
-
# that adds the support for macros in Cucumber.
|
41
|
-
World(Macros4Cuke::MacroStepSupport)
|
38
|
+
World { DemoMacros4Cuke::TracingWorld.new }
|
42
39
|
|
43
|
-
# That's all folks!...
|
44
40
|
|
45
41
|
|
46
42
|
# End of file
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# encoding: utf-8 You should see a paragraph character: §
|
2
|
+
# File: macro_support.rb
|
3
|
+
# Purpose: Add the support for macros in Cucumber.
|
4
|
+
# This file is meant to be put next to the 'env.rb' file of your Cucumeber project.
|
5
|
+
|
6
|
+
|
7
|
+
# Macros4Cuke step one: Load modules and classes from the gem.
|
8
|
+
require 'macros4cuke'
|
9
|
+
|
10
|
+
|
11
|
+
# Macros4Cuke step two: extend the world object with the mix-in module
|
12
|
+
# that adds the support for macros in Cucumber.
|
13
|
+
World(Macros4Cuke::MacroStepSupport)
|
14
|
+
|
15
|
+
|
16
|
+
# End of file
|
@@ -0,0 +1,65 @@
|
|
1
|
+
# File: travelling-demo.feature
|
2
|
+
|
3
|
+
Feature: Show -visually- the several ways to use macros
|
4
|
+
As a Cuke user
|
5
|
+
So that I enjoy writing scenario.
|
6
|
+
|
7
|
+
|
8
|
+
Scenario: Definition of a simple macro-step with two arguments
|
9
|
+
Given I define the step "When I [travel from {{origin}} to {{destination}}]" to mean:
|
10
|
+
"""
|
11
|
+
When I leave {{origin}}
|
12
|
+
And I arrive in {{destination}}
|
13
|
+
"""
|
14
|
+
|
15
|
+
Scenario: Do a simple travel
|
16
|
+
# Call a macro-step defined earlier
|
17
|
+
When I [travel from "Brussels" to "Rome"]
|
18
|
+
|
19
|
+
# You should see the output:
|
20
|
+
# I leave Brussels
|
21
|
+
# I arrive in Rome
|
22
|
+
|
23
|
+
|
24
|
+
Scenario: Defining a macro calling other macro(s)
|
25
|
+
Given I define the step "When I [travel from {{origin}} to {{destination}} and back]" to mean:
|
26
|
+
"""
|
27
|
+
{{! The next two steps are, in fact, macro-step invokations}}
|
28
|
+
When I [travel from "{{origin}}" to "{{destination}}"]
|
29
|
+
When I [travel from "{{destination}}" to "{{origin}}"]
|
30
|
+
"""
|
31
|
+
|
32
|
+
Scenario: Do a travel back and forth
|
33
|
+
When I [travel from "Paris" to "London" and back]
|
34
|
+
|
35
|
+
# You should see the output:
|
36
|
+
# I leave Paris
|
37
|
+
# I arrive in London
|
38
|
+
# I leave London
|
39
|
+
# I arrive in Paris
|
40
|
+
|
41
|
+
|
42
|
+
Scenario: Defining a macro that requires a data table
|
43
|
+
Given I define the step "When I [fill in the form with]:" to mean:
|
44
|
+
"""
|
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}}
|
50
|
+
"""
|
51
|
+
|
52
|
+
Scenario: Using a macro-step with a data table
|
53
|
+
When I [fill in the form with]:
|
54
|
+
|firstname| Sherlock|
|
55
|
+
|lastname|Holmes|
|
56
|
+
|street_address| 221B, Baker Street|
|
57
|
+
|city|London|
|
58
|
+
|country|U.K.|
|
59
|
+
|
60
|
+
# You should see the output:
|
61
|
+
# Sherlock
|
62
|
+
# Holmes
|
63
|
+
# 221B, Baker Street
|
64
|
+
# London
|
65
|
+
# U.K.
|
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.
|
4
|
+
version: 0.1.03
|
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-04-
|
12
|
+
date: 2013-04-23 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
@@ -82,9 +82,11 @@ files:
|
|
82
82
|
- features/demo02.feature
|
83
83
|
- features/demo03.feature
|
84
84
|
- features/demo04.feature
|
85
|
+
- features/travelling-demo.feature
|
85
86
|
- features/step_definitions/demo_steps.rb
|
86
87
|
- features/step_definitions/use_macro_steps.rb
|
87
88
|
- features/support/env.rb
|
89
|
+
- features/support/macro_support.rb
|
88
90
|
homepage: https://github.com/famished-tiger/Macros4Cuke
|
89
91
|
licenses: []
|
90
92
|
post_install_message: ! '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|