buildr 1.3.5-java → 1.4.0-java

Sign up to get free protection for your applications and to get access to all the features.
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 +148 -132
  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
@@ -74,11 +74,11 @@ describe Artifact do
74
74
  it 'should have one POM artifact for all classifiers' do
75
75
  @classified.pom.to_hash.should == @classified.to_hash.merge(:type=>:pom).except(:classifier)
76
76
  end
77
-
77
+
78
78
  it 'should have associated sources artifact' do
79
79
  @artifact.sources_artifact.to_hash.should == @artifact.to_hash.merge(:classifier=>'sources')
80
80
  end
81
-
81
+
82
82
  it 'should download file if file does not exist' do
83
83
  lambda { @artifact.invoke }.should raise_error(Exception, /No remote repositories/)
84
84
  lambda { @classified.invoke }.should raise_error(Exception, /No remote repositories/)
@@ -112,7 +112,7 @@ describe Artifact do
112
112
  end
113
113
 
114
114
  it 'should not download file if dry-run' do
115
- dryrun do
115
+ dryrun do
116
116
  lambda { @artifact.invoke }.should_not raise_error
117
117
  lambda { @classified.invoke }.should_not raise_error
118
118
  end
@@ -169,6 +169,23 @@ describe Repositories, 'local' do
169
169
  YAML
170
170
  repositories.local.should eql(File.expand_path('my_repo'))
171
171
  end
172
+
173
+ it 'should not override custom install methods defined when extending an object' do
174
+ class MyOwnInstallTask
175
+
176
+ attr_accessor :result
177
+
178
+ def install
179
+ result = true
180
+ end
181
+
182
+ end
183
+ task = MyOwnInstallTask.new
184
+ task.result = "maybe"
185
+ task.extend ActsAsArtifact
186
+ task.install
187
+ task.result.should be_true
188
+ end
172
189
  end
173
190
 
174
191
 
@@ -239,11 +256,11 @@ describe Repositories, 'remote' do
239
256
  it 'should deal well with repositories URL that have the last slash' do
240
257
  repositories.remote = 'http://example.com/base/'
241
258
  uri = nil
242
- URI.should_receive(:download).twice.and_return { |_uri, args| p args ; uri = _uri }
259
+ URI.should_receive(:download).twice.and_return { |_uri, args| uri = _uri }
243
260
  artifact('group:id:jar:1.0').invoke
244
261
  uri.to_s.should eql('http://example.com/base/group/id/1.0/id-1.0.pom')
245
262
  end
246
-
263
+
247
264
  it 'should resolve m2-style deployed snapshots' do
248
265
  metadata = <<-XML
249
266
  <?xml version='1.0' encoding='UTF-8'?>
@@ -270,7 +287,7 @@ describe Repositories, 'remote' do
270
287
  lambda { artifact('com.example:library:jar:2.1-SNAPSHOT').invoke }.
271
288
  should change { File.exist?(File.join(repositories.local, 'com/example/library/2.1-SNAPSHOT/library-2.1-SNAPSHOT.jar')) }.to(true)
272
289
  end
273
-
290
+
274
291
  it 'should handle missing maven metadata by reporting the artifact unavailable' do
275
292
  repositories.remote = 'http://example.com'
276
293
  URI.should_receive(:download).with(uri(/2.1-SNAPSHOT\/library-2.1-SNAPSHOT.jar$/), anything()).
@@ -280,7 +297,7 @@ describe Repositories, 'remote' do
280
297
  lambda { artifact('com.example:library:jar:2.1-SNAPSHOT').invoke }.should raise_error(RuntimeError, /Failed to download/)
281
298
  File.exist?(File.join(repositories.local, 'com/example/library/2.1-SNAPSHOT/library-2.1-SNAPSHOT.jar')).should be_false
282
299
  end
283
-
300
+
284
301
  it 'should handle missing m2 snapshots by reporting the artifact unavailable' do
