buildr 1.3.5-x86-mswin32 → 1.4.0-x86-mswin32

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 (151) hide show
  1. data/CHANGELOG +153 -8
  2. data/README.rdoc +1 -1
  3. data/addon/buildr/antlr.rb +5 -5
  4. data/addon/buildr/drb.rb +18 -18
  5. data/addon/buildr/hibernate.rb +18 -14
  6. data/addon/buildr/javacc.rb +4 -4
  7. data/addon/buildr/jetty.rb +5 -5
  8. data/addon/buildr/nailgun.rb +23 -23
  9. data/addon/buildr/openjpa.rb +1 -1
  10. data/addon/buildr/org/apache/buildr/BuildrNail$Main.class +0 -0
  11. data/addon/buildr/org/apache/buildr/BuildrNail.class +0 -0
  12. data/addon/buildr/org/apache/buildr/JettyWrapper$1.class +0 -0
  13. data/addon/buildr/org/apache/buildr/JettyWrapper$BuildrHandler.class +0 -0
  14. data/addon/buildr/org/apache/buildr/JettyWrapper.class +0 -0
  15. data/addon/buildr/protobuf.rb +75 -0
  16. data/addon/buildr/xmlbeans.rb +5 -5
  17. data/buildr.buildfile +2 -2
  18. data/buildr.gemspec +8 -7
  19. data/doc/_layouts/default.html +2 -2
  20. data/doc/artifacts.textile +4 -4
  21. data/doc/building.textile +35 -3
  22. data/doc/contributing.textile +5 -0
  23. data/doc/download.textile +16 -5
  24. data/doc/extending.textile +38 -12
  25. data/doc/installing.textile +6 -5
  26. data/doc/languages.textile +182 -42
  27. data/doc/more_stuff.textile +2 -2
  28. data/doc/packaging.textile +14 -15
  29. data/doc/projects.textile +7 -2
  30. data/doc/quick_start.textile +4 -4
  31. data/doc/scripts/buildr-git.rb +63 -63
  32. data/doc/scripts/gitflow.rb +21 -21
  33. data/doc/settings_profiles.textile +9 -2
  34. data/doc/testing.textile +16 -5
  35. data/etc/KEYS +38 -0
  36. data/lib/buildr.rb +1 -1
  37. data/lib/buildr/core.rb +1 -0
  38. data/lib/buildr/core/application.rb +33 -27
  39. data/lib/buildr/core/build.rb +41 -28
  40. data/lib/buildr/core/cc.rb +172 -0
  41. data/lib/buildr/core/checks.rb +1 -1
  42. data/lib/buildr/core/common.rb +7 -6
  43. data/lib/buildr/core/compile.rb +7 -8
  44. data/lib/buildr/core/doc.rb +263 -0
  45. data/lib/buildr/core/environment.rb +6 -6
  46. data/lib/buildr/core/filter.rb +77 -35
  47. data/lib/buildr/core/generate.rb +7 -7
  48. data/lib/buildr/core/help.rb +1 -1
  49. data/lib/buildr/core/osx.rb +6 -6
  50. data/lib/buildr/core/progressbar.rb +4 -4
  51. data/lib/buildr/core/project.rb +144 -36
  52. data/lib/buildr/core/shell.rb +34 -34
  53. data/lib/buildr/core/test.rb +89 -20
  54. data/lib/buildr/core/transports.rb +8 -7
  55. data/lib/buildr/core/util.rb +77 -23
  56. data/lib/buildr/groovy/bdd.rb +5 -5
  57. data/lib/buildr/groovy/compiler.rb +19 -15
  58. data/lib/buildr/groovy/shell.rb +6 -6
  59. data/lib/buildr/ide/eclipse.rb +148 -75
  60. data/lib/buildr/ide/eclipse/java.rb +3 -3
  61. data/lib/buildr/ide/eclipse/plugin.rb +8 -5
  62. data/lib/buildr/ide/eclipse/scala.rb +4 -2
  63. data/lib/buildr/ide/idea.rb +2 -2
  64. data/lib/buildr/ide/idea7x.rb +23 -4
  65. data/lib/buildr/java.rb +1 -0
  66. data/lib/buildr/java/ant.rb +4 -4
  67. data/lib/buildr/java/bdd.rb +51 -54
  68. data/lib/buildr/java/cobertura.rb +57 -35
  69. data/lib/buildr/java/commands.rb +14 -5
  70. data/lib/buildr/java/compiler.rb +3 -217
  71. data/lib/buildr/java/deprecated.rb +4 -4
  72. data/lib/buildr/java/doc.rb +70 -0
  73. data/lib/buildr/java/emma.rb +22 -22
  74. data/lib/buildr/java/jruby.rb +4 -4
  75. data/lib/buildr/java/jtestr_runner.rb.erb +27 -25
  76. data/lib/buildr/java/org/apache/buildr/JavaTestFilter.class +0 -0
  77. data/lib/buildr/java/org/apache/buildr/JavaTestFilter.java +8 -3
  78. data/lib/buildr/java/packaging.rb +30 -29
  79. data/lib/buildr/java/pom.rb +4 -4
  80. data/lib/buildr/java/rjb.rb +6 -6
  81. data/lib/buildr/java/test_result.rb +61 -85
  82. data/lib/buildr/java/tests.rb +44 -27
  83. data/lib/buildr/java/version_requirement.rb +8 -8
  84. data/lib/buildr/packaging/archive.rb +55 -22
  85. data/lib/buildr/packaging/artifact.rb +75 -36
  86. data/lib/buildr/packaging/artifact_namespace.rb +90 -78
  87. data/lib/buildr/packaging/artifact_search.rb +5 -5
  88. data/lib/buildr/packaging/gems.rb +11 -7
  89. data/lib/buildr/packaging/package.rb +10 -7
  90. data/lib/buildr/packaging/tar.rb +14 -14
  91. data/lib/buildr/packaging/version_requirement.rb +30 -10
  92. data/lib/buildr/packaging/ziptask.rb +51 -13
  93. data/lib/buildr/scala.rb +1 -0
  94. data/lib/buildr/scala/bdd.rb +25 -20
  95. data/lib/buildr/scala/compiler.rb +87 -40
  96. data/lib/buildr/scala/doc.rb +106 -0
  97. data/lib/buildr/scala/org/apache/buildr/SpecsSingletonRunner.class +0 -0
  98. data/lib/buildr/scala/org/apache/buildr/SpecsSingletonRunner.java +57 -0
  99. data/lib/buildr/scala/shell.rb +14 -9
  100. data/lib/buildr/scala/tests.rb +33 -26
  101. data/lib/buildr/shell.rb +33 -33
  102. data/rakelib/all-in-one.rake +113 -0
  103. data/rakelib/checks.rake +1 -1
  104. data/rakelib/doc.rake +7 -0
  105. data/rakelib/package.rake +1 -1
  106. data/rakelib/release.rake +9 -6
  107. data/rakelib/rspec.rake +26 -7
  108. data/rakelib/setup.rake +15 -3
  109. data/rakelib/stage.rake +18 -11
  110. data/spec/addon/drb_spec.rb +25 -25
  111. data/spec/core/application_spec.rb +111 -21
  112. data/spec/core/build_spec.rb +16 -15
  113. data/spec/core/cc_spec.rb +174 -0
  114. data/spec/core/checks_spec.rb +34 -34
  115. data/spec/core/common_spec.rb +51 -5
  116. data/spec/core/compile_spec.rb +89 -14
  117. data/spec/core/extension_spec.rb +127 -19
  118. data/spec/core/generate_spec.rb +2 -2
  119. data/spec/core/project_spec.rb +10 -10
  120. data/spec/core/test_spec.rb +144 -35
  121. data/spec/core/transport_spec.rb +8 -8
  122. data/spec/core/util_spec.rb +63 -5
  123. data/spec/groovy/bdd_spec.rb +5 -5
  124. data/spec/groovy/compiler_spec.rb +29 -18
  125. data/spec/ide/eclipse_spec.rb +185 -9
  126. data/spec/ide/idea7x_spec.rb +22 -10
  127. data/spec/java/ant_spec.rb +9 -5
  128. data/spec/java/bdd_spec.rb +29 -37
  129. data/spec/java/cobertura_spec.rb +12 -12
  130. data/spec/java/commands_spec.rb +34 -0
  131. data/spec/java/compiler_spec.rb +53 -53
  132. data/spec/java/emma_spec.rb +11 -11
  133. data/spec/java/java_spec.rb +10 -10
  134. data/spec/java/packaging_spec.rb +67 -20
  135. data/spec/java/test_coverage_helper.rb +18 -18
  136. data/spec/java/tests_spec.rb +13 -9
  137. data/spec/packaging/archive_spec.rb +187 -20
  138. data/spec/packaging/artifact_namespace_spec.rb +172 -83
  139. data/spec/packaging/artifact_spec.rb +83 -18
  140. data/spec/packaging/packaging_spec.rb +41 -14
  141. data/spec/sandbox.rb +23 -12
  142. data/spec/scala/bdd_spec.rb +13 -8
  143. data/spec/scala/compiler_spec.rb +18 -13
  144. data/spec/scala/scala.rb +3 -3
  145. data/spec/scala/tests_spec.rb +46 -24
  146. data/spec/spec_helpers.rb +28 -10
  147. data/spec/version_requirement_spec.rb +25 -11
  148. metadata +149 -133
  149. data/lib/buildr/scala/org/apache/buildr/SpecsSingletonRunner$.class +0 -0
  150. data/lib/buildr/scala/org/apache/buildr/SpecsSingletonRunner.scala +0 -35
  151. data/rakelib/stage.rake~ +0 -213
