ass_launcher 0.1.1.alpha → 0.2.0

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.
Files changed (60) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +69 -67
  3. data/Rakefile +19 -0
  4. data/ass_launcher.gemspec +8 -2
  5. data/bin/dev-helper +7 -0
  6. data/bin/lib/dev_helper/cli_def_report.rb +191 -0
  7. data/bin/lib/dev_helper/cli_def_snippets.rb +426 -0
  8. data/bin/lib/dev_helper/designer.rb +172 -0
  9. data/bin/lib/dev_helper.rb +59 -0
  10. data/examples/arguments_builder_example.rb +150 -0
  11. data/examples/binary_wrappers_example.rb +211 -0
  12. data/examples/connection_string_example.rb +59 -0
  13. data/examples/create_infobase_example.rb +45 -0
  14. data/examples/enterprise_ole_example.rb +238 -0
  15. data/examples/enterprise_out_example.rb +87 -0
  16. data/examples/enterprise_running_example.rb +103 -0
  17. data/examples/example_helper.rb +122 -0
  18. data/examples/templates/example_template.cf +0 -0
  19. data/examples/templates/example_template.v8i +9 -0
  20. data/examples/templates/hello.epf +0 -0
  21. data/examples/troubles/with_creteinfobase_example.rb +408 -0
  22. data/examples/troubles/with_running_1c_example.rb +212 -0
  23. data/examples/v8i_file_example.rb +72 -0
  24. data/examples/webclient_example.rb +67 -0
  25. data/lib/ass_launcher/api.rb +113 -0
  26. data/lib/ass_launcher/enterprise/binary_wrapper.rb +159 -144
  27. data/lib/ass_launcher/enterprise/cli/arguments_builder.rb +177 -16
  28. data/lib/ass_launcher/enterprise/cli/binary_matcher.rb +69 -0
  29. data/lib/ass_launcher/enterprise/cli/parameters.rb +297 -44
  30. data/lib/ass_launcher/enterprise/cli/spec_dsl/dsl_helpers.rb +111 -5
  31. data/lib/ass_launcher/enterprise/cli/spec_dsl.rb +102 -51
  32. data/lib/ass_launcher/enterprise/cli.rb +50 -90
  33. data/lib/ass_launcher/enterprise/cli_def/8.2.17.rb +317 -0
  34. data/lib/ass_launcher/enterprise/cli_def/8.2.18.rb +3 -0
  35. data/lib/ass_launcher/enterprise/cli_def/8.3.3.rb +90 -0
  36. data/lib/ass_launcher/enterprise/cli_def/8.3.4.rb +58 -0
  37. data/lib/ass_launcher/enterprise/cli_def/8.3.5.rb +21 -0
  38. data/lib/ass_launcher/enterprise/cli_def/8.3.6.rb +91 -0
  39. data/lib/ass_launcher/enterprise/cli_def/8.3.7.rb +34 -0
  40. data/lib/ass_launcher/enterprise/cli_def/8.3.8.rb +127 -0
  41. data/lib/ass_launcher/enterprise/cli_def/8.3.9.rb +131 -0
  42. data/lib/ass_launcher/enterprise/cli_def.rb +46 -0
  43. data/lib/ass_launcher/enterprise/cli_defs_loader.rb +36 -0
  44. data/lib/ass_launcher/enterprise/ole/ole_binaries.rb +9 -2
  45. data/lib/ass_launcher/enterprise/ole/win32ole.rb +1 -1
  46. data/lib/ass_launcher/enterprise/ole.rb +17 -1
  47. data/lib/ass_launcher/enterprise/web_client.rb +164 -0
  48. data/lib/ass_launcher/enterprise.rb +33 -6
  49. data/lib/ass_launcher/support/connection_string.rb +33 -8
  50. data/lib/ass_launcher/support/linux.rb +88 -0
  51. data/lib/ass_launcher/support/platforms.rb +42 -10
  52. data/lib/ass_launcher/support/shell.rb +33 -6
  53. data/lib/ass_launcher/support/v8i_file.rb +3 -1
  54. data/lib/ass_launcher/support/v8i_section.rb +88 -40
  55. data/lib/ass_launcher/support.rb +1 -0
  56. data/lib/ass_launcher/version.rb +8 -1
  57. data/lib/ass_launcher.rb +1 -0
  58. metadata +79 -17
  59. data/lib/ass_launcher/enterprise/cli/cli.spec +0 -256
  60. data/lib/ass_launcher/enterprise/web_clients.rb +0 -59