285
302
  metadata = <<-XML
286
303
  <?xml version='1.0' encoding='UTF-8'?>
@@ -399,7 +416,7 @@ describe Buildr, '#artifact' do
399
416
  it 'should complain about invalid key' do
400
417
  lambda { artifact(@spec.merge(:error=>true)) }.should raise_error(ArgumentError, /no such option/i)
401
418
  end
402
-
419
+
403
420
  it 'should use JAR type by default' do
404
421
  artifact(@spec.merge(:type=>nil)).should respond_to(:invoke)
405
422
  end
@@ -409,7 +426,7 @@ describe Buildr, '#artifact' do
409
426
  end
410
427
 
411
428
  it 'should reject partial string specifier' do
412
- artifact('com.example:library::2.0')
429
+ artifact('com.example:library::2.0')
413
430
  lambda { artifact('com.example:library:jar') }.should raise_error
414
431
  lambda { artifact('com.example:library:jar:') }.should raise_error
415
432
  lambda { artifact('com.example:library::2.0') }.should_not raise_error
@@ -429,9 +446,43 @@ describe Buildr, '#artifact' do
429
446
  lambda { artifact.invoke }.should change { File.exist?(artifact.to_s) }.to(true)
430
447
  end
431
448
 
449
+ it 'should use from method to install artifact from a file task' do
450
+ test_jar = file('test.jar')
451
+ test_jar.enhance do
452
+ #nothing...
453
+ end
454
+ write 'test.jar'
455
+ artifact = artifact('group:id:jar:1.0').from(test_jar)
456
+ lambda { artifact.invoke }.should change { File.exist?(artifact.to_s) }.to(true)
457
+ end
458
+
459
+ it 'should invoke the artifact associated file task if the file doesnt exist' do
460
+ test_jar = file('test.jar')
461
+ called = false
462
+ test_jar.enhance do
463
+ write 'test.jar'
464
+ called = true
465
+ end
466
+ artifact = artifact('group:id:jar:1.0').from(test_jar)
467
+ artifact.invoke
468
+ unless called
469
+ raise "The file task was not called."
470
+ end
471
+ end
472
+
473
+ it 'should not invoke the artifact associated file task if the file already exists' do
474
+ test_jar = file('test.jar')
475
+ test_jar.enhance do
476
+ raise 'the test.jar file is created again!'
477
+ end
478
+ write 'test.jar'
479
+ artifact = artifact('group:id:jar:1.0').from(test_jar)
480
+ artifact.invoke
481
+ end
482
+
432
483
  it 'should reference artifacts defined on build.yaml by using ruby symbols' do
433
484
  write 'build.yaml', <<-YAML
434
- artifacts:
485
+ artifacts:
435
486
  j2ee: geronimo-spec:geronimo-spec-j2ee:jar:1.4-rc4
436
487
  YAML
437
488
  Buildr.application.send(:load_artifact_ns)
@@ -507,14 +558,20 @@ describe Buildr, '#group' do
507
558
  list.should include(artifact('saxon:saxon-xpath:jar:8.4'))
508
559
  list.size.should be(3)
509
560
  end
510
-
561
+
511
562
  it 'should accept a type' do
512
563
  list = group('struts-bean', 'struts-html', :under=>'struts', :type=>'tld', :version=>'1.1')
513
564
  list.should include(artifact('struts:struts-bean:tld:1.1'))
514
565
  list.should include(artifact('struts:struts-html:tld:1.1'))
515
566
  list.size.should be(2)
516
567
  end
517
-
568
+
569
+ it 'should accept a classifier' do
570
+ list = group('camel-core', :under=>'org.apache.camel', :version=>'2.2.0', :classifier=>'spring3')
571
+ list.should include(artifact('org.apache.camel:camel-core:jar:spring3:2.2.0'))
572
+ list.size.should be(1)
573
+ end
574
+
518
575
  end
519
576
 
520
577
  describe Buildr, '#install' do
