drake 0.9.0.0.3.0 → 0.9.1.0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. data/CHANGES +9 -8
  2. data/CHANGES-drake +4 -0
  3. data/Rakefile +14 -49
  4. data/Rakefile-drake +2 -1
  5. data/bin/drake +4 -3
  6. data/doc/release_notes/rake-0.9.1.rdoc +52 -0
  7. data/lib/rake/dsl_definition.rb +19 -0
  8. data/lib/rake/version.rb +1 -1
  9. data/test/data/access/Rakefile +3 -1
  10. data/test/data/default/Rakefile +0 -2
  11. data/test/data/file_creation_task/Rakefile +0 -2
  12. data/test/data/multidesc/Rakefile +0 -2
  13. data/test/data/namespace/Rakefile +0 -2
  14. data/test/data/statusreturn/Rakefile +0 -2
  15. data/test/file_creation.rb +0 -2
  16. data/test/helper.rb +63 -0
  17. data/test/in_environment.rb +4 -1
  18. data/test/{parallel_setup.rb → setup_parallel.rb} +0 -0
  19. data/test/{serial_setup.rb → setup_serial.rb} +0 -0
  20. data/test/{lib/parallel_test.rb → test_parallel.rb} +3 -1
  21. data/test/{lib/rake_test.rb → test_rake.rb} +2 -5
  22. data/test/test_rake_application.rb +365 -0
  23. data/test/test_rake_application_options.rb +383 -0
  24. data/test/test_rake_clean.rb +14 -0
  25. data/test/{lib/definitions_test.rb → test_rake_definitions.rb} +5 -10
  26. data/test/test_rake_directory_task.rb +55 -0
  27. data/test/test_rake_dsl.rb +53 -0
  28. data/test/{lib/earlytime_test.rb → test_rake_early_time.rb} +2 -5
  29. data/test/{lib/extension_test.rb → test_rake_extension.rb} +2 -6
  30. data/test/{lib/file_creation_task_test.rb → test_rake_file_creation_task.rb} +7 -7
  31. data/test/{lib/filelist_test.rb → test_rake_file_list.rb} +18 -22
  32. data/test/test_rake_file_list_path_map.rb +8 -0
  33. data/test/{lib/file_task_test.rb → test_rake_file_task.rb} +22 -61
  34. data/test/{lib/fileutils_test.rb → test_rake_file_utils.rb} +11 -15
  35. data/test/{lib/ftp_test.rb → test_rake_ftp_file.rb} +5 -5
  36. data/test/{functional/session_based_tests.rb → test_rake_functional.rb} +35 -24
  37. data/test/test_rake_invocation_chain.rb +52 -0
  38. data/test/{lib/makefile_loader_test.rb → test_rake_makefile_loader.rb} +2 -5
  39. data/test/{lib/multitask_test.rb → test_rake_multi_task.rb} +5 -7
  40. data/test/{lib/namespace_test.rb → test_rake_name_space.rb} +4 -16
  41. data/test/{lib/package_task_test.rb → test_rake_package_task.rb} +2 -6
  42. data/test/{lib/pathmap_test.rb → test_rake_path_map.rb} +4 -58
  43. data/test/test_rake_path_map_explode.rb +31 -0
  44. data/test/test_rake_path_map_partial.rb +18 -0
  45. data/test/{lib/pseudo_status_test.rb → test_rake_pseudo_status.rb} +2 -8
  46. data/test/{lib/rdoc_task_test.rb → test_rake_rdoc_task.rb} +4 -7
  47. data/test/{lib/require_test.rb → test_rake_require.rb} +3 -9
  48. data/test/{lib/rules_test.rb → test_rake_rules.rb} +11 -13
  49. data/test/{lib/task_test.rb → test_rake_task.rb} +16 -183
  50. data/test/test_rake_task_argument_parsing.rb +126 -0
  51. data/test/{lib/task_arguments_test.rb → test_rake_task_arguments.rb} +2 -5
  52. data/test/{lib/tasklib_test.rb → test_rake_task_lib.rb} +2 -5
  53. data/test/{lib/task_manager_test.rb → test_rake_task_manager.rb} +7 -45
  54. data/test/test_rake_task_manager_argument_resolution.rb +36 -0
  55. data/test/test_rake_task_with_arguments.rb +162 -0
  56. data/test/{lib/test_task_test.rb → test_rake_test_task.rb} +52 -7
  57. data/test/{lib/top_level_functions_test.rb → test_rake_top_level_functions.rb} +8 -20
  58. data/test/{lib/win32_test.rb → test_rake_win32.rb} +5 -12
  59. data/test/{contrib/test_sys.rb → test_sys.rb} +2 -6
  60. metadata +62 -47
  61. data/lib/rake/dsl.rb +0 -2
  62. data/test/capture_stdout.rb +0 -26
  63. data/test/functional/functional_test.rb +0 -25
  64. data/test/lib/application_test.rb +0 -871
  65. data/test/lib/clean_test.rb +0 -15
  66. data/test/lib/dsl_test.rb +0 -52
  67. data/test/lib/invocation_chain_test.rb +0 -81
  68. data/test/lib/testtask_test.rb +0 -49
  69. data/test/rake_test_setup.rb +0 -41
  70. data/test/ruby_version_test.rb +0 -3
  71. data/test/test_helper.rb +0 -19
