cucumber-tcl 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
data/CONTRIBUTING.md CHANGED
@@ -16,14 +16,14 @@ Now release it
16
16
  git commit -m "Release `cat lib/cucumber/tcl/version`"
17
17
  rake release
18
18
 
19
- ## Gaining Release Karma
19
+ ## Gaining Release Privileges
20
20
 
21
- To become a release manager, create a pull request adding your name to the list below, and include your [Rubygems email address](https://rubygems.org/sign_up) in the ticket. One of the existing Release managers will then add you.
21
+ To become a release manager, create a pull request adding your name to the list below, and make sure to include a link to your [Rubygems profile](https://rubygems.org/sign_up). One of the existing release managers will then add you.
22
22
 
23
23
  Current release managers:
24
24
  * [Matt Wynne](https://rubygems.org/profiles/mattwynne)
25
25
  * [Jonathan Owers](https://rubygems.org/profiles/jowers)
26
26
 
27
- To grant release karma, issue the following command:
27
+ To grant release privilege, issue the following command:
28
28
 
29
29
  gem owner cucumber-tcl --add <NEW OWNER RUBYGEMS EMAIL>
@@ -1,6 +1,5 @@
1
1
  Feature: DataTables
2
2
 
3
- @wip
4
3
  Scenario: Match a step with a DataTable
5
4
  Given a file named "features/test.feature" with:
6
5
  """
@@ -46,3 +46,110 @@ Feature: Define a step
46
46
  Hello 123
47
47
  """
48
48
 
49
+ Scenario: Define a feature with no steps file
50
+ Given a file named "features/test.feature" with:
51
+ """
52
+ Feature:
53
+ Scenario:
54
+ Given undefined
55
+ """
56
+ And a file named "features/support/env.rb" with:
57
+ """
58
+ require 'cucumber/tcl'
59
+ """
60
+ When I run `cucumber`
61
+ Then it should pass with:
62
+ """
63
+ Feature:
64
+
65
+ Scenario: # features/test.feature:2
66
+ Given undefined # features/test.feature:3
67
+
68
+ 1 scenario (1 undefined)
69
+ 1 step (1 undefined)
70
+ """
71
+
72
+ Scenario: Define a failing step
73
+ Given a file named "features/test.feature" with:
74
+ """
75
+ Feature:
76
+ Scenario:
77
+ Given failing
78
+ """
79
+ And a file named "features/support/env.rb" with:
80
+ """
81
+ require 'cucumber/tcl'
82
+ """
83
+ And a file named "features/step_defintions/steps.tcl" with:
84
+ """
85
+ Given {^failing$} {
86
+ error "Failing Step"
87
+ }
88
+ """
89
+ When I run `cucumber`
90
+ Then it should fail with:
91
+ """
92
+ Feature:
93
+
94
+ Scenario: # features/test.feature:2
95
+ Given failing # features/test.feature:3
96
+ Failing Step
97
+ while executing
98
+ "error "Failing Step""
99
+ ("eval" body line 2)
100
+ invoked from within
101
+ "eval $existing_step_body" (Tcl::Error)
102
+ features/test.feature:3:in `Given failing'
103
+
104
+ Failing Scenarios:
105
+ cucumber features/test.feature:2 # Scenario:
106
+
107
+ 1 scenario (1 failed)
108
+ 1 step (1 failed)
109
+ """
110
+
111
+ Scenario: Define a step that calls a failing proc
112
+ Given a file named "features/test.feature" with:
113
+ """
114
+ Feature:
115
+ Scenario:
116
+ Given failing
117
+ """
118
+ And a file named "features/support/env.rb" with:
119
+ """
120
+ require 'cucumber/tcl'
121
+ """
122
+ And a file named "features/step_defintions/steps.tcl" with:
123
+ """
124
+ Given {^failing$} {
125
+ failing_proc
126
+ }
127
+ proc failing_proc {} {
128
+ error "Failing Step"
129
+ }
130
+ """
131
+ When I run `cucumber`
132
+ Then it should fail with:
133
+ """
134
+ Feature:
135
+
136
+ Scenario: # features/test.feature:2
137
+ Given failing # features/test.feature:3
138
+ Failing Step
139
+ while executing
140
+ "error "Failing Step""
141
+ (procedure "failing_proc" line 2)
142
+ invoked from within
143
+ "failing_proc"
144
+ ("eval" body line 2)
145
+ invoked from within
146
+ "eval $existing_step_body" (Tcl::Error)
147
+ features/test.feature:3:in `Given failing'
148
+
149
+ Failing Scenarios:
150
+ cucumber features/test.feature:2 # Scenario:
151
+
152
+ 1 scenario (1 failed)
153
+ 1 step (1 failed)
154
+ """
155
+
@@ -0,0 +1,41 @@
1
+ Feature: A step that is still pending implementation
2
+
3
+ Calling `pending` from a Tcl step definition will fail that scenario as
4
+ pending.
5
+
6
+ Still to do:
7
+
8
+ - [pass a message back about why the step is pending](https://github.com/cucumber/cucumber-ruby-tcl/issues/24)
9
+ - [display the file:line where `pending` was called in backtrace](https://github.com/cucumber/cucumber-ruby-tcl/issues/25)
10
+
11
+ Scenario: A un-implemented step returns pending
12
+ Given a file named "features/test.feature" with:
13
+ """
14
+ Feature:
15
+ Scenario:
16
+ Given pending
17
+ """
18
+ And a file named "features/support/env.rb" with:
19
+ """
20
+ require 'cucumber/tcl'
21
+ """
22
+ And a file named "features/step_defintions/steps.tcl" with:
23
+ """
24
+ Given {^pending$} {
25
+ pending
26
+ }
27
+ """
28
+ When I run `cucumber -q`
29
+ Then it should pass with:
30
+ """
31
+ Feature:
32
+
33
+ Scenario:
34
+ Given pending
35
+ TODO: Step not yet implemented (Cucumber::Core::Test::Result::Pending)
36
+ features/test.feature:3:in `Given pending'
37
+
38
+ 1 scenario (1 pending)
39
+ 1 step (1 pending)
40
+ """
41
+
data/lib/cucumber/tcl.rb CHANGED
@@ -1,11 +1,23 @@
1
1
  require 'cucumber/tcl/activate_steps'
2
+ require 'cucumber/tcl/framework'
2
3
  require 'cucumber/tcl/step_definitions'
3
4
 
5
+ # Use Cucumber's configuration hook to install the plugin
4
6
  if respond_to?(:AfterConfiguration)
5
7
  AfterConfiguration do |config|
6
- create_step_definitions = lambda {
7
- Cucumber::Tcl::StepDefinitions.new(File.dirname(__FILE__) + '/tcl/framework.tcl')
8
- }
9
- config.filters << Cucumber::Tcl::ActivateSteps.new(create_step_definitions)
8
+ Cucumber::Tcl.install config
9
+ end
10
+ end
11
+
12
+ module Cucumber
13
+ module Tcl
14
+
15
+ def self.install(cucumber_config)
16
+ create_step_definitions = lambda {
17
+ StepDefinitions.new(Framework.new)
18
+ }
19
+ cucumber_config.filters << ActivateSteps.new(create_step_definitions)
20
+ end
21
+
10
22
  end
11
23
  end
@@ -0,0 +1,19 @@
1
+ module Cucumber
2
+ module Tcl
3
+ class Framework
4
+ TCL_FRAMEWORK_PATH = File.dirname(__FILE__) + '/framework.tcl'
5
+
6
+ def initialize(path = TCL_FRAMEWORK_PATH)
7
+ @tcl = ::Tcl::Interp.load_from_file(path)
8
+ end
9
+
10
+ def step_definition_exists?(step_name)
11
+ @tcl.proc('step_definition_exists').call(step_name) == "1"
12
+ end
13
+
14
+ def execute_step_definition(*args)
15
+ @tcl.proc('execute_step_definition').call(*args)
16
+ end
17
+ end
18
+ end
19
+ end
@@ -1,36 +1,42 @@
1
1
 
2
- # Set a variable to allow this to be more easily tested
3
- if {[info exists env(TEST)] && $env(TEST) eq 1} {
4
- set TEST 1
5
- } else {
6
- set TEST 0
7
- }
2
+ namespace eval ::cucumber:: {
3
+ variable STEPS [list]
4
+ variable TEST
5
+
6
+ # Set a variable to allow this to be more easily tested
7
+ if {[info exists env(TEST)] && $::env(TEST) eq 1} {
8
+ set TEST 1
9
+ } else {
10
+ set TEST 0
11
+ }
8
12
 
9
- #TODO make this a namespace to avoid globals
10
- set STEPS [list]
13
+ namespace export step_definition_exists
14
+ namespace export execute_step_definition
15
+ namespace export Given
16
+ namespace export When
17
+ namespace export Then
18
+ namespace export pending
19
+
20
+ }
11
21
 
12
22
  #
13
23
  # Define procs to match Gherkin keyworkds that put data in the STEPS array
14
24
  #
15
- proc Given args {
16
- _add_step {*}$args
17
- }
18
-
19
- proc When args {
25
+ proc ::cucumber::Given args {
20
26
  _add_step {*}$args
21
27
  }
22
28
 
23
- proc Then args {
29
+ proc ::cucumber::When args {
24
30
  _add_step {*}$args
25
31
  }
26
32
 
27
- proc And args {
33
+ proc ::cucumber::Then args {
28
34
  _add_step {*}$args
29
35
  }
30
36
 
31
- proc _add_step args {
37
+ proc ::cucumber::_add_step args {
32
38
 
33
- global STEPS
39
+ variable STEPS
34
40
 
35
41
  if {[llength $args] == 2} {
36
42
  set re [lindex $args 0]
@@ -50,21 +56,21 @@ proc _add_step args {
50
56
 
51
57
  #
52
58
  # Procs needed by cucumber for checking and executing steps
53
- proc step_definition_exists { step_name } {
59
+ proc ::cucumber::step_definition_exists { step_name } {
54
60
  set res [_search_steps $step_name 0]
55
61
  return $res
56
62
  }
57
63
 
58
64
 
59
- proc execute_step_definition { step_name {multiline_args {}} } {
65
+ proc ::cucumber::execute_step_definition { step_name {multiline_args {}} } {
60
66
  set res [_search_steps $step_name 1 $multiline_args]
61
67
  return $res
62
68
 
63
69
  }
64
70
 
65
71
 
66
- proc _search_steps {step_name {execute 0} {multiline_args {}}} {
67
- global STEPS
72
+ proc ::cucumber::_search_steps {step_name {execute 0} {multiline_args {}}} {
73
+ variable STEPS
68
74
 
69
75
  foreach step $STEPS {
70
76
  set existing_step_name [lindex $step 0]
@@ -81,7 +87,14 @@ proc _search_steps {step_name {execute 0} {multiline_args {}}} {
81
87
  }
82
88
 
83
89
  if {$execute == 1} {
84
- eval $existing_step_body
90
+ if {[catch {
91
+ eval $existing_step_body
92
+ } msg]} {
93
+ if {$msg eq "pending"} {
94
+ return "pending"
95
+ }
96
+ error $::errorInfo
97
+ }
85
98
  }
86
99
  return 1
87
100
  }
@@ -89,9 +102,20 @@ proc _search_steps {step_name {execute 0} {multiline_args {}}} {
89
102
  return 0
90
103
  }
91
104
 
92
- if {$TEST ne 1} {
93
- #TODO let that path be configurable from cucumber-ruby
94
- foreach x [glob features/**/*.tcl] {
95
- source $x
105
+ proc ::cucumber::source_steps args {
106
+ variable TEST
107
+
108
+ if {$TEST ne 1} {
109
+ #TODO let that path be configurable from cucumber-ruby
110
+ foreach x [glob -nocomplain features/**/*.tcl] {
111
+ source $x
112
+ }
96
113
  }
97
114
  }
115
+
116
+ proc ::cucumber::pending args {
117
+ error "pending"
118
+ }
119
+
120
+ namespace import ::cucumber::*
121
+ ::cucumber::source_steps
@@ -5,9 +5,8 @@ module Cucumber
5
5
  module Tcl
6
6
 
7
7
  class StepDefinitions
8
- def initialize(path)
9
- raise ArgumentError, "cucumber-tcl entry point #{path} does not exist." unless File.exists?(path)
10
- @tcl = ::Tcl::Interp.load_from_file(path)
8
+ def initialize(tcl_framework)
9
+ @tcl_framework = tcl_framework
11
10
  end
12
11
 
13
12
  def attempt_to_activate(test_step)
@@ -18,20 +17,33 @@ module Cucumber
18
17
  private
19
18
 
20
19
  def match?(test_step)
21
- step_name = test_step.name
22
- @tcl.proc('step_definition_exists').call(step_name) == "1"
20
+ @tcl_framework.step_definition_exists?(test_step.name)
23
21
  end
24
22
 
25
23
  def action_for(test_step)
26
- step_name = test_step.name
27
- arguments = ArgumentList.new(step_name)
28
- test_step.source.last.multiline_arg.describe_to(arguments)
29
- proc { @tcl.proc('execute_step_definition').call(*arguments) }
24
+ arguments = ArgumentList.new(test_step)
25
+ proc {
26
+ response = ExecuteResponse.new(@tcl_framework.execute_step_definition(*arguments))
27
+ response.raise_any_pending_error
28
+ }
29
+ end
30
+
31
+ class ExecuteResponse
32
+ def initialize(raw)
33
+ @raw = raw
34
+ end
35
+
36
+ def raise_any_pending_error
37
+ if @raw == "pending"
38
+ raise Cucumber::Core::Test::Result::Pending.new("TODO: Step not yet implemented")
39
+ end
40
+ end
30
41
  end
31
42
 
32
43
  class ArgumentList
33
- def initialize(*args)
34
- @arguments = args
44
+ def initialize(test_step)
45
+ @arguments = [test_step.name]
46
+ test_step.source.last.multiline_arg.describe_to self
35
47
  end
36
48
 
37
49
  def doc_string(arg)
@@ -2,40 +2,41 @@ package require tcltest 2
2
2
  namespace import tcltest::*
3
3
 
4
4
  source "./lib/cucumber/tcl/framework.tcl"
5
+ namespace import cucumber::*
5
6
 
6
7
  #
7
8
  # Test Given
8
9
  #
9
10
  test Given-1 {calling Given with 2 parameters adds a new entry to the STEPS list with an empty parameters list} {
10
11
  -setup {
11
- set ::STEPS [list]
12
+ set ::cucumber::STEPS [list]
12
13
  }
13
14
  -body {
14
15
  Given {^Regular Expression$} { puts "Given RegExp" }
15
- expr { [llength $::STEPS] == 1 && [llength [lindex $::STEPS 0]] == 3}
16
+ expr { [llength $::cucumber::STEPS] == 1 && [llength [lindex $::cucumber::STEPS 0]] == 3}
16
17
  }
17
18
  -result 1
18
19
  }
19
20
 
20
21
  test Given-2 {calling Given twice adds 2 entries to the STEPS list} {
21
22
  -setup {
22
- set ::STEPS [list]
23
+ set ::cucumber::STEPS [list]
23
24
  }
24
25
  -body {
25
26
  Given {^Regular Expression$} { puts "Given RegExp" }
26
27
  Given {^Regular Expression 2$} { puts "Given RegExp 2" }
27
- expr { [llength $::STEPS] == 2 && [llength [lindex $::STEPS 0]] == 3}
28
+ expr { [llength $::cucumber::STEPS] == 2 && [llength [lindex $::cucumber::STEPS 0]] == 3}
28
29
  }
29
30
  -result 1
30
31
  }
31
32
 
32
33
  test Given-3 {calling Given with 3 parameters adds a new entry to the STEPS list} {
33
34
  -setup {
34
- set ::STEPS [list]
35
+ set ::cucumber::STEPS [list]
35
36
  }
36
37
  -body {
37
38
  Given {^Regular Expression (\d+)$} {match} { puts "Given RegExp $match" }
38
- expr { [llength $::STEPS] == 1 && [llength [lindex $::STEPS 0]] == 3}
39
+ expr { [llength $::cucumber::STEPS] == 1 && [llength [lindex $::cucumber::STEPS 0]] == 3}
39
40
  }
40
41
  -result 1
41
42
  }
@@ -45,41 +46,41 @@ test Given-3 {calling Given with 3 parameters adds a new entry to the STEPS list
45
46
  #
46
47
  test _add_step-1 {calling _add_step with 2 parameters adds a new entry to the STEPS list with an empty parameters list} {
47
48
  -setup {
48
- set ::STEPS [list]
49
+ set ::cucumber::STEPS [list]
49
50
  }
50
51
  -body {
51
- _add_step {^Regular Expression$} { puts "Given RegExp" }
52
- expr { [llength $::STEPS] == 1 && [llength [lindex $::STEPS 0]] == 3}
52
+ ::cucumber::_add_step {^Regular Expression$} { puts "Given RegExp" }
53
+ expr { [llength $::cucumber::STEPS] == 1 && [llength [lindex $::cucumber::STEPS 0]] == 3}
53
54
  }
54
55
  -result 1
55
56
  }
56
57
 
57
58
  test _add_step-2 {calling _add_step twice adds 2 entries to the STEPS list} {
58
59
  -setup {
59
- set ::STEPS [list]
60
+ set ::cucumber::STEPS [list]
60
61
  }
61
62
  -body {
62
- _add_step {^Regular Expression$} { puts "Given RegExp" }
63
- _add_step {^Regular Expression 2$} { puts "Given RegExp 2" }
64
- expr { [llength $::STEPS] == 2 && [llength [lindex $::STEPS 0]] == 3}
63
+ ::cucumber::_add_step {^Regular Expression$} { puts "Given RegExp" }
64
+ ::cucumber::_add_step {^Regular Expression 2$} { puts "Given RegExp 2" }
65
+ expr { [llength $::cucumber::STEPS] == 2 && [llength [lindex $::cucumber::STEPS 0]] == 3}
65
66
  }
66
67
  -result 1
67
68
  }
68
69
 
69
70
  test _add_step-3 {calling _add_step with 3 parameters adds a new entry to the STEPS list} {
70
71
  -setup {
71
- set ::STEPS [list]
72
+ set ::cucumber::STEPS [list]
72
73
  }
73
74
  -body {
74
- _add_step {^Regular Expression (\d+)$} {match} { puts "Given RegExp $match" }
75
- expr { [llength $::STEPS] == 1 && [llength [lindex $::STEPS 0]] == 3}
75
+ ::cucumber::_add_step {^Regular Expression (\d+)$} {match} { puts "Given RegExp $match" }
76
+ expr { [llength $::cucumber::STEPS] == 1 && [llength [lindex $::cucumber::STEPS 0]] == 3}
76
77
  }
77
78
  -result 1
78
79
  }
79
80
 
80
81
  test _add_step-4 {calling _add_step with more than 3 parameters adds a new entry to the STEPS list} {
81
82
  -body {
82
- _add_step {^Match1 (\w+) Match2 (\d+) Match3 (\d+)$} {match1} {match2} {match3} { puts "Given RegExp $match" }
83
+ ::cucumber::_add_step {^Match1 (\w+) Match2 (\d+) Match3 (\d+)$} {match1} {match2} {match3} { puts "Given RegExp $match" }
83
84
  }
84
85
  -returnCodes error
85
86
  -result {The parameters for this procedure are regular_expression ?list_of_capture_variables? body}
@@ -92,12 +93,12 @@ test _add_step-4 {calling _add_step with more than 3 parameters adds a new entry
92
93
  #
93
94
  test When-1 {calling When adds a new entry to the STEPS list} {
94
95
  -setup {
95
- set ::STEPS [list]
96
+ set ::cucumber::STEPS [list]
96
97
  }
97
98
  -body {
98
99
  When {^Regular Expression$} { puts "When RegExp" }
99
- expr { [llength $::STEPS] == 1 }
100
- expr { [llength $::STEPS] == 1 && [llength [lindex $::STEPS 0]] == 3}
100
+ expr { [llength $::cucumber::STEPS] == 1 }
101
+ expr { [llength $::cucumber::STEPS] == 1 && [llength [lindex $::cucumber::STEPS 0]] == 3}
101
102
  }
102
103
  -result 1
103
104
  }
@@ -109,27 +110,11 @@ test When-1 {calling When adds a new entry to the STEPS list} {
109
110
  #
110
111
  test Then-1 {calling Then adds a new entry to the STEPS list} {
111
112
  -setup {
112
- set ::STEPS [list]
113
+ set ::cucumber::STEPS [list]
113
114
  }
114
115
  -body {
115
116
  Then {^Regular Expression$} { puts "Then RegExp" }
116
- expr { [llength $::STEPS] == 1 && [llength [lindex $::STEPS 0]] == 3}
117
- }
118
- -result 1
119
- }
120
-
121
-
122
-
123
- #
124
- # Test And
125
- #
126
- test And-1 {calling And adds a new entry to the STEPS list} {
127
- -setup {
128
- set ::STEPS [list]
129
- }
130
- -body {
131
- And {^Regular Expression$} { puts "And RegExp" }
132
- expr { [llength $::STEPS] == 1 && [llength [lindex $::STEPS 0]] == 3}
117
+ expr { [llength $::cucumber::STEPS] == 1 && [llength [lindex $::cucumber::STEPS 0]] == 3}
133
118
  }
134
119
  -result 1
135
120
  }
@@ -141,56 +126,56 @@ test And-1 {calling And adds a new entry to the STEPS list} {
141
126
  #
142
127
  test _search_steps-1 {_search_steps returns 0 if there are no existing steps} {
143
128
  -setup {
144
- set ::STEPS [list]
129
+ set ::cucumber::STEPS [list]
145
130
  }
146
131
  -body {
147
- _search_steps {Unknown Regexp}
132
+ ::cucumber::_search_steps {Unknown Regexp}
148
133
  }
149
134
  -result 0
150
135
  }
151
136
 
152
137
  test _search_steps-2 {_search_steps returns 0 if there are no matching steps} {
153
138
  -setup {
154
- set ::STEPS [list [list {^First Step$} {} {puts "First Step"}]]
139
+ set ::cucumber::STEPS [list [list {^First Step$} {} {puts "First Step"}]]
155
140
  }
156
141
  -body {
157
- _search_steps {Unknown Regexp}
142
+ ::cucumber::_search_steps {Unknown Regexp}
158
143
  }
159
144
  -result 0
160
145
  }
161
146
 
162
147
  test _search_steps-3 {_search_steps returns 1 if there is a matching step} {
163
148
  -setup {
164
- set ::STEPS [list [list {^First Step$} {} {puts "First Step"}]]
149
+ set ::cucumber::STEPS [list [list {^First Step$} {} {puts "First Step"}]]
165
150
  }
166
151
  -body {
167
- _search_steps {First Step}
152
+ ::cucumber::_search_steps {First Step}
168
153
  }
169
154
  -result 1
170
155
  }
171
156
 
172
157
  test _search_steps-4 {_search_steps returns 1 if there is a matching step with multiple values in STEPS} {
173
158
  -setup {
174
- set ::STEPS [list \
159
+ set ::cucumber::STEPS [list \
175
160
  [list {^First Step$} {} {puts "First Step"}] \
176
161
  [list {^Second Step$} {} {puts "Second Step"}] \
177
162
  ]
178
163
  }
179
164
  -body {
180
- _search_steps {Second Step}
165
+ ::cucumber::_search_steps {Second Step}
181
166
  }
182
167
  -result 1
183
168
  }
184
169
 
185
170
  test _search_steps-5 {_search_steps returns 1 and executes body of step if there is a matching step and execute is set to 1} {
186
171
  -setup {
187
- set ::STEPS [list \
172
+ set ::cucumber::STEPS [list \
188
173
  [list {^First Step$} {} {puts "First Step"}] \
189
174
  [list {^Second Step$} {} {puts "Second Step"}] \
190
175
  ]
191
176
  }
192
177
  -body {
193
- _search_steps {Second Step} {1}
178
+ ::cucumber::_search_steps {Second Step} {1}
194
179
  }
195
180
  -result 1
196
181
  -match glob
@@ -199,13 +184,13 @@ test _search_steps-5 {_search_steps returns 1 and executes body of step if there
199
184
 
200
185
  test _search_steps-6 {_search_steps returns 1 and executes body of step if there is a matching step and execute is set to 1 with a parameter in the match} {
201
186
  -setup {
202
- set ::STEPS [list \
187
+ set ::cucumber::STEPS [list \
203
188
  [list {^First Step$} {} {puts "First Step"}] \
204
189
  [list {^Second (\w+)$} {match} {puts "Second $match"}] \
205
190
  ]
206
191
  }
207
192
  -body {
208
- _search_steps {Second Step} {1}
193
+ ::cucumber::_search_steps {Second Step} {1}
209
194
  }
210
195
  -result 1
211
196
  -match glob
@@ -214,13 +199,13 @@ test _search_steps-6 {_search_steps returns 1 and executes body of step if there
214
199
 
215
200
  test _search_steps-7 {_search_steps returns 1 and executes body of step if there is a matching step and execute is set to 1 with 2 parameters in the match} {
216
201
  -setup {
217
- set ::STEPS [list \
202
+ set ::cucumber::STEPS [list \
218
203
  [list {^First Step$} {} {puts "First Step"}] \
219
204
  [list {^(\w+) (\w+)$} {match1 match2} {puts "$match1 $match2"}] \
220
205
  ]
221
206
  }
222
207
  -body {
223
- _search_steps {Second Step} {1}
208
+ ::cucumber::_search_steps {Second Step} {1}
224
209
  }
225
210
  -result 1
226
211
  -match glob
@@ -230,13 +215,13 @@ test _search_steps-7 {_search_steps returns 1 and executes body of step if there
230
215
  # Testing multiline args
231
216
  test _search_steps-8 {_search_steps returns 1 and executes body of step if there is a matching step, execute is set to 1 and there is a multiline_arg passed in} {
232
217
  -setup {
233
- set ::STEPS [list \
218
+ set ::cucumber::STEPS [list \
234
219
  [list {^First Step$} {} {puts "First Step"}] \
235
220
  [list {^Second Step:$} {content} {puts "$content"}] \
236
221
  ]
237
222
  }
238
223
  -body {
239
- _search_steps {Second Step:} {1} {Multiline Content}
224
+ ::cucumber::_search_steps {Second Step:} {1} {Multiline Content}
240
225
  }
241
226
  -result 1
242
227
  -match glob
@@ -245,19 +230,41 @@ test _search_steps-8 {_search_steps returns 1 and executes body of step if there
245
230
 
246
231
  test _search_steps-9 {_search_steps returns 1 and executes body of step if there is a matching step, execute is set to 1 and there is a multiline_arg passed in and there is a parameter match in the regexp} {
247
232
  -setup {
248
- set ::STEPS [list \
233
+ set ::cucumber::STEPS [list \
249
234
  [list {^First Step$} {} {puts "First Step"}] \
250
235
  [list {^Second (\w+):$} {match1 content} {puts "content=$content, match=$match1"}] \
251
236
  ]
252
237
  }
253
238
  -body {
254
- _search_steps {Second Step:} {1} {Multiline Content}
239
+ ::cucumber::_search_steps {Second Step:} {1} {Multiline Content}
255
240
  }
256
241
  -result 1
257
242
  -match glob
258
243
  -output {content=Multiline Content, match=Step*}
259
244
  }
260
245
 
246
+ test _search_steps-10 {_search_steps returns "pending" if there is a matching step, execute is set to 1 and the proc to be executed is pending} {
247
+ -setup {
248
+ set ::cucumber::STEPS [list \
249
+ [list {^Pending$} {} {pending}] \
250
+ ]
251
+ }
252
+ -body {
253
+ ::cucumber::_search_steps {Pending} {1} {}
254
+ }
255
+ -result "pending"
256
+ }
257
+
258
+ #
259
+ # Test Pending
260
+ #
261
+ test pending-1 {pending returns an error with the text "pending"} {
262
+ -setup {}
263
+ -body {pending}
264
+ -returnCodes error
265
+ -result {pending}
266
+ }
267
+
261
268
  #
262
269
  # Cleanup
263
270
  #
@@ -1 +1 @@
1
- 0.0.4
1
+ 0.0.5
@@ -4,13 +4,27 @@ require 'cucumber/core/test/step'
4
4
 
5
5
  module Cucumber::Tcl
6
6
  describe StepDefinitions do
7
+ let(:location) { double }
8
+ let(:test_step) {
9
+ ast_step = double(name: double, location: location, multiline_arg: Cucumber::Core::Ast::EmptyMultilineArgument.new)
10
+ Cucumber::Core::Test::Step.new([ ast_step ])
11
+ }
7
12
 
8
13
  it "can activate a passing tcl step" do
9
- step_definitions = StepDefinitions.new(File.dirname(__FILE__) + '/fixtures/everything_ok.tcl')
10
- location = double
11
- ast_step = double(name: double, location: location, multiline_arg: Cucumber::Core::Ast::EmptyMultilineArgument.new)
12
- test_step = Cucumber::Core::Test::Step.new([ ast_step ])
14
+ path = File.dirname(__FILE__) + '/fixtures/everything_ok.tcl'
15
+ tcl_framework = Framework.new(path)
16
+ step_definitions = StepDefinitions.new(tcl_framework)
13
17
  expect(step_definitions.attempt_to_activate(test_step).location).to eq location
14
18
  end
19
+
20
+ it "raises a pending error when TCL returns a pending message" do
21
+ tcl_framework = double(
22
+ step_definition_exists?: true,
23
+ execute_step_definition: "pending"
24
+ )
25
+ step_definitions = StepDefinitions.new(tcl_framework)
26
+ result = step_definitions.attempt_to_activate(test_step).execute
27
+ expect(result).to be_a Cucumber::Core::Test::Result::Pending
28
+ end
15
29
  end
16
30
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cucumber-tcl
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2015-03-02 00:00:00.000000000 Z
14
+ date: 2015-05-27 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: ruby-tcl
@@ -125,11 +125,13 @@ files:
125
125
  - features/data_tables.feature
126
126
  - features/define_a_step.feature
127
127
  - features/doc_strings.feature
128
+ - features/pending_step.feature
128
129
  - features/reset_state.feature
129
130
  - features/support/aruba.rb
130
131
  - lib/cucumber/tcl.rb
131
132
  - lib/cucumber/tcl/activate_steps.rb
132
133
  - lib/cucumber/tcl/data_table.rb
134
+ - lib/cucumber/tcl/framework.rb
133
135
  - lib/cucumber/tcl/framework.tcl
134
136
  - lib/cucumber/tcl/step_definitions.rb
135
137
  - lib/cucumber/tcl/test/test_framework.tcl
@@ -162,6 +164,6 @@ rubyforge_project:
162
164
  rubygems_version: 1.8.23
163
165
  signing_key:
164
166
  specification_version: 3
165
- summary: cucumber-tcl-0.0.4
167
+ summary: cucumber-tcl-0.0.5
166
168
  test_files: []
167
169
  has_rdoc: