buildr 1.4.2 → 1.4.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (84) hide show
  1. data/CHANGELOG +29 -3
  2. data/LICENSE +0 -0
  3. data/NOTICE +0 -0
  4. data/_jbuildr +2 -0
  5. data/addon/buildr/antlr.rb +0 -0
  6. data/addon/buildr/cobertura.rb +0 -0
  7. data/addon/buildr/drb.rb +0 -0
  8. data/addon/buildr/emma.rb +0 -0
  9. data/addon/buildr/javacc.rb +0 -0
  10. data/addon/buildr/jdepend.rb +0 -0
  11. data/addon/buildr/jetty.rb +0 -0
  12. data/addon/buildr/jibx.rb +0 -0
  13. data/addon/buildr/nailgun.rb +0 -0
  14. data/addon/buildr/org/apache/buildr/BuildrNail.java +0 -0
  15. data/addon/buildr/org/apache/buildr/JettyWrapper.java +0 -0
  16. data/addon/buildr/xmlbeans.rb +0 -0
  17. data/buildr.gemspec +1 -1
  18. data/doc/_config.yml +0 -0
  19. data/doc/_layouts/preface.html +0 -0
  20. data/doc/css/syntax.css +0 -0
  21. data/doc/extending.textile +0 -0
  22. data/doc/images/asf-logo.gif +0 -0
  23. data/doc/images/buildr-hires.png +0 -0
  24. data/doc/images/buildr.png +0 -0
  25. data/doc/images/favicon.png +0 -0
  26. data/doc/images/growl-icon.tiff +0 -0
  27. data/doc/images/note.png +0 -0
  28. data/doc/images/project-structure.png +0 -0
  29. data/doc/images/tip.png +0 -0
  30. data/doc/images/zbuildr.png +0 -0
  31. data/doc/images/zbuildr.tif +0 -0
  32. data/doc/index.textile +14 -15
  33. data/doc/mailing_lists.textile +0 -0
  34. data/doc/more_stuff.textile +54 -1
  35. data/doc/releasing.textile +17 -16
  36. data/doc/settings_profiles.textile +13 -13
  37. data/lib/buildr.rb +1 -0
  38. data/lib/buildr/core.rb +1 -0
  39. data/lib/buildr/core/application.rb +8 -3
  40. data/lib/buildr/core/checks.rb +0 -0
  41. data/lib/buildr/core/doc.rb +15 -4
  42. data/lib/buildr/core/environment.rb +0 -0
  43. data/lib/buildr/core/generate.rb +0 -0
  44. data/lib/buildr/core/help.rb +0 -0
  45. data/lib/buildr/core/progressbar.rb +0 -0
  46. data/lib/buildr/core/run.rb +43 -0
  47. data/lib/buildr/core/util.rb +21 -3
  48. data/lib/buildr/ide.rb +0 -0
  49. data/lib/buildr/ide/idea.ipr.template +0 -0
  50. data/lib/buildr/ide/idea.rb +0 -0
  51. data/lib/buildr/ide/idea7x.ipr.template +0 -0
  52. data/lib/buildr/java/doc.rb +16 -0
  53. data/lib/buildr/java/packaging.rb +9 -4
  54. data/lib/buildr/packaging.rb +0 -0
  55. data/lib/buildr/packaging/archive.rb +4 -4
  56. data/lib/buildr/packaging/artifact.rb +16 -15
  57. data/lib/buildr/packaging/artifact_search.rb +0 -0
  58. data/lib/buildr/packaging/gems.rb +0 -0
  59. data/lib/buildr/packaging/package.rb +1 -1
  60. data/lib/buildr/packaging/version_requirement.rb +0 -0
  61. data/lib/buildr/packaging/ziptask.rb +6 -4
  62. data/lib/buildr/resources/buildr.icns +0 -0
  63. data/lib/buildr/run.rb +202 -0
  64. data/lib/buildr/scala/doc.rb +18 -0
  65. data/lib/buildr/scala/tests.rb +3 -0
  66. data/lib/buildr/shell.rb +1 -1
  67. data/lib/buildr/version.rb +1 -1
  68. data/rakelib/doc.rake +23 -5
  69. data/rakelib/release.rake +0 -0
  70. data/rakelib/setup.rake +2 -2
  71. data/rakelib/stage.rake +3 -3
  72. data/spec/addon/drb_spec.rb +0 -0
  73. data/spec/core/application_spec.rb +65 -27
  74. data/spec/core/doc_spec.rb +195 -0
  75. data/spec/core/run_spec.rb +92 -0
  76. data/spec/java/compiler_spec.rb +0 -194
  77. data/spec/java/doc_spec.rb +56 -0
  78. data/spec/java/packaging_spec.rb +30 -14
  79. data/spec/java/run_spec.rb +78 -0
  80. data/spec/packaging/archive_spec.rb +20 -5
  81. data/spec/packaging/artifact_spec.rb +23 -14
  82. data/spec/packaging/packaging_helper.rb +0 -0
  83. data/spec/scala/doc_spec.rb +68 -0
  84. metadata +151 -143