data/rakelib/setup.rake CHANGED
@@ -17,7 +17,7 @@
17
17
  require 'jruby' if RUBY_PLATFORM[/java/]
18
18
  require 'rubygems/source_info_cache'
19
19
 
20
- RAKE_SUDO = case (ENV['RAKE_SUDO'] or 'yes').strip.downcase
20
+ RAKE_SUDO = case (ENV['RAKE_SUDO'] or 'false').strip.downcase
21
21
  when 'yes', 'true'
22
22
  true
23
23
  else
@@ -35,7 +35,14 @@ def install_gem(name, options = {})
35
35
  args = []
36
36
  args << 'sudo' << 'env' << "JAVA_HOME=#{ENV['JAVA_HOME']}" if sudo_needed? and RAKE_SUDO
37
37
  args << rb_bin << '-S' << 'gem' << 'install' << name
38
- args << '--version' << dep.version_requirements.to_s
38
+
39
+ if (spec.respond_to? :requirement)
40
+ args << '--version' << dep.requirement.to_s
41
+ else
42
+ # Dependency.version_requirements deprecated in rubygems 1.3.6
43
+ args << '--version' << dep.version_requirements.to_s
44
+ end
45
+
39
46
  args << '--source' << options[:source] if options[:source]
40
47
  args << '--source' << 'http://gems.rubyforge.org'