@@ -538,6 +595,14 @@ describe Buildr, '#install' do
538
595
  lambda { install.invoke }.should change { File.exist?(artifact(@spec).to_s) }.to(true)
539
596
  end
540
597
 
598
+ it 'should re-install artifact when "from" is newer' do
599
+ install artifact(@spec).from(@file)
600
+ write artifact(@spec).to_s # install a version of the artifact
601
+ old_mtime = File.mtime(artifact(@spec).to_s)
602
+ sleep 1; write @file # make sure the "from" file has newer modification time
603
+ lambda { install.invoke }.should change { File.exist?(artifact(@spec).to_s) and old_mtime < File.mtime(artifact(@spec).to_s) }.to(true)
604
+ end
605
+
541
606
  it 'should install POM alongside artifact' do
542
607
  write @file
543
608
  install artifact(@spec).from(@file)
@@ -648,30 +713,30 @@ describe Rake::Task, ' artifacts:sources' do
648
713
  task('artifacts:sources').clear
649
714
  repositories.remote = 'http://example.com'
650
715
  end
651
-
716
+
652
717
  it 'should download sources for all specified artifacts' do
653
718
  artifact 'group:id:jar:1.0'
654
719
  URI.should_receive(:download).any_number_of_times.and_return { |uri, target| write target }
655
720
  lambda { task('artifacts:sources').invoke }.should change { File.exist?('home/.m2/repository/group/id/1.0/id-1.0-sources.jar') }.to(true)
656
721
  end
657
-
722
+
658
723
  it "should not try to download sources for the project's artifacts" do
659
724
  define('foo', :version=>'1.0') { package(:jar) }
660
725
  URI.should_not_receive(:download)
661
726
  task('artifacts:sources').invoke
662
727
  end
663
-
728
+
664
729
  describe 'when the source artifact does not exist' do
665
-
730
+
666
731
  before do
667
732
  artifact 'group:id:jar:1.0'
668
733
  URI.should_receive(:download).any_number_of_times.and_raise(URI::NotFoundError)
669
734
  end
670
-
735
+
671
736
  it 'should not fail' do
672
737
  lambda { task('artifacts:sources').invoke }.should_not raise_error
673
738
  end
674
-
739
+
675
740
  it 'should inform the user' do
676
741
  lambda { task('artifacts:sources').invoke }.should show_info('Failed to download group:id:jar:sources:1.0. Skipping it.')
677
742
  end
@@ -169,7 +169,7 @@ describe Project, '#package' do
169
169
  end
170
170
 
171
171
  it 'should call package_as_foo when using package(:foo)' do
172
- class Buildr::Project
172
+ class Buildr::Project
173
173
  def package_as_foo(file_name)
174
174
  file(file_name) do |t|
175
175
  mkdir_p File.dirname(t.to_s)
@@ -185,7 +185,7 @@ describe Project, '#package' do
185
185
  end
186
186
 
187
187
  it 'should allow to respec package(:sources) using package_as_sources_spec()' do
188
- class Buildr::Project
188
+ class Buildr::Project
189
189
  def package_as_sources_spec(spec)
190
190
  spec.merge({ :type=>:jar, :classifier=>'sources' })
191
191
  end
@@ -195,25 +195,25 @@ describe Project, '#package' do
195
195
  package(:sources).classifier.should eql('sources')
196
196
  end
197
197
  end
198
-
198
+
199
199
  it 'should produce different packages for different specs' do
200
- class Buildr::Project
200
+ class Buildr::Project
201
201
  def package_as_foo(file_name)
202
- file(file_name)
202
+ file(file_name)
203
203
  end
204
-
204
+
205
205
  def package_as_foo_spec(spec)
206
206
  spec.merge(:type => :zip)
207
207
  end
208
-
208
+
209
209
  def package_as_bar(file_name)
210
210
  file(file_name)
211
211
  end
212
-
212
+
213
213
  def package_as_bar_spec(spec)