@@ -18,6 +18,20 @@ require 'buildr/scala/compiler' # ensure Scala dependencies are ready
18
18
 
19
19
  module Buildr
20
20
  module Doc
21
+
22
+ module ScaladocDefaults
23
+ include Extension
24
+
25
+ # Default scaladoc -doc-title to project's comment or name
26
+ after_define(:scaladoc => :doc) do |project|
27
+ if project.doc.engine? Scaladoc
28
+ options = project.doc.options
29
+ key = Scala.compatible_28? ? "doc-title".to_sym : :windowtitle
30
+ options[key] = (project.comment || project.name) unless options[key]
31
+ end
32
+ end
33
+ end
34
+
21
35
  class Scaladoc < Base
22
36
  specify :language => :scala, :source_ext => 'scala'
23
37
 
@@ -100,6 +114,10 @@ module Buildr
100
114
  end
101
115
  end
102
116
  end
117
+
118
+ class Project
119
+ include ScaladocDefaults
120
+ end
103
121
  end
104
122
 
105
123
  Buildr::Doc.engines << Buildr::Doc::Scaladoc
@@ -112,6 +112,9 @@ module Buildr::Scala
112
112
  reportFile = File.join(reportDir, "TEST-#{suite}.txt")
113
113
  taskdef = Buildr.artifacts(self.class.dependencies).each(&:invoke).map(&:to_s)
114
114
  Buildr.ant('scalatest') do |ant|
115
+ # ScalaTestTask was deprecated in 1.2, in favor of ScalaTestAntTask
116
+ classname = (ScalaTest.version =~ /1\.[01]/) ? \
117
+ 'org.scalatest.tools.ScalaTestTask' : 'org.scalatest.tools.ScalaTestAntTask'
115
118
  ant.taskdef :name=>'scalatest', :classname=>'org.scalatest.tools.ScalaTestTask',
116
119
  :classpath=>taskdef.join(File::PATH_SEPARATOR)
117
120
  ant.scalatest :runpath=>dependencies.join(File::PATH_SEPARATOR) do
@@ -77,7 +77,7 @@ module Buildr
77
77
  module JavaRebel
78
78
  def rebel_home
79
79
  unless @rebel_home
80
- @rebel_home = ENV['REBEL_HOME'] or ENV['JREBEL'] or ENV['JREBEL_HOME']
80
+ @rebel_home = ENV['REBEL_HOME'] || ENV['JREBEL'] || ENV['JREBEL_HOME']
81
81
 
82
82
  if @rebel_home and File.directory? @rebel_home
83
83
  @rebel_home += File::SEPARATOR + 'jrebel.jar'
@@ -14,5 +14,5 @@
14
14
  # the License.
