lucid 0.3.3 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (61) hide show
  1. checksums.yaml +4 -4
  2. data/HISTORY.md +13 -9
  3. data/README.md +2 -6
  4. data/lib/lucid.rb +22 -3
  5. data/lib/lucid/{term/ansicolor.rb → ansicolor.rb} +34 -41
  6. data/lib/lucid/ast.rb +2 -2
  7. data/lib/lucid/ast/outline_table.rb +2 -2
  8. data/lib/lucid/ast/{specs.rb → spec.rb} +10 -1
  9. data/lib/lucid/ast/step.rb +3 -3
  10. data/lib/lucid/ast/step_invocation.rb +16 -16
  11. data/lib/lucid/ast/table.rb +1 -1
  12. data/lib/lucid/ast/{tdl_walker.rb → walker.rb} +15 -16
  13. data/lib/lucid/cli/app.rb +23 -21
  14. data/lib/lucid/cli/{configuration.rb → context.rb} +66 -38
  15. data/lib/lucid/cli/options.rb +59 -40
  16. data/lib/lucid/{configuration.rb → context.rb} +2 -3
  17. data/lib/lucid/{runtime.rb → context_loader.rb} +58 -61
  18. data/lib/lucid/{runtime/facade.rb → facade.rb} +5 -6
  19. data/lib/lucid/formatter/ansicolor.rb +15 -14
  20. data/lib/lucid/formatter/debug.rb +1 -1
  21. data/lib/lucid/formatter/usage.rb +2 -2
  22. data/lib/lucid/interface.rb +121 -0
  23. data/lib/lucid/{runtime/interface_io.rb → interface_io.rb} +2 -2
  24. data/lib/lucid/interface_rb/rb_language.rb +6 -23
  25. data/lib/lucid/interface_rb/rb_step_definition.rb +1 -2
  26. data/lib/lucid/{core_ext/instance_exec.rb → lang_extend.rb} +112 -69
  27. data/lib/lucid/{runtime/orchestrator.rb → orchestrator.rb} +36 -24
  28. data/lib/lucid/platform.rb +1 -1
  29. data/lib/lucid/{runtime/results.rb → results.rb} +10 -10
  30. data/lib/lucid/{tdl_builder.rb → spec_builder.rb} +26 -22
  31. data/lib/lucid/spec_file.rb +33 -13
  32. data/lib/lucid/{runtime/specs_loader.rb → spec_loader.rb} +13 -22
  33. data/lib/lucid/{step_definition_light.rb → step_definition_usage.rb} +2 -4
  34. data/lib/lucid/step_definitions.rb +4 -4
  35. data/spec/lucid/app_spec.rb +6 -18
  36. data/spec/lucid/ast/background_spec.rb +4 -4
  37. data/spec/lucid/ast/feature_spec.rb +7 -7
  38. data/spec/lucid/ast/scenario_outline_spec.rb +9 -9
  39. data/spec/lucid/ast/specs_spec.rb +8 -8
  40. data/spec/lucid/ast/step_spec.rb +5 -5
  41. data/spec/lucid/ast/tdl_walker_spec.rb +5 -5
  42. data/spec/lucid/{configuration_spec.rb → context_spec.rb} +78 -78
  43. data/spec/lucid/facade_spec.rb +7 -7
  44. data/spec/lucid/orchestrator_spec.rb +7 -7
  45. data/spec/lucid/pending_spec.rb +3 -3
  46. data/spec/lucid/progress_spec.rb +3 -3
  47. data/spec/lucid/rb_step_definition_spec.rb +4 -4
  48. data/spec/lucid/results_spec.rb +2 -2
  49. data/spec/lucid/runtime_spec.rb +7 -7
  50. metadata +20 -32
  51. data/bin/lucid-gen +0 -4
  52. data/lib/lucid/core_ext/proc.rb +0 -36
  53. data/lib/lucid/core_ext/string.rb +0 -9
  54. data/lib/lucid/generator.rb +0 -21
  55. data/lib/lucid/generators/project.rb +0 -64
  56. data/lib/lucid/generators/project/Gemfile.tt +0 -6
  57. data/lib/lucid/generators/project/browser-fluent.rb +0 -37
  58. data/lib/lucid/generators/project/driver-fluent.rb +0 -1
  59. data/lib/lucid/generators/project/errors.rb +0 -26
  60. data/lib/lucid/generators/project/events-fluent.rb +0 -33
  61. data/lib/lucid/interface_methods.rb +0 -125
