craigmarksmith-rake 0.8.3.100

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 +427 -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 +147 -0
  33. data/install.rb +88 -0
  34. data/lib/rake/classic_namespace.rb +8 -0
  35. data/lib/rake/clean.rb +33 -0
  36. data/lib/rake/contrib/compositepublisher.rb +24 -0
  37. data/lib/rake/contrib/ftptools.rb +153 -0
  38. data/lib/rake/contrib/publisher.rb +75 -0
  39. data/lib/rake/contrib/rubyforgepublisher.rb +18 -0
  40. data/lib/rake/contrib/sshpublisher.rb +47 -0
  41. data/lib/rake/contrib/sys.rb +209 -0
  42. data/lib/rake/gempackagetask.rb +97 -0
  43. data/lib/rake/loaders/makefile.rb +42 -0
  44. data/lib/rake/packagetask.rb +184 -0
  45. data/lib/rake/rake_test_loader.rb +5 -0
  46. data/lib/rake/rdoctask.rb +209 -0
  47. data/lib/rake/ruby182_test_unit_fix.rb +23 -0
  48. data/lib/rake/runtest.rb +23 -0
  49. data/lib/rake/tasklib.rb +23 -0
  50. data/lib/rake/testtask.rb +161 -0
  51. data/lib/rake/win32.rb +55 -0
  52. data/lib/rake.rb +2519 -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 +690 -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 +623 -0
  85. data/test/test_fileutils.rb +251 -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,251 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rake'
