buildr 1.4.4 → 1.4.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (103) hide show
  1. data/CHANGELOG +46 -0
  2. data/Rakefile +0 -1
  3. data/addon/buildr/bnd.rb +147 -0
  4. data/addon/buildr/jaxb_xjc.rb +72 -0
  5. data/addon/buildr/protobuf.rb +14 -1
  6. data/buildr.gemspec +6 -2
  7. data/doc/artifacts.textile +6 -0
  8. data/doc/contributing.textile +3 -0
  9. data/doc/download.textile +60 -0
  10. data/doc/index.textile +9 -15
  11. data/doc/installing.textile +23 -6
  12. data/doc/mailing_lists.textile +4 -0
  13. data/doc/more_stuff.textile +333 -6
  14. data/doc/packaging.textile +187 -1
  15. data/lib/buildr.rb +8 -1
  16. data/lib/buildr/clojure.rb +34 -0
  17. data/lib/buildr/clojure/shell.rb +52 -0
  18. data/lib/buildr/core.rb +3 -0
  19. data/lib/buildr/core/#application.rb# +700 -0
  20. data/lib/buildr/core/application.rb +18 -8
  21. data/lib/buildr/core/build.rb +2 -2
  22. data/lib/buildr/core/cc.rb +57 -63
  23. data/lib/buildr/core/checks.rb +4 -5
  24. data/lib/buildr/core/doc.rb +3 -1
  25. data/lib/buildr/core/generate.rb +2 -0
  26. data/lib/buildr/core/jrebel.rb +42 -0
  27. data/lib/buildr/core/linux.rb +30 -0
  28. data/lib/buildr/core/project.rb +9 -8
  29. data/lib/buildr/core/run.rb +3 -3
  30. data/lib/buildr/core/shell.rb +29 -90
  31. data/lib/buildr/core/test.rb +3 -3
  32. data/lib/buildr/core/transports.rb +5 -5
  33. data/lib/buildr/core/util.rb +2 -2
  34. data/lib/buildr/groovy.rb +1 -0
  35. data/lib/buildr/groovy/compiler.rb +12 -1
  36. data/lib/buildr/groovy/doc.rb +76 -0
  37. data/lib/buildr/groovy/shell.rb +24 -15
  38. data/lib/buildr/ide.rb +1 -1
  39. data/lib/buildr/ide/idea.rb +527 -141
  40. data/lib/buildr/java/bdd.rb +18 -13
  41. data/lib/buildr/java/ecj.rb +1 -3
  42. data/lib/buildr/java/jtestr_result.rb +295 -0
  43. data/lib/buildr/java/jtestr_runner.rb.erb +4 -6
  44. data/lib/buildr/java/packaging.rb +14 -3
  45. data/lib/buildr/java/pom.rb +6 -2
  46. data/lib/buildr/java/test_result.rb +15 -243
  47. data/lib/buildr/java/tests.rb +1 -1
  48. data/lib/buildr/packaging.rb +2 -1
  49. data/lib/buildr/packaging/#package.rb.rej# +19 -0
  50. data/lib/buildr/packaging/archive.rb +13 -3
  51. data/lib/buildr/packaging/artifact.rb +11 -12
  52. data/lib/buildr/packaging/tar.rb +4 -1
  53. data/lib/buildr/packaging/zip.rb +106 -1
  54. data/lib/buildr/resources/completed.png +0 -0
  55. data/lib/buildr/resources/failed.png +0 -0
  56. data/lib/buildr/resources/icons-license.txt +17 -0
  57. data/lib/buildr/run.rb +7 -14
  58. data/lib/buildr/scala/#Untitled-2# +7 -0
  59. data/lib/buildr/scala/bdd.rb +1 -1
  60. data/lib/buildr/scala/compiler.rb +1 -1
  61. data/lib/buildr/scala/doc.rb +20 -2
  62. data/lib/buildr/scala/shell.rb +14 -22
  63. data/lib/buildr/scala/tests.rb +2 -2
  64. data/lib/buildr/shell.rb +113 -108
  65. data/lib/buildr/version.rb +1 -1
  66. data/rakelib/checks.rake +9 -7
  67. data/rakelib/doc.rake +10 -0
  68. data/rakelib/release.rake +9 -0
  69. data/rakelib/rspec.rake +27 -28
  70. data/rakelib/setup.rake +1 -1
  71. data/rakelib/stage.rake +2 -2
  72. data/spec/addon/bnd_spec.rb +330 -0
  73. data/spec/addon/jaxb_xjc_spec.rb +125 -0
  74. data/spec/core/application_spec.rb +1 -1
  75. data/spec/core/build_spec.rb +7 -7
  76. data/spec/core/cc_spec.rb +154 -104
  77. data/spec/core/compile_spec.rb +3 -3
  78. data/spec/core/project_spec.rb +10 -0
  79. data/spec/core/run_spec.rb +1 -0
  80. data/spec/core/shell_spec.rb +146 -0
  81. data/spec/groovy/doc_spec.rb +65 -0
  82. data/spec/ide/eclipse_spec.rb +1 -1
  83. data/spec/ide/idea_spec.rb +1145 -0
  84. data/spec/java/bdd_spec.rb +3 -3
  85. data/spec/java/emma_spec.rb +2 -0
  86. data/spec/java/packaging_spec.rb +40 -11
  87. data/spec/java/test_coverage_helper.rb +1 -1
  88. data/spec/packaging/archive_spec.rb +76 -21
  89. data/spec/packaging/artifact_namespace_spec.rb +1 -1
  90. data/spec/packaging/artifact_spec.rb +14 -7
  91. data/spec/sandbox.rb +11 -4
  92. data/spec/scala/bdd_spec.rb +2 -2
  93. data/spec/scala/compiler_spec.rb +2 -2
  94. data/spec/scala/doc_spec.rb +24 -4
  95. data/spec/scala/scala.rb +2 -2
  96. data/spec/scala/tests_spec.rb +2 -2
  97. data/spec/spec_helpers.rb +9 -8
  98. data/spec/xpath_matchers.rb +121 -0
  99. metadata +248 -164
  100. data/lib/buildr/ide/idea.ipr.template +0 -300
  101. data/lib/buildr/ide/idea7x.ipr.template +0 -290
  102. data/lib/buildr/ide/idea7x.rb +0 -231
  103. data/spec/ide/idea7x_spec.rb +0 -96
