cucumber 0.3.96 → 0.3.97
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +22 -3
- data/License.txt +2 -0
- data/Manifest.txt +9 -5
- data/config/hoe.rb +1 -0
- data/examples/i18n/Rakefile +5 -3
- data/examples/i18n/fi/features/yhteenlasku.feature +5 -4
- data/examples/python/features/step_definitions/fib_steps.py +3 -0
- data/examples/python/features/support/env.rb +21 -21
- data/gem_tasks/contributors.rake +8 -0
- data/gem_tasks/features.rake +1 -0
- data/gem_tasks/sdoc.rake +7 -0
- data/lib/README.rdoc +12 -0
- data/lib/cucumber/ast/background.rb +1 -1
- data/lib/cucumber/ast/comment.rb +1 -1
- data/lib/cucumber/ast/examples.rb +9 -4
- data/lib/cucumber/ast/feature.rb +1 -1
- data/lib/cucumber/ast/feature_element.rb +1 -1
- data/lib/cucumber/ast/features.rb +1 -1
- data/lib/cucumber/ast/outline_table.rb +2 -2
- data/lib/cucumber/ast/py_string.rb +1 -1
- data/lib/cucumber/ast/scenario.rb +1 -1
- data/lib/cucumber/ast/scenario_outline.rb +8 -7
- data/lib/cucumber/ast/step.rb +1 -1
- data/lib/cucumber/ast/step_collection.rb +1 -1
- data/lib/cucumber/ast/step_invocation.rb +1 -1
- data/lib/cucumber/ast/table.rb +65 -45
- data/lib/cucumber/ast/tags.rb +2 -2
- data/lib/cucumber/ast/visitor.rb +6 -8
- data/lib/cucumber/broadcaster.rb +1 -1
- data/lib/cucumber/cli/language_help_formatter.rb +1 -1
- data/lib/cucumber/cli/main.rb +15 -52
- data/lib/cucumber/constantize.rb +1 -1
- data/lib/cucumber/core_ext/exception.rb +1 -1
- data/lib/cucumber/core_ext/instance_exec.rb +8 -3
- data/lib/cucumber/core_ext/proc.rb +1 -1
- data/lib/cucumber/core_ext/string.rb +1 -1
- data/lib/cucumber/feature_file.rb +4 -3
- data/lib/cucumber/filter.rb +2 -1
- data/lib/cucumber/formatter/ansicolor.rb +6 -5
- data/lib/cucumber/formatter/color_io.rb +2 -2
- data/lib/cucumber/formatter/console.rb +2 -0
- data/lib/cucumber/formatter/duration.rb +3 -0
- data/lib/cucumber/formatter/html.rb +1 -0
- data/lib/cucumber/formatter/junit.rb +1 -0
- data/lib/cucumber/formatter/ordered_xml_markup.rb +1 -1
- data/lib/cucumber/formatter/pretty.rb +18 -4
- data/lib/cucumber/formatter/profile.rb +1 -0
- data/lib/cucumber/formatter/progress.rb +1 -0
- data/lib/cucumber/formatter/rerun.rb +2 -0
- data/lib/cucumber/formatter/steps.rb +1 -0
- data/lib/cucumber/formatter/tag_cloud.rb +2 -1
- data/lib/cucumber/formatter/unicode.rb +1 -1
- data/lib/cucumber/formatter/usage.rb +1 -0
- data/lib/cucumber/language_support.rb +30 -0
- data/lib/cucumber/language_support/language_methods.rb +34 -12
- data/lib/cucumber/parser/feature.rb +81 -57
- data/lib/cucumber/parser/feature.tt +3 -3
- data/lib/cucumber/parser/natural_language.rb +1 -1
- data/lib/cucumber/parser/table.rb +3 -0
- data/lib/cucumber/parser/treetop_ext.rb +6 -5
- data/lib/cucumber/platform.rb +1 -2
- data/lib/cucumber/py_support/py_dsl.py +8 -0
- data/lib/cucumber/py_support/py_language.py +2 -0
- data/lib/cucumber/py_support/py_language.rb +68 -0
- data/lib/cucumber/rails/world.rb +2 -1
- data/lib/cucumber/rake/task.rb +13 -11
- data/lib/cucumber/rb_support/rb_dsl.rb +27 -15
- data/lib/cucumber/rb_support/rb_hook.rb +1 -2
- data/lib/cucumber/rb_support/rb_language.rb +57 -33
- data/lib/cucumber/rb_support/rb_step_definition.rb +42 -38
- data/lib/cucumber/rb_support/rb_world.rb +93 -0
- data/lib/cucumber/rspec_neuter.rb +3 -3
- data/lib/cucumber/step_match.rb +2 -2
- data/lib/cucumber/step_mother.rb +91 -65
- data/lib/cucumber/version.rb +1 -1
- data/lib/cucumber/webrat/element_locator.rb +3 -3
- data/rails_generators/cucumber/templates/cucumber.rake +2 -0
- data/rails_generators/cucumber/templates/webrat_steps.rb +4 -0
- data/spec/cucumber/ast/background_spec.rb +8 -1
- data/spec/cucumber/ast/scenario_outline_spec.rb +1 -0
- data/spec/cucumber/ast/table_spec.rb +10 -0
- data/spec/cucumber/cli/options_spec.rb +1 -1
- data/spec/cucumber/parser/feature_parser_spec.rb +4 -0
- data/spec/cucumber/rb_support/rb_step_definition_spec.rb +114 -0
- data/spec/cucumber/step_mother_spec.rb +29 -10
- data/spec/cucumber/treetop_parser/with_comments.feature +14 -1
- data/spec/cucumber/world/pending_spec.rb +1 -1
- metadata +21 -7
- data/gem_tasks/yard.rake +0 -8
- data/lib/cucumber/language_support/hook_methods.rb +0 -9
- data/lib/cucumber/world.rb +0 -89
- data/spec/cucumber/ast/visitor_spec.rb +0 -27
- data/spec/cucumber/step_definition_spec.rb +0 -102
@@ -0,0 +1,93 @@
|
|
1
|
+
module Cucumber
|
2
|
+
module RbSupport
|
3
|
+
# All steps are run in the context of an object that extends this module.
|
4
|
+
module RbWorld
|
5
|
+
class << self
|
6
|
+
def alias_adverb(adverb)
|
7
|
+
alias_method adverb, :__cucumber_invoke
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
attr_writer :__cucumber_step_mother
|
12
|
+
|
13
|
+
# Call a step from within a step definition. This method is aliased to
|
14
|
+
# the same i18n as RbDsl.
|
15
|
+
def __cucumber_invoke(name, multiline_argument=nil) #:nodoc:
|
16
|
+
begin
|
17
|
+
step_match = @__cucumber_step_mother.step_match(name)
|
18
|
+
step_match.invoke(multiline_argument)
|
19
|
+
rescue Exception => e
|
20
|
+
e.nested! if Undefined === e
|
21
|
+
raise e
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
# Returns a Cucumber::Ast::Table for +text_or_table+, which can either
|
26
|
+
# be a String:
|
27
|
+
#
|
28
|
+
# table(%{
|
29
|
+
# | account | description | amount |
|
30
|
+
# | INT-100 | Taxi | 114 |
|
31
|
+
# | CUC-101 | Peeler | 22 |
|
32
|
+
# })
|
33
|
+
#
|
34
|
+
# or a 2D Array:
|
35
|
+
#
|
36
|
+
# table([
|
37
|
+
# %w{ account description amount },
|
38
|
+
# %w{ INT-100 Taxi 114 },
|
39
|
+
# %w{ CUC-101 Peeler 22 }
|
40
|
+
# ])
|
41
|
+
#
|
42
|
+
def table(text_or_table, file=nil, line_offset=0)
|
43
|
+
if Array === text_or_table
|
44
|
+
Ast::Table.new(text_or_table)
|
45
|
+
else
|
46
|
+
@table_parser ||= Parser::TableParser.new
|
47
|
+
@table_parser.parse_or_fail(text_or_table.strip, file, line_offset)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
# Output +announcement+ alongside the formatted output.
|
52
|
+
# This is an alternative to using Kernel#puts - it will display
|
53
|
+
# nicer, and in all outputs (in case you use several formatters)
|
54
|
+
#
|
55
|
+
# Beware that the output will be printed *before* the corresponding
|
56
|
+
# step. This is because the step itself will not be printed until
|
57
|
+
# after it has run, so it can be coloured according to its status.
|
58
|
+
def announce(announcement)
|
59
|
+
@__cucumber_step_mother.announce(announcement)
|
60
|
+
end
|
61
|
+
|
62
|
+
# Mark the matched step as pending.
|
63
|
+
def pending(message = "TODO")
|
64
|
+
if block_given?
|
65
|
+
begin
|
66
|
+
yield
|
67
|
+
rescue Exception => e
|
68
|
+
raise Pending.new(message)
|
69
|
+
end
|
70
|
+
raise Pending.new("Expected pending '#{message}' to fail. No Error was raised. No longer pending?")
|
71
|
+
else
|
72
|
+
raise Pending.new(message)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
# The default implementation of Object#inspect recursively
|
77
|
+
# traverses all instance variables and invokes inspect.
|
78
|
+
# This can be time consuming if the object graph is large.
|
79
|
+
#
|
80
|
+
# This can cause unnecessary delays when certain exceptions
|
81
|
+
# occur. For example, MRI internally invokes #inspect on an
|
82
|
+
# object that raises a NoMethodError. (JRuby does not do this).
|
83
|
+
#
|
84
|
+
# A World object can have many references created by the user
|
85
|
+
# or frameworks (Rails), so to avoid long waiting times on
|
86
|
+
# such errors in World we define it to just return a simple String.
|
87
|
+
#
|
88
|
+
def inspect #:nodoc:
|
89
|
+
sprintf("#<%s:0x%x>", self.class, self.object_id)
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
@@ -1,11 +1,11 @@
|
|
1
1
|
require 'optparse'
|
2
2
|
|
3
|
-
module Spec
|
4
|
-
module Runner
|
3
|
+
module Spec #:nodoc:
|
4
|
+
module Runner #:nodoc:
|
5
5
|
# Neuters RSpec's option parser.
|
6
6
|
# (RSpec's option parser tries to parse ARGV, which
|
7
7
|
# will fail when running cucumber)
|
8
|
-
class OptionParser < ::OptionParser
|
8
|
+
class OptionParser < ::OptionParser #:nodoc:
|
9
9
|
NEUTERED_RSPEC = Object.new
|
10
10
|
def NEUTERED_RSPEC.method_missing(m, *args); self; end
|
11
11
|
|
data/lib/cucumber/step_match.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
module Cucumber
|
2
|
-
class StepMatch
|
2
|
+
class StepMatch #:nodoc:
|
3
3
|
attr_reader :step_definition, :args
|
4
4
|
|
5
5
|
def initialize(step_definition, step_name, formatted_step_name, args)
|
@@ -33,7 +33,7 @@ module Cucumber
|
|
33
33
|
end
|
34
34
|
end
|
35
35
|
|
36
|
-
class NoStepMatch
|
36
|
+
class NoStepMatch #:nodoc:
|
37
37
|
attr_reader :step_definition, :name
|
38
38
|
|
39
39
|
def initialize(step, name)
|
data/lib/cucumber/step_mother.rb
CHANGED
@@ -1,12 +1,12 @@
|
|
1
|
+
require 'logger'
|
1
2
|
require 'cucumber/constantize'
|
2
|
-
require 'cucumber/world'
|
3
3
|
require 'cucumber/core_ext/instance_exec'
|
4
4
|
require 'cucumber/parser/natural_language'
|
5
|
-
require 'cucumber/language_support/hook_methods'
|
6
5
|
require 'cucumber/language_support/language_methods'
|
7
6
|
require 'cucumber/language_support/step_definition_methods'
|
8
7
|
|
9
8
|
module Cucumber
|
9
|
+
# Raised when there is no matching StepDefinition for a step.
|
10
10
|
class Undefined < StandardError
|
11
11
|
attr_reader :step_name
|
12
12
|
|
@@ -28,7 +28,7 @@ module Cucumber
|
|
28
28
|
class Pending < StandardError
|
29
29
|
end
|
30
30
|
|
31
|
-
# Raised when a step matches 2 or more
|
31
|
+
# Raised when a step matches 2 or more StepDefinitions
|
32
32
|
class Ambiguous < StandardError
|
33
33
|
def initialize(step_name, step_definitions, used_guess)
|
34
34
|
message = "Ambiguous match of \"#{step_name}\":\n\n"
|
@@ -49,27 +49,61 @@ module Cucumber
|
|
49
49
|
end
|
50
50
|
end
|
51
51
|
|
52
|
-
# This is the
|
53
|
-
# from <tt>*_steps.rb</tt> files. This module is included right at the top-level
|
54
|
-
# so #register_step_definition (and more interestingly - its aliases) are
|
55
|
-
# available from the top-level.
|
52
|
+
# This is the meaty part of Cucumber that ties everything together.
|
56
53
|
class StepMother
|
57
54
|
include Constantize
|
58
55
|
|
59
|
-
attr_writer :options, :visitor
|
56
|
+
attr_writer :options, :visitor, :log
|
60
57
|
|
61
58
|
def initialize
|
59
|
+
@unsupported_programming_languages = []
|
62
60
|
@programming_languages = []
|
63
61
|
@language_map = {}
|
64
62
|
load_natural_language('en')
|
65
63
|
end
|
66
64
|
|
65
|
+
def load_plain_text_features(feature_files)
|
66
|
+
features = Ast::Features.new
|
67
|
+
|
68
|
+
log.debug("Features:\n")
|
69
|
+
feature_files.each do |f|
|
70
|
+
feature_file = FeatureFile.new(f)
|
71
|
+
feature = feature_file.parse(self, options)
|
72
|
+
if feature
|
73
|
+
features.add_feature(feature)
|
74
|
+
log.debug(" * #{f}\n")
|
75
|
+
end
|
76
|
+
end
|
77
|
+
log.debug("\n")
|
78
|
+
features
|
79
|
+
end
|
80
|
+
|
81
|
+
def load_code_files(step_def_files)
|
82
|
+
log.debug("Code:\n")
|
83
|
+
step_def_files.each do |step_def_file|
|
84
|
+
load_code_file(step_def_file)
|
85
|
+
end
|
86
|
+
log.debug("\n")
|
87
|
+
end
|
88
|
+
|
89
|
+
def load_code_file(step_def_file)
|
90
|
+
if programming_language = programming_language_for(step_def_file)
|
91
|
+
log.debug(" * #{step_def_file}\n")
|
92
|
+
step_definitions = programming_language.step_definitions_for(step_def_file)
|
93
|
+
register_step_definitions(step_definitions)
|
94
|
+
else
|
95
|
+
log.debug(" * #{step_def_file} [NOT SUPPORTED]\n")
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
def register_step_definitions(step_definitions)
|
100
|
+
step_definitions.each{|step_definition| register_step_definition(step_definition)}
|
101
|
+
end
|
102
|
+
|
67
103
|
# Loads and registers programming language implementation.
|
68
104
|
# Instances are cached, so calling with the same argument
|
69
105
|
# twice will return the same instance.
|
70
106
|
#
|
71
|
-
# Raises an exception if the language can't be loaded.
|
72
|
-
#
|
73
107
|
def load_programming_language(ext)
|
74
108
|
return @language_map[ext] if @language_map[ext]
|
75
109
|
programming_language_class = constantize("Cucumber::#{ext.capitalize}Support::#{ext.capitalize}Language")
|
@@ -88,26 +122,16 @@ module Cucumber
|
|
88
122
|
Parser::NaturalLanguage.get(self, lang)
|
89
123
|
end
|
90
124
|
|
91
|
-
#
|
92
|
-
# or any other kind of object that implements the StepDefintion
|
93
|
-
# contract (API).
|
94
|
-
def register_step_definition(step_definition)
|
95
|
-
step_definitions.each do |already|
|
96
|
-
raise Redundant.new(already, step_definition) if already.same_regexp?(step_definition.regexp)
|
97
|
-
end
|
98
|
-
step_definitions << step_definition
|
99
|
-
step_definition
|
100
|
-
end
|
101
|
-
|
125
|
+
# Returns the options passed on the command line.
|
102
126
|
def options
|
103
127
|
@options ||= {}
|
104
128
|
end
|
105
129
|
|
106
|
-
def step_visited(step)
|
130
|
+
def step_visited(step) #:nodoc:
|
107
131
|
steps << step unless steps.index(step)
|
108
132
|
end
|
109
|
-
|
110
|
-
def steps(status = nil)
|
133
|
+
|
134
|
+
def steps(status = nil) #:nodoc:
|
111
135
|
@steps ||= []
|
112
136
|
if(status)
|
113
137
|
@steps.select{|step| step.status == status}
|
@@ -116,11 +140,11 @@ module Cucumber
|
|
116
140
|
end
|
117
141
|
end
|
118
142
|
|
119
|
-
def announce(msg)
|
143
|
+
def announce(msg) #:nodoc:
|
120
144
|
@visitor.announce(msg)
|
121
145
|
end
|
122
146
|
|
123
|
-
def scenarios(status = nil)
|
147
|
+
def scenarios(status = nil) #:nodoc:
|
124
148
|
@scenarios ||= []
|
125
149
|
if(status)
|
126
150
|
@scenarios.select{|scenario| scenario.status == status}
|
@@ -129,20 +153,7 @@ module Cucumber
|
|
129
153
|
end
|
130
154
|
end
|
131
155
|
|
132
|
-
def
|
133
|
-
hooks[phase.to_sym] << hook
|
134
|
-
hook
|
135
|
-
end
|
136
|
-
|
137
|
-
def hooks
|
138
|
-
@hooks ||= Hash.new {|hash, phase| hash[phase] = []}
|
139
|
-
end
|
140
|
-
|
141
|
-
def hooks_for(phase, scenario)
|
142
|
-
hooks[phase.to_sym].select{|hook| scenario.accept_hook?(hook)}
|
143
|
-
end
|
144
|
-
|
145
|
-
def step_match(step_name, formatted_step_name=nil)
|
156
|
+
def step_match(step_name, formatted_step_name=nil) #:nodoc:
|
146
157
|
matches = step_definitions.map { |d| d.step_match(step_name, formatted_step_name) }.compact
|
147
158
|
raise Undefined.new(step_name) if matches.empty?
|
148
159
|
matches = best_matches(step_name, matches) if matches.size > 1 && options[:guess]
|
@@ -150,7 +161,7 @@ module Cucumber
|
|
150
161
|
matches[0]
|
151
162
|
end
|
152
163
|
|
153
|
-
def best_matches(step_name, step_matches)
|
164
|
+
def best_matches(step_name, step_matches) #:nodoc:
|
154
165
|
no_groups = step_matches.select {|step_match| step_match.args.length == 0}
|
155
166
|
max_arg_length = step_matches.map {|step_match| step_match.args.length }.max
|
156
167
|
top_groups = step_matches.select {|step_match| step_match.args.length == max_arg_length }
|
@@ -166,31 +177,31 @@ module Cucumber
|
|
166
177
|
end
|
167
178
|
end
|
168
179
|
|
169
|
-
def clear!
|
180
|
+
def clear! #:nodoc:
|
170
181
|
step_definitions.clear
|
171
182
|
hooks.clear
|
172
183
|
steps.clear
|
173
184
|
scenarios.clear
|
174
185
|
end
|
175
186
|
|
176
|
-
def step_definitions
|
187
|
+
def step_definitions #:nodoc:
|
177
188
|
@step_definitions ||= []
|
178
189
|
end
|
179
190
|
|
180
|
-
def snippet_text(step_keyword, step_name, multiline_arg_class)
|
191
|
+
def snippet_text(step_keyword, step_name, multiline_arg_class) #:nodoc:
|
181
192
|
@programming_languages.map do |programming_language|
|
182
193
|
programming_language.snippet_text(step_keyword, step_name, multiline_arg_class)
|
183
194
|
end.join("\n")
|
184
195
|
end
|
185
196
|
|
186
|
-
def before_and_after(scenario, skip_hooks=false)
|
197
|
+
def before_and_after(scenario, skip_hooks=false) #:nodoc:
|
187
198
|
before(scenario) unless skip_hooks
|
188
199
|
yield scenario
|
189
200
|
after(scenario) unless skip_hooks
|
190
201
|
scenario_visited(scenario)
|
191
202
|
end
|
192
203
|
|
193
|
-
def register_adverbs(adverbs)
|
204
|
+
def register_adverbs(adverbs) #:nodoc:
|
194
205
|
@adverbs ||= []
|
195
206
|
@adverbs += adverbs
|
196
207
|
@adverbs.uniq!
|
@@ -198,22 +209,8 @@ module Cucumber
|
|
198
209
|
programming_language.alias_adverbs(@adverbs)
|
199
210
|
end
|
200
211
|
end
|
201
|
-
|
202
|
-
def begin_scenario
|
203
|
-
return if options[:dry_run]
|
204
|
-
@programming_languages.each do |programming_language|
|
205
|
-
programming_language.begin_scenario
|
206
|
-
end
|
207
|
-
end
|
208
|
-
|
209
|
-
def end_scenario
|
210
|
-
return if options[:dry_run]
|
211
|
-
@programming_languages.each do |programming_language|
|
212
|
-
programming_language.end_scenario
|
213
|
-
end
|
214
|
-
end
|
215
212
|
|
216
|
-
def before(scenario)
|
213
|
+
def before(scenario) #:nodoc:
|
217
214
|
return if options[:dry_run] || @current_scenario
|
218
215
|
@current_scenario = scenario
|
219
216
|
@programming_languages.each do |programming_language|
|
@@ -221,7 +218,7 @@ module Cucumber
|
|
221
218
|
end
|
222
219
|
end
|
223
220
|
|
224
|
-
def after(scenario)
|
221
|
+
def after(scenario) #:nodoc:
|
225
222
|
@current_scenario = nil
|
226
223
|
return if options[:dry_run]
|
227
224
|
@programming_languages.each do |programming_language|
|
@@ -229,7 +226,7 @@ module Cucumber
|
|
229
226
|
end
|
230
227
|
end
|
231
228
|
|
232
|
-
def after_step
|
229
|
+
def after_step #:nodoc:
|
233
230
|
return if options[:dry_run]
|
234
231
|
@programming_languages.each do |programming_language|
|
235
232
|
programming_language.execute_after_step(@current_scenario)
|
@@ -238,12 +235,41 @@ module Cucumber
|
|
238
235
|
|
239
236
|
private
|
240
237
|
|
241
|
-
|
238
|
+
# Registers a StepDefinition. This can be a Ruby StepDefintion,
|
239
|
+
# or any other kind of object that implements the StepDefintion
|
240
|
+
# contract (API).
|
241
|
+
def register_step_definition(step_definition)
|
242
|
+
step_definitions.each do |already|
|
243
|
+
raise Redundant.new(already, step_definition) if already.same_regexp?(step_definition.regexp)
|
244
|
+
end
|
245
|
+
step_definitions << step_definition
|
246
|
+
step_definition
|
247
|
+
end
|
248
|
+
|
249
|
+
def programming_language_for(step_def_file) #:nodoc:
|
250
|
+
if ext = File.extname(step_def_file)[1..-1]
|
251
|
+
return nil if @unsupported_programming_languages.index(ext)
|
252
|
+
begin
|
253
|
+
load_programming_language(ext)
|
254
|
+
rescue LoadError
|
255
|
+
@unsupported_programming_languages << ext
|
256
|
+
nil
|
257
|
+
end
|
258
|
+
else
|
259
|
+
nil
|
260
|
+
end
|
261
|
+
end
|
262
|
+
|
263
|
+
def max_step_definition_length #:nodoc:
|
242
264
|
@max_step_definition_length ||= step_definitions.map{|step_definition| step_definition.text_length}.max
|
243
265
|
end
|
244
266
|
|
245
|
-
def scenario_visited(scenario)
|
267
|
+
def scenario_visited(scenario) #:nodoc:
|
246
268
|
scenarios << scenario unless scenarios.index(scenario)
|
247
269
|
end
|
270
|
+
|
271
|
+
def log
|
272
|
+
@log ||= Logger.new(STDOUT)
|
273
|
+
end
|
248
274
|
end
|
249
275
|
end
|
data/lib/cucumber/version.rb
CHANGED
@@ -55,7 +55,7 @@ module Webrat
|
|
55
55
|
end
|
56
56
|
|
57
57
|
module Locators
|
58
|
-
class ElementLocator < Locator
|
58
|
+
class ElementLocator < Locator #:nodoc:
|
59
59
|
def locate
|
60
60
|
Element.load(@session, table_element)
|
61
61
|
end
|
@@ -77,11 +77,11 @@ module Webrat
|
|
77
77
|
alias table_at element_at # Backwards compatibility with Cucumber
|
78
78
|
end
|
79
79
|
|
80
|
-
module Methods
|
80
|
+
module Methods #:nodoc:
|
81
81
|
delegate_to_session :element_at, :table_at
|
82
82
|
end
|
83
83
|
|
84
|
-
class Session
|
84
|
+
class Session #:nodoc:
|
85
85
|
def_delegators :current_scope, :element_at, :table_at
|
86
86
|
end
|
87
87
|
end
|