data/CHANGES CHANGED
@@ -1,12 +1,17 @@
1
1
  = Rake Changelog
2
2
 
3
+ == Version 0.9.1
4
+
5
+ * Added deprecation warnings to the Rake DSL methods.
6
+
3
7
  == Version 0.9.0
4
8
 
5
- * Rake now warns when the deprecated :needs syntax used.
9
+ * *Incompatible* *change*: Rake DSL commands ('task', 'file', etc.) are
10
+ no longer private methods in Object. If you need to call 'task :xzy' inside
11
+ your class, include Rake::DSL into the class. The DSL is still available at
12
+ the top level scope (via the top level object which extends Rake::DSL).
6
13
 
7
- * Moved Rake DSL commands to top level ruby object 'main'. Rake DSL
8
- commands are no longer private methods in Object. (Suggested by
9
- James M. Lawrence/quix)
14
+ * Rake now warns when the deprecated :needs syntax used.
10
15
 
11
16
  * Rake history is now UTF-8 encoded.
12
17
 
@@ -36,10 +41,6 @@
36
41
 
37
42
  * Rake no longer emits warnings for Config. Patch by Santiago Pastorino.
38
43
 
39
- * Removed Rake's DSL methods from the top level scope. If you need to
40
- call 'task :xzy' in your code, include Rake::DSL into your class, or
41
- put the code in a Rake::DSL.environment do ... end block.
42
-
43
44
  * Split rake.rb into individual files.
44
45
 
45
46
  * Support for the --where (-W) flag for showing where a task is defined.
@@ -1,6 +1,10 @@
1
1
 
2
2
  = Drake Changelog
3
3
 
4
+ == Version 0.9.1.0.3.0
5
+
6
+ * update from mainline branch 0.9.1
7
+
4
8
  == Version 0.9.0.0.3.0
5
9
 
6
10
  * option -j without a value now allowed == no limit on number of threads
data/Rakefile CHANGED
@@ -59,58 +59,24 @@ SRC_RB = FileList['lib/**/*.rb']
59
59
  # The default task is run if rake is given no explicit arguments.
60
60
 
61
61
  desc "Default Task"
62
- task :default => "test:all"
62
+ task :default => :test
63
63
 
64
64
  # Test Tasks ---------------------------------------------------------
65
65
 
66
- # Common Abbreviations ...
66
+ task :test => [:test_serial, :test_parallel]
67
67
 
68
- task :ta => "test:all"
69
- task :tf => "test:functional"
70
- task :tu => "test:units"
71
- task :tc => "test:contribs"
72
- task :test => "test:units"
68
+ TEST_FILES = FileList['test/helper.rb', 'test/test_*.rb']
73
69
 
74
- module TestFiles
75
- UNIT = FileList['test/lib/*_test.rb']
76
- FUNCTIONAL = FileList['test/functional/*_test.rb']
77
- CONTRIB = FileList['test/contrib/test*.rb']
78
- TOP = FileList['test/*_test.rb']
79
- ALL = TOP + UNIT + FUNCTIONAL + CONTRIB
70
+ Rake::TestTask.new :test_serial do |t|
71
+ t.test_files = ['test/setup_serial.rb'] + TEST_FILES
72
+ t.libs << "."
73
+ t.warning = true
80
74
  end
81
75
 