@@ -29,7 +29,7 @@ describe Buildr::RSpec do
29
29
 
30
30
  it 'should read passed specs from result yaml' do
31
31
  write('src/spec/ruby/success_spec.rb', 'describe("success") { it("is true") { nil.should be_nil } }')
32
-
32
+
33
33
  project('foo').test.invoke
34
34
  project('foo').test.passed_tests.should eql([File.expand_path('src/spec/ruby/success_spec.rb')])
35
35
  end
@@ -41,7 +41,7 @@ describe Buildr::RSpec do
41
41
  write(failure, 'describe("failure") { it("is false") { true.should == false } }')
42
42
  error = File.expand_path('src/spec/ruby/error_spec.rb')
43
43
  write(error, 'describe("error") { it("raises") { lambda; } }')
44
-
44
+
45
45
  lambda { project('foo').test.invoke }.should raise_error(/Tests failed/)
46
46
  project('foo').test.tests.should include(success, failure, error)
47
47
  project('foo').test.failed_tests.sort.should eql([failure, error].sort)
@@ -234,7 +234,7 @@ describe Buildr::JtestR do
234
234
  failure = File.expand_path('src/spec/ruby/failure_expect.rb')
235
235
  write(failure, 'Expectations { expect(true) { false } }')
236
236
  error = File.expand_path('src/spec/ruby/error_expect.rb')
237
- write(error, 'Expectations { expect(nil) { lambda; } }')
237
+ write(error, 'Expectations { expect(nil) { lambda {}; } }')
238
238
  foo do
239
239
  lambda { test.invoke }.should raise_error(/Tests failed/)
240
240
  test.tests.should include(success, failure, error)
@@ -20,6 +20,8 @@ artifacts(Buildr::Emma::dependencies).map(&:invoke)
20
20
 
21
21
 
22
22
  describe Buildr::Emma do
23
+ include TestCoverageHelper
24
+
23
25
  before do
24
26
  # Reloading the extension because the sandbox removes all its actions
25
27
  Buildr.module_eval { remove_const :Emma }
@@ -346,7 +346,7 @@ describe Project, '#meta_inf' do
346
346
  end