15
15
 
16
16
  module Buildr
17
- VERSION = '1.4.2'.freeze
17
+ VERSION = '1.4.3'.freeze
18
18
  end
@@ -25,6 +25,13 @@ end
25
25
 
26
26
  require 'rake/rdoctask'
27
27
 
28
+ desc "Creates a symlink to rake's lib directory to support combined rdoc generation"
29
+ file "rake/lib" do
30
+ rake_path = $LOAD_PATH.find { |p| File.exist? File.join(p, "rake.rb") }
31
+ mkdir_p "rake"
32
+ File.symlink(rake_path, "rake/lib")
33
+ end
34
+
28
35
  desc "Generate RDoc documentation in rdoc/"
29
36
  Rake::RDocTask.new :rdoc do |rdoc|
30
37
  rdoc.rdoc_dir = 'rdoc'
@@ -32,18 +39,28 @@ Rake::RDocTask.new :rdoc do |rdoc|
32
39
  rdoc.options = spec.rdoc_options.clone
33
40
  rdoc.rdoc_files.include('lib/**/*.rb')
34
41
  rdoc.rdoc_files.include spec.extra_rdoc_files
35
- end
36
42
 
43
+ # include rake source for better inheritance rdoc
44
+ rdoc.rdoc_files.include('rake/lib/**.rb')
45
+ end
46
+ task :rdoc => ["rake/lib"]
37
47
 
38
48
  begin
39
49
  require 'jekylltask'
40
50
  module TocFilter
41
51
  def toc(input)
