necktie 0.2.1 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (214) hide show
  1. data/README.rdoc +174 -0
  2. data/bin/necktie +2 -1
  3. data/lib/necktie/files.rb +29 -0
  4. data/lib/necktie/rake.rb +127 -0
  5. data/lib/necktie/services.rb +11 -7
  6. data/lib/necktie.rb +4 -54
  7. data/necktie.gemspec +3 -3
  8. data/vendor/rake/CHANGES +477 -0
  9. data/vendor/rake/MIT-LICENSE +21 -0
  10. data/vendor/rake/README.rdoc +194 -0
  11. data/vendor/rake/Rakefile +421 -0
  12. data/vendor/rake/TODO +20 -0
  13. data/vendor/rake/bin/rake +31 -0
  14. data/vendor/rake/doc/command_line_usage.rdoc +102 -0
  15. data/vendor/rake/doc/example/Rakefile1 +38 -0
  16. data/vendor/rake/doc/example/Rakefile2 +35 -0
  17. data/vendor/rake/doc/example/a.c +6 -0
  18. data/vendor/rake/doc/example/b.c +6 -0
  19. data/vendor/rake/doc/example/main.c +11 -0
  20. data/vendor/rake/doc/glossary.rdoc +51 -0
  21. data/vendor/rake/doc/jamis.rb +591 -0
  22. data/vendor/rake/doc/proto_rake.rdoc +127 -0
  23. data/vendor/rake/doc/rake.1.gz +0 -0
  24. data/vendor/rake/doc/rakefile.rdoc +566 -0
  25. data/vendor/rake/doc/rational.rdoc +151 -0
  26. data/vendor/rake/doc/release_notes/rake-0.4.14.rdoc +23 -0
  27. data/vendor/rake/doc/release_notes/rake-0.4.15.rdoc +35 -0
  28. data/vendor/rake/doc/release_notes/rake-0.5.0.rdoc +53 -0
  29. data/vendor/rake/doc/release_notes/rake-0.5.3.rdoc +78 -0
  30. data/vendor/rake/doc/release_notes/rake-0.5.4.rdoc +46 -0
  31. data/vendor/rake/doc/release_notes/rake-0.6.0.rdoc +141 -0
  32. data/vendor/rake/doc/release_notes/rake-0.7.0.rdoc +119 -0
  33. data/vendor/rake/doc/release_notes/rake-0.7.1.rdoc +59 -0
  34. data/vendor/rake/doc/release_notes/rake-0.7.2.rdoc +121 -0
  35. data/vendor/rake/doc/release_notes/rake-0.7.3.rdoc +47 -0
  36. data/vendor/rake/doc/release_notes/rake-0.8.0.rdoc +114 -0
  37. data/vendor/rake/doc/release_notes/rake-0.8.2.rdoc +165 -0
  38. data/vendor/rake/doc/release_notes/rake-0.8.3.rdoc +112 -0
  39. data/vendor/rake/doc/release_notes/rake-0.8.4.rdoc +147 -0
  40. data/vendor/rake/doc/release_notes/rake-0.8.5.rdoc +53 -0
  41. data/vendor/rake/doc/release_notes/rake-0.8.6.rdoc +55 -0
  42. data/vendor/rake/doc/release_notes/rake-0.8.7.rdoc +55 -0
  43. data/vendor/rake/install.rb +88 -0
  44. data/vendor/rake/lib/rake/alt_system.rb +108 -0
  45. data/vendor/rake/lib/rake/application.rb +579 -0
  46. data/vendor/rake/lib/rake/classic_namespace.rb +9 -0
  47. data/vendor/rake/lib/rake/clean.rb +35 -0
  48. data/vendor/rake/lib/rake/cloneable.rb +25 -0
  49. data/vendor/rake/lib/rake/contrib/compositepublisher.rb +24 -0
  50. data/vendor/rake/lib/rake/contrib/ftptools.rb +153 -0
  51. data/vendor/rake/lib/rake/contrib/publisher.rb +75 -0
  52. data/vendor/rake/lib/rake/contrib/rubyforgepublisher.rb +18 -0
  53. data/vendor/rake/lib/rake/contrib/sshpublisher.rb +47 -0
  54. data/vendor/rake/lib/rake/contrib/sys.rb +209 -0
  55. data/vendor/rake/lib/rake/default_loader.rb +10 -0
  56. data/vendor/rake/lib/rake/dsl.rb +136 -0
  57. data/vendor/rake/lib/rake/early_time.rb +18 -0
  58. data/vendor/rake/lib/rake/environment.rb +40 -0
  59. data/vendor/rake/lib/rake/ext/module.rb +60 -0
  60. data/vendor/rake/lib/rake/ext/string.rb +165 -0
  61. data/vendor/rake/lib/rake/ext/time.rb +14 -0
  62. data/vendor/rake/lib/rake/file_creation_task.rb +24 -0
  63. data/vendor/rake/lib/rake/file_list.rb +395 -0
  64. data/vendor/rake/lib/rake/file_task.rb +47 -0
  65. data/vendor/rake/lib/rake/file_utils.rb +108 -0
  66. data/vendor/rake/lib/rake/gempackagetask.rb +97 -0
  67. data/vendor/rake/lib/rake/invocation_chain.rb +51 -0
  68. data/vendor/rake/lib/rake/invocation_exception_mixin.rb +16 -0
  69. data/vendor/rake/lib/rake/lib/project.rake +24 -0
  70. data/vendor/rake/lib/rake/loaders/makefile.rb +44 -0
  71. data/vendor/rake/lib/rake/multi_task.rb +16 -0
  72. data/vendor/rake/lib/rake/name_space.rb +25 -0
  73. data/vendor/rake/lib/rake/packagetask.rb +184 -0
  74. data/vendor/rake/lib/rake/psuedo_status.rb +24 -0
  75. data/vendor/rake/lib/rake/rake_file_utils.rb +133 -0
  76. data/vendor/rake/lib/rake/rake_module.rb +25 -0
  77. data/vendor/rake/lib/rake/rake_test_loader.rb +15 -0
  78. data/vendor/rake/lib/rake/rdoctask.rb +209 -0
  79. data/vendor/rake/lib/rake/ruby182_test_unit_fix.rb +25 -0
  80. data/vendor/rake/lib/rake/rule_recursion_overflow_error.rb +20 -0
  81. data/vendor/rake/lib/rake/runtest.rb +23 -0
  82. data/vendor/rake/lib/rake/task.rb +318 -0
  83. data/vendor/rake/lib/rake/task_argument_error.rb +7 -0
  84. data/vendor/rake/lib/rake/task_arguments.rb +78 -0
  85. data/vendor/rake/lib/rake/task_manager.rb +328 -0
  86. data/vendor/rake/lib/rake/tasklib.rb +24 -0
  87. data/vendor/rake/lib/rake/testtask.rb +175 -0
  88. data/vendor/rake/lib/rake/win32.rb +55 -0
  89. data/vendor/rake/lib/rake.rb +72 -0
  90. data/vendor/rake/rake.blurb +19 -0
  91. data/vendor/rake/rake.gemspec +214 -0
  92. data/vendor/rake/rakelib/extra.rake +8 -0
  93. data/vendor/rake/rakelib/publish.rake +22 -0
  94. data/vendor/rake/rakelib/rbx.rake +82 -0
  95. data/vendor/rake/rakelib/ruby19.rake +88 -0
  96. data/vendor/rake/rakelib/tags.rake +18 -0
  97. data/vendor/rake/test/capture_stdout.rb +26 -0
  98. data/vendor/rake/test/check_expansion.rb +5 -0
  99. data/vendor/rake/test/check_no_expansion.rb +5 -0
  100. data/vendor/rake/test/contrib/test_sys.rb +47 -0
  101. data/vendor/rake/test/data/chains/Rakefile +15 -0
  102. data/vendor/rake/test/data/comments/Rakefile +18 -0
  103. data/vendor/rake/test/data/default/Rakefile +19 -0
  104. data/vendor/rake/test/data/dryrun/Rakefile +22 -0
  105. data/vendor/rake/test/data/file_creation_task/Rakefile +33 -0
  106. data/vendor/rake/test/data/imports/Rakefile +19 -0
  107. data/vendor/rake/test/data/imports/deps.mf +1 -0
  108. data/vendor/rake/test/data/multidesc/Rakefile +17 -0
  109. data/vendor/rake/test/data/namespace/Rakefile +66 -0
  110. data/vendor/rake/test/data/nosearch/dummy +1 -0
  111. data/vendor/rake/test/data/rakelib/test1.rb +5 -0
  112. data/vendor/rake/test/data/rakelib/test2.rake +3 -0
  113. data/vendor/rake/test/data/rbext/rakefile.rb +3 -0
  114. data/vendor/rake/test/data/sample.mf +14 -0
  115. data/vendor/rake/test/data/statusreturn/Rakefile +8 -0
  116. data/vendor/rake/test/data/sys/sys1.rake +3 -0
  117. data/vendor/rake/test/data/unittest/Rakefile +1 -0
  118. data/vendor/rake/test/data/unittest/subdir/README +0 -0
  119. data/vendor/rake/test/data/verbose/Rakefile +34 -0
  120. data/vendor/rake/test/filecreation.rb +32 -0
  121. data/vendor/rake/test/functional/functional_test.rb +15 -0
  122. data/vendor/rake/test/functional/session_based_tests.rb +442 -0
  123. data/vendor/rake/test/in_environment.rb +32 -0
  124. data/vendor/rake/test/lib/application_test.rb +769 -0
  125. data/vendor/rake/test/lib/clean_test.rb +15 -0
  126. data/vendor/rake/test/lib/definitions_test.rb +85 -0
  127. data/vendor/rake/test/lib/dsl_test.rb +41 -0
  128. data/vendor/rake/test/lib/earlytime_test.rb +35 -0
  129. data/vendor/rake/test/lib/environment_test.rb +18 -0
  130. data/vendor/rake/test/lib/extension_test.rb +63 -0
  131. data/vendor/rake/test/lib/file_creation_task_test.rb +62 -0
  132. data/vendor/rake/test/lib/file_task_test.rb +143 -0
  133. data/vendor/rake/test/lib/filelist_test.rb +623 -0
  134. data/vendor/rake/test/lib/fileutils_test.rb +251 -0
  135. data/vendor/rake/test/lib/ftp_test.rb +59 -0
  136. data/vendor/rake/test/lib/invocation_chain_test.rb +81 -0
  137. data/vendor/rake/test/lib/makefile_loader_test.rb +26 -0
  138. data/vendor/rake/test/lib/multitask_test.rb +53 -0
  139. data/vendor/rake/test/lib/namespace_test.rb +55 -0
  140. data/vendor/rake/test/lib/package_task_test.rb +118 -0
  141. data/vendor/rake/test/lib/pathmap_test.rb +210 -0
  142. data/vendor/rake/test/lib/pseudo_status_test.rb +26 -0
  143. data/vendor/rake/test/lib/rake_test.rb +41 -0
  144. data/vendor/rake/test/lib/rdoc_task_test.rb +88 -0
  145. data/vendor/rake/test/lib/require_test.rb +35 -0
  146. data/vendor/rake/test/lib/rules_test.rb +349 -0
  147. data/vendor/rake/test/lib/task_arguments_test.rb +89 -0
  148. data/vendor/rake/test/lib/task_manager_test.rb +173 -0
  149. data/vendor/rake/test/lib/task_test.rb +376 -0
  150. data/vendor/rake/test/lib/tasklib_test.rb +12 -0
  151. data/vendor/rake/test/lib/test_task_test.rb +77 -0
  152. data/vendor/rake/test/lib/testtask_test.rb +49 -0
  153. data/vendor/rake/test/lib/top_level_functions_test.rb +86 -0
  154. data/vendor/rake/test/lib/win32_test.rb +72 -0
  155. data/vendor/rake/test/rake_test_setup.rb +24 -0
  156. data/vendor/rake/test/reqfile.rb +3 -0
  157. data/vendor/rake/test/reqfile2.rb +3 -0
  158. data/vendor/rake/test/reqfile3.rake +3 -0
  159. data/vendor/rake/test/shellcommand.rb +3 -0
  160. data/vendor/rake/test/test_helper.rb +13 -0
  161. metadata +212 -56
  162. /data/{rush → vendor/rush}/README.rdoc +0 -0
  163. /data/{rush → vendor/rush}/Rakefile +0 -0
  164. /data/{rush → vendor/rush}/VERSION +0 -0
  165. /data/{rush → vendor/rush}/bin/rush +0 -0
  166. /data/{rush → vendor/rush}/bin/rushd +0 -0
  167. /data/{rush → vendor/rush}/lib/rush/access.rb +0 -0
  168. /data/{rush → vendor/rush}/lib/rush/array_ext.rb +0 -0
  169. /data/{rush → vendor/rush}/lib/rush/box.rb +0 -0
  170. /data/{rush → vendor/rush}/lib/rush/commands.rb +0 -0
  171. /data/{rush → vendor/rush}/lib/rush/config.rb +0 -0
  172. /data/{rush → vendor/rush}/lib/rush/dir.rb +0 -0
  173. /data/{rush → vendor/rush}/lib/rush/embeddable_shell.rb +0 -0
  174. /data/{rush → vendor/rush}/lib/rush/entry.rb +0 -0
  175. /data/{rush → vendor/rush}/lib/rush/exceptions.rb +0 -0
  176. /data/{rush → vendor/rush}/lib/rush/file.rb +0 -0
  177. /data/{rush → vendor/rush}/lib/rush/find_by.rb +0 -0
  178. /data/{rush → vendor/rush}/lib/rush/fixnum_ext.rb +0 -0
  179. /data/{rush → vendor/rush}/lib/rush/head_tail.rb +0 -0
  180. /data/{rush → vendor/rush}/lib/rush/local.rb +0 -0
  181. /data/{rush → vendor/rush}/lib/rush/process.rb +0 -0
  182. /data/{rush → vendor/rush}/lib/rush/process_set.rb +0 -0
  183. /data/{rush → vendor/rush}/lib/rush/remote.rb +0 -0
  184. /data/{rush → vendor/rush}/lib/rush/search_results.rb +0 -0
  185. /data/{rush → vendor/rush}/lib/rush/server.rb +0 -0
  186. /data/{rush → vendor/rush}/lib/rush/shell.rb +0 -0
  187. /data/{rush → vendor/rush}/lib/rush/ssh_tunnel.rb +0 -0
  188. /data/{rush → vendor/rush}/lib/rush/string_ext.rb +0 -0
  189. /data/{rush → vendor/rush}/lib/rush.rb +0 -0
  190. /data/{rush → vendor/rush}/rush.gemspec +0 -0
  191. /data/{rush → vendor/rush}/spec/access_spec.rb +0 -0
  192. /data/{rush → vendor/rush}/spec/array_ext_spec.rb +0 -0
  193. /data/{rush → vendor/rush}/spec/base.rb +0 -0
  194. /data/{rush → vendor/rush}/spec/box_spec.rb +0 -0
  195. /data/{rush → vendor/rush}/spec/commands_spec.rb +0 -0
  196. /data/{rush → vendor/rush}/spec/config_spec.rb +0 -0
  197. /data/{rush → vendor/rush}/spec/dir_spec.rb +0 -0
  198. /data/{rush → vendor/rush}/spec/embeddable_shell_spec.rb +0 -0
  199. /data/{rush → vendor/rush}/spec/entry_spec.rb +0 -0
  200. /data/{rush → vendor/rush}/spec/file_spec.rb +0 -0
  201. /data/{rush → vendor/rush}/spec/find_by_spec.rb +0 -0
  202. /data/{rush → vendor/rush}/spec/fixnum_ext_spec.rb +0 -0
  203. /data/{rush → vendor/rush}/spec/local_spec.rb +0 -0
  204. /data/{rush → vendor/rush}/spec/process_set_spec.rb +0 -0
  205. /data/{rush → vendor/rush}/spec/process_spec.rb +0 -0
  206. /data/{rush → vendor/rush}/spec/remote_spec.rb +0 -0
  207. /data/{rush → vendor/rush}/spec/rush_spec.rb +0 -0
  208. /data/{rush → vendor/rush}/spec/search_results_spec.rb +0 -0
  209. /data/{rush → vendor/rush}/spec/shell_spec.rb +0 -0
  210. /data/{rush → vendor/rush}/spec/ssh_tunnel_spec.rb +0 -0
  211. /data/{rush → vendor/rush}/spec/string_ext_spec.rb +0 -0
  212. /data/{session → vendor/session}/lib/session-2.4.0.rb +0 -0
  213. /data/{session → vendor/session}/lib/session.rb +0 -0
  214. /data/{session → vendor/session}/test/session.rb +0 -0