347
347
 
348
348
 
349
- describe 'package with meta_inf', :shared=>true do
349
+ shared_examples_for 'package with meta_inf' do
350
350
 
351
351
  def package_with_meta_inf(meta_inf = nil)
352
352
  packaging = @packaging
@@ -778,6 +778,39 @@ describe Packaging, 'ear' do
778
778
  inspect_application_xml { |xml| xml.get_text('/application/display-name').should == 'bar' }
779
779
  end
780
780
 
781
+ it 'should set description in application.xml to project comment if not specified' do
782
+ desc "MyDescription"
783
+ define 'foo', :version=>'1.0' do
784
+ package(:ear)
785
+ end
786
+ inspect_application_xml { |xml| xml.get_text('/application/description').should == 'MyDescription' }
787
+ end
788
+
789
+ it 'should not set description in application.xml if not specified and no project comment' do
790
+ define 'foo', :version=>'1.0' do
791
+ package(:ear)
792
+ end
793
+ inspect_application_xml { |xml| xml.get_text('/application/description').should be_nil }
794
+ end
795
+
796
+ it 'should set description in application.xml if specified' do
797
+ define 'foo', :version=>'1.0' do
798
+ package(:ear).description = "MyDescription"
799
+ end
800
+ inspect_application_xml { |xml| xml.get_text('/application/description').should == 'MyDescription' }
801
+ end
802
+
803
+ it 'should add security-roles to application.xml if given' do
804
+ define 'foo', :version=>'1.0' do
805
+ package(:ear).security_roles << {:id=>'sr1',
806
+ :description=>'System Administrator', :name=>'systemadministrator'}
807
+ end
808
+ inspect_application_xml do |xml|
809
+ xml.get_text("/application/security-role[@id='sr1']/description").to_s.should eql('System Administrator')
810
+ xml.get_text("/application/security-role[@id='sr1']/role-name").to_s.should eql('systemadministrator')
811
+ end
812
+ end
813
+
781
814
  it 'should map WARs to /war directory' do
782
815
  define 'foo', :version=>'1.0' do
783
816
  package(:ear) << package(:war)
@@ -1136,16 +1169,15 @@ describe Packaging, 'sources' do
1136
1169
  end
1137
1170
  end
1138
1171
 
1139
-
1140
1172
  describe Packaging, 'javadoc' do
1141
1173
  it_should_behave_like 'packaging'
1142
- before { @packaging, @package_type = :javadoc, :zip }
1174
+ before { @packaging, @package_type = :javadoc, :jar }
1143
1175
 
1144
1176
  it 'should create package of type :zip and classifier \'javadoc\'' do
1145
1177
  define 'foo', :version=>'1.0' do
1146
- package(:javadoc).type.should eql(:zip)
1178
+ package(:javadoc).type.should eql(:jar)
1147
1179
  package(:javadoc).classifier.should eql('javadoc')
1148
- package(:javadoc).name.pathmap('%f').should eql('foo-1.0-javadoc.zip')
1180
+ package(:javadoc).name.pathmap('%f').should eql('foo-1.0-javadoc.jar')
1149
1181
  end
1150
1182
  end
1151
1183
 
@@ -1171,7 +1203,6 @@ describe Packaging, 'javadoc' do
1171
1203
  end
1172
1204
  end
1173
1205
 
1174
-
1175
1206
  shared_examples_for 'package_with_' do
1176
1207
 
1177
1208
  def prepare(options = {})
@@ -1190,9 +1221,7 @@ shared_examples_for 'package_with_' do
1190
1221
 
1191
1222
  it 'should create package of the right packaging with classifier' do
1192
1223
  prepare
1193
- ext = "zip"
1194
- ext = "jar" if @packaging == :sources
1195
- project('foo').packages.first.to_s.should =~ /foo-1.0-#{@packaging}.#{ext}/
1224
+ project('foo').packages.first.to_s.should =~ /foo-1.0-#{@packaging}.#{@ext}/
1196
1225
  end
1197
1226
 
1198
1227
  it 'should create package for projects that have source files' do
@@ -1228,10 +1257,10 @@ end
1228
1257
 
1229
1258
  describe 'package_with_sources' do
1230
1259
  it_should_behave_like 'package_with_'
