lucid 0.4.1 → 0.5.1
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.
- checksums.yaml +4 -4
- data/Gemfile +0 -3
- data/HISTORY.md +12 -0
- data/LICENSE +0 -3
- data/README.md +7 -5
- data/Rakefile +0 -14
- data/lib/lucid.rb +4 -0
- data/lib/lucid/cli/app.rb +1 -5
- data/lib/lucid/cli/context.rb +8 -6
- data/lib/lucid/cli/profile.rb +9 -9
- data/lib/lucid/context.rb +1 -1
- data/lib/lucid/interface_rb/matcher.rb +1 -2
- data/lib/lucid/platform.rb +2 -1
- data/lucid.gemspec +12 -12
- data/spec/lucid/lucid_spec.rb +7 -0
- data/spec/spec_helper.rb +0 -19
- metadata +34 -116
- data/.travis.yml +0 -15
- data/lib/lucid/sequence.rb +0 -5
- data/lib/lucid/sequence/sequence_errors.rb +0 -64
- data/lib/lucid/sequence/sequence_group.rb +0 -35
- data/lib/lucid/sequence/sequence_phrase.rb +0 -166
- data/lib/lucid/sequence/sequence_steps.rb +0 -20
- data/lib/lucid/sequence/sequence_support.rb +0 -26
- data/lib/lucid/sequence/sequence_template.rb +0 -354
- data/spec/lucid/ansicolor_spec.rb +0 -31
- data/spec/lucid/app_spec.rb +0 -82
- data/spec/lucid/ast/background_spec.rb +0 -128
- data/spec/lucid/ast/doc_string_spec.rb +0 -36
- data/spec/lucid/ast/feature_spec.rb +0 -66
- data/spec/lucid/ast/outline_table_spec.rb +0 -21
- data/spec/lucid/ast/scenario_outline_spec.rb +0 -81
- data/spec/lucid/ast/specs_spec.rb +0 -48
- data/spec/lucid/ast/step_invocation_spec.rb +0 -45
- data/spec/lucid/ast/step_spec.rb +0 -72
- data/spec/lucid/ast/table_spec.rb +0 -265
- data/spec/lucid/ast/tdl_factory.rb +0 -78
- data/spec/lucid/ast/tdl_walker_spec.rb +0 -21
- data/spec/lucid/context_spec.rb +0 -328
- data/spec/lucid/duration_spec.rb +0 -22
- data/spec/lucid/facade_spec.rb +0 -31
- data/spec/lucid/factory_spec.rb +0 -16
- data/spec/lucid/matcher_spec.rb +0 -127
- data/spec/lucid/options_spec.rb +0 -346
- data/spec/lucid/orchestrator_spec.rb +0 -117
- data/spec/lucid/pending_spec.rb +0 -45
- data/spec/lucid/progress_spec.rb +0 -34
- data/spec/lucid/rb_step_definition_spec.rb +0 -127
- data/spec/lucid/rb_transform_spec.rb +0 -24
- data/spec/lucid/regexp_argument_matcher_spec.rb +0 -19
- data/spec/lucid/results_spec.rb +0 -81
- data/spec/lucid/runtime_spec.rb +0 -38
- data/spec/lucid/sequences/sequence_conditional_spec.rb +0 -74
- data/spec/lucid/sequences/sequence_group_spec.rb +0 -55
- data/spec/lucid/sequences/sequence_phrase_spec.rb +0 -122
- data/spec/lucid/sequences/sequence_placeholder_spec.rb +0 -56
- data/spec/lucid/sequences/sequence_section_spec.rb +0 -61
- data/spec/lucid/sequences/sequence_support_spec.rb +0 -65
- data/spec/lucid/sequences/sequence_template_spec.rb +0 -298
- data/spec/lucid/step_match_spec.rb +0 -55
@@ -1,21 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
module Lucid::AST
|
4
|
-
|
5
|
-
describe Walker do
|
6
|
-
let(:tdl_walker) do
|
7
|
-
Walker.new(nil, [double('listener', :before_visit_features => nil)])
|
8
|
-
end
|
9
|
-
let(:features) { double('features', :accept => nil) }
|
10
|
-
|
11
|
-
it 'should visit features' do
|
12
|
-
tdl_walker.should_not_receive(:warn)
|
13
|
-
tdl_walker.visit_features(features)
|
14
|
-
end
|
15
|
-
|
16
|
-
it 'should return self' do
|
17
|
-
tdl_walker.visit_features(features).should == tdl_walker
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
end
|
data/spec/lucid/context_spec.rb
DELETED
@@ -1,328 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
module Lucid
|
4
|
-
describe Context do
|
5
|
-
describe '.default' do
|
6
|
-
subject { Context.default }
|
7
|
-
|
8
|
-
it 'has an autoload_code_paths containing default Lucid folders' do
|
9
|
-
subject.autoload_code_paths.should include 'common'
|
10
|
-
subject.autoload_code_paths.should include 'steps'
|
11
|
-
subject.autoload_code_paths.should include 'pages'
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
describe 'supports custom user options' do
|
16
|
-
let(:user_options) { { :autoload_code_paths => ['library/common'] } }
|
17
|
-
subject { Context.new(user_options) }
|
18
|
-
|
19
|
-
it 'should allow the defaults to be overridden' do
|
20
|
-
subject.autoload_code_paths.should == ['library/common']
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
module CLI
|
26
|
-
describe Context do
|
27
|
-
|
28
|
-
attr_reader :out, :error
|
29
|
-
|
30
|
-
module ExposeOptions
|
31
|
-
attr_reader :options
|
32
|
-
end
|
33
|
-
|
34
|
-
def config
|
35
|
-
@config ||= Context.new(@out = StringIO.new, @error = StringIO.new).extend(ExposeOptions)
|
36
|
-
end
|
37
|
-
|
38
|
-
def with_these_files(*files)
|
39
|
-
File.stub(:directory?).and_return(true)
|
40
|
-
File.stub(:file?).and_return(true)
|
41
|
-
Dir.stub(:[]).and_return(files)
|
42
|
-
end
|
43
|
-
|
44
|
-
def with_this_configuration(info)
|
45
|
-
Dir.stub(:glob).with('{,.config/,config/}lucid{.yml,.yaml}').and_return(['lucid.yml'])
|
46
|
-
File.stub(:exist?).and_return(true)
|
47
|
-
profile_file = info.is_a?(Hash) ? info.to_yaml : info
|
48
|
-
IO.stub(:read).with('lucid.yml').and_return(profile_file)
|
49
|
-
end
|
50
|
-
|
51
|
-
it 'should require driver.rb files first' do
|
52
|
-
with_these_files('/common/support/browser.rb', '/common/support/driver.rb')
|
53
|
-
config.parse_options(%w{--require /common})
|
54
|
-
|
55
|
-
config.library_context.should == %w(
|
56
|
-
/common/support/driver.rb
|
57
|
-
/common/support/browser.rb
|
58
|
-
)
|
59
|
-
end
|
60
|
-
|
61
|
-
it 'should not require driver.rb files when a dry run is attempted' do
|
62
|
-
with_these_files('/common/support/browser.rb', '/common/support/driver.rb')
|
63
|
-
config.parse_options(%w{--require /common --dry-run})
|
64
|
-
|
65
|
-
config.library_context.should == %w(
|
66
|
-
/common/support/browser.rb
|
67
|
-
)
|
68
|
-
end
|
69
|
-
|
70
|
-
it 'should require files in default definition locations' do
|
71
|
-
with_these_files('/pages/page.rb', '/steps/steps.rb')
|
72
|
-
config.parse_options(%w{--require /specs})
|
73
|
-
|
74
|
-
config.definition_context.should == %w(
|
75
|
-
/pages/page.rb
|
76
|
-
/steps/steps.rb
|
77
|
-
)
|
78
|
-
end
|
79
|
-
|
80
|
-
it 'should default to a specs directory when no information is provided' do
|
81
|
-
File.stub(:directory?).and_return(true)
|
82
|
-
Dir.stub(:[]).with('specs/**/*.spec').and_return(['lucid.spec'])
|
83
|
-
Dir.stub(:[]).with('specs/**/*.feature').and_return(['lucid.spec'])
|
84
|
-
Dir.stub(:[]).with('specs/**/*.story').and_return(['lucid.spec'])
|
85
|
-
config.parse_options(%w{})
|
86
|
-
config.spec_context.should == ['lucid.spec']
|
87
|
-
end
|
88
|
-
|
89
|
-
it 'should search for all specs in the specified directory' do
|
90
|
-
File.stub(:directory?).and_return(true)
|
91
|
-
Dir.stub(:[]).with('specs/**/*.spec').and_return(['lucid.spec'])
|
92
|
-
Dir.stub(:[]).with('specs/**/*.feature').and_return(['lucid.spec'])
|
93
|
-
Dir.stub(:[]).with('specs/**/*.story').and_return(['lucid.spec'])
|
94
|
-
config.parse_options(%w{specs/})
|
95
|
-
config.spec_context.should == ['lucid.spec']
|
96
|
-
end
|
97
|
-
|
98
|
-
it 'should return the correct spec file type for feature file' do
|
99
|
-
File.stub(:directory?).and_return(true)
|
100
|
-
Dir.stub(:[]).with('specs/**/*.spec').and_return(['lucid.feature'])
|
101
|
-
Dir.stub(:[]).with('specs/**/*.feature').and_return(['lucid.feature'])
|
102
|
-
Dir.stub(:[]).with('specs/**/*.story').and_return(['lucid.feature'])
|
103
|
-
config.parse_options(%w{specs/})
|
104
|
-
config.spec_context.should == ['lucid.feature']
|
105
|
-
end
|
106
|
-
|
107
|
-
it 'should return the correct spec file type for story file' do
|
108
|
-
File.stub(:directory?).and_return(true)
|
109
|
-
Dir.stub(:[]).with('specs/**/*.spec').and_return(['lucid.story'])
|
110
|
-
Dir.stub(:[]).with('specs/**/*.feature').and_return(['lucid.story'])
|
111
|
-
Dir.stub(:[]).with('specs/**/*.story').and_return(['lucid.story'])
|
112
|
-
config.parse_options(%w{specs/})
|
113
|
-
config.spec_context.should == ['lucid.story']
|
114
|
-
end
|
115
|
-
|
116
|
-
it 'should preserve the order of the spec files' do
|
117
|
-
config.parse_options(%w{test_b.spec test_c.spec test_a.spec})
|
118
|
-
config.spec_context.should == %w[test_b.spec test_c.spec test_a.spec]
|
119
|
-
end
|
120
|
-
|
121
|
-
it 'should be able to exclude files based on a specific reference' do
|
122
|
-
with_these_files('/common/support/browser.rb', '/common/support/driver.rb')
|
123
|
-
config.parse_options(%w{--require /common --exclude browser.rb})
|
124
|
-
|
125
|
-
config.spec_requires.should == %w(
|
126
|
-
/common/support/driver.rb
|
127
|
-
)
|
128
|
-
end
|
129
|
-
|
130
|
-
it 'should be able to exclude files based on a general pattern' do
|
131
|
-
with_these_files('/steps/tester.rb', '/steps/tested.rb', '/steps/testing.rb', '/steps/quality.rb')
|
132
|
-
config.parse_options(%w{--require /steps --exclude test(er|ed) --exclude quality})
|
133
|
-
|
134
|
-
config.spec_requires.should == %w(
|
135
|
-
/steps/testing.rb
|
136
|
-
)
|
137
|
-
end
|
138
|
-
|
139
|
-
it 'should allow specifying environment variables on the command line' do
|
140
|
-
config.parse_options(['test=this'])
|
141
|
-
ENV['test'].should == 'this'
|
142
|
-
config.spec_context.should_not include('test=this')
|
143
|
-
end
|
144
|
-
|
145
|
-
it 'should be able to use a --dry-run option' do
|
146
|
-
config.parse_options(%w{--dry-run})
|
147
|
-
config.options[:dry_run].should be_true
|
148
|
-
end
|
149
|
-
|
150
|
-
it 'should be able to use a --no-source option' do
|
151
|
-
config.parse_options(%w{--no-source})
|
152
|
-
config.options[:source].should be_false
|
153
|
-
end
|
154
|
-
|
155
|
-
it 'should be able to use a --no-matchers option' do
|
156
|
-
config.parse_options(%w{--no-matchers})
|
157
|
-
config.options[:matchers].should be_false
|
158
|
-
end
|
159
|
-
|
160
|
-
it 'should be able to use a --quiet option' do
|
161
|
-
config.parse_options(%w{--quiet})
|
162
|
-
config.options[:source].should be_false
|
163
|
-
config.options[:matchers].should be_false
|
164
|
-
end
|
165
|
-
|
166
|
-
it 'should be able to use a --verbose option' do
|
167
|
-
config.parse_options(%w{--verbose})
|
168
|
-
config.options[:verbose].should be_true
|
169
|
-
end
|
170
|
-
|
171
|
-
it 'uses the default profile when no profile is defined' do
|
172
|
-
with_this_configuration({'default' => '--require test_file'})
|
173
|
-
config.parse_options(%w{--format progress})
|
174
|
-
config.options[:require].should include('test_file')
|
175
|
-
end
|
176
|
-
|
177
|
-
describe 'generating output' do
|
178
|
-
|
179
|
-
it 'should be able to use an --out option' do
|
180
|
-
config.parse_options(%w{--out report.txt})
|
181
|
-
config.formats.should == [%w(standard report.txt)]
|
182
|
-
end
|
183
|
-
|
184
|
-
it 'should be able to use multiple --out options' do
|
185
|
-
config.parse_options(%w{--format standard --out report1.txt --out report2.txt})
|
186
|
-
config.formats.should == [%w(standard report2.txt)]
|
187
|
-
end
|
188
|
-
|
189
|
-
end
|
190
|
-
|
191
|
-
it 'should be able to use a --color option' do
|
192
|
-
Lucid::Term::ANSIColor.should_receive(:coloring=).with(true)
|
193
|
-
config.parse_options(['--color'])
|
194
|
-
end
|
195
|
-
|
196
|
-
it 'should accept --no-color option' do
|
197
|
-
Lucid::Term::ANSIColor.should_receive(:coloring=).with(false)
|
198
|
-
config = Context.new(StringIO.new)
|
199
|
-
config.parse_options(['--no-color'])
|
200
|
-
end
|
201
|
-
|
202
|
-
it 'should accept multiple --format options and put the STDOUT one first so progress is seen' do
|
203
|
-
config.parse_options(%w{--format standard --out output.txt --format progress})
|
204
|
-
config.formats.should == [['progress', out], ['standard', 'output.txt']]
|
205
|
-
end
|
206
|
-
|
207
|
-
it 'should not accept multiple --format options when both use implicit STDOUT' do
|
208
|
-
lambda do
|
209
|
-
config.parse_options(%w{--format pretty --format progress})
|
210
|
-
end.should raise_error('All but one formatter must use --out, only one can print to each stream (or STDOUT)')
|
211
|
-
end
|
212
|
-
|
213
|
-
it 'should accept same --format options with implicit STDOUT, and keep only one' do
|
214
|
-
config.parse_options(%w{--format standard --format standard})
|
215
|
-
config.formats.should == [['standard', out]]
|
216
|
-
end
|
217
|
-
|
218
|
-
it 'should not accept multiple --out streams pointing to the same place' do
|
219
|
-
lambda do
|
220
|
-
config.parse_options(%w{--format standard --out file1 --format progress --out file1})
|
221
|
-
end.should raise_error('All but one formatter must use --out, only one can print to each stream (or STDOUT)')
|
222
|
-
end
|
223
|
-
|
224
|
-
it 'should associate --out to previous --format' do
|
225
|
-
config.parse_options(%w{--format progress --out file1 --format profile --out file2})
|
226
|
-
config.formats.should == [['progress', 'file1'], ['profile', 'file2']]
|
227
|
-
end
|
228
|
-
|
229
|
-
it 'should accept same --format options with same --out streams and keep only one' do
|
230
|
-
config.parse_options(%w{--format html --out file --format standard --format html --out file})
|
231
|
-
config.formats.should == [['standard', out], ['html', 'file']]
|
232
|
-
end
|
233
|
-
|
234
|
-
it 'should accept same --format options with different --out streams' do
|
235
|
-
config.parse_options(%w{--format html --out file1 --format html --out file2})
|
236
|
-
config.formats.should == [['html', 'file1'], ['html', 'file2']]
|
237
|
-
end
|
238
|
-
|
239
|
-
it 'should accept multiple --name options' do
|
240
|
-
config.parse_options(['--name', 'User logs in', '--name', 'User signs up'])
|
241
|
-
|
242
|
-
config.options[:name_regexps].should include(/User logs in/)
|
243
|
-
config.options[:name_regexps].should include(/User signs up/)
|
244
|
-
end
|
245
|
-
|
246
|
-
it 'should accept multiple -n options' do
|
247
|
-
config.parse_options(['-n', 'User logs in', '-n', 'User signs up'])
|
248
|
-
|
249
|
-
config.options[:name_regexps].should include(/User logs in/)
|
250
|
-
config.options[:name_regexps].should include(/User signs up/)
|
251
|
-
end
|
252
|
-
|
253
|
-
it 'should allow specifying environment variables in profiles' do
|
254
|
-
with_this_configuration({'selenium' => 'DRIVER=selenium'})
|
255
|
-
config.parse_options(['--profile', 'selenium'])
|
256
|
-
ENV['DRIVER'].should == 'selenium'
|
257
|
-
config.spec_context.should_not include('DRIVER=selenium')
|
258
|
-
end
|
259
|
-
|
260
|
-
describe 'Dry run execution' do
|
261
|
-
it 'returns true when --dry-run was specified on in the arguments' do
|
262
|
-
config.parse_options(['--dry-run'])
|
263
|
-
config.dry_run?.should be_true
|
264
|
-
end
|
265
|
-
|
266
|
-
it 'returns true when --dry-run was specified in a profile' do
|
267
|
-
with_this_configuration({'default' => '--dry-run'})
|
268
|
-
config.parse_options([])
|
269
|
-
config.dry_run?.should be_true
|
270
|
-
end
|
271
|
-
|
272
|
-
it 'returns false by default' do
|
273
|
-
config.parse_options([])
|
274
|
-
config.dry_run?.should be_false
|
275
|
-
end
|
276
|
-
end
|
277
|
-
|
278
|
-
describe 'Specifying matcher type' do
|
279
|
-
it 'returns the matcher type when it was set' do
|
280
|
-
config.parse_options(['--matcher-type', 'classic'])
|
281
|
-
config.matcher_type.should eql :classic
|
282
|
-
end
|
283
|
-
|
284
|
-
it 'returns the matcher type when it was set with shorthand option' do
|
285
|
-
config.parse_options(['-I', 'classic'])
|
286
|
-
config.matcher_type.should eql :classic
|
287
|
-
end
|
288
|
-
|
289
|
-
it 'returns the default matcher type if it was not set' do
|
290
|
-
config.parse_options([])
|
291
|
-
config.matcher_type.should eql :regexp
|
292
|
-
end
|
293
|
-
end
|
294
|
-
|
295
|
-
describe 'handling tags' do
|
296
|
-
it 'returns an empty expression when no tags are specified' do
|
297
|
-
config.parse_options([])
|
298
|
-
config.tag_expression.should be_empty
|
299
|
-
end
|
300
|
-
|
301
|
-
it 'returns an expression when tags are specified' do
|
302
|
-
config.parse_options(['--tags','@smoke'])
|
303
|
-
config.tag_expression.should_not be_empty
|
304
|
-
end
|
305
|
-
end
|
306
|
-
|
307
|
-
describe 'Getting a backtrace of errors' do
|
308
|
-
before do
|
309
|
-
Lucid.use_full_backtrace = false
|
310
|
-
end
|
311
|
-
|
312
|
-
it 'should show full backtrace when --backtrace is called for' do
|
313
|
-
config = App.new(['--backtrace'])
|
314
|
-
begin
|
315
|
-
'x'.should == 'y'
|
316
|
-
rescue => e
|
317
|
-
e.backtrace[0].should_not == "#{__FILE__}:#{__LINE__ - 2}"
|
318
|
-
end
|
319
|
-
end
|
320
|
-
|
321
|
-
after do
|
322
|
-
Lucid.use_full_backtrace = false
|
323
|
-
end
|
324
|
-
end
|
325
|
-
|
326
|
-
end
|
327
|
-
end
|
328
|
-
end
|
data/spec/lucid/duration_spec.rb
DELETED
@@ -1,22 +0,0 @@
|
|
1
|
-
require_relative '../spec_helper'
|
2
|
-
|
3
|
-
module Lucid
|
4
|
-
module Formatter
|
5
|
-
describe Duration do
|
6
|
-
include Duration
|
7
|
-
|
8
|
-
it 'should format ms' do
|
9
|
-
format_duration(0.002103).should == '0m0.002s'
|
10
|
-
end
|
11
|
-
|
12
|
-
it 'should format m' do
|
13
|
-
format_duration(61.002503).should == '1m1.003s'
|
14
|
-
end
|
15
|
-
|
16
|
-
it 'should format h' do
|
17
|
-
format_duration(3661.002503).should == '61m1.003s'
|
18
|
-
end
|
19
|
-
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
data/spec/lucid/facade_spec.rb
DELETED
@@ -1,31 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
module Lucid
|
4
|
-
describe ContextLoader::Facade do
|
5
|
-
|
6
|
-
let(:interface) {double('interface')}
|
7
|
-
subject { ContextLoader::Orchestrator.new(interface,{}) }
|
8
|
-
let(:facade) { ContextLoader::Facade.new(subject, interface) }
|
9
|
-
|
10
|
-
it 'should produce AST::Table by #table' do
|
11
|
-
facade.table( %{
|
12
|
-
| study | phase |
|
13
|
-
| test-01 | I |
|
14
|
-
| test-02 | II |
|
15
|
-
} ).should be_kind_of(AST::Table)
|
16
|
-
end
|
17
|
-
|
18
|
-
it 'should produce AST::DocString by #doc_string with default content-type' do
|
19
|
-
str = facade.doc_string('TEST')
|
20
|
-
str.should be_kind_of(AST::DocString)
|
21
|
-
str.content_type.should eq('')
|
22
|
-
end
|
23
|
-
|
24
|
-
it 'should produce AST::DocString by #doc_string with ruby content-type' do
|
25
|
-
str = facade.doc_string('TEST','ruby')
|
26
|
-
str.should be_kind_of(AST::DocString)
|
27
|
-
str.content_type.should eq('ruby')
|
28
|
-
end
|
29
|
-
|
30
|
-
end
|
31
|
-
end
|
data/spec/lucid/factory_spec.rb
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
require_relative '../spec_helper'
|
2
|
-
|
3
|
-
module Lucid
|
4
|
-
describe Factory do
|
5
|
-
include Factory
|
6
|
-
|
7
|
-
it 'should load a valid formatter' do
|
8
|
-
generated_class = create_object_of('Lucid::Formatter::Html')
|
9
|
-
generated_class.name.should == 'Lucid::Formatter::Html'
|
10
|
-
end
|
11
|
-
|
12
|
-
it 'should not load an invalid formatter' do
|
13
|
-
expect { create_object_of('Lucid::Formatter::Testing') }.to raise_error(LoadError)
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
data/spec/lucid/matcher_spec.rb
DELETED
@@ -1,127 +0,0 @@
|
|
1
|
-
require_relative '../spec_helper'
|
2
|
-
|
3
|
-
module Lucid
|
4
|
-
module InterfaceRb
|
5
|
-
describe Matcher do
|
6
|
-
|
7
|
-
before do
|
8
|
-
@pattern = 'There is a missing step'
|
9
|
-
@multiline_argument_class = nil
|
10
|
-
end
|
11
|
-
|
12
|
-
let(:code_keyword) { 'Given' }
|
13
|
-
|
14
|
-
let(:matcher) do
|
15
|
-
matcher_class.new(code_keyword, @pattern, @multiline_argument_class)
|
16
|
-
end
|
17
|
-
|
18
|
-
def unindent(s)
|
19
|
-
s.split("\n")[1..-2].join("\n").indent(-10)
|
20
|
-
end
|
21
|
-
|
22
|
-
describe Matcher::Regexp do
|
23
|
-
let(:matcher_class) { Matcher::Regexp }
|
24
|
-
let(:matcher_text) { matcher.to_s }
|
25
|
-
|
26
|
-
it 'should wrap matcher patterns in parentheses' do
|
27
|
-
@pattern = 'A "string" with 4 spaces'
|
28
|
-
|
29
|
-
matcher_text.should == unindent(%{
|
30
|
-
Given (/^A "(.*?)" with (\\d+) spaces$/) do |arg1, arg2|
|
31
|
-
pending
|
32
|
-
end
|
33
|
-
})
|
34
|
-
end
|
35
|
-
|
36
|
-
it 'should recognize numbers in name and make an according regexp' do
|
37
|
-
@pattern = 'There are 4 spaces'
|
38
|
-
|
39
|
-
matcher_text.should == unindent(%{
|
40
|
-
Given (/^There are (\\d+) spaces$/) do |arg1|
|
41
|
-
pending
|
42
|
-
end
|
43
|
-
})
|
44
|
-
end
|
45
|
-
|
46
|
-
it 'should recognise a mix of ints, strings and a table' do
|
47
|
-
@pattern = 'There are 9 "lucid" tests in 20 "categories"'
|
48
|
-
@multiline_argument_class = Lucid::AST::Table
|
49
|
-
|
50
|
-
matcher_text.should == unindent(%{
|
51
|
-
Given (/^There are (\\d+) "(.*?)" tests in (\\d+) "(.*?)"$/) do |arg1, arg2, arg3, arg4, table|
|
52
|
-
# table is a Lucid::AST::Table
|
53
|
-
pending
|
54
|
-
end
|
55
|
-
})
|
56
|
-
end
|
57
|
-
|
58
|
-
it "should recognize quotes in name and make according regexp" do
|
59
|
-
@pattern = 'A "lucid" test'
|
60
|
-
|
61
|
-
matcher_text.should == unindent(%{
|
62
|
-
Given (/^A "(.*?)" test$/) do |arg1|
|
63
|
-
pending
|
64
|
-
end
|
65
|
-
})
|
66
|
-
end
|
67
|
-
|
68
|
-
it 'should recognize several quoted words in name and make according regexp and args' do
|
69
|
-
@pattern = 'A "first" and "second" arg'
|
70
|
-
|
71
|
-
matcher_text.should == unindent(%{
|
72
|
-
Given (/^A "(.*?)" and "(.*?)" arg$/) do |arg1, arg2|
|
73
|
-
pending
|
74
|
-
end
|
75
|
-
})
|
76
|
-
end
|
77
|
-
|
78
|
-
it 'should not use quote group when there are no quotes' do
|
79
|
-
@pattern = 'A first arg'
|
80
|
-
|
81
|
-
matcher_text.should == unindent(%{
|
82
|
-
Given (/^A first arg$/) do
|
83
|
-
pending
|
84
|
-
end
|
85
|
-
})
|
86
|
-
end
|
87
|
-
|
88
|
-
it 'should be helpful with tables' do
|
89
|
-
@pattern = 'A "first" arg'
|
90
|
-
@multiline_argument_class = Lucid::AST::Table
|
91
|
-
|
92
|
-
matcher_text.should == unindent(%{
|
93
|
-
Given (/^A "(.*?)" arg$/) do |arg1, table|
|
94
|
-
# table is a Lucid::AST::Table
|
95
|
-
pending
|
96
|
-
end
|
97
|
-
})
|
98
|
-
end
|
99
|
-
end
|
100
|
-
|
101
|
-
describe Matcher::Classic do
|
102
|
-
let(:matcher_class) { Matcher::Classic }
|
103
|
-
|
104
|
-
it 'renders matcher as unwrapped regular expression' do
|
105
|
-
matcher.to_s.should eql unindent(%{
|
106
|
-
Given /^There is a missing step$/ do
|
107
|
-
pending
|
108
|
-
end
|
109
|
-
})
|
110
|
-
end
|
111
|
-
end
|
112
|
-
|
113
|
-
describe Matcher::Percent do
|
114
|
-
let(:matcher_class) { Matcher::Percent }
|
115
|
-
|
116
|
-
it 'renders matcher as percent-style regular expression' do
|
117
|
-
matcher.to_s.should eql unindent(%{
|
118
|
-
Given %r{^There is a missing step$} do
|
119
|
-
pending
|
120
|
-
end
|
121
|
-
})
|
122
|
-
end
|
123
|
-
end
|
124
|
-
|
125
|
-
end
|
126
|
-
end
|
127
|
-
end
|