41
48
  args << '--install-dir' << ENV['GEM_HOME'] if ENV['GEM_HOME']
@@ -49,6 +56,11 @@ desc "If you're building from sources, run this task first to setup the necessar
49
56
  task :setup do
50
57
  missing = spec.dependencies.select { |dep| Gem::SourceIndex.from_installed_gems.search(dep).empty? }
51
58
  missing.each do |dep|
52
- install_gem dep.name, :version=>dep.version_requirements
59
+ if (spec.respond_to? :requirement)
60
+ install_gem dep.name, :version=>dep.requirement
61
+ else
62
+ # Dependency.version_requirements deprecated in rubygems 1.3.6
63
+ install_gem dep.name, :version=>dep.version_requirements
64
+ end
53
65
  end
54
66
  end
data/rakelib/stage.rake CHANGED
@@ -23,13 +23,14 @@ rescue LoadError
23
23
  task(:setup) { install_gem 'rubyforge' }
24
24
  end
25
25
 
26
+ gpg_cmd = 'gpg2'
26
27
 
27
28
  task :prepare do |task, args|
28
29
  # Make sure we're doing a release from checked code.
29
30
  lambda do
30
31
  puts "Checking there are no local changes ... "
31
32
  svn = `svn status`
32
- #fail "Cannot release unless all local changes are in SVN:\n#{svn}" unless svn.empty?
33
+ fail "Cannot release unless all local changes are in SVN:\n#{svn}" unless svn.empty?
33
34
  git = `git status`