1231
- before { @packaging = :sources }
1260
+ before { @packaging, @ext = :sources, 'jar' }
1232
1261
  end
1233
1262
 
1234
1263
  describe 'package_with_javadoc' do
1235
1264
  it_should_behave_like 'package_with_'
1236
- before { @packaging = :javadoc }
1265
+ before { @packaging, @ext = :javadoc, 'jar' }
1237
1266
  end
@@ -53,7 +53,7 @@ module TestCoverageHelper
53
53
  end
54
54
  end
55
55
 
56
- describe 'test coverage tool', :shared=>true do
56
+ shared_examples_for 'test coverage tool' do
57
57
  include TestCoverageHelper
58
58
 
59
59
  def toolname
@@ -17,25 +17,26 @@
17
17
  require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helpers'))
18
18
 
19
19
 
20
- describe 'ArchiveTask', :shared=>true do
21
- before do
22
- @dir = File.expand_path('test')
23
- @files = %w{Test1.txt Text2.html}.map { |file| File.expand_path(file, @dir) }.
24
- each { |file| write file, content_for(file) }
25
- @empty_dirs = %w{EmptyDir1 EmptyDir2}.map { |file| File.expand_path(file, @dir) }.
26
- each { |file| mkdir file }
27
- end
28
-
20
+ module ArchiveTaskHelpers
29
21
  # Not too smart, we just create some content based on file name to make sure you read what you write.
30
22
  def content_for(file)
31
23
  "Content for #{File.basename(file)}"
32
24
  end
33
25
 
26
+ # Qualify a filename
27
+ #
28
+ # e.g. qualify("file.zip", "src") => "file-src.zip"
29
+ def qualify(filename, qualifier)
30
+ ext = (filename =~ /\.$/) ? "." : File.extname(filename)
31
+ base = filename[0..0-ext.size-1]
32
+ base + "-" + qualifier + ext
33
+ end
34
+
34
35
  # Create an archive not using the archive task, this way we do have a file in existence, but we don't
35
36
  # have an already invoked task. Yield an archive task to the block which can use it to include files,
36
37
  # set options, etc.
37
38
  def create_without_task
38
- archive(@archive + '.tmp').tap do |task|
39
+ archive(qualify(@archive, "tmp")).tap do |task|
39
40
  yield task if block_given?
40
41
  task.invoke
41
42
  mv task.name, @archive
@@ -43,11 +44,29 @@ describe 'ArchiveTask', :shared=>true do
43
44
  end
44
45
 
45
46
  def create_for_merge
46
- zip(@archive + '.src').include(@files).tap do |task|
47
+ zip(qualify(@archive, "src")).include(@files).tap do |task|
47
48
  yield task
48
49
  end
49
50
  end
50
51
 
52
+ def init_dir
53
+ unless @dir
54
+ @dir = File.expand_path('test')
55
+ @files = %w{Test1.txt Text2.html}.map { |file| File.expand_path(file, @dir) }.
56
+ each { |file| write file, content_for(file) }
57
+ @empty_dirs = %w{EmptyDir1 EmptyDir2}.map { |file| File.expand_path(file, @dir) }.
58
+ each { |file| mkdir file }
59
+ end
60
+ end
61
+ end
62
+
63
+ shared_examples_for 'ArchiveTask' do
64
+ include ArchiveTaskHelpers
65
+
66
+ before(:each) do
67
+ init_dir
68
+ end
69
+
51
70
  it 'should point to archive file' do
52
71
  archive(@archive).name.should eql(@archive)
53
72
  end
@@ -281,7 +300,7 @@ describe 'ArchiveTask', :shared=>true do
281
300
  it 'should expand another archive file with nested exclude pattern' do
282
301
  @files = %w{Test1.txt Text2.html}.map { |file| File.join(@dir, "foo", file) }.
283
302
  each { |file| write file, content_for(file) }
284
- zip(@archive + '.src').include(@dir).tap do |task|
303
+ zip(qualify(@archive, "src")).include(@dir).tap do |task|
285
304
  archive(@archive).merge(task).exclude('test/*')
286
305
  archive(@archive).invoke
287
306
  inspect_archive.should be_empty
@@ -329,6 +348,22 @@ describe 'ArchiveTask', :shared=>true do
329
348
  File.stat(@archive).mtime.should be_close(Time.now, 10)