4
+ require 'test/unit'
5
+ require 'test/filecreation'
6
+ require 'fileutils'
7
+ require 'stringio'
8
+ require 'test/rake_test_setup'
9
+
10
+ class TestFileUtils < Test::Unit::TestCase
11
+ include FileCreation
12
+ include TestMethods
13
+
14
+ def setup
15
+ File.chmod(0750,"test/shellcommand.rb")
16
+ end
17
+
18
+ def teardown
19
+ FileUtils.rm_rf("testdata")
20
+ FileUtils::LN_SUPPORTED[0] = true
21
+ end
22
+
23
+ def test_rm_one_file
24
+ create_file("testdata/a")
25
+ FileUtils.rm_rf "testdata/a"
26
+ assert ! File.exist?("testdata/a")
27
+ end
28
+
29
+ def test_rm_two_files
30
+ create_file("testdata/a")
31
+ create_file("testdata/b")
32
+ FileUtils.rm_rf ["testdata/a", "testdata/b"]
33
+ assert ! File.exist?("testdata/a")
34
+ assert ! File.exist?("testdata/b")
35
+ end
36
+
37
+ def test_rm_filelist
38
+ list = Rake::FileList.new << "testdata/a" << "testdata/b"
39
+ list.each { |fn| create_file(fn) }
40
+ FileUtils.rm_r list
41
+ assert ! File.exist?("testdata/a")
42
+ assert ! File.exist?("testdata/b")
43
+ end
44
+
45
+ def test_ln
46
+ create_dir("testdata")
47
+ open("testdata/a", "w") { |f| f.puts "TEST_LN" }
48
+ RakeFileUtils.safe_ln("testdata/a", "testdata/b", :verbose => false)
49
+ assert_equal "TEST_LN\n", open("testdata/b") { |f| f.read }
50
+ end
51
+
52
+ class BadLink
53
+ include RakeFileUtils
54
+ attr_reader :cp_args
55
+ def initialize(klass)
56
+ @failure_class = klass
57
+ end
58
+ def cp(*args)
59
+ @cp_args = args
60
+ end
61
+ def ln(*args)
62
+ fail @failure_class, "ln not supported"
63
+ end
64
+ public :safe_ln
65
+ end
66
+
67
+ def test_safe_ln_failover_to_cp_on_standard_error
68
+ FileUtils::LN_SUPPORTED[0] = true
69
+ c = BadLink.new(StandardError)
70
+ c.safe_ln "a", "b"
71
+ assert_equal ['a', 'b'], c.cp_args
72
+ c.safe_ln "x", "y"
73
+ assert_equal ['x', 'y'], c.cp_args
74
+ end
75
+
76
+ def test_safe_ln_failover_to_cp_on_not_implemented_error
77
+ FileUtils::LN_SUPPORTED[0] = true
78
+ c = BadLink.new(NotImplementedError)
79
+ c.safe_ln "a", "b"
80
+ assert_equal ['a', 'b'], c.cp_args
81
+ end
82
+
83
+ def test_safe_ln_fails_on_script_error
84
+ FileUtils::LN_SUPPORTED[0] = true
85
+ c = BadLink.new(ScriptError)
86
+ assert_exception(ScriptError) do c.safe_ln "a", "b" end
87
+ end
88
+
89
+ def test_verbose
90
+ verbose true
91
+ assert_equal true, verbose
92
+ verbose false
93
+ assert_equal false, verbose
94
+ verbose(true) {
95
+ assert_equal true, verbose
96
+ }
97
+ assert_equal false, verbose
98
+ end
99
+
100
+ def test_nowrite
101
+ nowrite true
102
+ assert_equal true, nowrite
103
+ nowrite false
104
+ assert_equal false, nowrite
105
+ nowrite(true){
106
+ assert_equal true, nowrite
107
+ }
108
+ assert_equal false, nowrite
109
+ end
110
+
111
+ def test_file_utils_methods_are_available_at_top_level
112
+ create_file("testdata/a")
113
+ rm_rf "testdata/a"
114
+ assert ! File.exist?("testdata/a")
115
+ end
116
+
117
+ def test_fileutils_methods_dont_leak
118
+ obj = Object.new
119
+ assert_exception(NoMethodError) { obj.copy } # from FileUtils
120
+ assert_exception(NoMethodError) { obj.ruby } # from RubyFileUtils
121
+ end
122
+
123
+ def test_sh
124
+ verbose(false) { sh %{ruby test/shellcommand.rb} }
125
+ assert true, "should not fail"
126
+ end
127
+
128
+ # If the :sh method is invoked directly from a test unit instance
129
+ # (under mini/test), the mini/test version of fail is invoked rather
130
+ # than the kernel version of fail. So we run :sh from within a
131
+ # non-test class to avoid the problem.
132
+ class Sh
133
+ include FileUtils
134
+ def run(*args)
135
+ sh(*args)
136
+ end
137
+ def self.run(*args)
138
+ new.run(*args)
139
+ end
140
+ end
141
+
142
+ def test_sh_with_a_single_string_argument
143
+ ENV['RAKE_TEST_SH'] = 'someval'
144
+ verbose(false) {
145
+ sh %{ruby test/check_expansion.rb #{env_var} someval}
146
+ }
147
+ end
148
+
149
+ def test_sh_with_multiple_arguments
150
+ ENV['RAKE_TEST_SH'] = 'someval'
151
+ verbose(false) {
152
+ Sh.run 'ruby', 'test/check_no_expansion.rb', env_var, 'someval'
153
+ }
154
+ end
155
+
156
+ def test_sh_failure
157
+ assert_exception(RuntimeError) {
158
+ verbose(false) { Sh.run %{ruby test/shellcommand.rb 1} }
159
+ }
160
+ end
161
+
162
+ def test_sh_special_handling
163
+ count = 0
164
+ verbose(false) {
165
+ sh(%{ruby test/shellcommand.rb}) do |ok, res|
166
+ assert(ok)
167
+ assert_equal 0, res.exitstatus
168
+ count += 1
169
+ end
170
+ sh(%{ruby test/shellcommand.rb 1}) do |ok, res|
171
+ assert(!ok)
172
+ assert_equal 1, res.exitstatus
173
+ count += 1
174
+ end
175
+ }
176
+ assert_equal 2, count, "Block count should be 2"
177
+ end
178
+
179
+ def test_sh_noop
180
+ verbose(false) { sh %{test/shellcommand.rb 1}, :noop=>true }
181
+ assert true, "should not fail"
182
+ end
183
+
184
+ def test_sh_bad_option
185
+ ex = assert_exception(ArgumentError) {
186
+ verbose(false) { sh %{test/shellcommand.rb}, :bad_option=>true }
187
+ }
188
+ assert_match(/bad_option/, ex.message)
189
+ end
190
+
191
+ def test_sh_verbose
192
+ out = redirect_stderr {
193
+ verbose(true) {
194
+ sh %{test/shellcommand.rb}, :noop=>true
195
+ }
196
+ }
197
+ assert_match(/^test\/shellcommand\.rb$/, out)
198
+ end
199
+
200
+ def test_sh_no_verbose
201
+ out = redirect_stderr {
202
+ verbose(false) {
203
+ sh %{test/shellcommand.rb}, :noop=>true
204
+ }
205
+ }
206
+ assert_equal '', out
207
+ end
208
+
209
+ def test_ruby_with_a_single_string_argument
210
+ ENV['RAKE_TEST_SH'] = 'someval'
211
+ verbose(false) {
212
+ ruby %{test/check_expansion.rb #{env_var} someval}
213
+ }
214
+ end
215
+
216
+ def test_ruby_with_multiple_arguments
217
+ ENV['RAKE_TEST_SH'] = 'someval'
218
+ verbose(false) {
219
+ ruby 'test/check_no_expansion.rb', env_var, 'someval'
220
+ }
221
+ end
222
+
223
+ def test_split_all
224
+ assert_equal ['a'], RakeFileUtils.split_all('a')
225
+ assert_equal ['..'], RakeFileUtils.split_all('..')
226
+ assert_equal ['/'], RakeFileUtils.split_all('/')
227
+ assert_equal ['a', 'b'], RakeFileUtils.split_all('a/b')
228
+ assert_equal ['/', 'a', 'b'], RakeFileUtils.split_all('/a/b')
229
+ assert_equal ['..', 'a', 'b'], RakeFileUtils.split_all('../a/b')
230
+ end
231
+
232
+ private
233
+
234
+ def redirect_stderr
235
+ old_err = $stderr
236
+ $stderr = StringIO.new
237
+ yield
238
+ $stderr.string
239
+ ensure
240
+ $stderr = old_err
241
+ end
242
+
243
+ def windows?
244
+ ! File::ALT_SEPARATOR.nil?
245
+ end
246
+
247
+ def env_var
248
+ windows? ? '%RAKE_TEST_SH%' : '$RAKE_TEST_SH'
249
+ end
250
+
251
+ end
data/test/test_ftp.rb ADDED
@@ -0,0 +1,59 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'date'
4
+ require 'time'
5
+ require 'test/unit'
6
+ require 'rake/contrib/ftptools'
7
+
8
+ class FakeDate
9
+ def self.today
10
+ Date.new(2003,10,3)
11
+ end
12
+ def self.now
13
+ Time.local(2003,10,3,12,00,00)
14
+ end
15
+ end
16
+
17
+
18
+ class TestFtpFile < Test::Unit::TestCase
19
+
20
+ def setup
21
+ Rake::FtpFile.class_eval { @date_class = FakeDate; @time_class = FakeDate }
22
+ end
23
+
24
+ def test_general
25
+ file = Rake::FtpFile.new("here", "-rw-r--r-- 1 a279376 develop 121770 Mar 6 14:50 wiki.pl")
26
+ assert_equal "wiki.pl", file.name
27
+ assert_equal "here/wiki.pl", file.path
28
+ assert_equal "a279376", file.owner
29
+ assert_equal "develop", file.group
30
+ assert_equal 0644, file.mode
31
+ assert_equal 121770, file.size
32
+ assert_equal Time.mktime(2003,3,6,14,50,0,0), file.time
33
+ assert ! file.directory?
34
+ assert ! file.symlink?
35
+ end
36
+
37
+ def test_far_date
38
+ file = Rake::FtpFile.new(".", "drwxr-xr-x 3 a279376 develop 4096 Nov 26 2001 vss")
39
+ assert_equal Time.mktime(2001,11,26,0,0,0,0), file.time
40
+ end
41
+
42
+ def test_close_date
43
+ file = Rake::FtpFile.new(".", "drwxr-xr-x 3 a279376 develop 4096 Nov 26 15:35 vss")
44
+ assert_equal Time.mktime(2002,11,26,15,35,0,0), file.time
45
+ end
46
+
47
+ def test_directory
48
+ file = Rake::FtpFile.new(".", "drwxrwxr-x 9 a279376 develop 4096 Mar 13 14:32 working")
49
+ assert file.directory?
50
+ assert !file.symlink?
51
+ end
52
+
53
+ def test_symlink
54
+ file = Rake::FtpFile.new(".", "lrwxrwxrwx 1 a279376 develop 64 Mar 26 2002 xtrac -> /home/a279376/working/ics/development/java/com/fmr/fwp/ics/xtrac")
55
+ assert_equal 'xtrac', file.name
56
+ assert file.symlink?
57
+ assert !file.directory?
58
+ end
59
+ end
@@ -0,0 +1,81 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'test/unit'
4
+ require 'rake'
5
+ require 'test/rake_test_setup'
6
+
7
+ ######################################################################
8
+ class TestAnEmptyInvocationChain < Test::Unit::TestCase
9
+ include TestMethods
10
+
11
+ def setup
12
+ @empty = Rake::InvocationChain::EMPTY
13
+ end
14
+
15
+ def test_should_be_able_to_add_members
16
+ assert_nothing_raised do
17
+ @empty.append("A")
18
+ end
19
+ end
20
+
21
+ def test_to_s
22
+ assert_equal "TOP", @empty.to_s
23
+ end
24
+ end
25
+
26
+ ######################################################################
27
+ class TestAnInvocationChainWithOneMember < Test::Unit::TestCase
28
+ include TestMethods
29
+
30
+ def setup
31
+ @empty = Rake::InvocationChain::EMPTY
32
+ @first_member = "A"
33
+ @chain = @empty.append(@first_member)
34
+ end
35
+
36
+ def test_should_report_first_member_as_a_member
37
+ assert @chain.member?(@first_member)
38
+ end
39
+
40
+ def test_should_fail_when_adding_original_member
41
+ ex = assert_exception RuntimeError do
42
+ @chain.append(@first_member)
43
+ end
44
+ assert_match(/circular +dependency/i, ex.message)
45
+ assert_match(/A.*=>.*A/, ex.message)
46
+ end
47
+
48
+ def test_to_s
49
+ assert_equal "TOP => A", @chain.to_s
50
+ end
51
+
52
+ end
53
+
54
+ ######################################################################
55
+ class TestAnInvocationChainWithMultipleMember < Test::Unit::TestCase
56
+ include TestMethods
57
+
58
+ def setup
59
+ @first_member = "A"
60
+ @second_member = "B"
61
+ ch = Rake::InvocationChain::EMPTY.append(@first_member)
62
+ @chain = ch.append(@second_member)
63
+ end
64
+
65
+ def test_should_report_first_member_as_a_member
66
+ assert @chain.member?(@first_member)
67
+ end
68
+
69
+ def test_should_report_second_member_as_a_member
70
+ assert @chain.member?(@second_member)
71
+ end
72
+
73
+ def test_should_fail_when_adding_original_member
74
+ ex = assert_exception RuntimeError do
75
+ @chain.append(@first_member)
76
+ end
77
+ assert_match(/A.*=>.*B.*=>.*A/, ex.message)
78
+ end
79
+ end
80
+
81
+
@@ -0,0 +1,26 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'test/unit'
4
+ require 'rake'
5
+ require 'rake/loaders/makefile'
6
+
7
+ class TestMakefileLoader < Test::Unit::TestCase
8
+ include Rake
9
+
10
+ def test_parse
11
+ Task.clear
12
+ loader = Rake::MakefileLoader.new
13
+ loader.load("test/data/sample.mf")
14
+ %w(a b c d).each do |t|
15
+ assert Task.task_defined?(t), "#{t} should be a defined task"
16
+ end
17
+ assert_equal %w(a1 a2 a3 a4 a5 a6 a7).sort, Task['a'].prerequisites.sort
18
+ assert_equal %w(b1 b2 b3 b4 b5 b6 b7).sort, Task['b'].prerequisites.sort
19
+ assert_equal %w(c1).sort, Task['c'].prerequisites.sort
20
+ assert_equal %w(d1 d2).sort, Task['d'].prerequisites.sort
21
+ assert_equal %w(e1 f1).sort, Task['e'].prerequisites.sort
22
+ assert_equal %w(e1 f1).sort, Task['f'].prerequisites.sort
23
+ assert_equal ["g1", "g 2", "g 3", "g4"].sort, Task['g 0'].prerequisites.sort
24
+ assert_equal 7, Task.tasks.size
25
+ end
26
+ end
@@ -0,0 +1,45 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'test/unit'
4
+ require 'rake'
5
+
6
+ ######################################################################
7
+ class TestMultiTask < Test::Unit::TestCase
8
+ include Rake
9
+
10
+ def setup
11
+ Task.clear
12
+ @runs = Array.new
13
+ end
14
+
15
+ def test_running_multitasks
16
+ task :a do 3.times do |i| @runs << "A#{i}"; sleep 0.01; end end
17
+ task :b do 3.times do |i| @runs << "B#{i}"; sleep 0.01; end end
18
+ multitask :both => [:a, :b]
19
+ Task[:both].invoke
20
+ assert_equal 6, @runs.size
21
+ assert @runs.index("A0") < @runs.index("A1")
22
+ assert @runs.index("A1") < @runs.index("A2")
23
+ assert @runs.index("B0") < @runs.index("B1")
24
+ assert @runs.index("B1") < @runs.index("B2")
25
+ end
26
+
27
+ def test_all_multitasks_wait_on_slow_prerequisites
28
+ task :slow do 3.times do |i| @runs << "S#{i}"; sleep 0.05 end end
29
+ task :a => [:slow] do 3.times do |i| @runs << "A#{i}"; sleep 0.01 end end
30
+ task :b => [:slow] do 3.times do |i| @runs << "B#{i}"; sleep 0.01 end end
31
+ multitask :both => [:a, :b]
32
+ Task[:both].invoke
33
+ assert_equal 9, @runs.size
34
+ assert @runs.index("S0") < @runs.index("S1")
35
+ assert @runs.index("S1") < @runs.index("S2")
36
+ assert @runs.index("S2") < @runs.index("A0")
37
+ assert @runs.index("S2") < @runs.index("B0")
38
+ assert @runs.index("A0") < @runs.index("A1")
39
+ assert @runs.index("A1") < @runs.index("A2")
40
+ assert @runs.index("B0") < @runs.index("B1")
41
+ assert @runs.index("B1") < @runs.index("B2")
42
+ end
43
+ end
44
+
45
+