82
- namespace :test do
83
- task :all => [:serial, :parallel]
84
-
85
- Rake::TestTask.new(:serial) do |t|
86
- t.test_files = ['test/serial_setup.rb'] + TestFiles::ALL
87
- t.libs << "."
88
- t.warning = true
89
- end
90
-
91
- Rake::TestTask.new(:parallel) do |t|
92
- t.test_files = ['test/parallel_setup.rb'] + TestFiles::ALL
93
- t.libs << "."
94
- t.warning = true
95
- end
96
-
97
- Rake::TestTask.new(:units) do |t|
98
- t.test_files = TestFiles::UNIT
99
- t.libs << "."
100
- t.warning = true
101
- end
102
-
103
- Rake::TestTask.new(:functional) do |t|
104
- t.test_files = TestFiles::FUNCTIONAL
105
- t.libs << "."
106
- t.warning = true
107
- end
108
-
109
- Rake::TestTask.new(:contribs) do |t|
110
- t.test_files = TestFiles::CONTRIB
111
- t.libs << "."
112
- t.warning = true
113
- end
76
+ Rake::TestTask.new :test_parallel do |t|
77
+ t.test_files = ['test/setup_parallel.rb'] + TEST_FILES
78
+ t.libs << "."
79
+ t.warning = true
114
80
  end
115
81
 
116
82
  begin
@@ -152,9 +118,7 @@ rescue LoadError
152
118
  end
153
119
 
154
120
  directory 'testdata'
155
- ["test:all", :test_units, :test_contribs, :test_functional].each do |t|
156
- task t => ['testdata']
157
- end
121
+ task :test => ['testdata']
158
122
 
159
123
  # CVS Tasks ----------------------------------------------------------
160
124
 
@@ -228,6 +192,7 @@ else
228
192
  s.add_dependency('comp_tree', '>= 1.1.3')
229
193
 
230
194
  s.required_rubygems_version = '>= 1.3.2'
195
+ s.add_development_dependency 'minitest', '~> 2.1'
231
196
  s.add_development_dependency 'session', '~> 2.4'
232
197
  s.add_development_dependency 'flexmock', '~> 0.8.11'
233
198
 
