luislavena-rake 0.8.3.99

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 (104) hide show
  1. data/CHANGES +422 -0
  2. data/MIT-LICENSE +21 -0
  3. data/README +196 -0
  4. data/Rakefile +416 -0
  5. data/TODO +20 -0
  6. data/bin/rake +31 -0
  7. data/doc/command_line_usage.rdoc +102 -0
  8. data/doc/example/Rakefile1 +38 -0
  9. data/doc/example/Rakefile2 +35 -0
  10. data/doc/example/a.c +6 -0
  11. data/doc/example/b.c +6 -0
  12. data/doc/example/main.c +11 -0
  13. data/doc/glossary.rdoc +51 -0
  14. data/doc/jamis.rb +591 -0
  15. data/doc/proto_rake.rdoc +127 -0
  16. data/doc/rake.1.gz +0 -0
  17. data/doc/rakefile.rdoc +534 -0
  18. data/doc/rational.rdoc +151 -0
  19. data/doc/release_notes/rake-0.4.14.rdoc +23 -0
  20. data/doc/release_notes/rake-0.4.15.rdoc +35 -0
  21. data/doc/release_notes/rake-0.5.0.rdoc +53 -0
  22. data/doc/release_notes/rake-0.5.3.rdoc +78 -0
  23. data/doc/release_notes/rake-0.5.4.rdoc +46 -0
  24. data/doc/release_notes/rake-0.6.0.rdoc +141 -0
  25. data/doc/release_notes/rake-0.7.0.rdoc +119 -0
  26. data/doc/release_notes/rake-0.7.1.rdoc +59 -0
  27. data/doc/release_notes/rake-0.7.2.rdoc +121 -0
  28. data/doc/release_notes/rake-0.7.3.rdoc +47 -0
  29. data/doc/release_notes/rake-0.8.0.rdoc +114 -0
  30. data/doc/release_notes/rake-0.8.2.rdoc +165 -0
  31. data/doc/release_notes/rake-0.8.3.rdoc +112 -0
  32. data/doc/release_notes/rake-0.8.4.rdoc +125 -0
  33. data/install.rb +88 -0
  34. data/lib/rake.rb +2478 -0
  35. data/lib/rake/classic_namespace.rb +8 -0
  36. data/lib/rake/clean.rb +33 -0
  37. data/lib/rake/contrib/compositepublisher.rb +24 -0
  38. data/lib/rake/contrib/ftptools.rb +153 -0
  39. data/lib/rake/contrib/publisher.rb +75 -0
  40. data/lib/rake/contrib/rubyforgepublisher.rb +18 -0
  41. data/lib/rake/contrib/sshpublisher.rb +47 -0
  42. data/lib/rake/contrib/sys.rb +209 -0
  43. data/lib/rake/gempackagetask.rb +97 -0
  44. data/lib/rake/loaders/makefile.rb +42 -0
  45. data/lib/rake/packagetask.rb +184 -0
  46. data/lib/rake/rake_test_loader.rb +5 -0
  47. data/lib/rake/rdoctask.rb +209 -0
  48. data/lib/rake/ruby182_test_unit_fix.rb +23 -0
  49. data/lib/rake/runtest.rb +23 -0
  50. data/lib/rake/tasklib.rb +23 -0
  51. data/lib/rake/testtask.rb +161 -0
  52. data/lib/rake/win32.rb +57 -0
  53. data/test/capture_stdout.rb +26 -0
  54. data/test/check_expansion.rb +5 -0
  55. data/test/contrib/test_sys.rb +47 -0
  56. data/test/data/chains/Rakefile +15 -0
  57. data/test/data/default/Rakefile +19 -0
  58. data/test/data/dryrun/Rakefile +22 -0
  59. data/test/data/file_creation_task/Rakefile +33 -0
  60. data/test/data/imports/Rakefile +19 -0
  61. data/test/data/imports/deps.mf +1 -0
  62. data/test/data/multidesc/Rakefile +17 -0
  63. data/test/data/namespace/Rakefile +57 -0
  64. data/test/data/rakelib/test1.rb +3 -0
  65. data/test/data/rbext/rakefile.rb +3 -0
  66. data/test/data/sample.mf +14 -0
  67. data/test/data/statusreturn/Rakefile +8 -0
  68. data/test/data/unittest/Rakefile +1 -0
  69. data/test/filecreation.rb +32 -0
  70. data/test/functional.rb +15 -0
  71. data/test/in_environment.rb +30 -0
  72. data/test/rake_test_setup.rb +24 -0
  73. data/test/reqfile.rb +3 -0
  74. data/test/reqfile2.rb +3 -0
  75. data/test/session_functional.rb +339 -0
  76. data/test/shellcommand.rb +3 -0
  77. data/test/test_application.rb +713 -0
  78. data/test/test_clean.rb +14 -0
  79. data/test/test_definitions.rb +85 -0
  80. data/test/test_earlytime.rb +35 -0
  81. data/test/test_extension.rb +63 -0
  82. data/test/test_file_creation_task.rb +62 -0
  83. data/test/test_file_task.rb +143 -0
  84. data/test/test_filelist.rb +620 -0
  85. data/test/test_fileutils.rb +266 -0
  86. data/test/test_ftp.rb +59 -0
  87. data/test/test_invocation_chain.rb +81 -0
  88. data/test/test_makefile_loader.rb +26 -0
  89. data/test/test_multitask.rb +45 -0
  90. data/test/test_namespace.rb +55 -0
  91. data/test/test_package_task.rb +118 -0
  92. data/test/test_pathmap.rb +210 -0
  93. data/test/test_rake.rb +41 -0
  94. data/test/test_rdoc_task.rb +88 -0
  95. data/test/test_require.rb +35 -0
  96. data/test/test_rules.rb +349 -0
  97. data/test/test_task_arguments.rb +89 -0
  98. data/test/test_task_manager.rb +173 -0
  99. data/test/test_tasklib.rb +12 -0
  100. data/test/test_tasks.rb +374 -0
  101. data/test/test_test_task.rb +77 -0
  102. data/test/test_top_level_functions.rb +86 -0
  103. data/test/test_win32.rb +72 -0
  104. metadata +186 -0
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ exit((ARGV[0] || "0").to_i)
@@ -0,0 +1,713 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ begin
4
+ require 'rubygems'
5
+ rescue LoadError
6
+ # got no gems
7
+ end
8
+
9
+ require 'test/unit'
10
+ require 'rake'
11
+ require 'test/rake_test_setup'
12
+ require 'test/capture_stdout'
13
+ require 'test/in_environment'
14
+
15
+ TESTING_REQUIRE = [ ]
16
+
17
+ ######################################################################
18
+ class TestApplication < Test::Unit::TestCase
19
+ include CaptureStdout
20
+ include InEnvironment
21
+ include TestMethods
22
+
23
+ def setup
24
+ @app = Rake::Application.new
25
+ @app.options.rakelib = []
26
+ end
27
+
28
+ def test_constant_warning
29
+ err = capture_stderr do @app.instance_eval { const_warning("Task") } end
30
+ assert_match(/warning/i, err)
31
+ assert_match(/deprecated/i, err)
32
+ assert_match(/Task/i, err)
33
+ end
34
+
35
+ def test_display_tasks
36
+ @app.options.show_task_pattern = //
37
+ @app.last_description = "COMMENT"
38
+ @app.define_task(Rake::Task, "t")
39
+ out = capture_stdout do @app.instance_eval { display_tasks_and_comments } end
40
+ assert_match(/^rake t/, out)
41
+ assert_match(/# COMMENT/, out)
42
+ end
43
+
44
+ def test_display_tasks_with_long_comments
45
+ in_environment('RAKE_COLUMNS' => '80') do
46
+ @app.options.show_task_pattern = //
47
+ @app.last_description = "1234567890" * 8
48
+ @app.define_task(Rake::Task, "t")
49
+ out = capture_stdout do @app.instance_eval { display_tasks_and_comments } end
50
+ assert_match(/^rake t/, out)
51
+ assert_match(/# 12345678901234567890123456789012345678901234567890123456789012345\.\.\./, out)
52
+ end
53
+ end
54
+
55
+ def test_display_tasks_with_task_name_wider_than_tty_display
56
+ in_environment('RAKE_COLUMNS' => '80') do
57
+ @app.options.show_task_pattern = //
58
+ description = "something short"
59
+ task_name = "task name" * 80
60
+ @app.last_description = "something short"
61
+ @app.define_task(Rake::Task, task_name )
62
+ out = capture_stdout do @app.instance_eval { display_tasks_and_comments } end
63
+ # Ensure the entire task name is output and we end up showing no description
64
+ assert_match(/rake #{task_name} # .../, out)
65
+ end
66
+ end
67
+
68
+ def test_display_tasks_with_very_long_task_name_to_a_non_tty_shows_name_and_comment
69
+ @app.options.show_task_pattern = //
70
+ @app.tty_output = false
71
+ description = "something short"
72
+ task_name = "task name" * 80
73
+ @app.last_description = "something short"
74
+ @app.define_task(Rake::Task, task_name )
75
+ out = capture_stdout do @app.instance_eval { display_tasks_and_comments } end
76
+ # Ensure the entire task name is output and we end up showing no description
77
+ assert_match(/rake #{task_name} # #{description}/, out)
78
+ end
79
+
80
+ def test_display_tasks_with_long_comments_to_a_non_tty_shows_entire_comment
81
+ @app.options.show_task_pattern = //
82
+ @app.tty_output = false
83
+ @app.last_description = "1234567890" * 8
84
+ @app.define_task(Rake::Task, "t")
85
+ out = capture_stdout do @app.instance_eval { display_tasks_and_comments } end
86
+ assert_match(/^rake t/, out)
87
+ assert_match(/# #{@app.last_description}/, out)
88
+ end
89
+
90
+ def test_display_tasks_with_long_comments_to_a_non_tty_with_columns_set_truncates_comments
91
+ in_environment("RAKE_COLUMNS" => '80') do
92
+ @app.options.show_task_pattern = //
93
+ @app.tty_output = false
94
+ @app.last_description = "1234567890" * 8
95
+ @app.define_task(Rake::Task, "t")
96
+ out = capture_stdout do @app.instance_eval { display_tasks_and_comments } end
97
+ assert_match(/^rake t/, out)
98
+ assert_match(/# 12345678901234567890123456789012345678901234567890123456789012345\.\.\./, out)
99
+ end
100
+ end
101
+
102
+ def test_display_tasks_with_full_descriptions
103
+ @app.options.show_task_pattern = //
104
+ @app.options.full_description = true
105
+ @app.last_description = "COMMENT"
106
+ @app.define_task(Rake::Task, "t")
107
+ out = capture_stdout do @app.instance_eval { display_tasks_and_comments } end
108
+ assert_match(/^rake t$/, out)
109
+ assert_match(/^ {4}COMMENT$/, out)
110
+ end
111
+
112
+ def test_finding_rakefile
113
+ assert_match(/Rakefile/i, @app.instance_eval { have_rakefile })
114
+ end
115
+
116
+ def test_not_finding_rakefile
117
+ @app.instance_eval { @rakefiles = ['NEVER_FOUND'] }
118
+ assert( ! @app.instance_eval do have_rakefile end )
119
+ assert_nil @app.rakefile
120
+ end
121
+
122
+ def test_load_rakefile
123
+ in_environment("PWD" => "test/data/unittest") do
124
+ @app.instance_eval do
125
+ handle_options
126
+ options.silent = true
127
+ load_rakefile
128
+ end
129
+ assert_equal "rakefile", @app.rakefile.downcase
130
+ assert_match(%r(unittest$), Dir.pwd)
131
+ end
132
+ end
133
+
134
+ def test_load_rakefile_from_subdir
135
+ in_environment("PWD" => "test/data/unittest/subdir") do
136
+ @app.instance_eval do
137
+ handle_options
138
+ options.silent = true
139
+ load_rakefile
140
+ end
141
+ assert_equal "rakefile", @app.rakefile.downcase
142
+ assert_match(%r(unittest$), Dir.pwd)
143
+ end
144
+ end
145
+
146
+ def test_load_rakefile_not_found
147
+ in_environment("PWD" => "/", "RAKE_SYSTEM" => 'not_exist') do
148
+ @app.instance_eval do
149
+ handle_options
150
+ options.silent = true
151
+ end
152
+ ex = assert_exception(RuntimeError) do
153
+ @app.instance_eval do raw_load_rakefile end
154
+ end
155
+ assert_match(/no rakefile found/i, ex.message)
156
+ end
157
+ end
158
+
159
+ def test_load_from_system_rakefile
160
+ in_environment('RAKE_SYSTEM' => 'test/data/sys') do
161
+ @app.options.rakelib = []
162
+ @app.instance_eval do
163
+ handle_options
164
+ options.silent = true
165
+ options.load_system = true
166
+ options.rakelib = []
167
+ load_rakefile
168
+ end
169
+ assert_equal "test/data/sys", @app.system_dir
170
+ assert_nil @app.rakefile
171
+ end
172
+ end
173
+
174
+ def test_load_from_system_rakefile_on_unix
175
+ flexmock(Rake::Win32, :windows? => false,
176
+ :win32_system_dir => nil)
177
+ flexmock(@app, :load => nil)
178
+ flexmock(File).should_receive(:expand_path).with("~").and_return("/HOME")
179
+ flexmock(File).should_receive(:expand_path).and_return { |fn| fn }
180
+
181
+ in_environment('RAKE_SYSTEM' => nil) do
182
+ @app.options.rakelib = []
183
+ @app.instance_eval do
184
+ handle_options
185
+ options.silent = true
186
+ options.load_system = true
187
+ options.rakelib = []
188
+ load_rakefile
189
+ end
190
+ assert_equal "/HOME/.rake", @app.system_dir
191
+ end
192
+ end
193
+
194
+ def test_windows
195
+ assert ! (@app.windows? && @app.unix?)
196
+ end
197
+
198
+ def test_load_from_system_rakefile_on_windows
199
+ flexmock(Rake::Win32, :windows? => true)
200
+ flexmock(@app, :standard_system_dir => "XX")
201
+ flexmock(@app).should_receive(:load).and_return(nil)
202
+ flexmock(File).should_receive(:directory?).with("D:/AD/Rake").and_return(true)
203
+ in_environment('RAKE_SYSTEM' => nil, 'HOME' => nil, 'HOMEDRIVE' => 'D:', 'HOMEPATH' => '\\AD') do
204
+ @app.options.rakelib = []
205
+ @app.instance_eval do
206
+ handle_options
207
+ options.silent = true
208
+ options.load_system = true
209
+ options.rakelib = []
210
+ load_rakefile
211
+ end
212
+ assert_equal "D:/AD/Rake", @app.system_dir
213
+ end
214
+ end
215
+
216
+ def test_loading_imports
217
+ mock = flexmock("loader")
218
+ mock.should_receive(:load).with("x.dummy").once
219
+ @app.instance_eval do
220
+ add_loader("dummy", mock)
221
+ add_import("x.dummy")
222
+ load_imports
223
+ end
224
+ end
225
+
226
+ def test_building_imported_files_on_demand
227
+ mock = flexmock("loader")
228
+ mock.should_receive(:load).with("x.dummy").once
229
+ mock.should_receive(:make_dummy).with_no_args.once
230
+ @app.instance_eval do
231
+ intern(Rake::Task, "x.dummy").enhance do mock.make_dummy end
232
+ add_loader("dummy", mock)
233
+ add_import("x.dummy")
234
+ load_imports
235
+ end
236
+ end
237
+
238
+ def test_handle_options__should_strip_options_from_ARGV
239
+ assert !@app.options.trace
240
+
241
+ valid_option = '--trace'
242
+ ARGV.clear
243
+ ARGV << valid_option
244
+
245
+ @app.handle_options
246
+
247
+ assert !ARGV.include?(valid_option)
248
+ assert @app.options.trace
249
+ end
250
+
251
+ def test_good_run
252
+ ran = false
253
+ ARGV.clear
254
+ ARGV << '--rakelib=""'
255
+ @app.options.silent = true
256
+ @app.instance_eval do
257
+ intern(Rake::Task, "default").enhance { ran = true }
258
+ end
259
+ in_environment("PWD" => "test/data/default") do
260
+ @app.run
261
+ end
262
+ assert ran
263
+ end
264
+
265
+ def test_display_task_run
266
+ ran = false
267
+ ARGV.clear
268
+ ARGV << '-f' << '-s' << '--tasks' << '--rakelib=""'
269
+ @app.last_description = "COMMENT"
270
+ @app.define_task(Rake::Task, "default")
271
+ out = capture_stdout { @app.run }
272
+ assert @app.options.show_tasks
273
+ assert ! ran
274
+ assert_match(/rake default/, out)
275
+ assert_match(/# COMMENT/, out)
276
+ end
277
+
278
+ def test_display_prereqs
279
+ ran = false
280
+ ARGV.clear
281
+ ARGV << '-f' << '-s' << '--prereqs' << '--rakelib=""'
282
+ @app.last_description = "COMMENT"
283
+ t = @app.define_task(Rake::Task, "default")
284
+ t.enhance([:a, :b])
285
+ @app.define_task(Rake::Task, "a")
286
+ @app.define_task(Rake::Task, "b")
287
+ out = capture_stdout { @app.run }
288
+ assert @app.options.show_prereqs
289
+ assert ! ran
290
+ assert_match(/rake a$/, out)
291
+ assert_match(/rake b$/, out)
292
+ assert_match(/rake default\n( *(a|b)\n){2}/m, out)
293
+ end
294
+
295
+ def test_bad_run
296
+ @app.intern(Rake::Task, "default").enhance { fail }
297
+ ARGV.clear
298
+ ARGV << '-f' << '-s' << '--rakelib=""'
299
+ assert_exception(SystemExit) {
300
+ err = capture_stderr { @app.run }
301
+ assert_match(/see full trace/, err)
302
+ }
303
+ ensure
304
+ ARGV.clear
305
+ end
306
+
307
+ def test_bad_run_with_trace
308
+ @app.intern(Rake::Task, "default").enhance { fail }
309
+ ARGV.clear
310
+ ARGV << '-f' << '-s' << '-t'
311
+ assert_exception(SystemExit) {
312
+ err = capture_stderr { capture_stdout { @app.run } }
313
+ assert_no_match(/see full trace/, err)
314
+ }
315
+ ensure
316
+ ARGV.clear
317
+ end
318
+
319
+ def test_run_with_bad_options
320
+ @app.intern(Rake::Task, "default").enhance { fail }
321
+ ARGV.clear
322
+ ARGV << '-f' << '-s' << '--xyzzy'
323
+ assert_exception(SystemExit) {
324
+ err = capture_stderr { capture_stdout { @app.run } }
325
+ }
326
+ ensure
327
+ ARGV.clear
328
+ end
329
+ end
330
+
331
+
332
+ ######################################################################
333
+ class TestApplicationOptions < Test::Unit::TestCase
334
+ include CaptureStdout
335
+ include TestMethods
336
+
337
+ def setup
338
+ clear_argv
339
+ RakeFileUtils.verbose_flag = false
340
+ RakeFileUtils.nowrite_flag = false
341
+ TESTING_REQUIRE.clear
342
+ end
343
+
344
+ def teardown
345
+ clear_argv
346
+ RakeFileUtils.verbose_flag = false
347
+ RakeFileUtils.nowrite_flag = false
348
+ end
349
+
350
+ def clear_argv
351
+ while ! ARGV.empty?
352
+ ARGV.pop
353
+ end
354
+ end
355
+
356
+ def test_default_options
357
+ opts = command_line
358
+ assert_nil opts.classic_namespace
359
+ assert_nil opts.dryrun
360
+ assert_nil opts.full_description
361
+ assert_nil opts.ignore_system
362
+ assert_nil opts.load_system
363
+ assert_nil opts.nosearch
364
+ assert_equal ['rakelib'], opts.rakelib
365
+ assert_nil opts.show_prereqs
366
+ assert_nil opts.show_task_pattern
367
+ assert_nil opts.show_tasks
368
+ assert_nil opts.silent
369
+ assert_nil opts.trace
370
+ assert_equal ['rakelib'], opts.rakelib
371
+ assert ! RakeFileUtils.verbose_flag
372
+ assert ! RakeFileUtils.nowrite_flag
373
+ end
374
+
375
+ def test_dry_run
376
+ flags('--dry-run', '-n') do |opts|
377
+ assert opts.dryrun
378
+ assert opts.trace
379
+ assert RakeFileUtils.verbose_flag
380
+ assert RakeFileUtils.nowrite_flag
381
+ end
382
+ end
383
+
384
+ def test_describe
385
+ flags('--describe') do |opts|
386
+ assert opts.full_description
387
+ assert opts.show_tasks
388
+ assert_equal(//.to_s, opts.show_task_pattern.to_s)
389
+ end
390
+ end
391
+
392
+ def test_describe_with_pattern
393
+ flags('--describe=X') do |opts|
394
+ assert opts.full_description
395
+ assert opts.show_tasks
396
+ assert_equal(/X/.to_s, opts.show_task_pattern.to_s)
397
+ end
398
+ end
399
+
400
+ def test_execute
401
+ $xyzzy = 0
402
+ flags('--execute=$xyzzy=1', '-e $xyzzy=1') do |opts|
403
+ assert_equal 1, $xyzzy
404
+ assert_equal :exit, @exit
405
+ $xyzzy = 0
406
+ end
407
+ end
408
+
409
+ def test_execute_and_continue
410
+ $xyzzy = 0
411
+ flags('--execute-continue=$xyzzy=1', '-E $xyzzy=1') do |opts|
412
+ assert_equal 1, $xyzzy
413
+ assert_not_equal :exit, @exit
414
+ $xyzzy = 0
415
+ end
416
+ end
417
+
418
+ def test_execute_and_print
419
+ $xyzzy = 0
420
+ flags('--execute-print=$xyzzy="pugh"', '-p $xyzzy="pugh"') do |opts|
421
+ assert_equal 'pugh', $xyzzy
422
+ assert_equal :exit, @exit
423
+ assert_match(/^pugh$/, @out)
424
+ $xyzzy = 0
425
+ end
426
+ end
427
+
428
+ def test_help
429
+ flags('--help', '-H', '-h') do |opts|
430
+ assert_match(/\Arake/, @out)
431
+ assert_match(/\boptions\b/, @out)
432
+ assert_match(/\btargets\b/, @out)
433
+ assert_equal :exit, @exit
434
+ assert_equal :exit, @exit
435
+ end
436
+ end
437
+
438
+ def test_libdir
439
+ flags(['--libdir', 'xx'], ['-I', 'xx'], ['-Ixx']) do |opts|
440
+ $:.include?('xx')
441
+ end
442
+ ensure
443
+ $:.delete('xx')
444
+ end
445
+
446
+ def test_rakefile
447
+ flags(['--rakefile', 'RF'], ['--rakefile=RF'], ['-f', 'RF'], ['-fRF']) do |opts|
448
+ assert_equal ['RF'], @app.instance_eval { @rakefiles }
449
+ end
450
+ end
451
+
452
+ def test_rakelib
453
+ flags(['--rakelibdir', 'A:B:C'], ['--rakelibdir=A:B:C'], ['-R', 'A:B:C'], ['-RA:B:C']) do |opts|
454
+ assert_equal ['A', 'B', 'C'], opts.rakelib
455
+ end
456
+ end
457
+
458
+ def test_require
459
+ flags(['--require', 'test/reqfile'], '-rtest/reqfile2', '-rtest/reqfile3') do |opts|
460
+ end
461
+ assert TESTING_REQUIRE.include?(1)
462
+ assert TESTING_REQUIRE.include?(2)
463
+ assert TESTING_REQUIRE.include?(3)
464
+ assert_equal 3, TESTING_REQUIRE.size
465
+ end
466
+
467
+ def test_missing_require
468
+ ex = assert_exception(LoadError) do
469
+ flags(['--require', 'test/missing']) do |opts|
470
+ end
471
+ end
472
+ assert_match(/no such file/, ex.message)
473
+ assert_match(/test\/missing/, ex.message)
474
+ end
475
+
476
+ def test_prereqs
477
+ flags('--prereqs', '-P') do |opts|
478
+ assert opts.show_prereqs
479
+ end
480
+ end
481
+
482
+ def test_quiet
483
+ flags('--quiet', '-q') do |opts|
484
+ assert ! RakeFileUtils.verbose_flag
485
+ assert ! opts.silent
486
+ end
487
+ end
488
+
489
+ def test_no_search
490
+ flags('--nosearch', '--no-search', '-N') do |opts|
491
+ assert opts.nosearch
492
+ end
493
+ end
494
+
495
+ def test_silent
496
+ flags('--silent', '-s') do |opts|
497
+ assert ! RakeFileUtils.verbose_flag
498
+ assert opts.silent
499
+ end
500
+ end
501
+
502
+ def test_system
503
+ flags('--system', '-g') do |opts|
504
+ assert opts.load_system
505
+ end
506
+ end
507
+
508
+ def test_no_system
509
+ flags('--no-system', '-G') do |opts|
510
+ assert opts.ignore_system
511
+ end
512
+ end
513
+
514
+ def test_trace
515
+ flags('--trace', '-t') do |opts|
516
+ assert opts.trace
517
+ assert RakeFileUtils.verbose_flag
518
+ assert ! RakeFileUtils.nowrite_flag
519
+ end
520
+ end
521
+
522
+ def test_trace_rules
523
+ flags('--rules') do |opts|
524
+ assert opts.trace_rules
525
+ end
526
+ end
527
+
528
+ def test_tasks
529
+ flags('--tasks', '-T') do |opts|
530
+ assert opts.show_tasks
531
+ assert_equal(//.to_s, opts.show_task_pattern.to_s)
532
+ end
533
+ flags(['--tasks', 'xyz'], ['-Txyz']) do |opts|
534
+ assert opts.show_tasks
535
+ assert_equal(/xyz/, opts.show_task_pattern)
536
+ end
537
+ end
538
+
539
+ def test_verbose
540
+ flags('--verbose', '-V') do |opts|
541
+ assert RakeFileUtils.verbose_flag
542
+ assert ! opts.silent
543
+ end
544
+ end
545
+
546
+ def test_version
547
+ flags('--version', '-V') do |opts|
548
+ assert_match(/\bversion\b/, @out)
549
+ assert_match(/\b#{RAKEVERSION}\b/, @out)
550
+ assert_equal :exit, @exit
551
+ end
552
+ end
553
+
554
+ def test_classic_namespace
555
+ flags(['--classic-namespace'], ['-C', '-T', '-P', '-n', '-s', '-t']) do |opts|
556
+ assert opts.classic_namespace
557
+ assert_equal opts.show_tasks, $show_tasks
558
+ assert_equal opts.show_prereqs, $show_prereqs
559
+ assert_equal opts.trace, $trace
560
+ assert_equal opts.dryrun, $dryrun
561
+ assert_equal opts.silent, $silent
562
+ end
563
+ end
564
+
565
+ def test_bad_option
566
+ capture_stderr do
567
+ ex = assert_exception(OptionParser::InvalidOption) do
568
+ flags('--bad-option')
569
+ end
570
+ if ex.message =~ /^While/ # Ruby 1.9 error message
571
+ assert_match(/while parsing/i, ex.message)
572
+ else # Ruby 1.8 error message
573
+ assert_match(/(invalid|unrecognized) option/i, ex.message)
574
+ assert_match(/--bad-option/, ex.message)
575
+ end
576
+ end
577
+ end
578
+
579
+ def test_task_collection
580
+ command_line("a", "b")
581
+ assert_equal ["a", "b"], @tasks.sort
582
+ end
583
+
584
+ def test_default_task_collection
585
+ command_line()
586
+ assert_equal ["default"], @tasks
587
+ end
588
+
589
+ def test_environment_definition
590
+ ENV.delete('TESTKEY')
591
+ command_line("a", "TESTKEY=12")
592
+ assert_equal ["a"], @tasks.sort
593
+ assert '12', ENV['TESTKEY']
594
+ end
595
+
596
+ private
597
+
598
+ def flags(*sets)
599
+ sets.each do |set|
600
+ ARGV.clear
601
+ @out = capture_stdout {
602
+ @exit = catch(:system_exit) { opts = command_line(*set) }
603
+ }
604
+ yield(@app.options) if block_given?
605
+ end
606
+ end
607
+
608
+ def command_line(*options)
609
+ options.each do |opt| ARGV << opt end
610
+ @app = Rake::Application.new
611
+ def @app.exit(*args)
612
+ throw :system_exit, :exit
613
+ end
614
+ @app.instance_eval do
615
+ handle_options
616
+ collect_tasks
617
+ end
618
+ @tasks = @app.top_level_tasks
619
+ @app.options
620
+ end
621
+ end
622
+
623
+ class TestTaskArgumentParsing < Test::Unit::TestCase
624
+ def setup
625
+ @app = Rake::Application.new
626
+ end
627
+
628
+ def test_name_only
629
+ name, args = @app.parse_task_string("name")
630
+ assert_equal "name", name
631
+ assert_equal [], args
632
+ end
633
+
634
+ def test_empty_args
635
+ name, args = @app.parse_task_string("name[]")
636
+ assert_equal "name", name
637
+ assert_equal [], args
638
+ end
639
+
640
+ def test_one_argument
641
+ name, args = @app.parse_task_string("name[one]")
642
+ assert_equal "name", name
643
+ assert_equal ["one"], args
644
+ end
645
+
646
+ def test_two_arguments
647
+ name, args = @app.parse_task_string("name[one,two]")
648
+ assert_equal "name", name
649
+ assert_equal ["one", "two"], args
650
+ end
651
+
652
+ def test_can_handle_spaces_between_args
653
+ name, args = @app.parse_task_string("name[one, two,\tthree , \tfour]")
654
+ assert_equal "name", name
655
+ assert_equal ["one", "two", "three", "four"], args
656
+ end
657
+
658
+ def test_keeps_embedded_spaces
659
+ name, args = @app.parse_task_string("name[a one ana, two]")
660
+ assert_equal "name", name
661
+ assert_equal ["a one ana", "two"], args
662
+ end
663
+
664
+ end
665
+
666
+ class TestTaskArgumentParsing < Test::Unit::TestCase
667
+ include InEnvironment
668
+
669
+ def test_terminal_width_using_env
670
+ app = Rake::Application.new
671
+ in_environment('RAKE_COLUMNS' => '1234') do
672
+ assert_equal 1234, app.terminal_width
673
+ end
674
+ end
675
+
676
+ def test_terminal_width_using_stty
677
+ app = Rake::Application.new
678
+ flexmock(app,
679
+ :unix? => true,
680
+ :dynamic_width_stty => 1235,
681
+ :dynamic_width_tput => 0)
682
+ in_environment('RAKE_COLUMNS' => nil) do
683
+ assert_equal 1235, app.terminal_width
684
+ end
685
+ end
686
+
687
+ def test_terminal_width_using_tput
688
+ app = Rake::Application.new
689
+ flexmock(app,
690
+ :unix? => true,
691
+ :dynamic_width_stty => 0,
692
+ :dynamic_width_tput => 1236)
693
+ in_environment('RAKE_COLUMNS' => nil) do
694
+ assert_equal 1236, app.terminal_width
695
+ end
696
+ end
697
+
698
+ def test_terminal_width_using_hardcoded_80
699
+ app = Rake::Application.new
700
+ flexmock(app, :unix? => false)
701
+ in_environment('RAKE_COLUMNS' => nil) do
702
+ assert_equal 80, app.terminal_width
703
+ end
704
+ end
705
+
706
+ def test_terminal_width_with_failure
707
+ app = Rake::Application.new
708
+ flexmock(app).should_receive(:unix?).and_throw(RuntimeError)
709
+ in_environment('RAKE_COLUMNS' => nil) do
710
+ assert_equal 80, app.terminal_width
711
+ end
712
+ end
713
+ end