@@ -0,0 +1,66 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ desc "copy"
4
+ task :copy do
5
+ puts "COPY"
6
+ end
7
+
8
+ namespace "nest" do
9
+ desc "nest copy"
10
+ task :copy do
11
+ puts "NEST COPY"
12
+ end
13
+ task :xx => :copy
14
+ end
15
+
16
+ anon_ns = namespace do
17
+ desc "anonymous copy task"
18
+ task :copy do
19
+ puts "ANON COPY"
20
+ end
21
+ end
22
+
23
+ desc "Top level task to run the anonymous version of copy"
24
+ task :anon => anon_ns[:copy]
25
+
26
+ namespace "very" do
27
+ namespace "nested" do
28
+ task "run" => "rake:copy"
29
+ end
30
+ end
31
+
32
+ namespace "a" do
33
+ desc "Run task in the 'a' namespace"
34
+ task "run" do
35
+ puts "IN A"
36
+ end
37
+ end
38
+
39
+ namespace "b" do
40
+ desc "Run task in the 'b' namespace"
41
+ task "run" => "a:run" do
42
+ puts "IN B"
43
+ end
44
+ end
45
+
46
+ namespace "file1" do
47
+ file "xyz.rb" do
48
+ puts "XYZ1"
49
+ end
50
+ end
51
+
52
+ namespace "file2" do
53
+ file "xyz.rb" do
54
+ puts "XYZ2"
55
+ end
56
+ end
57
+
58
+ namespace "scopedep" do
59
+ task :prepare do
60
+ touch "scopedep.rb"
61
+ puts "PREPARE"
62
+ end
63
+ file "scopedep.rb" => [:prepare] do
64
+ puts "SCOPEDEP"
65
+ end
66
+ end
@@ -0,0 +1 @@
1
+ Dummy file to give the directory some content.
@@ -0,0 +1,5 @@
1
+ Rake::DSL.environment do
2
+ task :default do
3
+ puts "TEST1"
4
+ end
5
+ end
@@ -0,0 +1,3 @@
1
+ task :default do
2
+ puts "TEST2"
3
+ end
@@ -0,0 +1,3 @@
1
+ task :default do
2
+ puts "OK"
3
+ end
@@ -0,0 +1,14 @@
1
+ # Comments
2
+ a: a1 a2 a3 a4
3
+ b: b1 b2 b3 \
4
+ b4 b5 b6\
5
+ # Mid: Comment
6
+ b7
7
+
8
+ a : a5 a6 a7
9
+ c: c1
10
+ d: d1 d2 \
11
+
12
+ e f : e1 f1
13
+
14
+ g\ 0: g1 g\ 2 g\ 3 g4
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ task :exit5 do
4
+ exit(5)
5
+ end
6
+
7
+ task :normal do
8
+ end
@@ -0,0 +1,3 @@
1
+ task "sys1" do
2
+ puts "SYS1"
3
+ end
@@ -0,0 +1 @@
1
+ # Empty Rakefile for Unit Test
File without changes
@@ -0,0 +1,34 @@
1
+
2
+ task :standalone_verbose_true do
3
+ verbose true
4
+ sh "ruby -e '0'"
5
+ end
6
+
7
+ task :standalone_verbose_false do
8
+ verbose false
9
+ sh "ruby -e '0'"
10
+ end
11
+
12
+ task :inline_verbose_default do
13
+ sh "ruby -e '0'"
14
+ end
15
+
16
+ task :inline_verbose_false do
17
+ sh "ruby -e '0'", :verbose => false
18
+ end
19
+
20
+ task :inline_verbose_true do
21
+ sh "ruby -e '0'", :verbose => true
22
+ end
23
+
24
+ task :block_verbose_true do
25
+ verbose(true) do
26
+ sh "ruby -e '0'"
27
+ end
28
+ end
29
+
30
+ task :block_verbose_false do
31
+ verbose(false) do
32
+ sh "ruby -e '0'"
33
+ end
34
+ end
@@ -0,0 +1,32 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ module FileCreation
4
+ OLDFILE = "testdata/old"
5
+ NEWFILE = "testdata/new"
6
+
7
+ def create_timed_files(oldfile, *newfiles)
8
+ return if File.exist?(oldfile) && newfiles.all? { |newfile| File.exist?(newfile) }
9
+ old_time = create_file(oldfile)
10
+ newfiles.each do |newfile|
11
+ while create_file(newfile) <= old_time
12
+ sleep(0.1)
13
+ File.delete(newfile) rescue nil
14
+ end
15
+ end
16
+ end
17
+
18
+ def create_dir(dirname)
19
+ FileUtils.mkdir_p(dirname) unless File.exist?(dirname)
20
+ File.stat(dirname).mtime
21
+ end
22
+
23
+ def create_file(name)
24
+ create_dir(File.dirname(name))
25
+ FileUtils.touch(name) unless File.exist?(name)
26
+ File.stat(name).mtime
27
+ end
28
+
29
+ def delete_file(name)
30
+ File.delete(name) rescue nil
31
+ end
32
+ end
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ begin
4
+ require 'rubygems'
5
+ gem 'session'
6
+ require 'session'
7
+ rescue LoadError
8
+ puts "UNABLE TO RUN FUNCTIONAL TESTS"
9
+ puts "No Session Found (gem install session)"
10
+ end
11
+
12
+ if defined?(Session)
13
+ puts "RUNNING WITH SESSIONS"
14
+ require 'test/functional/session_based_tests.rb'
15
+ end
@@ -0,0 +1,442 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ begin
4
+ require 'rubygems'
5
+ rescue LoadError => ex
6
+ end
7
+ require 'test/unit'
8
+ require 'fileutils'
9
+ require 'session'
10
+ require 'test/in_environment'
11
+ require 'test/rake_test_setup'
12
+ require 'rake'
13
+
14
+ # Version 2.1.9 of session has a bug where the @debug instance
15
+ # variable is not initialized, causing warning messages. This snippet
16
+ # of code fixes that problem.
17
+ module Session
18
+ class AbstractSession
19
+ alias old_initialize initialize
20
+ def initialize(*args)
21
+ @debug = nil
22
+ old_initialize(*args)
23
+ end
24
+ end
25
+ end
26
+
27
+ class SessionBasedTests < Test::Unit::TestCase
28
+ include InEnvironment
29
+ include TestMethods
30
+
31
+ RUBY_COMMAND = 'ruby'
32
+
33
+ def setup
34
+ @rake_path = File.expand_path("bin/rake")
35
+ lib_path = File.expand_path("lib")
36
+ @ruby_options = "-I#{lib_path} -I."
37
+ @verbose = ! ENV['VERBOSE'].nil?
38
+ if @verbose
39
+ puts
40
+ puts
41
+ puts "--------------------------------------------------------------------"
42
+ puts name
43
+ puts "--------------------------------------------------------------------"
44
+ end
45
+ end
46
+
47
+ def test_rake_default
48
+ Dir.chdir("test/data/default") do rake end
49
+ assert_match(/^DEFAULT$/, @out)
50
+ assert_status
51
+ end
52
+
53
+ def test_rake_error_on_bad_task
54
+ Dir.chdir("test/data/default") do rake "xyz" end
55
+ assert_match(/rake aborted/, @err)
56
+ assert_status(1)
57
+ end
58
+
59
+ def test_env_availabe_at_top_scope
60
+ Dir.chdir("test/data/default") do rake "TESTTOPSCOPE=1" end
61
+ assert_match(/^TOPSCOPE$/, @out)
62
+ assert_status
63
+ end
64
+
65
+ def test_env_availabe_at_task_scope
66
+ Dir.chdir("test/data/default") do rake "TESTTASKSCOPE=1 task_scope" end
67
+ assert_match(/^TASKSCOPE$/, @out)
68
+ assert_status
69
+ end
70
+
71
+ def test_multi_desc
72
+ in_environment(
73
+ 'RAKE_COLUMNS' => "80",
74
+ "PWD" => "test/data/multidesc"
75
+ ) do
76
+ rake "-T"
77
+ end
78
+ assert_match %r{^rake a *# A / A2 *$}, @out
79
+ assert_match %r{^rake b *# B *$}, @out
80
+ assert_no_match %r{^rake c}, @out
81
+ assert_match %r{^rake d *# x{65}\.\.\.$}, @out
82
+ end
83
+
84
+ def test_long_description
85
+ in_environment("PWD" => "test/data/multidesc") do
86
+ rake "--describe"
87
+ end
88
+ assert_match %r{^rake a\n *A / A2 *$}m, @out
89
+ assert_match %r{^rake b\n *B *$}m, @out
90
+ assert_match %r{^rake d\n *x{80}}m, @out
91
+ assert_no_match %r{^rake c\n}m, @out
92
+ end
93
+
94
+ def test_rbext
95
+ in_environment("PWD" => "test/data/rbext") do
96
+ rake "-N"
97
+ end
98
+ assert_match %r{^OK$}, @out
99
+ end
100
+
101
+ def test_system
102
+ in_environment('RAKE_SYSTEM' => 'test/data/sys') do
103
+ rake '-g', "sys1"
104
+ end
105
+ assert_match %r{^SYS1}, @out
106
+ end
107
+
108
+ def test_system_excludes_rakelib_files_too
109
+ in_environment('RAKE_SYSTEM' => 'test/data/sys') do
110
+ rake '-g', "sys1", '-T', 'extra'
111
+ end
112
+ assert_no_match %r{extra:extra}, @out
113
+ end
114
+
115
+ def test_by_default_rakelib_files_are_included
116
+ in_environment('RAKE_SYSTEM' => 'test/data/sys') do
117
+ rake '-T', 'extra'
118
+ end
119
+ assert_match %r{extra:extra}, @out
120
+ end
121
+
122
+ def test_implicit_system
123
+ in_environment('RAKE_SYSTEM' => File.expand_path('test/data/sys'), "PWD" => "/") do
124
+ rake "sys1", "--trace"
125
+ end
126
+ assert_match %r{^SYS1}, @out
127
+ end
128
+
129
+ def test_no_system
130
+ in_environment('RAKE_SYSTEM' => 'test/data/sys') do
131
+ rake '-G', "sys1"
132
+ end
133
+ assert_match %r{^Don't know how to build task}, @err # emacs wart: '
134
+ end
135
+
136
+ def test_nosearch_with_rakefile_uses_local_rakefile
137
+ in_environment("PWD" => "test/data/default") do
138
+ rake "--nosearch"
139
+ end
140
+ assert_match %r{^DEFAULT}, @out
141
+ end
142
+
143
+ def test_nosearch_without_rakefile_finds_system
144
+ in_environment(
145
+ "PWD" => "test/data/nosearch",
146
+ "RAKE_SYSTEM" => File.expand_path("test/data/sys")
147
+ ) do
148
+ rake "--nosearch", "sys1"
149
+ end
150
+ assert_match %r{^SYS1}, @out
151
+ end
152
+
153
+ def test_nosearch_without_rakefile_and_no_system_fails
154
+ in_environment("PWD" => "test/data/nosearch", "RAKE_SYSTEM" => "not_exist") do
155
+ rake "--nosearch"
156
+ end
157
+ assert_match %r{^No Rakefile found}, @err
158
+ end
159
+
160
+ def test_invalid_command_line_options
161
+ in_environment("PWD" => "test/data/default") do
162
+ rake "--bad-options"
163
+ end
164
+ assert_match %r{invalid +option}i, @err
165
+ end
166
+
167
+ def test_inline_verbose_default_should_show_command
168
+ in_environment("PWD" => "test/data/verbose") do
169
+ rake "inline_verbose_default"
170
+ end
171
+ assert_match(/ruby -e/, @err)
172
+ end
173
+
174
+ def test_inline_verbose_true_should_show_command
175
+ in_environment("PWD" => "test/data/verbose") do
176
+ rake "inline_verbose_true"
177
+ end
178
+ assert_match(/ruby -e/, @err)
179
+ end
180
+
181
+ def test_inline_verbose_false_should_not_show_command
182
+ in_environment("PWD" => "test/data/verbose") do
183
+ rake "inline_verbose_false"
184
+ end
185
+ assert_no_match(/ruby -e/, @err)
186
+ end
187
+
188
+ def test_block_verbose_false_should_not_show_command
189
+ in_environment("PWD" => "test/data/verbose") do
190
+ rake "block_verbose_false"
191
+ end
192
+ assert_no_match(/ruby -e/, @err)
193
+ end
194
+
195
+ def test_block_verbose_true_should_show_command
196
+ in_environment("PWD" => "test/data/verbose") do
197
+ rake "block_verbose_true"
198
+ end
199
+ assert_match(/ruby -e/, @err)
200
+ end
201
+
202
+ def test_standalone_verbose_true_should_show_command
203
+ in_environment("PWD" => "test/data/verbose") do
204
+ rake "standalone_verbose_true"
205
+ end
206
+ assert_match(/ruby -e/, @err)
207
+ end
208
+
209
+ def test_standalone_verbose_false_should_not_show_command
210
+ in_environment("PWD" => "test/data/verbose") do
211
+ rake "standalone_verbose_false"
212
+ end
213
+ assert_no_match(/ruby -e/, @err)
214
+ end
215
+
216
+ def test_dry_run
217
+ in_environment("PWD" => "test/data/default") do rake "-n", "other" end
218
+ assert_match %r{Execute \(dry run\) default}, @out
219
+ assert_match %r{Execute \(dry run\) other}, @out
220
+ assert_no_match %r{DEFAULT}, @out
221
+ assert_no_match %r{OTHER}, @out
222
+ end
223
+
224
+ # Test for the trace/dry_run bug found by Brian Chandler
225
+ def test_dry_run_bug
226
+ in_environment("PWD" => "test/data/dryrun") do
227
+ rake
228
+ end
229
+ FileUtils.rm_f "test/data/dryrun/temp_one"
230
+ in_environment("PWD" => "test/data/dryrun") do
231
+ rake "--dry-run"
232
+ end
233
+ assert_no_match(/No such file/, @out)
234
+ assert_status
235
+ end
236
+
237
+ # Test for the trace/dry_run bug found by Brian Chandler
238
+ def test_trace_bug
239
+ in_environment("PWD" => "test/data/dryrun") do
240
+ rake
241
+ end
242
+ FileUtils.rm_f "test/data/dryrun/temp_one"
243
+ in_environment("PWD" => "test/data/dryrun") do
244
+ rake "--trace"
245
+ end
246
+ assert_no_match(/No such file/, @out)
247
+ assert_status
248
+ end
249
+
250
+ def test_imports
251
+ open("test/data/imports/static_deps", "w") do |f|
252
+ f.puts 'puts "STATIC"'
253
+ end
254
+ FileUtils.rm_f "test/data/imports/dynamic_deps"
255
+ in_environment("PWD" => "test/data/imports") do
256
+ rake
257
+ end
258
+ assert File.exist?("test/data/imports/dynamic_deps"),
259
+ "'dynamic_deps' file should exist"
260
+ assert_match(/^FIRST$\s+^DYNAMIC$\s+^STATIC$\s+^OTHER$/, @out)
261
+ assert_status
262
+ FileUtils.rm_f "test/data/imports/dynamic_deps"
263
+ FileUtils.rm_f "test/data/imports/static_deps"
264
+ end
265
+
266
+ def test_rules_chaining_to_file_task
267
+ remove_chaining_files
268
+ in_environment("PWD" => "test/data/chains") do
269
+ rake
270
+ end
271
+ assert File.exist?("test/data/chains/play.app"),
272
+ "'play.app' file should exist"
273
+ assert_status
274
+ remove_chaining_files
275
+ end
276
+
277
+ def test_file_creation_task
278
+ in_environment("PWD" => "test/data/file_creation_task") do
279
+ rake "prep"
280
+ rake "run"
281
+ rake "run"
282
+ end
283
+ assert(@err !~ /^cp src/, "Should not recopy data")
284
+ end
285
+
286
+ def test_dash_f_with_no_arg_foils_rakefile_lookup
287
+ rake "-I test/data/rakelib -rtest1 -f"
288
+ assert_match(/^TEST1$/, @out)
289
+ end
290
+
291
+ def test_dot_rake_files_can_be_loaded_with_dash_r
292
+ rake "-I test/data/rakelib -rtest2 -f"
293
+ assert_match(/^TEST2$/, @out)
294
+ end
295
+
296
+ def test_can_invoke_task_in_toplevel_namespace
297
+ in_environment("PWD" => "test/data/namespace") do
298
+ rake "copy"
299
+ end
300
+ assert_match(/^COPY$/, @out)
301
+ end
302
+
303
+ def test_can_invoke_task_in_nested_namespace
304
+ in_environment("PWD" => "test/data/namespace") do
305
+ rake "nest:copy"
306
+ assert_match(/^NEST COPY$/, @out)
307
+ end
308
+ end
309
+
310
+ def test_tasks_can_reference_task_in_same_namespace
311
+ in_environment("PWD" => "test/data/namespace") do
312
+ rake "nest:xx"
313
+ assert_match(/^NEST COPY$/m, @out)
314
+ end
315
+ end
316
+
317
+ def test_tasks_can_reference_task_in_other_namespaces
318
+ in_environment("PWD" => "test/data/namespace") do
319
+ rake "b:run"
320
+ assert_match(/^IN A\nIN B$/m, @out)
321
+ end
322
+ end
323
+
324
+ def test_anonymous_tasks_can_be_invoked_indirectly
325
+ in_environment("PWD" => "test/data/namespace") do
326
+ rake "anon"
327
+ assert_match(/^ANON COPY$/m, @out)
328
+ end
329
+ end
330
+
331
+ def test_rake_namespace_refers_to_toplevel
332
+ in_environment("PWD" => "test/data/namespace") do
333
+ rake "very:nested:run"
334
+ assert_match(/^COPY$/m, @out)
335
+ end
336
+ end
337
+
338
+ def test_file_task_are_not_scoped_by_namespaces
339
+ in_environment("PWD" => "test/data/namespace") do
340
+ rake "xyz.rb"
341
+ assert_match(/^XYZ1\nXYZ2$/m, @out)
342
+ end
343
+ end
344
+
345
+ def test_file_task_dependencies_scoped_by_namespaces
346
+ in_environment("PWD" => "test/data/namespace") do
347
+ rake "scopedep.rb"
348
+ assert_match(/^PREPARE\nSCOPEDEP$/m, @out)
349
+ end
350
+ ensure
351
+ remove_namespace_files
352
+ end
353
+
354
+ def test_rake_returns_status_error_values
355
+ in_environment("PWD" => "test/data/statusreturn") do
356
+ rake "exit5"
357
+ assert_status(5)
358
+ end
359
+ end
360
+
361
+ def test_rake_returns_no_status_error_on_normal_exit
362
+ in_environment("PWD" => "test/data/statusreturn") do
363
+ rake "normal"
364
+ assert_status(0)
365
+ end
366
+ end
367
+
368
+ def test_comment_before_task_acts_like_desc
369
+ in_environment("PWD" => "test/data/comments") do
370
+ rake "-T"
371
+ end
372
+ assert_match("comment for t1", @out)
373
+ end
374
+
375
+ def test_comment_separated_from_task_by_blank_line_is_not_picked_up
376
+ Dir.chdir("test/data/comments") { rake("-T")}
377
+ assert_not_match("t2", @out)
378
+ end
379
+
380
+ def test_comment_after_desc_is_ignored
381
+ Dir.chdir("test/data/comments") { rake("-T")}
382
+ assert_match("override comment for t3", @out)
383
+ end
384
+
385
+ def test_comment_before_desc_is_ignored
386
+ Dir.chdir("test/data/comments") { rake("-T")}
387
+ assert_match("override comment for t4", @out)
388
+ end
389
+
390
+ def test_correct_number_of_tasks_reported
391
+ Dir.chdir("test/data/comments") { rake("-T")}
392
+ assert_equal(3, @out.split(/\n/).grep(/t\d/).size)
393
+ end
394
+
395
+ private
396
+
397
+ def assert_not_match(pattern, string, comment="'#{pattern}' was found (incorrectly) in '#{string}.inspect")
398
+ assert_nil Regexp.new(pattern).match(string), comment
399
+ end
400
+
401
+ def remove_chaining_files
402
+ %w(play.scpt play.app base).each do |fn|
403
+ FileUtils.rm_f File.join("test/data/chains", fn)
404
+ end
405
+ end
406
+
407
+ def remove_namespace_files
408
+ %w(scopedep.rb).each do |fn|
409
+ FileUtils.rm_f File.join("test/data/namespace", fn)
410
+ end
411
+ end
412
+
413
+ class << self
414
+ def format_command
415
+ @format_command ||= lambda { |ruby_options, rake_path, options|
416
+ "ruby #{ruby_options} #{rake_path} #{options}"
417
+ }
418
+ end
419
+
420
+ def format_command=(fmt_command)
421
+ @format_command = fmt_command
422
+ end
423
+ end
424
+
425
+ def rake(*option_list)
426
+ options = option_list.join(' ')
427
+ shell = Session::Shell.new
428
+ command = self.class.format_command[@ruby_options, @rake_path, options]
429
+ puts "COMMAND: [#{command}]" if @verbose
430
+ @out, @err = shell.execute command
431
+ @status = shell.exit_status
432
+ puts "STATUS: [#{@status}]" if @verbose
433
+ puts "OUTPUT: [#{@out}]" if @verbose
434
+ puts "ERROR: [#{@err}]" if @verbose
435
+ puts "PWD: [#{Dir.pwd}]" if @verbose
436
+ shell.close
437
+ end
438
+
439
+ def assert_status(expected_status=0)
440
+ assert_equal expected_status, @status
441
+ end
442
+ end
@@ -0,0 +1,32 @@
1
+ module InEnvironment
2
+ private
3
+
4
+ # Create an environment for a test. At the completion of the yielded
5
+ # block, the environment is restored to its original conditions.
6
+ def in_environment(settings=nil)
7
+ settings ||= {}
8
+ full_settings = {"RAKEOPT" => nil}.merge(settings)
9
+ original_settings = set_env(full_settings)
10
+ yield
11
+ ensure
12
+ set_env(original_settings)
13
+ end
14
+
15
+ # Set the environment according to the settings hash.
16
+ def set_env(settings) # :nodoc:
17
+ result = {}
18
+ settings.each do |k, v|
19
+ result[k] = ENV[k]
20
+ if k == 'PWD'
21
+ result[k] = Dir.pwd
22
+ Dir.chdir(v)
23
+ elsif v.nil?
24
+ ENV.delete(k)
25
+ else
26
+ ENV[k] = v
27
+ end
28
+ end
29
+ result
30
+ end
31
+
32
+ end