@@ -356,7 +321,7 @@ desc "Make a new release"
356
321
  task :release, [:rel, :reuse, :reltest] => [
357
322
  :prerelease,
358
323
  :clobber,
359
- "test:all",
324
+ :test,
360
325
  :update_version,
361
326
  :package,
362
327
  :tag
@@ -52,6 +52,7 @@ task :drake_publish => :rdoc do
52
52
  end
53
53
 
54
54
  task :drake_finish_release do
55
+ gem = "#{SPEC.name}-#{SPEC.version}.gem"
55
56
  git "tag", "drake-#{SPEC.version}"
56
57
  git "push", "--tags", "origin", "master"
57
58
  sh "gem", "push", gem
@@ -61,7 +62,7 @@ task :drake_release =>
61
62
  [
62
63
  :drake_prerelease,
63
64
  :gem,
64
- "test:all",
65
+ :test,
65
66
  :drake_finish_release,
66
67
  ]
67
68
 
data/bin/drake CHANGED
@@ -25,9 +25,10 @@
25
25
  #++
26
26
 
27
27
  begin
28
- require 'rake'
29
- rescue LoadError
30
28
  require 'rubygems'
31
- require 'rake'
29
+ rescue LoadError
32
30
  end
31
+
32
+ require 'rake'
33
+
33
34
  Rake.application.run
@@ -0,0 +1,52 @@
1
+ = Rake 0.9.1 Released
2
+
3
+ Rake version 0.9.1 has a number of bug fixes and enhancments (see
4
+ below for more details). Additionally, the internals have be slightly
5
+ restructured and improved.
6
+
7
+ == Changes
8
+
9
+ Rake 0.9.1 adds back the global DSL methods, but with deprecation
10
+ messages. This allows Rake 0.9.1 to be used with older rakefiles with
11
+ warning messages.
12
+
13
+ == What is Rake
14
+
15
+ Rake is a build tool similar to the make program in many ways. But
16
+ instead of cryptic make recipes, Rake uses standard Ruby code to
17
+ declare tasks and dependencies. You have the full power of a modern
18
+ scripting language built right into your build tool.
19
+
20
+ == Availability
21
+
22
+ The easiest way to get and install rake is via RubyGems ...
23
+
24
+ gem install rake (you may need root/admin privileges)
25
+
26
+ Otherwise, you can get it from the more traditional places:
27
+
28
+ Home Page:: http://rake.rubyforge.org/
29
+ Download:: http://rubyforge.org/project/showfiles.php?group_id=50
30
+ GitHub:: git://github.com/jimweirich/rake.git
31
+
32
+ == Thanks
33
+
34
+ As usual, it was input from users that drove a alot of these changes. The
35
+ following people either contributed patches, made suggestions or made
36
+ otherwise helpful comments. Thanks to ...
37
+
38
+ * James M. Lawrence (quix)
39
+ * Roger Pack
40
+ * Cezary Baginski
41
+ * Sean Scot August Moon
42
+ * R.T. Lechow
43
+ * Alex Chaffee
44
+ * James Tucker
45
+ * Matthias Lüdtke
46
+ * Santiago Pastorino
47
+
48
+ Also, bit thanks to Eric Hodel for assisting with getting this release
49
+ out the door (where "assisting" includes, but is not by any means
50
+ limited to, "pushing" me to get it done).
51
+
52
+ -- Jim Weirich
@@ -12,6 +12,8 @@ module Rake
12
12
  private(*FileUtils.instance_methods(false))
13
13
  private(*FileUtilsExt.instance_methods(false))
14
14
 
15
+ private
16
+
15
17
  # Declare a basic task.
16
18
  #
17
19
  # Example:
@@ -137,7 +139,24 @@ module Rake
137
139
  end
138
140
  end
139
141
 
142
+ module DeprecatedObjectDSL
143
+ dsl = Object.new.extend DSL
144
+ DSL.private_instance_methods(false).each do |name|
145
+ define_method name do |*args, &block|
146
+ unless @rake_dsl_warning
147
+ $stderr.puts "WARNING: Global access to Rake DSL methods is deprecated. Please Include"
148
+ $stderr.puts " ... Rake::DSL into classes and modules which use the Rake DSL methods."
149
+ @rake_dsl_warning = true
150
+ end
151
+ $stderr.puts "WARNING: DSL method #{self.class}##{name} called at #{caller.first}"
152
+ dsl.send(name, *args, &block)
153
+ end
154
+ private name
155
+ end
156
+ end
157
+
140
158
  extend FileUtilsExt
141
159
  end
142
160
 
143
161
  self.extend Rake::DSL
162
+ include Rake::DeprecatedObjectDSL
@@ -3,7 +3,7 @@ module Rake
3
3
  NUMBERS = [
4
4
  MAJOR = 0,
5
5
  MINOR = 9,
6
- BUILD = 0,
6
+ BUILD = 1,
7
7
  DRAKE_MAJOR = 0,
8
8
  DRAKE_MINOR = 3,
9
9
  DRAKE_BUILD = 0,
@@ -14,7 +14,9 @@ task :work do
14
14
  end
15
15
  end
16
16
 
17
- task :obj do
17
+ # TODO: remove `disabled_' when DeprecatedObjectDSL removed
18
+ task :obj
19
+ task :disabled_obj do
18
20
  begin
19
21
  Object.new.instance_eval { task :xyzzy }
20
22
  puts "BAD:D Rake DSL are polluting objects"
@@ -1,5 +1,3 @@
1
- #!/usr/bin/env ruby
2
-
3
1
  if ENV['TESTTOPSCOPE']
4
2
  puts "TOPSCOPE"
5
3
  end
@@ -1,5 +1,3 @@
1
- #!/usr/bin/env ruby
2
-
3
1
  N = 2
4
2
 
5
3
  task :default => :run
@@ -1,5 +1,3 @@
1
- #!/usr/bin/env ruby
2
-
3
1
  task :b
4
2
 
5
3
  desc "A"
@@ -1,5 +1,3 @@
1
- #!/usr/bin/env ruby
2
-
3
1
  desc "copy"
4
2
  task :copy do
5
3
  puts "COPY"
@@ -1,5 +1,3 @@
1
- #!/usr/bin/env ruby
2
-
3
1
  task :exit5 do
4
2
  exit(5)
5
3
  end
@@ -1,5 +1,3 @@
1
- #!/usr/bin/env ruby
2
-
3
1
  module FileCreation
4
2
  ANCIENT_FILE = 'testdata/anc'
5
3
  OLDFILE = "testdata/old"
@@ -0,0 +1,63 @@
1
+ require 'rubygems'
2
+ require 'minitest/unit'
3
+ require 'flexmock/test_unit_integration'
4
+ require 'minitest/autorun'
5
+ require 'rake'
6
+ require File.expand_path('../file_creation', __FILE__)
7
+ require File.expand_path('../in_environment', __FILE__)
8
+
9
+ class Rake::TestCase < MiniTest::Unit::TestCase
10
+ include FlexMock::ArgumentTypes
11
+ include FlexMock::MockContainer
12
+
13
+ include InEnvironment
14
+ include FileCreation
15
+
16
+ include Rake::DSL
17
+
18
+ class TaskManager
19
+ include Rake::TaskManager
20
+ end
21
+
22
+ def setup
23
+ @orig_PWD = Dir.pwd
24
+ end
25
+
26
+ def teardown
27
+ flexmock_teardown
28
+
29
+ Dir.chdir @orig_PWD
30
+ end
31
+
32
+ def ignore_deprecations
33
+ Rake.application.options.ignore_deprecate = true
34
+ yield
35
+ ensure
36
+ Rake.application.options.ignore_deprecate = false
37
+ end
38
+
39
+ end
40
+
41
+ # workarounds for 1.8
42
+ $" << 'test/helper.rb'
43
+ Test::Unit.run = true if Test::Unit.respond_to? :run=
44
+
45
+ class ThreadSafeArray
46
+ def initialize
47
+ @mutex = Mutex.new
48
+ @array = Array.new
49
+ end
50
+
51
+ Array.public_instance_methods.each do |method_name|
52
+ unless method_name =~ %r!\A__! or method_name =~ %r!\A(object_)?id\Z!
53
+ # TODO: jettison 1.8.6; use define_method with |&block|
54
+ eval %{
55
+ def #{method_name}(*args, &block)
56
+ @mutex.synchronize {
57
+ @array.send('#{method_name}', *args, &block)
58
+ }
59
+ end
60
+ }
61
+ end
62
+ end
63
+ end
@@ -13,10 +13,12 @@ module InEnvironment
13
13
  end
14
14
 
15
15
  # Set the environment according to the settings hash.
16
- def set_env(settings) # :nodoc:
16
+ def set_env(settings) # :nodoc:
17
17
  result = {}
18
+
18
19
  settings.each do |k, v|
19
20
  result[k] = ENV[k]
21
+
20
22
  if k == 'PWD'
21
23
  result[k] = Dir.pwd
22
24
  Dir.chdir(v)
@@ -26,6 +28,7 @@ module InEnvironment
26
28
  ENV[k] = v
27
29
  end
28
30
  end
31
+
29
32
  result
30
33
  end
31
34
 
@@ -2,10 +2,12 @@
2
2
  require 'rbconfig'
3
3
  require 'test/unit'
4
4
  require 'rake'
5
- require 'test/rake_test_setup'
5
+ require 'test/helper'
6
6
 
7
7
  if Rake.application.options.threads != 1
8
8
  class TestParallel < Test::Unit::TestCase
9
+ include Rake::DSL
10
+
9
11
  VISUALS = false
10
12
  TIME_STEP = 0.25
11
13
  TIME_EPSILON = 0.05
@@ -1,9 +1,6 @@
1
- #!/usr/bin/env ruby
1
+ require File.expand_path('../helper', __FILE__)
2
2
 
3
- require 'test/unit'
4
- require 'rake'
5
-
6
- class TestRake < Test::Unit::TestCase
3
+ class TestRake < Rake::TestCase
7
4
  def test_each_dir_parent
8
5
  assert_equal ['a'], alldirs('a')
9
6
  assert_equal ['a/b', 'a'], alldirs('a/b')
@@ -0,0 +1,365 @@
1
+ require File.expand_path('../helper', __FILE__)
2
+
3
+ class TestRakeApplication < Rake::TestCase
4
+ include InEnvironment
5
+
6
+ def setup
7
+ super
8
+
9
+ @app = Rake::Application.new
10
+ @app.options.threads = Rake.application.options.threads
11
+ @app.options.rakelib = []
12
+ Rake::TaskManager.record_task_metadata = true
13
+ end
14
+
15
+ def teardown
16
+ Rake::TaskManager.record_task_metadata = false
17
+
18
+ super
19
+ end
20
+
21
+ def test_constant_warning
22
+ _, err = capture_io do @app.instance_eval { const_warning("Task") } end
23
+ assert_match(/warning/i, err)
24
+ assert_match(/deprecated/i, err)
25
+ assert_match(/Task/i, err)
26
+ end
27
+
28
+ def test_display_tasks
29
+ @app.options.show_tasks = :tasks
30
+ @app.options.show_task_pattern = //
31
+ @app.last_description = "COMMENT"
32
+ @app.define_task(Rake::Task, "t")
33
+ out, = capture_io do @app.instance_eval { display_tasks_and_comments } end
34
+ assert_match(/^rake t/, out)
35
+ assert_match(/# COMMENT/, out)
36
+ end
37
+
38
+ def test_display_tasks_with_long_comments
39
+ in_environment('RAKE_COLUMNS' => '80') do
40
+ @app.options.show_tasks = :tasks
41
+ @app.options.show_task_pattern = //
42
+ @app.last_description = "1234567890" * 8
43
+ @app.define_task(Rake::Task, "t")
44
+ out, = capture_io do @app.instance_eval { display_tasks_and_comments } end
45
+ assert_match(/^rake t/, out)
46
+ assert_match(/# 12345678901234567890123456789012345678901234567890123456789012345\.\.\./, out)
47
+ end
48
+ end
49
+
50
+ def test_display_tasks_with_task_name_wider_than_tty_display
51
+ in_environment('RAKE_COLUMNS' => '80') do
52
+ @app.options.show_tasks = :tasks
53
+ @app.options.show_task_pattern = //
54
+ task_name = "task name" * 80
55
+ @app.last_description = "something short"
56
+ @app.define_task(Rake::Task, task_name )
57
+ out, = capture_io do @app.instance_eval { display_tasks_and_comments } end
58
+ # Ensure the entire task name is output and we end up showing no description
59
+ assert_match(/rake #{task_name} # .../, out)
60
+ end
61
+ end
62
+
63
+ def test_display_tasks_with_very_long_task_name_to_a_non_tty_shows_name_and_comment
64
+ @app.options.show_tasks = :tasks
65
+ @app.options.show_task_pattern = //
66
+ @app.tty_output = false
67
+ description = "something short"
68
+ task_name = "task name" * 80
69
+ @app.last_description = "something short"
70
+ @app.define_task(Rake::Task, task_name )
71
+ out, = capture_io do @app.instance_eval { display_tasks_and_comments } end
72
+ # Ensure the entire task name is output and we end up showing no description
73
+ assert_match(/rake #{task_name} # #{description}/, out)
74
+ end
75
+
76
+ def test_display_tasks_with_long_comments_to_a_non_tty_shows_entire_comment
77
+ @app.options.show_tasks = :tasks
78
+ @app.options.show_task_pattern = //
79
+ @app.tty_output = false
80
+ @app.last_description = "1234567890" * 8
81
+ @app.define_task(Rake::Task, "t")
82
+ out, = capture_io do @app.instance_eval { display_tasks_and_comments } end
83
+ assert_match(/^rake t/, out)
84
+ assert_match(/# #{@app.last_description}/, out)
85
+ end
86
+
87
+ def test_display_tasks_with_long_comments_to_a_non_tty_with_columns_set_truncates_comments
88
+ in_environment("RAKE_COLUMNS" => '80') do
89
+ @app.options.show_tasks = :tasks
90
+ @app.options.show_task_pattern = //
91
+ @app.tty_output = false
92
+ @app.last_description = "1234567890" * 8
93
+ @app.define_task(Rake::Task, "t")
94
+ out, = capture_io do @app.instance_eval { display_tasks_and_comments } end
95
+ assert_match(/^rake t/, out)
96
+ assert_match(/# 12345678901234567890123456789012345678901234567890123456789012345\.\.\./, out)
97
+ end
98
+ end
99
+
100
+ def test_describe_tasks
101
+ @app.options.show_tasks = :describe
102
+ @app.options.show_task_pattern = //
103
+ @app.last_description = "COMMENT"
104
+ @app.define_task(Rake::Task, "t")
105
+ out, = capture_io do @app.instance_eval { display_tasks_and_comments } end
106
+ assert_match(/^rake t$/, out)
107
+ assert_match(/^ {4}COMMENT$/, out)
108
+ end
109
+
110
+ def test_show_lines
111
+ @app.options.show_tasks = :lines
112
+ @app.options.show_task_pattern = //
113
+ @app.last_description = "COMMENT"
114
+ @app.define_task(Rake::Task, "t")
115
+ @app['t'].locations << "HERE:1"
116
+ out, = capture_io do @app.instance_eval { display_tasks_and_comments } end
117
+ assert_match(/^rake t +[^:]+:\d+ *$/, out)
118
+ end
119
+
120
+ def test_finding_rakefile
121
+ assert_match(/Rakefile/i, @app.instance_eval { have_rakefile })
122
+ end
123
+
124
+ def test_not_finding_rakefile
125
+ @app.instance_eval { @rakefiles = ['NEVER_FOUND'] }
126
+ assert( ! @app.instance_eval do have_rakefile end )
127
+ assert_nil @app.rakefile
128
+ end
129
+
130
+ def test_load_rakefile
131
+ in_environment("PWD" => "test/data/unittest") do
132
+ @app.instance_eval do
133
+ handle_options
134
+ options.silent = true
135
+ load_rakefile
136
+ end
137
+ assert_equal "rakefile", @app.rakefile.downcase
138
+ assert_match(%r(unittest$), Dir.pwd)
139
+ end
140
+ end
141
+
142
+ def test_load_rakefile_doesnt_print_rakefile_directory_from_same_dir
143
+ in_environment("PWD" => "test/data/unittest") do
144
+ _, err = capture_io do
145
+ @app.instance_eval do
146
+ @original_dir = File.expand_path(".") # pretend we started from the unittest dir
147
+ raw_load_rakefile
148
+ end
149
+ end
150
+ _, location = @app.find_rakefile_location
151
+ refute_match(/\(in #{location}\)/, err)
152
+ end
153
+ end
154
+
155
+ def test_load_rakefile_from_subdir
156
+ in_environment("PWD" => "test/data/unittest/subdir") do
157
+ @app.instance_eval do
158
+ handle_options
159
+ options.silent = true
160
+ load_rakefile
161
+ end
162
+ assert_equal "rakefile", @app.rakefile.downcase
163
+ assert_match(%r(unittest$), Dir.pwd)
164
+ end
165
+ end
166
+
167
+ def test_load_rakefile_prints_rakefile_directory_from_subdir
168
+ in_environment("PWD" => "test/data/unittest/subdir") do
169
+ _, err = capture_io do
170
+ @app.instance_eval do
171
+ raw_load_rakefile
172
+ end
173
+ end
174
+ _, location = @app.find_rakefile_location
175
+ assert_match(/\(in #{location}\)/, err)
176
+ end
177
+ end
178
+
179
+ def test_load_rakefile_doesnt_print_rakefile_directory_from_subdir_if_silent
180
+ in_environment("PWD" => "test/data/unittest/subdir") do
181
+ _, err = capture_io do
182
+ @app.instance_eval do
183
+ handle_options
184
+ options.silent = true
185
+ raw_load_rakefile
186
+ end
187
+ end
188
+ _, location = @app.find_rakefile_location
189
+ refute_match(/\(in #{location}\)/, err)
190
+ end
191
+ end
192
+
193
+ def test_load_rakefile_not_found
194
+ in_environment("PWD" => "/", "RAKE_SYSTEM" => 'not_exist') do
195
+ @app.instance_eval do
196
+ handle_options
197
+ options.silent = true
198
+ end
199
+ ex = assert_raises(RuntimeError) do
200
+ @app.instance_eval do raw_load_rakefile end
201
+ end
202
+ assert_match(/no rakefile found/i, ex.message)
203
+ end
204
+ end
205
+
206
+ def test_load_from_system_rakefile
207
+ in_environment('RAKE_SYSTEM' => 'test/data/sys') do
208
+ @app.options.rakelib = []
209
+ @app.instance_eval do
210
+ handle_options
211
+ options.silent = true
212
+ options.load_system = true
213
+ options.rakelib = []
214
+ load_rakefile
215
+ end
216
+ assert_equal "test/data/sys", @app.system_dir
217
+ assert_nil @app.rakefile
218
+ end
219
+ end
220
+
221
+ def test_load_from_calculated_system_rakefile
222
+ flexmock(@app, :standard_system_dir => "__STD_SYS_DIR__")
223
+ in_environment('RAKE_SYSTEM' => nil) do
224
+ @app.options.rakelib = []
225
+ @app.instance_eval do
226
+ handle_options
227
+ options.silent = true
228
+ options.load_system = true
229
+ options.rakelib = []
230
+ load_rakefile
231
+ end
232
+ assert_equal "__STD_SYS_DIR__", @app.system_dir
233
+ end
234
+ end
235
+
236
+ def test_windows
237
+ assert ! (@app.windows? && @app.unix?)
238
+ end
239
+
240
+ def test_loading_imports
241
+ mock = flexmock("loader")
242
+ mock.should_receive(:load).with("x.dummy").once
243
+ @app.instance_eval do
244
+ add_loader("dummy", mock)
245
+ add_import("x.dummy")
246
+ load_imports
247
+ end
248
+ end
249
+
250
+ def test_building_imported_files_on_demand
251
+ mock = flexmock("loader")
252
+ mock.should_receive(:load).with("x.dummy").once
253
+ mock.should_receive(:make_dummy).with_no_args.once
254
+ @app.instance_eval do
255
+ intern(Rake::Task, "x.dummy").enhance do mock.make_dummy end
256
+ add_loader("dummy", mock)
257
+ add_import("x.dummy")
258
+ load_imports
259
+ end
260
+ end
261
+
262
+ def test_handle_options_should_strip_options_from_ARGV
263
+ assert !@app.options.trace
264
+
265
+ valid_option = '--trace'
266
+ ARGV.clear
267
+ ARGV << valid_option
268
+
269
+ @app.handle_options
270
+
271
+ assert !ARGV.include?(valid_option)
272
+ assert @app.options.trace
273
+ end
274
+
275
+ def test_good_run
276
+ ran = false
277
+ ARGV.clear
278
+ ARGV << '--rakelib=""'
279
+ @app.options.silent = true
280
+ @app.instance_eval do
281
+ intern(Rake::Task, "default").enhance { ran = true }
282
+ end
283
+ in_environment("PWD" => "test/data/default") do
284
+ @app.run
285
+ end
286
+ assert ran
287
+ end
288
+
289
+ def test_display_task_run
290
+ ran = false
291
+ ARGV.clear
292
+ ARGV << '-f' << '-s' << '--tasks' << '--rakelib=""'
293
+ @app.last_description = "COMMENT"
294
+ @app.define_task(Rake::Task, "default")
295
+ out, = capture_io { @app.run }
296
+ assert @app.options.show_tasks
297
+ assert ! ran
298
+ assert_match(/rake default/, out)
299
+ assert_match(/# COMMENT/, out)
300
+ end
301
+
302
+ def test_display_prereqs
303
+ ran = false
304
+ ARGV.clear
305
+ ARGV << '-f' << '-s' << '--prereqs' << '--rakelib=""'
306
+ @app.last_description = "COMMENT"
307
+ t = @app.define_task(Rake::Task, "default")
308
+ t.enhance([:a, :b])
309
+ @app.define_task(Rake::Task, "a")
310
+ @app.define_task(Rake::Task, "b")
311
+ out, = capture_io { @app.run }
312
+ assert @app.options.show_prereqs
313
+ assert ! ran
314
+ assert_match(/rake a$/, out)
315
+ assert_match(/rake b$/, out)
316
+ assert_match(/rake default\n( *(a|b)\n){2}/m, out)
317
+ end
318
+
319
+ def test_bad_run
320
+ @app.intern(Rake::Task, "default").enhance { fail }
321
+ ARGV.clear
322
+ ARGV << '-f' << '-s' << '--rakelib=""'
323
+ assert_raises(SystemExit) {
324
+ _, err = capture_io { @app.run }
325
+ assert_match(/see full trace/, err)
326
+ }
327
+ ensure
328
+ ARGV.clear
329
+ end
330
+
331
+ def test_bad_run_with_trace
332
+ @app.intern(Rake::Task, "default").enhance { fail }
333
+ ARGV.clear
334
+ ARGV << '-f' << '-s' << '-t'
335
+ assert_raises(SystemExit) {
336
+ _, err = capture_io { @app.run }
337
+ refute_match(/see full trace/, err)
338
+ }
339
+ ensure
340
+ ARGV.clear
341
+ end
342
+
343
+ def test_run_with_bad_options
344
+ @app.intern(Rake::Task, "default").enhance { fail }
345
+ ARGV.clear
346
+ ARGV << '-f' << '-s' << '--xyzzy'
347
+ assert_raises(SystemExit) {
348
+ capture_io { @app.run }
349
+ }
350
+ ensure
351
+ ARGV.clear
352
+ end
353
+
354
+ def test_deprecation_message
355
+ in_environment do
356
+ _, err = capture_io do
357
+ @app.deprecate("a", "b", "c")
358
+ end
359
+ assert_match(/'a' is deprecated/i, err)
360
+ assert_match(/use 'b' instead/i, err)
361
+ assert_match(/at c$/i, err)
362
+ end
363
+ end
364
+ end
365
+