42
- input.scan(/<(h2)(?:>|\s+(.*?)>)([^<]*)<\/\1\s*>/mi).inject(%{<ol class="toc">}) { |toc, entry|
43
- id = entry[1][/^id=(['"])(.*)\1$/, 2]
52
+ output = "<ol class=\"toc\">"
53
+ input.scan(/<(h2)(?:>|\s+(.*?)>)([^<]*)<\/\1\s*>/mi).each do |entry|
54
+ id = (entry[1][/^id=(['"])(.*)\1$/, 2] rescue nil)
44
55
  title = entry[2].gsub(/<(\w*).*?>(.*?)<\/\1\s*>/m, '\2').strip
45
- toc << %{<li><a href="##{id}">#{title}</a></li>}
46
- } << "</ol>"
56
+ if id
57
+ output << %{<li><a href="##{id}">#{title}</a></li>}
58
+ else
59
+ output << %{<li>#{title}</li>}
60
+ end
61
+ end
62
+ output << "</ol>"
63
+ output
47
64
  end
48
65
  end
49
66
  Liquid::Template.register_filter(TocFilter)
@@ -58,6 +75,7 @@ rescue LoadError
58
75
  puts "Buildr uses the jekyll gem to generate the Web site. You can install it by running rake doc:setup"
59
76
  task 'doc:setup' do
60
77
  install_gem 'jekyll', :version=>'0.6.2'
78
+ install_gem 'jekylltask', :version=>'1.0.2'
61
79
  if `pygmentize -V`.empty?
62
80
  args = %w{easy_install Pygments}
63
81
  args.unshift 'sudo' unless Config::CONFIG['host_os'] =~ /windows/
File without changes
@@ -36,7 +36,7 @@ def install_gem(name, options = {})
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
38
 
39
- if (spec.respond_to? :requirement)
39
+ if (dep.respond_to? :requirement)
40
40
  args << '--version' << dep.requirement.to_s
41
41
  else
42
42
  # Dependency.version_requirements deprecated in rubygems 1.3.6
@@ -56,7 +56,7 @@ desc "If you're building from sources, run this task first to setup the necessar
56
56
  task :setup do
57
57
  missing = spec.dependencies.select { |dep| Gem::SourceIndex.from_installed_gems.search(dep).empty? }
58
58
  missing.each do |dep|
59
- if (spec.respond_to? :requirement)
59
+ if (dep.respond_to? :requirement)
60
60
  install_gem dep.name, :version=>dep.requirement
61
61
  else
62
62
  # Dependency.version_requirements deprecated in rubygems 1.3.6
@@ -30,7 +30,7 @@ task :prepare do |task, args|
30
30
  lambda do
31
31
  puts "Checking there are no local changes ... "
32
32
  svn = `svn status`
33
- 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?
34
34
  git = `git status`
35
35
  fail "Cannot release unless all local changes are in Git:\n#{git}" if git[/^#\t/]
36
36
  puts "[X] There are no local changes, everything is in source control"
@@ -41,7 +41,7 @@ task :prepare do |task, args|
41
41
  puts "Checking that CHANGELOG indicates most recent version and today's date ... "
42
42
  expecting = "#{spec.version} (#{Time.now.strftime('%Y-%m-%d')})"
43
43
  header = File.readlines('CHANGELOG').first.chomp
44
- 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
45
45
  puts "[x] CHANGELOG indicates most recent version and today's date"
46
46
  end.call
47
47
 
@@ -50,7 +50,7 @@ task :prepare do |task, args|
50
50
  args.gpg or fail "Please run with gpg=<argument for gpg --local-user>"
51
51
  gpg_ok = `gpg2 --list-keys #{args.gpg}`
52
52
  if !$?.success?
53
- gpg_ok = `gpg --list-keys #{args.gpg}`
53
+ gpg_ok = `gpg --list-keys #{args.gpg}`
54
54
  gpg_cmd = 'gpg'
55
55
  end
56
56
  fail "No GPG user #{args.gpg}" if gpg_ok.empty?
File without changes
@@ -96,6 +96,30 @@ describe Buildr::Application do
96
96
  ARGV.push('--version')
97
97
  test_exit(0) { Buildr.application.send(:handle_options) }.should show(/Buildr #{Buildr::VERSION}.*/)
98
98
  end
99
+
100
+ it 'should enable tracing with --trace' do
101
+ ARGV.push('--trace')
102
+ Buildr.application.send(:handle_options)
103
+ Buildr.application.options.trace.should == true
104
+ end
105
+
106
+ it 'should enable tracing of [:foo, :bar] categories with --trace=foo,bar' do
107
+ ARGV.push('--trace=foo,bar')
108
+ Buildr.application.send(:handle_options)
109
+ Buildr.application.options.trace.should == true
110
+ Buildr.application.options.trace_categories.should == [:foo, :bar]
111
+ trace?(:foo).should == true
112
+ trace?(:not).should == false
113
+ end
114
+
115
+ it 'should enable tracing for all categories with --trace=all' do
116
+ ARGV.push('--trace=all')
117
+ Buildr.application.send(:handle_options)
118
+ Buildr.application.options.trace.should == true
119
+ Buildr.application.options.trace_all.should == true
120
+ trace?(:foo).should == true
121
+ end
122
+
99
123
  end
100
124
 
101
125
  describe 'gems' do
@@ -146,7 +170,7 @@ describe Buildr::Application do
146
170
  public :load_gems
147
171
  end
148
172
  @spec = Gem::Specification.new do |spec|
149
- spec.name = 'foo'
173
+ spec.name = 'buildr-foo'
150
174
  spec.version = '1.2'
151
175
  end
152
176
  $stdout.stub!(:isatty).and_return(true)
@@ -163,45 +187,45 @@ describe Buildr::Application do
163
187
  end
164
188
 
165
189
  it 'should fail if required gem not found in remote repository' do
166
- Buildr.application.should_receive(:listed_gems).and_return([Gem::Dependency.new('foo', '>=1.1')])
190
+ Buildr.application.should_receive(:listed_gems).and_return([Gem::Dependency.new('buildr-foo', '>=1.1')])
167
191
  Gem.source_index.should_receive(:search).at_least(:once).and_return([])
168
192
  lambda { Buildr.application.load_gems }.should raise_error(LoadError, /cannot be found/i)
169
193
  end
170
194
 
171
195
  it 'should fail if need to install gem and not running in interactive mode' do
172
- Buildr.application.should_receive(:listed_gems).and_return([Gem::Dependency.new('foo', '>=1.1')])
196
+ Buildr.application.should_receive(:listed_gems).and_return([Gem::Dependency.new('buildr-foo', '>=1.1')])
173
197
  Gem.source_index.should_receive(:search).and_return([@spec])
174
198
  $stdout.should_receive(:isatty).and_return(false)
175
199
  lambda { Buildr.application.load_gems }.should raise_error(LoadError, /this build requires the gems/i)
176
200
  end
177
201
 
178
202
  it 'should ask permission before installing required gems' do
179
- Buildr.application.should_receive(:listed_gems).and_return([Gem::Dependency.new('foo', '>=1.1')])
203
+ Buildr.application.should_receive(:listed_gems).and_return([Gem::Dependency.new('buildr-foo', '>=1.1')])
180
204
  Gem.source_index.should_receive(:search).and_return([@spec])
181
205
  $terminal.should_receive(:agree).with(/install/, true)
182
206
  lambda { Buildr.application.load_gems }.should raise_error
183
207
  end
184
208
 
185
209
  it 'should fail if permission not granted to install gem' do
186
- Buildr.application.should_receive(:listed_gems).and_return([Gem::Dependency.new('foo', '>=1.1')])
210
+ Buildr.application.should_receive(:listed_gems).and_return([Gem::Dependency.new('buildr-foo', '>=1.1')])
187
211
  Gem.source_index.should_receive(:search).and_return([@spec])
188
212
  $terminal.should_receive(:agree).and_return(false)
189
213
  lambda { Buildr.application.load_gems }.should raise_error(LoadError, /cannot build without/i)
190
214
  end
191
215
 
192
216
  it 'should install gem if permission granted' do
193
- Buildr.application.should_receive(:listed_gems).and_return([Gem::Dependency.new('foo', '>=1.1')])
217
+ Buildr.application.should_receive(:listed_gems).and_return([Gem::Dependency.new('buildr-foo', '>=1.1')])
194
218
  Gem.source_index.should_receive(:search).and_return([@spec])
195
219
  $terminal.should_receive(:agree).and_return(true)
196
220
  Util.should_receive(:ruby) do |*args|
197
- args.should include('install', 'foo', '-v', '1.2')
221
+ args.should include('install', 'buildr-foo', '-v', '1.2')
198
222
  end
199
223
  Buildr.application.should_receive(:gem).and_return(false)
200
224
  Buildr.application.load_gems
201
225
  end
202
226
 
203
227
  it 'should reload gem cache after installing required gems' do
204
- Buildr.application.should_receive(:listed_gems).and_return([Gem::Dependency.new('foo', '>=1.1')])
228
+ Buildr.application.should_receive(:listed_gems).and_return([Gem::Dependency.new('buildr-foo', '>=1.1')])
205
229
  Gem.source_index.should_receive(:search).and_return([@spec])
206
230
  $terminal.should_receive(:agree).and_return(true)
207
231
  Util.should_receive(:ruby)
@@ -217,37 +241,41 @@ describe Buildr::Application do
217
241
  end
218
242
 
219
243
  it 'should load newly installed gems' do
220
- Buildr.application.should_receive(:listed_gems).and_return([Gem::Dependency.new('foo', '>=1.1')])
244
+ Buildr.application.should_receive(:listed_gems).and_return([Gem::Dependency.new('buildr-foo', '>=1.1')])
221
245
  Gem.source_index.should_receive(:search).and_return([@spec])
222
246
  $terminal.should_receive(:agree).and_return(true)
223
247
  Util.should_receive(:ruby)
224
- Buildr.application.should_receive(:gem).with('foo', @spec.version.to_s)
248
+ Buildr.application.should_receive(:gem).with('buildr-foo', @spec.version.to_s)
225
249
  Buildr.application.load_gems
226
250
  end
227
251
 
228
252
  it 'should default to >=0 version requirement if not specified' do
229
- write 'build.yaml', 'gems: foo'
230
- $terminal.should_receive(:agree).and_return(true)
231
- Gem.source_index.should_receive(:search).with(Gem::Dependency.new('foo', '>=0')).and_return([])
232
- lambda { Buildr.application.load_gems }.should raise_error
253
+ write 'build.yaml', 'gems: buildr-foo'
254
+ should_attempt_to_load_dependency(Gem::Dependency.new('buildr-foo', '>= 0'))
233
255
  end
234
256
 
235
257
  it 'should parse exact version requirement' do
236
- write 'build.yaml', 'gems: foo 2.5'
237
- Gem.source_index.should_receive(:search).with(Gem::Dependency.new('foo', '=2.5')).and_return([])
238
- lambda { Buildr.application.load_gems }.should raise_error
258
+ write 'build.yaml', 'gems: buildr-foo 2.5'
259
+ should_attempt_to_load_dependency(Gem::Dependency.new('buildr-foo', '=2.5'))
239
260
  end
240
261
 
241
262
  it 'should parse range version requirement' do
242
- write 'build.yaml', 'gems: foo ~>2.3'
243
- Gem.source_index.should_receive(:search).with(Gem::Dependency.new('foo', '~>2.3')).and_return([])
244
- lambda { Buildr.application.load_gems }.should raise_error
263
+ write 'build.yaml', 'gems: buildr-foo ~>2.3'
264
+ should_attempt_to_load_dependency(Gem::Dependency.new('buildr-foo', '~>2.3'))
245
265
  end
246
266
 
247
267
  it 'should parse multiple version requirements' do
248
- write 'build.yaml', 'gems: foo >=2.0 !=2.1'
249
- Gem.source_index.should_receive(:search).with(Gem::Dependency.new('foo', ['>=2.0', '!=2.1'])).and_return([])
250
- lambda { Buildr.application.load_gems }.should raise_error
268
+ write 'build.yaml', 'gems: buildr-foo >=2.0 !=2.1'
269
+ should_attempt_to_load_dependency(Gem::Dependency.new('buildr-foo', ['>=2.0', '!=2.1']))
270
+ end
271
+
272
+ def should_attempt_to_load_dependency(dep)
273
+ Gem.source_index.should_receive(:search).with(dep).and_return([])
274
+ lambda { Buildr.application.load_gems }.should raise_missing_gem_error(dep)
275
+ end
276
+
277
+ def raise_missing_gem_error(dep)
278
+ raise_error(Gem::LoadError, /Build requires the gems #{dep.name} #{dep.requirement}, which cannot be found in local or remote repository./)
251
279
  end
252
280
  end
253
281
 
@@ -537,13 +565,23 @@ describe Buildr, 'settings' do
537
565
 
538
566
  it 'should have the same timestamp as build.rb in home dir if the latter is newer (until version 1.6)' do
539
567
  Buildr::VERSION.should < '1.6'
540
- write 'home/buildr.rb'; File.utime(@buildfile_time + 5, @buildfile_time + 5, 'home/buildr.rb')
541
- Buildr.application.send :load_tasks
542
- Buildr.application.buildfile.timestamp.should be_close(@buildfile_time + 5, 1)
568
+ buildfile_should_have_same_timestamp_as 'home/buildr.rb'
543
569
  end
544
570
 
545
571
  it 'should have the same timestamp as build.rb in home dir if the latter is newer' do
546
- write 'home/.buildr/buildr.rb'; File.utime(@buildfile_time + 5, @buildfile_time + 5, 'home/.buildr/buildr.rb')
572
+ buildfile_should_have_same_timestamp_as 'home/.buildr/buildr.rb'
573
+ end
574
+
575
+ it 'should have the same timestamp as .buildr.rb in buildfile dir if the latter is newer' do
576
+ buildfile_should_have_same_timestamp_as '.buildr.rb'
577
+ end
578
+
579
+ it 'should have the same timestamp as _buildr.rb in buildfile dir if the latter is newer' do
580
+ buildfile_should_have_same_timestamp_as '_buildr.rb'
581
+ end
582
+
583
+ def buildfile_should_have_same_timestamp_as(file)
584
+ write file; File.utime(@buildfile_time + 5, @buildfile_time + 5, file)
547
585
  Buildr.application.send :load_tasks
548
586
  Buildr.application.buildfile.timestamp.should be_close(@buildfile_time + 5, 1)
549
587
  end
@@ -0,0 +1,195 @@
1
+ # Licensed to the Apache Software Foundation (ASF) under one or more
2
+ # contributor license agreements. See the NOTICE file distributed with this
3
+ # work for additional information regarding copyright ownership. The ASF
4
+ # licenses this file to you under the Apache License, Version 2.0 (the
5
+ # "License"); you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12
+ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13
+ # License for the specific language governing permissions and limitations under
14
+ # the License.
15
+
16
+
17
+ require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helpers'))
18
+
19
+
20
+ describe Project, '#doc' do
21
+ def sources
22
+ @sources ||= (1..3).map { |i| "Test#{i}" }.
23
+ each { |name| write "src/main/java/foo/#{name}.java", "package foo; public class #{name}{}" }.
24
+ map { |name| "src/main/java/foo/#{name}.java" }
25
+ end
26
+
27
+ it 'should return the project\'s Javadoc task' do
28
+ define('foo') { compile.using(:javac) }
29
+ project('foo').doc.name.should eql('foo:doc')
30
+ end
31
+
32
+ it 'should return a DocTask' do
33
+ define('foo') { compile.using(:javac) }
34
+ project('foo').doc.should be_kind_of(Doc::DocTask)
35
+ end
36
+
37
+ it 'should set target directory to target/doc' do
38
+ define 'foo' do
39
+ compile.using(:javac)
40
+ doc.target.to_s.should point_to_path('target/doc')
41
+ end
42
+ end
43
+
44
+ it 'should create file task for target directory' do
45
+ define 'foo' do
46
+ compile.using(:javac)
47
+ doc.should_receive(:invoke_prerequisites)
48
+ end
49
+ project('foo').file('target/doc').invoke
50
+ end
51
+
52
+ it 'should respond to into() and return self' do
53
+ define 'foo' do
54
+ compile.using(:javac)
55
+ doc.into('docs').should be(doc)
56
+ end
57
+ end
58
+
59
+ it 'should respond to into() and change target directory' do
60
+ define 'foo' do
61
+ compile.using(:javac)
62
+ doc.into('docs')
63
+ doc.should_receive(:invoke_prerequisites)
64
+ end
65
+ file('docs').invoke
66
+ end
67
+
68
+ it 'should respond to from() and return self' do
69
+ task = nil
70
+ define('foo') do
71
+ compile.using(:javac)
72
+ task = doc.from('srcs')
73
+ end
74
+ task.should be(project('foo').doc)
75
+ end
76
+
77
+ it 'should respond to from() and add sources' do
78
+ define 'foo' do
79
+ compile.using(:javac)
80
+ doc.from('srcs').should be(doc)
81
+ end
82
+ end
83
+
84
+ it 'should respond to from() and add file task' do
85
+ define 'foo' do
86
+ compile.using(:javac)
87
+ doc.from('srcs').should be(doc)
88
+ end
89
+ project('foo').doc.source_files.first.should point_to_path('srcs')
90
+ end
91
+
92
+ it 'should respond to from() and add project\'s sources and dependencies' do
93
+ write 'bar/src/main/java/Test.java'
94
+ define 'foo' do
95
+ compile.using(:javac)
96
+ define('bar') { compile.using(:javac).with 'group:id:jar:1.0' }
97
+ doc.from project('foo:bar')
98
+ end
99
+ project('foo').doc.source_files.first.should point_to_path('bar/src/main/java/Test.java')
100
+ project('foo').doc.classpath.map(&:to_spec).should include('group:id:jar:1.0')
101
+ end
102
+
103
+ it 'should generate docs from project' do
104
+ sources
105
+ define('foo') { compile.using(:javac) }
106
+ project('foo').doc.source_files.sort.should == sources.sort.map { |f| File.expand_path(f) }
107
+ end
108
+
109
+ it 'should include compile dependencies' do
110
+ define('foo') { compile.using(:javac).with 'group:id:jar:1.0' }
111
+ project('foo').doc.classpath.map(&:to_spec).should include('group:id:jar:1.0')
112
+ end
113
+
114
+ it 'should respond to include() and return self' do
115
+ define 'foo' do
116
+ compile.using(:javac)
117
+ doc.include('srcs').should be(doc)
118
+ end
119
+ end
120
+
121
+ it 'should respond to include() and add files' do
122
+ included = sources.first
123
+ define 'foo' do
124
+ compile.using(:javac)
125
+ doc.include included
126
+ end
127
+ project('foo').doc.source_files.should include(included)
128
+ end
129
+
130
+ it 'should respond to exclude() and return self' do
131
+ define 'foo' do
132
+ compile.using(:javac)
133
+ doc.exclude('srcs').should be(doc)
134
+ end
135
+ end
136
+
137
+ it 'should respond to exclude() and ignore files' do
138
+ excluded = sources.first
139
+ define 'foo' do
140
+ compile.using(:javac)
141
+ doc.exclude excluded
142
+ end
143
+ sources
144
+ project('foo').doc.source_files.sort.should == sources[1..-1].map { |f| File.expand_path(f) }
145
+ end
146
+
147
+ it 'should respond to using() and return self' do
148
+ define 'foo' do
149
+ compile.using(:javac)
150
+ doc.using(:foo=>'Fooing').should be(doc)
151
+ end
152
+ end
153
+
154
+ it 'should respond to using() and accept options' do
155
+ define 'foo' do
156
+ compile.using(:javac)
157
+ doc.using :foo=>'Fooing'
158
+ end
159
+ project('foo').doc.options[:foo].should eql('Fooing')
160
+ end
161
+
162
+ it 'should produce documentation' do
163
+ sources
164
+ define('foo') { compile.using(:javac) }
165
+ project('foo').doc.invoke
166
+ (1..3).map { |i| "target/doc/foo/Test#{i}.html" }.each { |f| file(f).should exist }
167
+ end
168
+
169
+ it 'should fail on error' do
170
+ write 'Test.java', 'class Test {}'
171
+ define 'foo' do
172
+ compile.using(:javac)
173
+ doc.include 'Test.java'
174
+ end
175
+ lambda { project('foo').doc.invoke }.should raise_error(RuntimeError, /Failed to generate Javadocs/)
176
+ end
177
+
178
+ it 'should be local task' do
179
+ define 'foo' do
180
+ define('bar') { compile.using(:javac) }
181
+ end
182
+ project('foo:bar').doc.should_receive(:invoke_prerequisites)
183
+ in_original_dir(project('foo:bar').base_dir) { task('doc').invoke }
184
+ end
185
+
186
+ it 'should not recurse' do
187
+ define 'foo' do
188
+ compile.using(:javac)
189
+ define('bar') { compile.using(:javac) }
190
+ end
191
+ project('foo:bar').doc.should_not_receive(:invoke_prerequisites)
192
+ project('foo').doc.invoke
193
+ end
194
+ end
195
+