@@ -1,16 +1,16 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  require 'lucid/ast'
4
- require 'lucid/core_ext/string'
4
+ require 'lucid/lang_extend'
5
5
  require 'lucid/interface_rb/rb_language'
6
6
 
7
7
  module Lucid
8
8
  module AST
9
-
9
+
10
10
  describe ScenarioOutline do
11
-
11
+
12
12
  before do
13
- @runtime = Lucid::Runtime.new
13
+ @runtime = Lucid::ContextLoader.new
14
14
  @runtime.load_code_language('rb')
15
15
  @dsl = Object.new
16
16
  @dsl.extend(Lucid::InterfaceRb::RbLucid)
@@ -26,7 +26,7 @@ module Lucid
26
26
  @dsl.Then(/^there should be (\d+) tests$/) do |n|
27
27
  (@initial - @tested).should == n.to_i
28
28
  end
29
-
29
+
30
30
  @dsl.Then(/^there should be (\d+) tests completed$/) do |n|
31
31
  @tested.should == n.to_i
32
32
  end
@@ -69,13 +69,13 @@ module Lucid
69
69
  end
70
70
 
71
71
  it 'should replace all variables and call outline once for each table row' do
72
- visitor = TDLWalker.new(@runtime)
72
+ visitor = Walker.new(@runtime)
73
73
  visitor.should_receive(:visit_table_row).exactly(3).times
74
74
  @scenario_outline.feature = double.as_null_object
75
75
  @scenario_outline.accept(visitor)
76
76
  end
77
-
77
+
78
78
  end
79
-
79
+
80
80
  end
81
- end
81
+ end
@@ -2,19 +2,19 @@ require 'spec_helper'
2
2
 
3
3
  module Lucid
4
4
  module AST
5
- describe Specs do
6
- let(:specs) { Specs.new }
7
-
5
+ describe Spec do
6
+ let(:spec) { Spec.new }
7
+
8
8
  def parse_feature(gherkin)
9
9
  path = 'specs/test.spec'
10
- builder = Lucid::Parser::TDLBuilder.new(path)
10
+ builder = Lucid::Parser::SpecBuilder.new(path)
11
11
  parser = Gherkin::Parser::Parser.new(builder, true, 'root', false)
12
12
  parser.parse(gherkin, path, 0)
13
13
  builder.language = parser.i18n_language
14
14
  feature = builder.result
15
- specs.add_feature(feature)
15
+ spec.add_feature(feature)
16
16
  end
17
-
17
+
18
18
  it 'has a step_count' do
19
19
  parse_feature(<<-GHERKIN)
20
20
  Feature:
@@ -41,8 +41,8 @@ Feature:
41
41
  | 8 |
42
42
  GHERKIN
43
43
 
44
- specs.step_count.should == (2 + 3) + (3 * (2 + 2))
44
+ spec.step_count.should == (2 + 3) + (3 * (2 + 2))
45
45
  end
46
46
  end
47
47
  end
48
- end
48
+ end
@@ -1,11 +1,11 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  require 'lucid/ast'
4
- require 'lucid/core_ext/string'
4
+ require 'lucid/lang_extend'
5
5
 
6
6
  module Lucid
7
7
  module AST
8
-
8
+
9
9
  describe Step do
10
10
  let(:language) { double }
11
11
 
@@ -25,7 +25,7 @@ module Lucid
25
25
 
26
26
  it 'should use empty string for the replacement of arguments in name when replace value is nil' do
27
27
  step = Step.new(language, 1, 'Given', 'a <status> test')