214
214
  spec.merge(:type => :zip, :classifier => "foobar")
215
215
  end
216
-
216
+
217
217
  end
218
218
  define('foo', :version => '1.0') do
219
219
  package(:foo).type.should eql(:zip)
@@ -244,7 +244,7 @@ describe Project, '#package' do
244
244
 
245
245
  it 'should return a file task' do
246
246
  define('foo', :version=>'1.0') { package(:jar) }
247
- project('foo').package(:jar).should be_kind_of(Rake::FileTask)
247
+ project('foo').package(:jar).should be_kind_of(Rake::FileTask)
248
248
  end
249
249
 
250
250
  it 'should return a task that acts as artifact' do
@@ -283,6 +283,15 @@ describe Project, '#package' do
283
283
  project('foo').packages.uniq.size.should be(3)
284
284
  end
285
285
 
286
+ it 'should create different tasks for specs with matching type' do
287
+ define 'foo', :version=>'1.0' do
288
+ javadoc("foo").into( "foo" )
289
+ package(:javadoc)
290
+ package(:zip)
291
+ end
292
+ project('foo').packages.uniq.size.should be(2)
293
+ end
294
+
286
295
  it 'should return the same task for subsequent calls' do
287
296
  define 'foo', :version=>'1.0' do
288
297
  package.should eql(package)
@@ -616,9 +625,9 @@ end
616
625
 
617
626
  describe Rake::Task, ' upload' do
618
627
  before do
619
- repositories.release_to = "file://#{File.expand_path('remote')}"
628
+ repositories.release_to = URI.escape("file://#{File.expand_path('remote')}")
620
629
  end
621
-
630
+
622
631
  it 'should be local task' do
623
632
  define 'foo', :version=>'1.0' do
624
633
  package
@@ -645,14 +654,32 @@ describe Rake::Task, ' upload' do
645
654
  read(upload).should eql(read(package))
646
655
  end
647
656
  end
657
+
658
+ it 'should not upload twice the pom when artifacts are uploaded from a project' do
659
+ write 'src/main/java/Foo.java', 'public class Foo {}'
660
+ repositories.release_to = 'sftp://example.com/base'
661
+ define 'foo' do
662
+ project.group = "attached"
663
+ project.version = "1.0"
664
+ package(:jar)
665
+ package(:sources)
666
+ end
667
+ URI.should_receive(:upload).exactly(:once).
668
+ with(URI.parse('sftp://example.com/base/attached/foo/1.0/foo-1.0-sources.jar'), project("foo").package(:sources).to_s, anything)
669
+ URI.should_receive(:upload).exactly(:once).
670
+ with(URI.parse('sftp://example.com/base/attached/foo/1.0/foo-1.0.jar'), project("foo").package(:jar).to_s, anything)
671
+ URI.should_receive(:upload).exactly(:once).
672
+ with(URI.parse('sftp://example.com/base/attached/foo/1.0/foo-1.0.pom'), project("foo").package(:jar).pom.to_s, anything)
673
+ verbose(false) { project("foo").upload.invoke }
674
+ end
648
675
 
649
676
  it 'should upload signatures for artifact and POM' do
650
677
  define('foo', :version=>'1.0') { package :jar }
651
678
  task('upload').invoke
652
679
  { 'remote/foo/foo/1.0/foo-1.0.jar'=>project('foo').package(:jar),
653
680
  'remote/foo/foo/1.0/foo-1.0.pom'=>project('foo').package(:jar).pom }.each do |upload, package|
654
- read("#{upload}.md5").split.first.should eql(Digest::MD5.hexdigest(read(package)))
655
- read("#{upload}.sha1").split.first.should eql(Digest::SHA1.hexdigest(read(package)))
681
+ read("#{upload}.md5").split.first.should eql(Digest::MD5.hexdigest(read(package, "rb")))
682
+ read("#{upload}.sha1").split.first.should eql(Digest::SHA1.hexdigest(read(package, "rb")))
656
683
  end