330
349
  end
331
350
 
351
+ it 'should update if a file in a subdir is more recent' do
352
+ subdir = File.expand_path("subdir", @dir)
353
+ test3 = File.expand_path("test3.css", subdir)
354
+
355
+ mkdir_p subdir
356
+ write test3, '/* Original */'
357
+
358
+ create_without_task { |archive| archive.include(:from => @dir) }
359
+ inspect_archive { |archive| archive["subdir/test3.css"].should eql('/* Original */') }
360
+
361
+ write test3, '/* Refreshed */'
362
+ File.utime(Time.now + 100, Time.now + 100, test3)
363
+ archive(@archive).include(:from => @dir).invoke
364
+ inspect_archive { |archive| archive["subdir/test3.css"].should eql('/* Refreshed */') }
365
+ end
366
+
332
367
  it 'should do nothing if all files are uptodate' do
333
368
  create_without_task { |archive| archive.include(@files) }
334
369
  # By touching all files in the past, there's nothing new to update.
@@ -359,10 +394,13 @@ describe 'ArchiveTask', :shared=>true do
359
394
  end
360
395
  end
361
396
 
362
-
363
397
  describe TarTask do
364
398
  it_should_behave_like 'ArchiveTask'
365
- before { @archive = File.expand_path('test.tar') }
399
+
400
+ before(:each) do
401
+ @archive = File.expand_path('test.tar')
402
+ end
403
+
366
404
  define_method(:archive) { |file| tar(file) }
367
405
 
368
406
  def inspect_archive
@@ -378,7 +416,11 @@ end
378
416
 
379
417
  describe TarTask, ' gzipped' do
380
418
  it_should_behave_like 'ArchiveTask'
381
- before { @archive = File.expand_path('test.tgz') }
419
+
420
+ before(:each) do
421
+ @archive = File.expand_path('test.tgz')
422
+ end
423
+
382
424
  define_method(:archive) { |file| tar(file) }
383
425
 
384
426
  def inspect_archive
@@ -393,24 +435,38 @@ describe TarTask, ' gzipped' do
393
435
  end
394
436
  end
395
437
 
438
+ describe "ZipTask" do
439
+ include ArchiveTaskHelpers
396
440
 
397
- describe ZipTask do
398
441
  it_should_behave_like 'ArchiveTask'
399
- before { @archive = File.expand_path('test.zip') }
442
+
443
+ before(:each) do
444
+ init_dir
445
+ @archive = File.expand_path('test.zip')
446
+ end
447
+
400
448
  define_method(:archive) { |file| zip(file) }
401
449
 
402
- after do
450
+ after(:each) do
403
451
  checkZip(@archive)
404
452
  end
405
453
 
406
- # Check for possible corruption usign Java's ZipInputStream since it's stricter than rubyzip
454
+ # Check for possible corruption using Java's ZipInputStream and Java's "jar" command since
455
+ # they are stricter than rubyzip
407
456
  def checkZip(file)
408
457
  return unless File.exist?(file)
409
458
  zip = Java.java.util.zip.ZipInputStream.new(Java.java.io.FileInputStream.new(file))
459
+ zip_entry_count = 0
410
460
  while entry = zip.getNextEntry do
411
461
  # just iterate over all entries
462
+ zip_entry_count = zip_entry_count + 1
412
463
  end
413
464
  zip.close()
465
+
466
+ # jar tool fails with "ZipException: error in opening zip file" if empty
467
+ if zip_entry_count > 0
468
+ sh "#{File.join(ENV['JAVA_HOME'], 'bin', 'jar')} tvf #{file}"
469
+ end
414
470
  end
415
471
 
416
472
  def inspect_archive
@@ -473,9 +529,8 @@ describe ZipTask do
473
529
 
474
530
  end
475
531
 
476
-
477
532
  describe Unzip do
478
- before do
533
+ before(:each) do
479
534
  @zip = File.expand_path('test.zip')
480
535
  @dir = File.expand_path('test')
481
536
  @files = %w{Test1.txt Text2.html}.map { |file| File.join(@dir, file) }.
@@ -661,7 +661,7 @@ describe "Extension using ArtifactNamespace" do
661
661
  end
662
662
  end
663
663
 
