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