34
35
  fail "Cannot release unless all local changes are in Git:\n#{git}" if git[/^#\t/]
35
36
  puts "[X] There are no local changes, everything is in source control"
@@ -40,14 +41,19 @@ task :prepare do |task, args|
40
41
  puts "Checking that CHANGELOG indicates most recent version and today's date ... "
41
42
  expecting = "#{spec.version} (#{Time.now.strftime('%Y-%m-%d')})"
42
43
  header = File.readlines('CHANGELOG').first.chomp
43
- #fail "Expecting CHANGELOG to start with #{expecting}, but found #{header} instead" unless expecting == header
44
+ fail "Expecting CHANGELOG to start with #{expecting}, but found #{header} instead" unless expecting == header
44
45
  puts "[x] CHANGELOG indicates most recent version and today's date"
45
46
  end.call
46
47
 
47
48
  # Need GPG to sign the packages.
48
49
  lambda do
49
50
  args.gpg or fail "Please run with gpg=<argument for gpg --local-user>"
50
- fail "No GPG user #{args.gpg}" if `gpg2 --list-keys #{args.gpg}`.empty?
51
+ gpg_ok = `gpg2 --list-keys #{args.gpg}`
52
+ if !$?.success?
53
+ gpg_ok = `gpg --list-keys #{args.gpg}`
54
+ gpg_cmd = 'gpg'
55
+ end
56
+ fail "No GPG user #{args.gpg}" if gpg_ok.empty?
51
57
  end.call
52
58
 
53
59
  task(:license).invoke
@@ -73,7 +79,7 @@ task :prepare do |task, args|
73
79
  lambda do
74
80
  puts "[!] Make sure you have admin privileges to make a release on RubyForge"
75
81
  rubyforge = RubyForge.new.configure
76
- rubyforge.login
82
+ rubyforge.login
77
83
  rubyforge.scrape_project(spec.name)
78
84
  end.call
79
85
 
@@ -106,14 +112,14 @@ task :stage=>['setup', 'doc:setup', :clobber, :prepare] do |task, args|
106
112
  task(:package).invoke
107
113
  mkpath '_staged/dist'
108
114
  FileList['pkg/*.{gem,zip,tgz}'].each do |source|
109
- pkg = source.pathmap('_staged/dist/%n%x')
115
+ pkg = source.pathmap('_staged/dist/%n%x')
110
116
  cp source, pkg
111
117
  bytes = File.open(pkg, 'rb') { |file| file.read }
112
118
  File.open(pkg + '.md5', 'w') { |file| file.write Digest::MD5.hexdigest(bytes) << ' ' << File.basename(pkg) }
113
119
  File.open(pkg + '.sha1', 'w') { |file| file.write Digest::SHA1.hexdigest(bytes) << ' ' << File.basename(pkg) }
114
- sh 'gpg2', '--local-user', args.gpg, '--armor', '--output', pkg + '.asc', '--detach-sig', pkg, :verbose=>true
120
+ sh gpg_cmd, '--local-user', args.gpg, '--armor', '--output', pkg + '.asc', '--detach-sig', pkg, :verbose=>true
115
121
  end
116
- cp 'etc/KEYS', '_staged'
122
+ cp 'etc/KEYS', '_staged/dist'
117
123
  puts "[X] Created and signed release packages in _staged/dist"
118
124
  end.call
119
125
 
@@ -121,10 +127,11 @@ task :stage=>['setup', 'doc:setup', :clobber, :prepare] do |task, args|
121
127
  # want to do that before generating the site/documentation.
122
128
  lambda do
123
129
  puts "Updating download page with links to release packages ... "
124
- url = "http://www.apache.org/dist/#{spec.name}/#{spec.version}"
130
+ mirror = "http://www.apache.org/dyn/closer.cgi/#{spec.name}/#{spec.version}"
131
+ official = "http://www.apache.org/dist/#{spec.name}/#{spec.version}"
125
132
  rows = FileList['_staged/dist/*.{gem,tgz,zip}'].map { |pkg|
126
133
  name, md5 = File.basename(pkg), Digest::MD5.file(pkg).to_s
127
- %{| "#{name}":#{url}/#{name} | "#{md5}":#{url}/#{name}.md5 | "Sig":#{url}/#{name}.asc |}
134
+ %{| "#{name}":#{mirror}/#{name} | "#{md5}":#{official}/#{name}.md5 | "Sig":#{official}/#{name}.asc |}
128
135
  }
129
136
  textile = <<-TEXTILE
130
137
  h3. #{spec.name} #{spec.version} (#{Time.now.strftime('%Y-%m-%d')})
@@ -132,7 +139,7 @@ h3. #{spec.name} #{spec.version} (#{Time.now.strftime('%Y-%m-%d')})
132
139
  |_. Package |_. MD5 Checksum |_. PGP |
133
140
  #{rows.join("\n")}
134
141
 
135
- p>. ("Release signing keys":#{url}/KEYS)
142
+ p>. ("Release signing keys":#{official}/KEYS)
136
143
  TEXTILE
137
144
  file_name = 'doc/download.textile'
138
145
  print "Adding download links to #{file_name} ... "
@@ -161,7 +168,7 @@ p>. ("Release signing keys":#{url}/KEYS)
161
168
  sh 'rsync', '--progress', '--recursive', '_staged/', url
162
169
  puts "[X] Uploaded _staged directory to #{url}"
163
170
  end.call
164
-
171
+
165
172
 
166
173
  # Prepare a release vote email. In the distant future this will also send the
167
174
  # email for you and vote on it.
@@ -12,16 +12,16 @@
12
12
  # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13
13
  # License for the specific language governing permissions and limitations under
14
14
  # the License.
15
-
16
-
15
+
16
+
17
17
  require File.expand_path('../spec_helpers', File.dirname(__FILE__))
18
18
  require 'stringio'
19
19
  Sandbox.require_optional_extension 'buildr/drb'
20
20
 
21
21
 
22
- describe Buildr::DRbApplication do
22
+ describe Buildr::DRbApplication do
23
23
 
24
- module DRbHelper
24
+ module DRbHelper
25
25
  attr_accessor :app, :drb, :cfg
26
26
 
27
27
  def use_stdio(stdin = nil, stdout = nil, stderr = nil)
@@ -30,7 +30,7 @@ describe Buildr::DRbApplication do
30
30
  stderr ||= StringIO.new
31
31
  cfg.update :in => stdin, :out => stdout, :err => stderr
32
32
  end
33
-
33
+
34
34
  def remote_run(*argv)
35
35
  cfg.update :argv => argv
36
36
  drb.remote_run(cfg)
@@ -48,7 +48,7 @@ describe Buildr::DRbApplication do
48
48
  $stdout.puts "#{t.name} from #{t.source}"
49
49
  end
50
50
 
51
- task('hello') do
51
+ task('hello') do
52
52
  $stdout.puts 'hi'
53
53
  end
54
54
 
@@ -81,7 +81,7 @@ describe Buildr::DRbApplication do
81
81
  end
82
82
 
83
83
  include DRbHelper
84
-
84
+
85
85
  before(:each) do
86
86
  @in, @out, @err = $stdin, $stdout, $stderr
87
87
  @cfg = {
@@ -96,7 +96,7 @@ describe Buildr::DRbApplication do
96
96
  after(:each) do
97
97
  $stdin, $stdout, $stderr = @in, @out, @err
98
98
  end
99
-
99
+
100
100
  describe '.run' do
101
101
  it 'starts server if no server is running' do
102
102
  drb.should_receive(:connect).and_raise DRb::DRbConnError
@@ -114,11 +114,11 @@ describe Buildr::DRbApplication do
114
114
  end
115
115
 
116
116
  describe '.remote_run' do
117
-
117
+
118
118
  describe 'stdout' do
119
- it 'is redirected to client' do
119
+ it 'is redirected to client' do
120
120
  use_stdio
121
- Buildr.application.should_receive(:remote_run) do
121
+ Buildr.application.should_receive(:remote_run) do
122
122
  $stdout.puts "HELLO"
123
123
  end
124
124
  remote_run
@@ -126,10 +126,10 @@ describe Buildr::DRbApplication do
126
126
  end
127
127
  end
128
128
 
129
- describe 'stderr' do
129
+ describe 'stderr' do
130
130
  it 'is redirected to client' do
131
131
  use_stdio
132
- Buildr.application.should_receive(:remote_run) do
132
+ Buildr.application.should_receive(:remote_run) do
133
133
  $stderr.puts "HELLO"
134
134
  end
135
135
  remote_run
@@ -142,7 +142,7 @@ describe Buildr::DRbApplication do
142
142
  use_stdio
143
143
  cfg[:in].should_receive(:gets).and_return("HELLO\n")
144
144
  result = nil
145
- Buildr.application.should_receive(:remote_run) do
145
+ Buildr.application.should_receive(:remote_run) do
146
146
  result = $stdin.gets
147
147
  end
148
148
  remote_run
@@ -152,7 +152,7 @@ describe Buildr::DRbApplication do
152
152
 
153
153
  describe 'server ARGV' do
154
154
  it 'is replaced with client argv' do
155
- Buildr.application.should_receive(:remote_run) do
155
+ Buildr.application.should_receive(:remote_run) do
156
156
  ARGV.should eql(['hello'])
157
157
  end
158
158
  remote_run 'hello'
@@ -164,7 +164,7 @@ describe Buildr::DRbApplication do
164
164
  app.instance_eval { @rakefile = nil }
165
165
  write_buildfile
166
166
  end
167
-
167
+
168
168
  it 'should load the buildfile' do
169
169
  app.should_receive(:top_level)
170
170
  lambda { remote_run }.should run_task('foo')
@@ -172,14 +172,14 @@ describe Buildr::DRbApplication do
172
172
  end
173
173
 
174
174
  describe 'with unmodified buildfile' do
175
-
176
- before(:each) do
175
+
176
+ before(:each) do
177
177
  write_buildfile
178
178
  app.options.rakelib = []
179
179
  app.send :load_buildfile
180
180
  drb.save_snapshot(app)
181
181
  end
182
-
182
+
183
183
  it 'should not reload the buildfile' do
184
184
  app.should_not_receive(:reload_buildfile)
185
185
  app.should_receive(:top_level)
@@ -235,12 +235,12 @@ describe Buildr::DRbApplication do
235
235
  remote_run 'foo:empty'
236
236
  app.instance_eval { @rules.size }.should eql(orig)
237
237
  end
238
-
238
+
239
239
  end
240
240
 
241
241
  describe 'with modified buildfile' do
242
-
243
- before(:each) do
242
+
243
+ before(:each) do
244
244
  write_buildfile
245
245
  app.options.rakelib = []
246
246
  app.send :load_buildfile
@@ -251,12 +251,12 @@ describe Buildr::DRbApplication do
251
251
  $stdout.puts "#{t.name} from #{t.source}"
252
252
  end
253
253
  define('foo') do
254
- task('hello') do
254
+ task('hello') do
255
255
  $stdout.puts 'bye'
256
256
  end
257
257
  task('empty')
258
258
  define('bar') do
259
-
259
+
260
260
  end
261
261
  end
262
262
  }
@@ -277,7 +277,7 @@ describe Buildr::DRbApplication do
277
277
  remote_run
278
278
  app.lookup('foo:delete_me').should be_nil
279
279
  end
280
-
280
+
281
281
  it 'should redefine tasks actions' do
282
282
  actions = app.lookup('foo:empty').instance_eval { @actions }
283
283
  actions.should be_empty # no action
@@ -72,7 +72,7 @@ describe Buildr::Application do
72
72
  Buildr.application.environment.should eql('test')
73
73
  ENV['BUILDR_ENV'].should eql('test')
74
74
  end
75
-
75
+
76
76
  it 'should be echoed to user' do
77
77
  write 'buildfile'
78
78
  ENV['BUILDR_ENV'] = 'spec'
@@ -80,12 +80,22 @@ describe Buildr::Application do
80
80
  lambda { Buildr.application.send :load_buildfile }.should show(%r{(in .*, spec)})
81
81
  end
82
82
  end
83
-
83
+
84
84
  describe 'options' do
85
85
  it "should have 'tasks' as the sole default rakelib" do
86
86
  Buildr.application.send(:handle_options)
87
87
  Buildr.application.options.rakelib.should == ['tasks']
88
88
  end
89
+
90
+ it 'should show the version when prompted with -V' do
91
+ ARGV.push('-V')
92
+ test_exit(0) { Buildr.application.send(:handle_options) }.should show(/Buildr #{Buildr::VERSION}.*/)
93
+ end
94
+
95
+ it 'should show the version when prompted with --version' do
96
+ ARGV.push('--version')
97
+ test_exit(0) { Buildr.application.send(:handle_options) }.should show(/Buildr #{Buildr::VERSION}.*/)
98
+ end
89
99
  end
90
100
 
91
101
  describe 'gems' do
@@ -248,45 +258,45 @@ describe Buildr::Application do
248
258
  @original_loaded_features = $LOADED_FEATURES.dup
249
259
  Buildr.application.options.rakelib = ["tasks"]
250
260
  end
251
-
261
+
252
262
  after do
253
263
  $taskfiles = nil
254
264
  ($LOADED_FEATURES - @original_loaded_features).each do |new_load|
255
265
  $LOADED_FEATURES.delete(new_load)
256
266
  end
257
267
  end
258
-
268
+
259
269
  def write_task(filename)
260
270
  write filename, <<-RUBY
261
271
  $taskfiles ||= []
262
272
  $taskfiles << __FILE__
263
273
  RUBY
264
274
  end
265
-
275
+
266
276
  def loaded_tasks
267
277
  @loaded ||= Buildr.application.load_tasks
268
278
  $taskfiles
269
279
  end
270
-
280
+
271
281
  it "should load {options.rakelib}/foo.rake" do
272
282
  write_task 'tasks/foo.rake'
273
283
  loaded_tasks.should have(1).task
274
284
  loaded_tasks.first.should =~ %r{tasks/foo\.rake$}
275
285
  end
276
-
286
+
277
287
  it 'should load all *.rake files from the rakelib' do
278
288
  write_task 'tasks/bar.rake'
279
289
  write_task 'tasks/quux.rake'
280
290
  loaded_tasks.should have(2).tasks
281
291
  end
282
-
292
+
283
293
  it 'should not load files which do not have the .rake extension' do
284
294
  write_task 'tasks/foo.rb'
285
295
  write_task 'tasks/bar.rake'
286
296
  loaded_tasks.should have(1).task
287
297
  loaded_tasks.first.should =~ %r{tasks/bar\.rake$}
288
298
  end
289
-
299
+
290
300
  it 'should load files only from the directory specified in the rakelib option' do
291
301
  Buildr.application.options.rakelib = ['extensions']
292
302
  write_task 'extensions/amp.rake'
@@ -297,7 +307,7 @@ describe Buildr::Application do
297
307
  loaded_tasks.select{|x| x =~ %r{extensions/#{filename}\.rake}}.should have(1).entry
298
308
  end
299
309
  end
300
-
310
+
301
311
  it 'should load files from all the directories specified in the rakelib option' do
302
312
  Buildr.application.options.rakelib = ['ext', 'more', 'tasks']
303
313
  write_task 'ext/foo.rake'
@@ -306,17 +316,71 @@ describe Buildr::Application do
306
316
  write_task 'more/baz.rake'
307
317
  loaded_tasks.should have(4).tasks
308
318
  end
309
-
319
+
310
320
  it 'should not load files from the rakelib more than once' do
311
321
  write_task 'tasks/new_one.rake'
312
322
  write_task 'tasks/already.rake'
313
323
  $LOADED_FEATURES << 'tasks/already.rake'
314
-
324
+
315
325
  loaded_tasks.should have(1).task
316
326
  loaded_tasks.first.should =~ %r{tasks/new_one\.rake$}
317
327
  end
318
328
  end
319
329
 
330
+ describe 'exception handling' do
331
+
332
+ it 'should exit when given a SystemExit exception' do
333
+ test_exit(3) { Buildr.application.standard_exception_handling { raise SystemExit.new(3) } }
334
+ end
335
+
336
+ it 'should exit with status 1 when given an OptionParser::ParseError exception' do
337
+ test_exit(1) { Buildr.application.standard_exception_handling { raise OptionParser::ParseError.new() } }
338
+ end
339
+
340
+ it 'should exit with status 1 when given any other type of exception exception' do
341
+ test_exit(1) { Buildr.application.standard_exception_handling { raise Exception.new() } }
342
+ end
343
+
344
+ it 'should print the class name and the message when receiving an exception (except when the exception is named Exception)' do
345
+
346
+ # Our fake $stderr for the exercise. We could start it with a matcher instead
347
+ class FakeStdErr
348
+
349
+ attr_accessor :messages
350
+
351
+ def puts(*args)
352
+ @messages ||= []
353
+ @messages += args
354
+ end
355
+
356
+ alias :write :puts
357
+ end
358
+
359
+ # Save the old $stderr and make sure to restore it in the end.
360
+ old_stderr = $stderr
361
+ begin
362
+
363
+ $stderr = FakeStdErr.new
364
+ test_exit(1) {
365
+ Buildr.application.send :standard_exception_handling do
366
+ class MyOwnNicelyNamedException < Exception
367
+ end
368
+ raise MyOwnNicelyNamedException.new('My message')
369
+ end
370
+ }.call
371
+ $stderr.messages.select {|msg| msg =~ /.*MyOwnNicelyNamedException : My message.*/}.size.should == 1
372
+ $stderr.messages.clear
373
+ test_exit(1) {
374
+ Buildr.application.send :standard_exception_handling do
375
+ raise Exception.new('My message')
376
+ end
377
+ }.call
378
+ $stderr.messages.select {|msg| msg =~ /.*My message.*/ && !(msg =~ /Exception/)}.size.should == 1
379
+ end
380
+ $stderr = old_stderr
381
+ end
382
+ end
383
+
320
384
  end
321
385
 
322
386
 
@@ -439,48 +503,55 @@ describe Buildr, 'settings' do
439
503
  @buildfile_time = Time.now - 10
440
504
  write 'buildfile'; File.utime(@buildfile_time, @buildfile_time, 'buildfile')
441
505
  end
442
-
506
+
443
507
  it 'should point to the buildfile' do
444
508
  Buildr.application.buildfile.should point_to_path('buildfile')
445
509
  end
446
-
510
+
447
511
  it 'should be a defined task' do
448
512
  Buildr.application.buildfile.should == file(File.expand_path('buildfile'))
449
513
  end
450
-
514
+
451
515
  it 'should ignore any rake namespace' do
452
516
  namespace 'dummy_ns' do
453
517
  Buildr.application.buildfile.should point_to_path('buildfile')
454
518
  end
455
519
  end
456
-
520
+
457
521
  it 'should have the same timestamp as the buildfile' do
458
522
  Buildr.application.buildfile.timestamp.should be_close(@buildfile_time, 1)
459
523
  end
460
-
524
+
461
525
  it 'should have the same timestamp as build.yaml if the latter is newer' do
462
526
  write 'build.yaml'; File.utime(@buildfile_time + 5, @buildfile_time + 5, 'build.yaml')
463
527
  Buildr.application.run
464
528
  Buildr.application.buildfile.timestamp.should be_close(@buildfile_time + 5, 1)
465
529
  end
466
-
530
+
467
531
  it 'should have the same timestamp as the buildfile if build.yaml is older' do
468
532
  write 'build.yaml'; File.utime(@buildfile_time - 5, @buildfile_time - 5, 'build.yaml')
469
533
  Buildr.application.run
470
534
  Buildr.application.buildfile.timestamp.should be_close(@buildfile_time, 1)
471
535
  end
472
-
473
- it 'should have the same timestamp as build.rb in home dir if the latter is newer' do
536
+
537
+ it 'should have the same timestamp as build.rb in home dir if the latter is newer (until version 1.6)' do
538
+ Buildr::VERSION.should < '1.6'
474
539
  write 'home/buildr.rb'; File.utime(@buildfile_time + 5, @buildfile_time + 5, 'home/buildr.rb')
475
540
  Buildr.application.send :load_tasks
476
541
  Buildr.application.buildfile.timestamp.should be_close(@buildfile_time + 5, 1)
477
542
  end
543
+
544
+ it 'should have the same timestamp as build.rb in home dir if the latter is newer' do
545
+ write 'home/.buildr/buildr.rb'; File.utime(@buildfile_time + 5, @buildfile_time + 5, 'home/.buildr/buildr.rb')
546
+ Buildr.application.send :load_tasks
547
+ Buildr.application.buildfile.timestamp.should be_close(@buildfile_time + 5, 1)
548
+ end
478
549
  end
479
550
  end
480
551
 
481
552
 
482
553
  describe Buildr do
483
-
554
+
484
555
  describe 'environment' do
485
556
  it 'should be same as Buildr.application.environment' do
486
557
  Buildr.environment.should eql(Buildr.application.environment)
@@ -498,5 +569,24 @@ describe Buildr do
498
569
  Buildr.settings.should == Buildr.application.settings
499
570
  end
500
571
  end
572
+
573
+ end
574
+
575
+ describe Rake do
576
+ describe 'define_task' do
577
+ it 'should restore call chain when invoke is called' do
578
+ task1 = Rake::Task.define_task('task1') do
579
+ end
580
+
581
+ task2 = Rake::Task.define_task('task2') do
582
+ chain1 = Thread.current[:rake_chain]
583
+ task1.invoke
584
+ chain2 = Thread.current[:rake_chain]
585
+ chain2.should == chain1
586
+ end
587
+
588
+ task2.invoke
589
+ end
590
+ end
501
591
  end
502
592