664
- include Spec::Matchers # for assertions
664
+ include RSpec::Matchers # for assertions
665
665
 
666
666
  # Called with the ArtifactRequirement that has just been selected
667
667
  # by a user. This allows extension author to selectively perform
@@ -252,7 +252,7 @@ describe Repositories, 'remote' do
252
252
 
253
253
  it 'should support artifact classifier' do
254
254
  repositories.remote = 'http://example.com'
255
- URI.should_receive(:download).twice.and_return { |uri, target, options| write target }
255
+ URI.should_receive(:download).once.and_return { |uri, target, options| write target }
256
256
  lambda { artifact('com.example:library:jar:all:2.0').invoke }.
257
257
  should change { File.exist?(File.join(repositories.local, 'com/example/library/2.0/library-2.0-all.jar')) }.to(true)
258
258
  end
@@ -752,13 +752,22 @@ describe Buildr, '#install' do
752
752
  snapshot.invoke
753
753
  end
754
754
 
755
- it 'should install POM alongside artifact' do
755
+ it 'should install POM alongside artifact (if artifact has no classifier)' do
756
756
  pom = artifact(@spec).pom
757
757
  write @file
758
758
  install artifact(@spec).from(@file)
759
759
  lambda { install.invoke }.should change { File.exist?(repositories.locate(pom)) }.to(true)
760
760
  end
761
761
 
762
+ it 'should not install POM alongside artifact if artifact has classifier' do
763
+ @spec = 'group:id:jar:all:1.0'
764
+ pom = artifact(@spec).pom
765
+ write @file
766
+ p method(:install)
767
+ install artifact(@spec).from(@file)
768
+ lambda { install.invoke }.should_not change { File.exist?(repositories.locate(pom)) }.to(true)
769
+ end
770
+
762
771
  it 'should reinstall POM alongside artifact' do
763
772
  pom = artifact(@spec).pom
764
773
  write @file
@@ -812,14 +821,11 @@ describe ActsAsArtifact, '#upload' do
812
821
  verbose(false) { artifact.upload(:url=>'sftp://example.com/base') }
813
822
  end
814
823
 
815
- it 'should support artifact classifier' do
824
+ it 'should support artifact classifier and should not upload pom if artifact has classifier' do
816
825
  artifact = artifact('com.example:library:jar:all:2.0')
817
826
  # Prevent artifact from downloading anything.
818
827
  write repositories.locate(artifact)
819
- write repositories.locate(artifact.pom)
820
- URI.should_receive(:upload).at_least(:once).
821
- with(URI.parse('sftp://example.com/base/com/example/library/2.0/library-2.0.pom'), artifact.pom.to_s, anything)
822
- URI.should_receive(:upload).at_least(:once).
828
+ URI.should_receive(:upload).exactly(:once).
823
829
  with(URI.parse('sftp://example.com/base/com/example/library/2.0/library-2.0-all.jar'), artifact.to_s, anything)
824
830
  verbose(false) { artifact.upload(:url=>'sftp://example.com/base') }
825
831
  end
@@ -842,6 +848,7 @@ describe ActsAsArtifact, '#upload' do
842
848
  artifact.upload
843
849
  lambda { artifact.upload }.should_not raise_error
844
850
  end
851
+
845
852
  end
846
853
 
847
854
 
@@ -21,19 +21,26 @@ Buildr.application.instance_eval { @rakefile = File.expand_path('buildfile') }
21
21
  repositories.remote << 'http://repo1.maven.org/maven2'
22
22
  repositories.remote << 'http://scala-tools.org/repo-releases'
23
23
 
24
- # Force Scala 2.8.0 for specs; don't want to rely on SCALA_HOME
25
- Buildr.settings.build['scala.version'] = "2.8.0"
24
+ # Force Scala 2.8.1 for specs; don't want to rely on SCALA_HOME
25
+ Buildr.settings.build['scala.version'] = "2.8.1"
26
26
 
27
27
  # Add a 'require' here only for optional extensions, not for extensions that should be loaded by default.
28
+ require 'buildr/clojure'
28
29
  require 'buildr/groovy'
29
30
  require 'buildr/scala'
31
+ require 'buildr/bnd'
32
+ require 'buildr/jaxb_xjc'
30
33
 
31
34
  Java.load # Anything added to the classpath.