657
684
  end
658
685
  end
data/spec/sandbox.rb CHANGED
@@ -21,18 +21,20 @@ 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.7.7 for specs; don't want to rely on SCALA_HOME
25
+ Buildr.settings.build['scala.version'] = "2.7.7"
26
+
24
27
  # Add a 'require' here only for optional extensions, not for extensions that should be loaded by default.
25
28
  require 'buildr/groovy'
26
29
  require 'buildr/scala'
27
30
 
28
31
  Java.load # Anything added to the classpath.
29
- artifacts(TestFramework.frameworks.map(&:dependencies).flatten, JUnit.ant_taskdef).each do |path|
32
+ artifacts(TestFramework.frameworks.map(&:dependencies).flatten, JUnit.ant_taskdef, Buildr::Groovy::Groovyc.dependencies).each do |path|
30
33
  file(path).invoke
31
34
  end
32
- # JtestR currently requires JUnit 4.4
33
- file(artifact("junit:junit:jar:4.4")).invoke
34
35
 
35
36
  ENV['HOME'] = File.expand_path(File.join(File.dirname(__FILE__), '..', 'tmp', 'home'))
37
+ mkpath ENV['HOME']
36
38
 
37
39
  # We need to run all tests inside a _sandbox, tacking a snapshot of Buildr before the test,
38
40
  # and restoring everything to its previous state after the test. Damn state changes.
@@ -45,14 +47,14 @@ module Sandbox
45
47
  spec.before(:each) { sandbox }
46
48
  spec.after(:each) { reset }
47
49
  end
48
-
50
+
49
51
  # Require an optional extension without letting its callbacks pollute the Project class.
50
52
  def require_optional_extension(extension_require_path)
51
- project_callbacks_without_extension = Project.class_eval { @callbacks }.dup
53
+ project_callbacks_without_extension = Project.class_eval { @global_callbacks }.dup
52
54
  begin
53
55
  require extension_require_path
54
56
  ensure
55
- Project.class_eval { @callbacks = project_callbacks_without_extension }
57
+ Project.class_eval { @global_callbacks = project_callbacks_without_extension }
56
58
  end
57
59
  end
58
60
  end
@@ -71,7 +73,7 @@ module Sandbox
71
73
 
72
74
  def sandbox
73
75
  @_sandbox = {}
74
-
76
+
75
77
  # Create a temporary directory where we can create files, e.g,
76
78
  # for projects, compilation. We need a place that does not depend
77
79
  # on the current directory.
@@ -88,10 +90,11 @@ module Sandbox
88
90
 
89
91
  @_sandbox[:load_path] = $LOAD_PATH.clone
90
92
  #@_sandbox[:loaded_features] = $LOADED_FEATURES.clone
91
-
93
+
92
94
  # Later on we'll want to lose all the on_define created during the test.
93
95
  @_sandbox[:on_define] = Project.class_eval { (@on_define || []).dup }
94
- @_sandbox[:callbacks] = Project.class_eval { (@callbacks || []).dup }
96
+ @_sandbox[:extension_modules] = Project.class_eval { (@extension_modules || []).dup }
97
+ @_sandbox[:global_callbacks] = Project.class_eval { (@global_callbacks || []).dup }
95
98
  @_sandbox[:layout] = Layout.default.clone
96
99
 
97
100
  # Create a local repository we can play with. However, our local repository will be void
@@ -120,14 +123,22 @@ module Sandbox
120
123
  def reset
121
124
  # Get rid of all the projects and the on_define blocks we used.
122
125
  Project.clear
126
+
123
127
  on_define = @_sandbox[:on_define]