28
-
28
+
29
29
  invocation_table = Table.new([
30
30
  %w(status),
31
31
  [nil]
@@ -66,7 +66,7 @@ module Lucid
66
66
 
67
67
  step_invocation.instance_variable_get('@multiline_arg').to_step_definition_arg.should == 'status_passing type_regression'
68
68
  end
69
-
69
+
70
70
  end
71
71
  end
72
- end
72
+ end
@@ -1,10 +1,10 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  module Lucid::AST
4
-
5
- describe TDLWalker do
4
+
5
+ describe Walker do
6
6
  let(:tdl_walker) do
7
- TDLWalker.new(nil, [double('listener', :before_visit_features => nil)])
7
+ Walker.new(nil, [double('listener', :before_visit_features => nil)])
8
8
  end
9
9
  let(:features) { double('features', :accept => nil) }
10
10
 
@@ -17,5 +17,5 @@ module Lucid::AST
17
17
  tdl_walker.visit_features(features).should == tdl_walker
18
18
  end
19
19
  end
20
-
21
- end
20
+
21
+ end
@@ -1,9 +1,9 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  module Lucid
4
- describe Configuration do
4
+ describe Context do
5
5
  describe '.default' do
6
- subject { Configuration.default }
6
+ subject { Context.default }
7
7
 
8
8
  it 'has an autoload_code_paths containing default Lucid folders' do
9
9
  subject.autoload_code_paths.should include 'common'
@@ -14,33 +14,33 @@ module Lucid
14
14
 
15
15
  describe 'supports custom user options' do
16
16
  let(:user_options) { { :autoload_code_paths => ['library/common'] } }
17
- subject { Configuration.new(user_options) }
17
+ subject { Context.new(user_options) }
18
18
 
19
19
  it 'should allow the defaults to be overridden' do
20
20
  subject.autoload_code_paths.should == ['library/common']
21
21
  end
22
22
  end
23
23
  end
24
-
24
+
25
25
  module CLI
26
- describe Configuration do
26
+ describe Context do
27
27
 
28
28
  attr_reader :out, :error
29
-
29
+
30
30
  module ExposeOptions
31
31
  attr_reader :options
32
32
  end
33
-
33
+
34
34
  def config
35
- @config ||= Configuration.new(@out = StringIO.new, @error = StringIO.new).extend(ExposeOptions)
35
+ @config ||= Context.new(@out = StringIO.new, @error = StringIO.new).extend(ExposeOptions)
36
36
  end
37
-
37
+
38
38
  def with_these_files(*files)
39
39
  File.stub(:directory?).and_return(true)
40
40
  File.stub(:file?).and_return(true)
41
41
  Dir.stub(:[]).and_return(files)
42
42
  end
43
-
43
+
44
44
  def with_this_configuration(info)
45
45
  Dir.stub(:glob).with('{,.config/,config/}lucid{.yml,.yaml}').and_return(['lucid.yml'])
46
46
  File.stub(:exist?).and_return(true)
@@ -50,27 +50,27 @@ module Lucid
50
50
 
51
51
  it 'should require driver.rb files first' do
52
52
  with_these_files('/common/support/browser.rb', '/common/support/driver.rb')
53
- config.parse(%w{--require /common})
54
-
53
+ config.parse_options(%w{--require /common})
54
+
55
55
  config.library_context.should == %w(
56
56
  /common/support/driver.rb
57
57
  /common/support/browser.rb
58
58
  )
59
59
  end
60
-
60
+
61
61
  it 'should not require driver.rb files when a dry run is attempted' do
62
62
  with_these_files('/common/support/browser.rb', '/common/support/driver.rb')
63
- config.parse(%w{--require /common --dry-run})
63
+ config.parse_options(%w{--require /common --dry-run})
64
64
 
65
65
  config.library_context.should == %w(
66
66
  /common/support/browser.rb
67
67
  )
68
68
  end
69
-
69
+
70
70
  it 'should require files in default definition locations' do
71
71
  with_these_files('/pages/page.rb', '/steps/steps.rb')
72
- config.parse(%w{--require /specs})
73
-
72
+ config.parse_options(%w{--require /specs})
73
+
74
74
  config.definition_context.should == %w(
75
75
  /pages/page.rb
76
76
  /steps/steps.rb
@@ -82,17 +82,17 @@ module Lucid
82
82
  Dir.stub(:[]).with('specs/**/*.spec').and_return(['lucid.spec'])
83
83
  Dir.stub(:[]).with('specs/**/*.feature').and_return(['lucid.spec'])
84
84
  Dir.stub(:[]).with('specs/**/*.story').and_return(['lucid.spec'])
85
- config.parse(%w{})
86
- config.spec_files.should == ['lucid.spec']
85
+ config.parse_options(%w{})
86
+ config.spec_context.should == ['lucid.spec']
87
87
  end
88
-
88
+
89
89
  it 'should search for all specs in the specified directory' do
90
90
  File.stub(:directory?).and_return(true)
91
91
  Dir.stub(:[]).with('specs/**/*.spec').and_return(['lucid.spec'])
92
92
  Dir.stub(:[]).with('specs/**/*.feature').and_return(['lucid.spec'])
93
93
  Dir.stub(:[]).with('specs/**/*.story').and_return(['lucid.spec'])
94
- config.parse(%w{specs/})
95
- config.spec_files.should == ['lucid.spec']
94
+ config.parse_options(%w{specs/})
95
+ config.spec_context.should == ['lucid.spec']
96
96
  end
97
97
 
98
98
  it 'should return the correct spec file type for feature file' do
@@ -100,8 +100,8 @@ module Lucid
100
100
  Dir.stub(:[]).with('specs/**/*.spec').and_return(['lucid.feature'])
101
101
  Dir.stub(:[]).with('specs/**/*.feature').and_return(['lucid.feature'])
102
102
  Dir.stub(:[]).with('specs/**/*.story').and_return(['lucid.feature'])
103
- config.parse(%w{specs/})
104
- config.spec_files.should == ['lucid.feature']
103
+ config.parse_options(%w{specs/})
104
+ config.spec_context.should == ['lucid.feature']
105
105
  end
106
106
 
107
107
  it 'should return the correct spec file type for story file' do
@@ -109,27 +109,27 @@ module Lucid
109
109
  Dir.stub(:[]).with('specs/**/*.spec').and_return(['lucid.story'])
110
110
  Dir.stub(:[]).with('specs/**/*.feature').and_return(['lucid.story'])
111
111
  Dir.stub(:[]).with('specs/**/*.story').and_return(['lucid.story'])
112
- config.parse(%w{specs/})
113
- config.spec_files.should == ['lucid.story']
112
+ config.parse_options(%w{specs/})
113
+ config.spec_context.should == ['lucid.story']
114
114
  end
115
115
 
116
116
  it 'should preserve the order of the spec files' do
117
- config.parse(%w{test_b.spec test_c.spec test_a.spec})
118
- config.spec_files.should == %w[test_b.spec test_c.spec test_a.spec]
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
119
  end
120
-
120
+
121
121
  it 'should be able to exclude files based on a specific reference' do
122
122
  with_these_files('/common/support/browser.rb', '/common/support/driver.rb')
123
- config.parse(%w{--require /common --exclude browser.rb})
124
-
123
+ config.parse_options(%w{--require /common --exclude browser.rb})
124
+
125
125
  config.spec_requires.should == %w(
126
126
  /common/support/driver.rb
127
127
  )
128
128
  end
129
-
129
+
130
130
  it 'should be able to exclude files based on a general pattern' do
131
131
  with_these_files('/steps/tester.rb', '/steps/tested.rb', '/steps/testing.rb', '/steps/quality.rb')
132
- config.parse(%w{--require /steps --exclude test(er|ed) --exclude quality})
132
+ config.parse_options(%w{--require /steps --exclude test(er|ed) --exclude quality})
133
133
 
134
134
  config.spec_requires.should == %w(
135
135
  /steps/testing.rb
@@ -137,114 +137,114 @@ module Lucid
137
137
  end
138
138
 
139
139
  it 'should allow specifying environment variables on the command line' do
140
- config.parse(['test=this'])
140
+ config.parse_options(['test=this'])
141
141
  ENV['test'].should == 'this'
142
- config.spec_files.should_not include('test=this')
142
+ config.spec_context.should_not include('test=this')
143
143
  end
144
-
144
+
145
145
  it 'should be able to use a --dry-run option' do
146
- config.parse(%w{--dry-run})
146
+ config.parse_options(%w{--dry-run})
147
147
  config.options[:dry_run].should be_true
148
148
  end
149
-
149
+
150
150
  it 'should be able to use a --no-source option' do
151
- config.parse(%w{--no-source})
151
+ config.parse_options(%w{--no-source})
152
152
  config.options[:source].should be_false
153
153
  end
154
-
154
+
155
155
  it 'should be able to use a --no-matchers option' do
156
- config.parse(%w{--no-matchers})
156
+ config.parse_options(%w{--no-matchers})
157
157
  config.options[:matchers].should be_false
158
158
  end
159
-
159
+
160
160
  it 'should be able to use a --quiet option' do
161
- config.parse(%w{--quiet})
161
+ config.parse_options(%w{--quiet})
162
162
  config.options[:source].should be_false
163
163
  config.options[:matchers].should be_false
164
164
  end
165
-
165
+
166
166
  it 'should be able to use a --verbose option' do
167
- config.parse(%w{--verbose})
167
+ config.parse_options(%w{--verbose})
168
168
  config.options[:verbose].should be_true
169
169
  end
170
170
 
171
171
  it 'uses the default profile when no profile is defined' do
172
172
  with_this_configuration({'default' => '--require test_file'})
173
- config.parse(%w{--format progress})
173
+ config.parse_options(%w{--format progress})
174
174
  config.options[:require].should include('test_file')
175
175
  end
176
-
176
+
177
177
  describe 'generating output' do
178
-
178
+
179
179
  it 'should be able to use an --out option' do
180
- config.parse(%w{--out report.txt})
180
+ config.parse_options(%w{--out report.txt})
181
181
  config.formats.should == [%w(standard report.txt)]
182
182
  end
183
-
183
+
184
184
  it 'should be able to use multiple --out options' do
185
- config.parse(%w{--format standard --out report1.txt --out report2.txt})
185
+ config.parse_options(%w{--format standard --out report1.txt --out report2.txt})
186
186
  config.formats.should == [%w(standard report2.txt)]
187
187
  end
188
-
188
+
189
189
  end
190
190
 
191
191
  it 'should be able to use a --color option' do
192
192
  Lucid::Term::ANSIColor.should_receive(:coloring=).with(true)
193
- config.parse(['--color'])
193
+ config.parse_options(['--color'])
194
194
  end
195
195
 
196
196
  it 'should accept --no-color option' do
197
197
  Lucid::Term::ANSIColor.should_receive(:coloring=).with(false)
198
- config = Configuration.new(StringIO.new)
199
- config.parse(['--no-color'])
198
+ config = Context.new(StringIO.new)
199
+ config.parse_options(['--no-color'])
200
200
  end
201
201
 
202
202
  it 'should accept multiple --format options and put the STDOUT one first so progress is seen' do
203
- config.parse(%w{--format standard --out output.txt --format progress})
203
+ config.parse_options(%w{--format standard --out output.txt --format progress})
204
204
  config.formats.should == [['progress', out], ['standard', 'output.txt']]
205
205
  end
206
206
 
207
207
  it 'should not accept multiple --format options when both use implicit STDOUT' do
208
208
  lambda do
209
- config.parse(%w{--format pretty --format progress})
209
+ config.parse_options(%w{--format pretty --format progress})
210
210
  end.should raise_error('All but one formatter must use --out, only one can print to each stream (or STDOUT)')
211
211
  end
212
212
 
213
213
  it 'should accept same --format options with implicit STDOUT, and keep only one' do
214
- config.parse(%w{--format standard --format standard})
214
+ config.parse_options(%w{--format standard --format standard})
215
215
  config.formats.should == [['standard', out]]
216
216
  end
217
217
 
218
218
  it 'should not accept multiple --out streams pointing to the same place' do
219
219
  lambda do
220
- config.parse(%w{--format standard --out file1 --format progress --out file1})
220
+ config.parse_options(%w{--format standard --out file1 --format progress --out file1})
221
221
  end.should raise_error('All but one formatter must use --out, only one can print to each stream (or STDOUT)')
222
222
  end
223
223
 
224
224
  it 'should associate --out to previous --format' do
225
- config.parse(%w{--format progress --out file1 --format profile --out file2})
225
+ config.parse_options(%w{--format progress --out file1 --format profile --out file2})
226
226
  config.formats.should == [['progress', 'file1'], ['profile', 'file2']]
227
227
  end
228
228
 
229
229
  it 'should accept same --format options with same --out streams and keep only one' do
230
- config.parse(%w{--format html --out file --format standard --format html --out file})
230
+ config.parse_options(%w{--format html --out file --format standard --format html --out file})
231
231
  config.formats.should == [['standard', out], ['html', 'file']]
232
232
  end
233
233
 
234
234
  it 'should accept same --format options with different --out streams' do
235
- config.parse(%w{--format html --out file1 --format html --out file2})
235
+ config.parse_options(%w{--format html --out file1 --format html --out file2})
236
236
  config.formats.should == [['html', 'file1'], ['html', 'file2']]
237
237
  end
238
238
 
239
239
  it 'should accept multiple --name options' do
240
- config.parse(['--name', 'User logs in', '--name', 'User signs up'])
240
+ config.parse_options(['--name', 'User logs in', '--name', 'User signs up'])
241
241
 
242
242
  config.options[:name_regexps].should include(/User logs in/)
243
243
  config.options[:name_regexps].should include(/User signs up/)
244
244
  end
245
245
 
246
246
  it 'should accept multiple -n options' do
247
- config.parse(['-n', 'User logs in', '-n', 'User signs up'])
247
+ config.parse_options(['-n', 'User logs in', '-n', 'User signs up'])
248
248
 
249
249
  config.options[:name_regexps].should include(/User logs in/)
250
250
  config.options[:name_regexps].should include(/User signs up/)
@@ -252,54 +252,54 @@ module Lucid
252
252
 
253
253
  it 'should allow specifying environment variables in profiles' do
254
254
  with_this_configuration({'selenium' => 'DRIVER=selenium'})
255
- config.parse(['--profile', 'selenium'])
255
+ config.parse_options(['--profile', 'selenium'])
256
256
  ENV['DRIVER'].should == 'selenium'
257
- config.spec_files.should_not include('DRIVER=selenium')
257
+ config.spec_context.should_not include('DRIVER=selenium')
258
258
  end
259
259
 
260
260
  describe 'Dry run execution' do
261
261
  it 'returns true when --dry-run was specified on in the arguments' do
262
- config.parse(['--dry-run'])
262
+ config.parse_options(['--dry-run'])
263
263
  config.dry_run?.should be_true
264
264
  end
265
265
 
266
266
  it 'returns true when --dry-run was specified in a profile' do
267
267
  with_this_configuration({'default' => '--dry-run'})
268
- config.parse([])
268
+ config.parse_options([])
269
269
  config.dry_run?.should be_true
270
270
  end
271
271
 
272
272
  it 'returns false by default' do
273
- config.parse([])
273
+ config.parse_options([])
274
274
  config.dry_run?.should be_false
275
275
  end
276
276
  end
277
-
277
+
278
278
  describe 'Specifying matcher type' do
279
279
  it 'returns the matcher type when it was set' do
280
- config.parse(['--matcher-type', 'classic'])
280
+ config.parse_options(['--matcher-type', 'classic'])
281
281
  config.matcher_type.should eql :classic
282
282
  end
283
283
 
284
284
  it 'returns the matcher type when it was set with shorthand option' do
285
- config.parse(['-I', 'classic'])
285
+ config.parse_options(['-I', 'classic'])
286
286
  config.matcher_type.should eql :classic
287
287
  end
288
288
 
289
289
  it 'returns the default matcher type if it was not set' do
290
- config.parse([])
290
+ config.parse_options([])
291
291
  config.matcher_type.should eql :regexp
292
292
  end
293
293
  end
294
294
 
295
295
  describe 'handling tags' do
296
296
  it 'returns an empty expression when no tags are specified' do
297
- config.parse([])
297
+ config.parse_options([])
298
298
  config.tag_expression.should be_empty
299
299
  end
300
300
 
301
301
  it 'returns an expression when tags are specified' do
302
- config.parse(['--tags','@smoke'])
302
+ config.parse_options(['--tags','@smoke'])
303
303
  config.tag_expression.should_not be_empty
304
304
  end
305
305
  end
@@ -317,12 +317,12 @@ module Lucid
317
317
  e.backtrace[0].should_not == "#{__FILE__}:#{__LINE__ - 2}"
318
318
  end
319
319
  end
320
-
320
+
321
321
  after do
322
322
  Lucid.use_full_backtrace = false
323
323
  end
324
324
  end
325
-
325
+
326
326
  end
327
327
  end
328
- end
328
+ end