32
35
  artifacts(
33
36
  TestFramework.frameworks.map(&:dependencies).flatten,
34
37
  JUnit.ant_taskdef,
35
- Buildr::Groovy::Groovyc.dependencies,
36
- Buildr::Scala::Specs.dependencies
38
+ Buildr::Groovy.dependencies,
39
+ Buildr::JaxbXjc.dependencies,
40
+ Buildr::Bnd.dependencies,
41
+ Buildr::Scala::Specs.dependencies,
42
+ Buildr::Shell::BeanShell.artifact,
43
+ Buildr::Clojure.dependencies
37
44
  ).each do |path|
38
45
  file(path).invoke
39
46
  end
@@ -19,8 +19,8 @@ require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helpers')
19
19
  describe Buildr::Scala::Specs do
20
20
 
21
21
  before(:each) do
22
- # Force Scala 2.8.0 for specs; don't want to rely on SCALA_HOME
23
- Buildr.settings.build['scala.version'] = "2.8.0"
22
+ # Force Scala 2.8.1 for specs; don't want to rely on SCALA_HOME
23
+ Buildr.settings.build['scala.version'] = "2.8.1"
24
24
  end
25
25
 
26
26
  it 'should be the default when tests in src/spec/scala' do
@@ -20,8 +20,8 @@ require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helpers')
20
20
  share_as :ScalacCompiler do
21
21
 
22
22
  before(:each) do
23
- # Force Scala 2.8.0 for specs; don't want to rely on SCALA_HOME
24
- Buildr.settings.build['scala.version'] = "2.8.0"
23
+ # Force Scala 2.8.1 for specs; don't want to rely on SCALA_HOME
24
+ Buildr.settings.build['scala.version'] = "2.8.1"
25
25
  end
26
26
 
27
27
  it 'should identify itself from source directories' do
@@ -19,8 +19,8 @@ require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helpers')
19
19
  describe "Scaladoc" do
20
20
 
21
21
  before(:each) do
22
- # Force Scala 2.8.0 for specs; don't want to rely on SCALA_HOME
23
- Buildr.settings.build['scala.version'] = "2.8.0"
22
+ # Force Scala 2.8.1 for specs; don't want to rely on SCALA_HOME
23
+ Buildr.settings.build['scala.version'] = "2.8.1"
24
24
  end
25
25
 
26
26
  it 'should pick -doc-title from project name by default' do
@@ -52,17 +52,37 @@ describe "Scaladoc" do
52
52
  project('foo').doc.options[:"doc-title"].should eql('explicit')
53
53
  end
54
54
 
55
- it 'should convert :windowtitle to -doc-title for Scala 2.8.0' do
55
+ it 'should convert :windowtitle to -doc-title for Scala 2.8.1' do
56
56
  write 'src/main/scala/com/example/Test.scala', 'package com.example; class Test { val i = 1 }'
57
57
  define('foo') do
58
58
  doc.using :windowtitle => "foo"
59
59
  end
60
- Java.scala.tools.nsc.ScalaDoc.should_receive(:main) do |args|
60
+ Java.scala.tools.nsc.ScalaDoc.should_receive(:process) do |args|
61
61
  # Convert Java Strings to Ruby Strings, if needed.
62
62
  args.map { |a| a.is_a?(String) ? a : a.toString }.should include("-doc-title")
63
63
  0 # normal return
64
64
  end
65
65
  project('foo').doc.invoke
66
66
  end
67
+ end
68
+
69
+ describe "package(:scaladoc)" do
70
+ it "should generate target/project-version-scaladoc.jar" do
71
+ write 'src/main/scala/Foo.scala', 'class Foo'
72
+ define 'foo', :version=>'1.0' do
73
+ package(:scaladoc)
74
+ end
75
+
76
+ scaladoc = project('foo').package(:scaladoc)
77
+ scaladoc.should point_to_path('target/foo-1.0-scaladoc.jar')
67
78
 
79
+ lambda {
80
+ project('foo').task('package').invoke
81
+ }.should change { File.exist?('target/foo-1.0-scaladoc.jar') }.to(true)
82
+
83
+ scaladoc.should exist
84
+ scaladoc.should contain('index.html')
85
+ scaladoc.should contain('Foo.html')
86
+ end
68
87
  end
88
+