124
- Project.class_eval { @on_define = on_define }
125
- callbacks = @_sandbox[:callbacks]
126
- Project.class_eval { @callbacks = callbacks }
128
+ extension_modules = @_sandbox[:extension_modules]
129
+ global_callbacks = @_sandbox[:global_callbacks]
130
+
131
+ Project.class_eval do
132
+ @on_define = on_define
133
+ @global_callbacks = global_callbacks
134
+ @extension_modules = extension_modules
135
+ end
136
+
127
137
  Layout.default = @_sandbox[:layout].clone
128
138
 
129
139
  $LOAD_PATH.replace @_sandbox[:load_path]
130
140
  FileUtils.rm_rf @temp
141
+ mkpath ENV['HOME']
131
142
 
132
143
  # Get rid of all artifacts.
133
144
  @_sandbox[:artifacts].tap { |artifacts| Artifact.class_eval { @artifacts = artifacts } }
@@ -15,9 +15,14 @@
15
15
 
16
16
 
17
17
  require File.join(File.dirname(__FILE__), '../spec_helpers')
18
- require 'buildr/scala'
19
18
 
20
19
  describe Buildr::Scala::Specs do
20
+
21
+ before(:each) do
22
+ # Force Scala 2.7.7 for specs; don't want to rely on SCALA_HOME
23
+ Buildr.settings.build['scala.version'] = "2.7.7"
24
+ end
25
+
21
26
  it 'should be the default when tests in src/spec/scala' do
22
27
  write 'src/spec/scala/com/example/MySpecs.scala', <<-SCALA
23
28
  package com.example
@@ -33,13 +38,13 @@ describe Buildr::Scala::Specs do
33
38
  define 'foo'
34
39
  project('foo').test.framework.should eql(:specs)
35
40
  end
36
-
41
+
37
42
  it 'should include Specs dependencies' do
38
43
  define('foo') { test.using(:specs) }
39
44
  project('foo').test.compile.dependencies.should include(*artifacts(Scala::Specs.dependencies))
40
45
  project('foo').test.dependencies.should include(*artifacts(Scala::Specs.dependencies))
41
46
  end
42
-
47
+
43
48
  it 'should include ScalaCheck dependencies' do
44
49
  define('foo') { test.using(:specs) }
45
50
  project('foo').test.compile.dependencies.should include(*artifacts(Scala::Check.dependencies))
@@ -65,7 +70,7 @@ describe Buildr::Scala::Specs do
65
70
  }
66
71
  SCALA
67
72
  define('foo').test.invoke
68
- project('foo').test.tests.should include('com.example.MySpecs$')
73
+ project('foo').test.tests.should include('com.example.MySpecs')
69
74
  end
70
75
 
71
76
  it 'should include public objects extending org.specs.Specification even with companion classes' do
@@ -82,7 +87,7 @@ describe Buildr::Scala::Specs do
82
87
  class MySpecs extends org.specs.runner.JUnit4(MySpecs)
83
88
  SCALA
84
89
  define('foo').test.invoke
85
- project('foo').test.tests.should include('com.example.MySpecs$')
90
+ project('foo').test.tests.should include('com.example.MySpecs')
86
91
  end
87
92
 
88
93
  it 'should pass when spec passes' do
@@ -98,12 +103,12 @@ describe Buildr::Scala::Specs do
98
103
  SCALA
99
104
  lambda { define('foo').test.invoke }.should_not raise_error
100
105
  end
101
-
106
+
102
107
  it 'should fail when spec fails' do
103
108
  write 'src/spec/scala/StringSpecs.scala', <<-SCALA
104
109
  import org.specs._
105
110
  import org.specs.runner._
106
-
111
+
107
112
  object StringSpecs extends Specification {
108
113
  "empty string" should {
109
114
  "have a zero length" in {
@@ -114,6 +119,6 @@ describe Buildr::Scala::Specs do
114
119
  SCALA
115
120
  define('foo')
116
121
  project('foo').test.invoke rescue
117
- project('foo').test.failed_tests.should include('StringSpecs$')
122
+ project('foo').test.failed_tests.should include('StringSpecs')
118
123
  end
119
124
  end