@@ -0,0 +1,122 @@
1
+ $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
2
+ require 'ass_launcher'
3
+
4
+ module Examples
5
+ MIN_PLATFORM_VERSION = '8.3.8'
6
+
7
+ PLATFORM_VER = "~> #{MIN_PLATFORM_VERSION}"
8
+ OLE_V8 = '83'
9
+
10
+ # Examples executing control
11
+ # Be careful with them!!!!
12
+ module TROUBLES_EXECUTE_CONTROL
13
+ # Will be executed examples which show GUI dialogs.
14
+ # It is require human interaction!!!
15
+ SHOW_STUPID_GUI = !ENV['SHOW_STUPID_GUI'].nil?
16
+ # Will be executed examples which create infobases not where you need
17
+ SHOW_TROBLES_WITH_CREATEINFOBASE = !ENV['SHOW_TROBLES_WITH_CREATEINFOBASE'].nil?
18
+ end
19
+
20
+ module PLATFORM
21
+ extend AssLauncher::Support::Platforms
22
+ LINUX = linux?
23
+ CYGWIN = cygwin?
24
+ WINDOWS = windows?
25
+ end
26
+
27
+ module CLIENTS
28
+ extend AssLauncher::Api
29
+ THICK = thicks(Examples::PLATFORM_VER).last
30
+ fail "1C:Enterprise thick client v.#{Examples::PLATFORM_VER} not found" if\
31
+ THICK.nil?
32
+ THIN = thins(Examples::PLATFORM_VER).last
33
+ fail "1C:Enterprise thin client v.#{Examples::PLATFORM_VER} not found" if\
34
+ THIN.nil?
35
+ WEB = web_client('http://example.org', MIN_PLATFORM_VERSION)
36
+ end
37
+
38
+ module TEMPLATES
39
+ CF = File.expand_path('../templates/example_template.cf', __FILE__)
40
+ V8I = File.expand_path('../templates/example_template.v8i', __FILE__)
41
+ HELLO_EPF = File.expand_path('../templates/hello.epf', __FILE__)
42
+ end
43
+
44
+ module IbMaker
45
+ include AssLauncher::Api
46
+
47
+ def ibases
48
+ @ibases ||= {}
49
+ end
50
+
51
+ def rm(name)
52
+ fail 'Abstract method call'
53
+ end
54
+
55
+ def exists?(name)
56
+ File.exists? ib_file_path(name)
57
+ end
58
+
59
+ def ib_file_path(name)
60
+ File.join ib_dir(name), '1Cv8.1CD'
61
+ end
62
+
63
+ def ib_dir(name)
64
+ File.join ibases_root, name
65
+ end
66
+
67
+ def ibases_root
68
+ fail 'Abstract method call'
69
+ end
70
+
71
+ def make(name)
72
+ ibases[name] = make_ib(name)
73
+ end
74
+
75
+ def cl
76
+ CLIENTS::THICK
77
+ end
78
+
79
+ def make_ib(name)
80
+ conns = cs_file file: ib_dir(name)
81
+ build_ib(conns) unless exists? name
82
+ conns.path.to_s
83
+ end
84
+ private :make_ib
85
+
86
+ def build_ib(conns)
87
+ command = cl.command(:createinfobase) do
88
+ connection_string conns
89
+ end
90
+ command.run.wait.result.verify!
91
+ end
92
+ private :build_ib
93
+
94
+ def rm_all
95
+ ibases.keys.each do |name|
96
+ rm name
97
+ end
98
+ end
99
+ end
100
+
101
+ module TMP
102
+ extend AssLauncher::Api
103
+ module TmpIb
104
+ extend IbMaker
105
+ def self.rm(name)
106
+ FileUtils.rm_rf ibases[name] if File.exists? ibases[name]
107
+ end
108
+
109
+ def self.ibases_root
110
+ Dir.tmpdir
111
+ end
112
+
113
+ at_exit do
114
+ TmpIb.rm_all
115
+ end
116
+ end
117
+ EMPTY_IB = TmpIb.make('AssLauncher_Examples_EMPTY_IB')
118
+ EMPTY_IB_CS = cs_file file: EMPTY_IB
119
+ end
120
+ end
121
+
122
+ require "minitest/autorun"
@@ -0,0 +1,9 @@
1
+ [Info base 1]
2
+ Connect=Srvr="example.org:1541";Ref="ib1";
3
+ ClientConnectionSpeed=Normal
4
+ App=Auto
5
+
6
+ [Info base 2]
7
+ Connect=Srvr="example.org:1541";Ref="ib2";
8
+ ClientConnectionSpeed=Normal
9
+ App=Auto
Binary file
@@ -0,0 +1,408 @@
1
+ require 'example_helper'
2
+
3
+ module Examples
4
+ module TroublesWithCreateFileinfobase
5
+ describe "CREATEINFOBASE doesn't check self argument for valid connection string" do
6
+ extend AssLauncher::Api
7
+ # 1C:Enterprise thick client runned in CREATEINFOBASE mode
8
+ # not veryfies self argument for valid connection string and
9
+ # creates default infobase in user profile directory.
10
+ # It's buf or feature? I'm suppose it's bug.
11
+ conns = cs_file file: File.join(Dir.tmpdir, 'create_default_infobase.ib')
12
+
13
+ it 'Creates default infobase in user profile' do
14
+ command = CLIENTS::THICK.command :createinfobase do
15
+ connection_string conns
16
+ end
17
+
18
+ command.args.insert(1, '/L','en')
19
+
20
+ command.args[0].must_equal 'CREATEINFOBASE'
21
+ # Argument for CREATEINFOBASE is /L
22
+ command.args[1].must_equal '/L'
23
+ command.args[2].must_equal 'en'
24
+ # Nex is connection string
25
+ command.args[3].must_equal conns.createinfobase_args[0]
26
+
27
+ skip unless TROUBLES_EXECUTE_CONTROL::SHOW_TROBLES_WITH_CREATEINFOBASE
28
+ command.run.wait
29
+
30
+ # Infobase which we want not exists
31
+ File.exists?(conns.file).must_equal false
32
+
33
+ # But created infobase which we don't want
34
+ command.process_holder.result.success?.must_equal true
35
+ command.process_holder.result.assout =~\
36
+ /Creation of infobase \("File\s?=\s?"([^"]+)/i
37
+ created = Regexp.last_match[1]
38
+ created.must_match(/InfoBase\D?/i)
39
+
40
+ File.exists?(created).must_equal true
41
+ end
42
+
43
+ it 'Creates infobase which we want' do
44
+ command = CLIENTS::THICK.command :createinfobase do
45
+ connection_string conns
46
+ _L 'en'
47
+ end
48
+
49
+ command.args[0].must_equal 'CREATEINFOBASE'
50
+ # Argument for CREATEINFOBASE is connection string
51
+ command.args[1].must_equal conns.createinfobase_args[0]
52
+ # Nex is other
53
+ command.args[2].must_equal '/L'
54
+ command.args[3].must_equal 'en'
55
+
56
+ command.run.wait
57
+
58
+ # Created infobase which we want
59
+ command.process_holder.result.success?.must_equal true
60
+ command.process_holder.result.assout =~\
61
+ /Creation of infobase \("File\s?=\s?'([^']+)/i
62
+ created = Regexp.last_match[1]
63
+ command.args[1].must_include created
64
+ File.exists?(conns.file).must_equal true
65
+ end
66
+
67
+ after do
68
+ FileUtils.rm_rf conns.file if File.exists? conns.file
69
+ end
70
+
71
+ describe 'Solution with AssLauncher' do
72
+ it 'ThckClient verifies of argument for CREATEINFOBASE mode' do
73
+ e = proc {
74
+ CLIENTS::THICK.command(:createinfobase, ['bad connection srtring'])
75
+ }.must_raise ArgumentError
76
+ e.message.must_match(
77
+ /:createinfobase expects file or server connection string/i
78
+ )
79
+ end
80
+ end
81
+ end
82
+
83
+ describe 'CREATEINFOBASE fails if file connection string having double quote' do
84
+ infobasedir = File.join(Dir.tmpdir,
85
+ 'example_connection_string_with_double_quote.ib')
86
+ infobasedir = AssLauncher::Support::Platforms\
87
+ .path(infobasedir).win_string
88
+
89
+ before do
90
+ FileUtils.rm_rf infobasedir if File.exists? infobasedir
91
+ end
92
+
93
+ it "Fails if connection string double quoted" do
94
+ conns = "File=\"#{infobasedir}\""
95
+
96
+ # Path like C:\tempdir\infobase
97
+ infobasedir.wont_match(/\//)
98
+ # Double quoted path
99
+ conns.must_match(/File="(.+)"/i)
100
+
101
+ command = CLIENTS::THICK.command :createinfobase,
102
+ [conns, '/L', 'en']
103
+
104
+ command.run.wait
105
+
106
+ command.process_holder.result.exitstatus.wont_equal 0
107
+ command.process_holder.result.assout.must_match(
108
+ /Invalid path to file '1Cv8\.cdn'/i)
109
+ end
110
+
111
+ it 'Solution with ConnectionString::File' do
112
+ # ConnectionString::File converts connection string
113
+ # for CREATEINFOBASE mode from double quoted:
114
+ # 'File="pat";' to single quoted: "File='path';" string
115
+ extend AssLauncher::Api
116
+ conns = cs("File=\"#{infobasedir}\"")
117
+ # Like File='path'
118
+ conns.createinfobase_args[0].must_match(/File\s?=\s?'[^']+/)
119
+
120
+ command = CLIENTS::THICK.command :createinfobase,
121
+ conns.createinfobase_args + ['/L', 'en']
122
+
123
+ command.run.wait
124
+
125
+ # Created infobase which we want
126
+ command.process_holder.result.success?.must_equal true
127
+ command.process_holder.result.assout =~\
128
+ /Creation of infobase \("File\s?=\s?'([^']+)/i
129
+ created = Regexp.last_match[1]
130
+
131
+ conns.file.must_equal created
132
+ File.exists?(conns.file).must_equal true
133
+ end
134
+
135
+ after do
136
+ FileUtils.rm_rf infobasedir if File.exists? infobasedir
137
+ end
138
+ end
139
+
140
+ describe "CREATEINFOBASE doesn't understand paths with right slashes" do
141
+ # This case doesn't actual in Linux
142
+
143
+ infobasedir = File.join(Dir.tmpdir,
144
+ 'example_create_infobase_with_right_slashes.ib')
145
+
146
+ before do
147
+ FileUtils.rm_rf infobasedir if File.exists? infobasedir
148
+ end
149
+
150
+ describe 'Using single quote in connection string' do
151
+ conns = "File=\'#{infobasedir}\'"
152
+
153
+ it 'Fails CREATEINFOBASE' do
154
+ skip 'Not actual in Linux' if PLATFORM::LINUX
155
+
156
+ command = CLIENTS::THICK.command :createinfobase,
157
+ [conns, '/L', 'en']
158
+
159
+ command.run.wait
160
+
161
+ command.process_holder.result.success?.must_equal false
162
+ command.process_holder.result.assout.must_match(
163
+ /Invalid or missing parameters for connection to the Infobase/i)
164
+ end
165
+ end
166
+
167
+ describe 'Using double quote in connection string' do
168
+ conns = "File=\"#{infobasedir}\""
169
+
170
+ it 'Infobase is created not where you need' do
171
+ skip 'Not actual in Linux' if PLATFORM::LINUX
172
+ # Path like C:/tempdir/infobase
173
+ infobasedir.wont_match(/\\/)
174
+
175
+ command = CLIENTS::THICK.command :createinfobase,
176
+ [conns, '/L', 'en']
177
+
178
+ # This command creates or finds existing infobase files like 1Cv8.1CD
179
+ # in a root of the file system.
180
+ # On the machine where i'm writing this test, infobase was
181
+ # created in root of drive C:!!!
182
+ skip unless TROUBLES_EXECUTE_CONTROL::SHOW_TROBLES_WITH_CREATEINFOBASE
183
+ command.run.wait
184
+
185
+ # Exit status and assout:
186
+ if command.process_holder.result.exitstatus == 0
187
+ # First run test: created new infobase in root filesystem
188
+ command.process_holder.result.assout.must_match(
189
+ /Creation of infobase \("File=\\;.+\) completed successfully/i)
190
+ else
191
+ # Next runs test: found infobase files in root the file system
192
+ command.process_holder.result.assout.must_match(
193
+ /The Infobase specified already exists/i)
194
+ end
195
+
196
+ # Realy infobase not exists
197
+ File.exists?(infobasedir).must_equal false
198
+ end
199
+ end
200
+
201
+ after do
202
+ FileUtils.rm_rf infobasedir if File.exists? infobasedir
203
+ end
204
+ end
205
+
206
+ describe "CREATEINFOBASE doesn't understand relative paths beginning from `..'" do
207
+ require 'pathname'
208
+ infobasedir = File.join('..',
209
+ 'trouble_not_undersnant_relative_path.ib',
210
+ )
211
+ infobasedir = infobasedir.gsub('/','\\')\
212
+
213
+ describe 'Using single quoted connection string' do
214
+ it 'Infobase is created not where you need' do
215
+ conns = "File='#{infobasedir}'"
216
+ Pathname.new(infobasedir).relative?.must_equal true
217
+
218
+ command = CLIENTS::THICK.command :createinfobase,
219
+ [conns, '/L', 'en']
220
+
221
+ skip unless TROUBLES_EXECUTE_CONTROL::SHOW_TROBLES_WITH_CREATEINFOBASE
222
+
223
+ # This command creates or finds existing infobase
224
+ # in a current directory not a parent!.
225
+ command.run.wait
226
+
227
+ # Exit status and assout:
228
+ if command.process_holder.result.exitstatus == 0
229
+ # First run test: created new infobase in the current directory
230
+ command.process_holder.result.assout.must_match(
231
+ /Creation of infobase \("File='\.\.\\trouble_.+\) \S+ successfully/i)
232
+ else
233
+ # Next runs test: found infobase files in the current directory
234
+ command.process_holder.result.assout.must_match(
235
+ /The Infobase specified already exists/i)
236
+ end
237
+
238
+ # Realy infobase not exists
239
+ File.exists?(infobasedir).must_equal false
240
+ # Infobase created in the current directory created
241
+ File.exists?(infobasedir.gsub('..','.')).must_equal true
242
+
243
+ end
244
+ end
245
+
246
+ describe 'Using double quoted connection string' do
247
+ it "Fails if connection string double quoted" do
248
+ conns = "File=\"#{infobasedir}\""
249
+ Pathname.new(infobasedir).relative?.must_equal true
250
+
251
+ command = CLIENTS::THICK.command :createinfobase,
252
+ [conns, '/L', 'en']
253
+
254
+ command.run.wait
255
+
256
+ command.process_holder.result.exitstatus.wont_equal 0
257
+ command.process_holder.result.assout.must_match(
258
+ /Invalid path to file '1Cv8\.cdn'/i)
259
+ end
260
+ end
261
+
262
+ it 'Solution with ConnectionString::File' do
263
+ require 'pathname'
264
+ extend AssLauncher::Api
265
+ # ConnectionString::File converts relative path
266
+ # to absolute for CREATEINFOBASE argument
267
+
268
+ conns = cs_file file: infobasedir
269
+ Pathname.new(conns.file).relative?.must_equal true
270
+
271
+ newcs = cs(conns.createinfobase_args[0].tr('\'','"'))
272
+
273
+ Pathname.new(newcs.file).absolute?.must_equal true
274
+ end
275
+
276
+ after do
277
+ FileUtils.rm_rf infobasedir if File.exists? infobasedir
278
+ end
279
+ end
280
+
281
+ describe "CREATEINFOBASE doesn't understand paths having `-'" do
282
+ extend AssLauncher::Support::Platforms
283
+ root = FileUtils.mkdir_p(File.join(Dir.tmpdir,'trouble-create-infobase'))[0]
284
+
285
+ infobasedir = File.join(root, 'tmp.ib')
286
+ infobasedir = AssLauncher::Support::Platforms\
287
+ .path(infobasedir).win_string
288
+
289
+ describe 'Using single quoted connection' do
290
+ it 'Fails CREATEINFOBASE' do
291
+ extend AssLauncher::Api
292
+
293
+ File.exists?(root).must_equal true
294
+ conns = cs_file file: infobasedir
295
+
296
+ command = CLIENTS::THICK.command :createinfobase,
297
+ conns.createinfobase_args + ['/L', 'en']
298
+
299
+ command.run.wait
300
+
301
+ command.process_holder.result.success?.must_equal false
302
+ command.process_holder.result.assout.must_match(
303
+ /Invalid or missing parameters for connection to the Infobase/i)
304
+ end
305
+ end
306
+
307
+ describe 'Using double quoted connection string' do
308
+ it 'Infobase is created not where you need' do
309
+ File.exists?(root).must_equal true
310
+ conns = "File=\"#{infobasedir}\""
311
+
312
+ command = CLIENTS::THICK.command :createinfobase,
313
+ [conns, '/L', 'en']
314
+
315
+ # This command creates or finds existng infobase files like 1Cv8.1CD
316
+ # in a root of the file system.
317
+ # On the machine where i'm writing this test, infobase was
318
+ # created in root of drive C:!!!
319
+ skip unless TROUBLES_EXECUTE_CONTROL::SHOW_TROBLES_WITH_CREATEINFOBASE
320
+ command.run.wait
321
+
322
+ # Exit status and assout:
323
+ if command.process_holder.result.exitstatus == 0
324
+ # First run test: created new infobase in root filesystem
325
+ command.process_holder.result.assout.must_match(
326
+ /Creation of infobase \("File=\\;.+\) completed successfully/i)
327
+ else
328
+ # Next runs test: found infobase files in root of the file system
329
+ command.process_holder.result.assout.must_match(
330
+ /The Infobase specified already exists/i)
331
+ end
332
+
333
+ # Realy infobase not exists
334
+ File.exists?(infobasedir).must_equal false
335
+ end
336
+ end
337
+
338
+ before do
339
+ FileUtils.rm_rf infobasedir if File.exists? infobasedir
340
+ end
341
+
342
+ after do
343
+ FileUtils.rm_rf infobasedir if File.exists? infobasedir
344
+ end
345
+ end
346
+
347
+ describe "CREATEINFOBASE doesn't understand paths having spaces" do
348
+ extend AssLauncher::Support::Platforms
349
+ root = FileUtils.mkdir_p(File.join(Dir.tmpdir,'trouble create infobase'))[0]
350
+
351
+ infobasedir = File.join(root, 'tmp.ib')
352
+ infobasedir = AssLauncher::Support::Platforms\
353
+ .path(infobasedir).win_string
354
+
355
+ it 'Solution with ConnectionString::File' do
356
+ extend AssLauncher::Api
357
+
358
+ File.exists?(root).must_equal true
359
+ # ConnectionString::File converts connection string
360
+ # for CREATEINFOBASE mode from double quoted:
361
+ # 'File="pat";' to single quoted: "File='path';" string
362
+ conns = cs_file file: infobasedir
363
+
364
+ command = CLIENTS::THICK.command :createinfobase,
365
+ conns.createinfobase_args + ['/L', 'en']
366
+
367
+ command.run.wait
368
+
369
+ # Created infobase which we want
370
+ command.process_holder.result.success?.must_equal true
371
+ command.process_holder.result.assout =~\
372
+ /Creation of infobase \("File\s?=\s?'([^']+)/i
373
+ created = Regexp.last_match[1]
374
+
375
+ conns.file.must_equal created
376
+ File.exists?(conns.file).must_equal true
377
+ end
378
+
379
+ describe 'Using double quoted connection string' do
380
+ it 'Fails CREATEINFOBASE' do
381
+ File.exists?(root).must_equal true
382
+ conns = "File=\"#{infobasedir}\""
383
+
384
+ command = CLIENTS::THICK.command :createinfobase,
385
+ [conns, '/L', 'en']
386
+
387
+ # This command creates or finds existng infobase files like 1Cv8.1CD
388
+ # in a root of the file system.
389
+ # On the machine where i'm writing this test, infobase was
390
+ # created in root of drive C:!!!
391
+ command.run.wait
392
+
393
+ command.process_holder.result.success?.must_equal false
394
+ command.process_holder.result.assout.must_match(
395
+ /Invalid or missing parameters for connection to the Infobase/i)
396
+ end
397
+ end
398
+
399
+ before do
400
+ FileUtils.rm_rf infobasedir if File.exists? infobasedir
401
+ end
402
+
403
+ after do
404
+ FileUtils.rm_rf infobasedir if File.exists? infobasedir
405
+ end
406
+ end
407
+ end
408
+ end