buildr 1.3.5 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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/core/application.rb +33 -27
  37. data/lib/buildr/core/build.rb +41 -28
  38. data/lib/buildr/core/cc.rb +172 -0
  39. data/lib/buildr/core/checks.rb +1 -1
  40. data/lib/buildr/core/common.rb +7 -6
  41. data/lib/buildr/core/compile.rb +7 -8
  42. data/lib/buildr/core/doc.rb +263 -0
  43. data/lib/buildr/core/environment.rb +6 -6
  44. data/lib/buildr/core/filter.rb +77 -35
  45. data/lib/buildr/core/generate.rb +7 -7
  46. data/lib/buildr/core/help.rb +1 -1
  47. data/lib/buildr/core/osx.rb +6 -6
  48. data/lib/buildr/core/progressbar.rb +4 -4
  49. data/lib/buildr/core/project.rb +144 -36
  50. data/lib/buildr/core/shell.rb +34 -34
  51. data/lib/buildr/core/test.rb +89 -20
  52. data/lib/buildr/core/transports.rb +8 -7
  53. data/lib/buildr/core/util.rb +77 -23
  54. data/lib/buildr/core.rb +1 -0
  55. data/lib/buildr/groovy/bdd.rb +5 -5
  56. data/lib/buildr/groovy/compiler.rb +19 -15
  57. data/lib/buildr/groovy/shell.rb +6 -6
  58. data/lib/buildr/ide/eclipse/java.rb +3 -3
  59. data/lib/buildr/ide/eclipse/plugin.rb +8 -5
  60. data/lib/buildr/ide/eclipse/scala.rb +4 -2
  61. data/lib/buildr/ide/eclipse.rb +148 -75
  62. data/lib/buildr/ide/idea.rb +2 -2
  63. data/lib/buildr/ide/idea7x.rb +23 -4
  64. data/lib/buildr/java/ant.rb +4 -4
  65. data/lib/buildr/java/bdd.rb +51 -54
  66. data/lib/buildr/java/cobertura.rb +57 -35
  67. data/lib/buildr/java/commands.rb +14 -5
  68. data/lib/buildr/java/compiler.rb +3 -217
  69. data/lib/buildr/java/deprecated.rb +4 -4
  70. data/lib/buildr/java/doc.rb +70 -0
  71. data/lib/buildr/java/emma.rb +22 -22
  72. data/lib/buildr/java/jruby.rb +4 -4
  73. data/lib/buildr/java/jtestr_runner.rb.erb +27 -25
  74. data/lib/buildr/java/org/apache/buildr/JavaTestFilter.class +0 -0
  75. data/lib/buildr/java/org/apache/buildr/JavaTestFilter.java +8 -3
  76. data/lib/buildr/java/packaging.rb +30 -29
  77. data/lib/buildr/java/pom.rb +4 -4
  78. data/lib/buildr/java/rjb.rb +6 -6
  79. data/lib/buildr/java/test_result.rb +61 -85
  80. data/lib/buildr/java/tests.rb +44 -27
  81. data/lib/buildr/java/version_requirement.rb +8 -8
  82. data/lib/buildr/java.rb +1 -0
  83. data/lib/buildr/packaging/archive.rb +55 -22
  84. data/lib/buildr/packaging/artifact.rb +75 -36
  85. data/lib/buildr/packaging/artifact_namespace.rb +90 -78
  86. data/lib/buildr/packaging/artifact_search.rb +5 -5
  87. data/lib/buildr/packaging/gems.rb +11 -7
  88. data/lib/buildr/packaging/package.rb +10 -7
  89. data/lib/buildr/packaging/tar.rb +14 -14
  90. data/lib/buildr/packaging/version_requirement.rb +30 -10
  91. data/lib/buildr/packaging/ziptask.rb +51 -13
  92. data/lib/buildr/scala/bdd.rb +25 -20
  93. data/lib/buildr/scala/compiler.rb +87 -40
  94. data/lib/buildr/scala/doc.rb +106 -0
  95. data/lib/buildr/scala/org/apache/buildr/SpecsSingletonRunner.class +0 -0
  96. data/lib/buildr/scala/org/apache/buildr/SpecsSingletonRunner.java +57 -0
  97. data/lib/buildr/scala/shell.rb +14 -9
  98. data/lib/buildr/scala/tests.rb +33 -26
  99. data/lib/buildr/scala.rb +1 -0
  100. data/lib/buildr/shell.rb +33 -33
  101. data/lib/buildr.rb +1 -1
  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
@@ -110,12 +110,22 @@ describe Buildr::TestTask do
110
110
  test_task.compile.dependencies.should include(artifact('acme:example:jar:1.0'))
111
111
  end
112
112
 
113
+ it 'should respond to deprecated classpath' do
114
+ test_task.classpath = artifact('acme:example:jar:1.0')
115
+ test_task.classpath.should be(artifact('acme:example:jar:1.0'))
116
+ end
117
+
118
+ it 'should respond to dependencies' do
119
+ test_task.dependencies = artifact('acme:example:jar:1.0')
120
+ test_task.dependencies.should be(artifact('acme:example:jar:1.0'))
121
+ end
122
+
113
123
  it 'should respond to :with and add artifacfs to task dependencies' do
114
124
  test_task.with 'test.jar', 'acme:example:jar:1.0'
115
125
  test_task.dependencies.should include(File.expand_path('test.jar'))
116
126
  test_task.dependencies.should include(artifact('acme:example:jar:1.0'))
117
127
  end
118
-
128
+
119
129
  it 'should response to :options and return test framework options' do
120
130
  test_task.using :foo=>'bar'
121
131
  test_task.options[:foo].should eql('bar')
@@ -216,9 +226,9 @@ describe Buildr::TestTask do
216
226
  define('foo').test.dependencies.should include(project('foo').resources.target)
217
227
  end
218
228
 
219
- it 'should not use the test compile dependencies' do
229
+ it 'should use the test compile dependencies' do
220
230
  define('foo') { test.compile.using(:javac).with 'group:id:jar:1.0' }
221
- project('foo').test.dependencies.should_not include(artifact('group:id:jar:1.0'))
231
+ project('foo').test.dependencies.should include(artifact('group:id:jar:1.0'))
222
232
  end
223
233
 
224
234
  it 'should include the test compile target in its dependencies' do
@@ -252,7 +262,7 @@ describe Buildr::TestTask do
252
262
  depends = project('foo').test.dependencies
253
263
  depends.index(project('foo').test.resources.target).should < depends.index(project('foo').resources.target)
254
264
  end
255
-
265
+
256
266
  it 'should not have a last successful run timestamp before the tests are run' do
257
267
  test_task.timestamp.should == Rake::EARLY
258
268
  end
@@ -268,6 +278,14 @@ describe Buildr::TestTask do
268
278
  mkpath project('foo').test.report_to.to_s
269
279
  lambda { task('clean').invoke }.should change { File.exist?(project('foo').test.report_to.to_s) }.to(false)
270
280
  end
281
+
282
+ it 'should only run tests explicitly specified if options.test is :only' do
283
+ Buildr.options.test = :only
284
+ write 'bar/src/main/java/Bar.java', 'public class Bar {}'
285
+ define('bar', :version=>'1.0', :base_dir=>'bar') { package :jar }
286
+ define('foo') { compile.with project('bar') }
287
+ lambda { task('foo:test').invoke rescue nil }.should_not run_tasks('bar:test')
288
+ end
271
289
  end
272
290
 
273
291
 
@@ -279,7 +297,7 @@ describe Buildr::TestTask, 'with no tests' do
279
297
  it 'should report no failed tests' do
280
298
  lambda { verbose(true) { define('foo').test.invoke } }.should_not show_error(/fail/i)
281
299
  end
282
-
300
+
283
301
  it 'should return no failed tests' do
284
302
  define('foo') { test.using(:junit) }
285
303
  project('foo').test.invoke
@@ -319,7 +337,7 @@ describe Buildr::TestTask, 'with passing tests' do
319
337
  it 'should report no failed tests' do
320
338
  lambda { verbose(true) { test_task.invoke } }.should_not show_error(/fail/i)
321
339
  end
322
-
340
+
323
341
  it 'should return passed tests' do
324
342
  test_task.invoke
325
343
  test_task.passed_tests.should == ['PassingTest1', 'PassingTest2']
@@ -343,7 +361,7 @@ end
343
361
 
344
362
  describe Buildr::TestTask, 'with failed test' do
345
363
  include TestHelper
346
-
364
+
347
365
  def test_task
348
366
  @test_task ||= begin
349
367
  define 'foo' do
@@ -365,6 +383,11 @@ describe Buildr::TestTask, 'with failed test' do
365
383
  lambda { verbose(true) { test_task.invoke rescue nil } }.should show_error(/FailingTest/)
366
384
  end
367
385
 
386
+ it 'should record failed tests' do
387
+ test_task.invoke rescue nil
388
+ File.read(project('foo').path_to('target', "#{test_task.framework}-failed")).should == 'FailingTest'
389
+ end
390
+
368
391
  it 'should return failed tests' do
369
392
  test_task.invoke rescue nil
370
393
  test_task.failed_tests.should == ['FailingTest']
@@ -375,6 +398,11 @@ describe Buildr::TestTask, 'with failed test' do
375
398
  test_task.passed_tests.should == ['PassingTest']
376
399
  end
377
400
 
401
+ it 'should know what tests failed last time' do
402
+ test_task.invoke rescue nil
403
+ project('foo').test.last_failures.should == ['FailingTest']
404
+ end
405
+
378
406
  it 'should not fail if fail_on_failure is false' do
379
407
  test_task.using(:fail_on_failure=>false).invoke
380
408
  lambda { test_task.invoke }.should_not raise_error
@@ -393,7 +421,7 @@ describe Buildr::TestTask, 'with failed test' do
393
421
  it 'should execute teardown task' do
394
422
  lambda { test_task.invoke rescue nil }.should run_task('foo:test:teardown')
395
423
  end
396
-
424
+
397
425
  it 'should not update the last successful run timestamp' do
398
426
  a_second_ago = Time.now - 1
399
427
  touch_last_successful_test_run test_task, a_second_ago
@@ -460,7 +488,7 @@ describe Buildr::Project, '#test' do
460
488
  test.options[:environment].should == {}
461
489
  end
462
490
  end
463
-
491
+
464
492
  it 'should clone options from parent project when using #options' do
465
493
  define 'foo' do
466
494
  define 'bar' do
@@ -476,14 +504,14 @@ describe Buildr::Project, '#test' do
476
504
  test.options[:environment].should == {}
477
505
  end
478
506
  end
479
-
507
+
480
508
  it 'should accept to set a test property in the top project' do
481
509
  define 'foo' do
482
510
  test.options[:properties][:foo] = 'bar'
483
511
  end
484
512
  project('foo').test.options[:properties][:foo].should == 'bar'
485
513
  end
486
-
514
+
487
515
  it 'should accept to set a test property in a subproject' do
488
516
  define 'foo' do
489
517
  define 'bar' do
@@ -492,7 +520,7 @@ describe Buildr::Project, '#test' do
492
520
  end
493
521
  project('foo:bar').test.options[:properties][:bar].should == 'baz'
494
522
  end
495
-
523
+
496
524
  it 'should not change options of unrelated projects when using #options' do
497
525
  define 'foo' do
498
526
  test.options[:properties][:foo] = 'bar'
@@ -501,7 +529,7 @@ describe Buildr::Project, '#test' do
501
529
  test.options[:properties].should == {}
502
530
  end
503
531
  end
504
-
532
+
505
533
  it "should run from project's build task" do
506
534
  write 'src/main/java/Foo.java'
507
535
  write 'src/test/java/FooTest.java'
@@ -584,7 +612,9 @@ describe Buildr::Project, '#test.resources' do
584
612
  end
585
613
 
586
614
  it 'should create target directory even if no files to copy' do
587
- define('foo').test.resources.filter.into('resources')
615
+ define('foo') do
616
+ test.resources.filter.into('resources')
617
+ end
588
618
  lambda { file(File.expand_path('resources')).invoke }.should change { File.exist?('resources') }.to(true)
589
619
  end
590
620
 
@@ -598,7 +628,7 @@ end
598
628
 
599
629
  describe Buildr::TestTask, '#invoke' do
600
630
  include TestHelper
601
-
631
+
602
632
  def test_task
603
633
  @test_task ||= define('foo') {
604
634
  test.using(:junit)
@@ -608,7 +638,7 @@ describe Buildr::TestTask, '#invoke' do
608
638
  end
609
639
  }.test
610
640
  end
611
-
641
+
612
642
  it 'should require dependencies to exist' do
613
643
  lambda { test_task.with('no-such.jar').invoke }.should \
614
644
  raise_error(RuntimeError, /Don't know how to build/)
@@ -622,12 +652,12 @@ describe Buildr::TestTask, '#invoke' do
622
652
  it 'should run tests if they have never run' do
623
653
  lambda { test_task.invoke }.should run_task('foo:test')
624
654
  end
625
-
655
+
626
656
  it 'should not run tests if test option is off' do
627
657
  Buildr.options.test = false
628
658
  lambda { test_task.invoke }.should_not run_task('foo:test')
629
659
  end
630
-
660
+
631
661
  describe 'when there was a successful test run already' do
632
662
  before do
633
663
  @a_second_ago = Time.now - 1
@@ -635,57 +665,69 @@ describe Buildr::TestTask, '#invoke' do
635
665
  target = ['classes/Foo.class', 'resources/config.xml', 'test/classes/FooTest.class', 'test/resources/config-test.xml'].map { |f| File.join('target', f) }
636
666
  files = ['buildfile'] + src + target
637
667
  files.each { |file| write file }
638
- (files + files.map { |file| file.pathmap('%d') }).each { |file| File.utime(@a_second_ago, @a_second_ago, file) }
668
+ dirs = (src + target).map { |file| file.pathmap('%d') }
669
+ (files + dirs ).each { |path| File.utime(@a_second_ago, @a_second_ago, path) }
639
670
  touch_last_successful_test_run test_task, @a_second_ago
640
671
  end
641
-
672
+
642
673
  it 'should not run tests if nothing changed' do
643
674
  lambda { test_task.invoke }.should_not run_task('foo:test')
644
675
  end
645
-
676
+
646
677
  it 'should run tests if options.test is :all' do
647
678
  Buildr.options.test = :all
648
679
  lambda { test_task.invoke }.should run_task('foo:test')
649
680
  end
650
-
681
+
651
682
  it 'should run tests if main compile target changed' do
652
683
  touch project('foo').compile.target.to_s
653
684
  lambda { test_task.invoke }.should run_task('foo:test')
654
685
  end
655
-
686
+
656
687
  it 'should run tests if test compile target changed' do
657
688
  touch test_task.compile.target.to_s
658
689
  lambda { test_task.invoke }.should run_task('foo:test')
659
690
  end
660
-
691
+
661
692
  it 'should run tests if main resources changed' do
662
693
  touch project('foo').resources.target.to_s
663
694
  lambda { test_task.invoke }.should run_task('foo:test')
664
695
  end
665
-
696
+
666
697
  it 'should run tests if test resources changed' do
667
698
  touch test_task.resources.target.to_s
668
699
  lambda { test_task.invoke }.should run_task('foo:test')
669
700
  end
670
-
701
+
671
702
  it 'should run tests if compile-dependent project changed' do
672
703
  write 'bar/src/main/java/Bar.java', 'public class Bar {}'
673
704
  define('bar', :version=>'1.0', :base_dir=>'bar') { package :jar }
674
705
  project('foo').compile.with project('bar')
675
706
  lambda { test_task.invoke }.should run_task('foo:test')
676
707
  end
677
-
708
+
678
709
  it 'should run tests if test-dependent project changed' do
679
710
  write 'bar/src/main/java/Bar.java', 'public class Bar {}'
680
711
  define('bar', :version=>'1.0', :base_dir=>'bar') { package :jar }
681
712
  test_task.with project('bar')
682
713
  lambda { test_task.invoke }.should run_task('foo:test')
683
714
  end
684
-
715
+
685
716
  it 'should run tests if buildfile changed' do
686
717
  touch 'buildfile'
718
+ test_task.should_receive(:run_tests)
687
719
  lambda { test_task.invoke }.should run_task('foo:test')
688
720
  end
721
+
722
+ it 'should not run tests if buildfile changed but IGNORE_BUILDFILE is true' do
723
+ begin
724
+ ENV["IGNORE_BUILDFILE"] = "true"
725
+ test_task.should_not_receive(:run_tests)
726
+ test_task.invoke
727
+ ensure
728
+ ENV["IGNORE_BUILDFILE"] = nil
729
+ end
730
+ end
689
731
  end
690
732
  end
691
733
 
@@ -713,9 +755,38 @@ describe Rake::Task, 'test' do
713
755
  it 'should ignore failure if options.test is :all' do
714
756
  define('foo') { test { fail } }
715
757
  define('bar') { test { fail } }
716
- options.test = :all
758
+ options.test = :all
717
759
  lambda { task('test').invoke rescue nil }.should run_tasks('foo:test', 'bar:test')
718
760
  end
761
+
762
+ it 'should ignore failure in subprojects if options.test is :all' do
763
+ define('foo') {
764
+ define('p1') { test { fail } }
765
+ define('p2') { test { } }
766
+ define('p3') { test { fail } }
767
+ }
768
+ define('bar') { test { fail } }
769
+ options.test = :all
770
+ lambda { task('test').invoke rescue nil }.should run_tasks('foo:p1:test', 'foo:p2:test', 'foo:p3:test', 'bar:test')
771
+ end
772
+
773
+ it 'should ignore failure in subprojects if environment variable test is \'all\'' do
774
+ define('foo') {
775
+ define('p1') { test { fail } }
776
+ define('p2') { test { } }
777
+ define('p3') { test { fail } }
778
+ }
779
+ define('bar') { test { fail } }
780
+ ENV['test'] = 'all'
781
+ lambda { task('test').invoke rescue nil }.should run_tasks('foo:p1:test', 'foo:p2:test', 'foo:p3:test', 'bar:test')
782
+ end
783
+
784
+ it 'should ignore failure if options.test is :all and target is build task ' do
785
+ define('foo') { test { fail } }
786
+ define('bar') { test { fail } }
787
+ options.test = :all
788
+ lambda { task('build').invoke rescue nil }.should run_tasks('foo:test', 'bar:test')
789
+ end
719
790
 
720
791
  it 'should ignore failure if environment variable test is \'all\'' do
721
792
  define('foo') { test { fail } }
@@ -751,12 +822,18 @@ describe Rake::Task, 'test' do
751
822
  ENV['TEST'] = 'no'
752
823
  lambda { task('test').invoke rescue nil }.should_not run_tasks('foo:test', 'bar:test')
753
824
  end
754
- end
755
825
 
826
+ it "should not compile tests if environment variable test is 'no'" do
827
+ write "src/test/java/HelloTest.java", "public class HelloTest { public void testTest() {}}"
828
+ define('foo') { test { fail } }
829
+ ENV['test'] = 'no'
830
+ lambda { task('test').invoke rescue nil }.should_not run_tasks('foo:test:compile')
831
+ end
832
+ end
756
833
 
757
834
  describe 'test rule' do
758
835
  include TestHelper
759
-
836
+
760
837
  it 'should execute test task on local project' do
761
838
  define('foo') { define 'bar' }
762
839
  lambda { task('test:something').invoke }.should run_task('foo:test')
@@ -816,7 +893,7 @@ describe 'test rule' do
816
893
  define 'foo'
817
894
  task('test:Something').invoke
818
895
  end
819
-
896
+
820
897
  it 'should execute the named tests even if the test task is not needed' do
821
898
  define 'foo' do
822
899
  test.using(:junit)
@@ -826,7 +903,7 @@ describe 'test rule' do
826
903
  task('test:something').invoke
827
904
  project('foo').test.tests.should include('something')
828
905
  end
829
-
906
+
830
907
  it 'should not update the last successful test run timestamp' do
831
908
  define 'foo' do
832
909
  test.using(:junit)
@@ -839,6 +916,38 @@ describe 'test rule' do
839
916
  end
840
917
  end
841
918
 
919
+ describe 'test failed' do
920
+ include TestHelper
921
+
922
+ def test_task
923
+ @test_task ||= begin
924
+ define 'foo' do
925
+ test.using(:junit)
926
+ test.instance_eval do
927
+ @framework.stub!(:tests).and_return(['FailingTest', 'PassingTest'])
928
+ @framework.stub!(:run).and_return(['PassingTest'])
929
+ end
930
+ end
931
+ project('foo').test
932
+ end
933
+ end
934
+
935
+ it 'should run the tests that failed the last time' do
936
+ define 'foo' do
937
+ test.using(:junit)
938
+ test.instance_eval do
939
+ @framework.stub!(:tests).and_return(['FailingTest', 'PassingTest'])
940
+ @framework.stub!(:run).and_return(['PassingTest'])
941
+ end
942
+ end
943
+ write project('foo').path_to(:target, "junit-failed"), "FailingTest"
944
+ task('test:failed').invoke rescue nil
945
+ project('foo').test.tests.should include('FailingTest')
946
+ project('foo').test.tests.should_not include('PassingTest')
947
+ end
948
+
949
+ end
950
+
842
951
 
843
952
  describe Buildr::Options, 'test' do
844
953
  it 'should be true by default' do
@@ -972,7 +1081,7 @@ describe Rake::Task, 'integration' do
972
1081
  end
973
1082
 
974
1083
  it 'should run test cases marked for integration' do
975
- write 'src/test/java/FailingTest.java',
1084
+ write 'src/test/java/FailingTest.java',
976
1085
  'public class FailingTest extends junit.framework.TestCase { public void testNothing() { assertTrue(false); } }'
977
1086
  define('foo') { test.using :integration }
978
1087
  lambda { task('test').invoke }.should_not raise_error
@@ -996,7 +1105,7 @@ describe Rake::Task, 'integration' do
996
1105
  end
997
1106
 
998
1107
  it 'should not fail if test=all' do
999
- write 'src/test/java/FailingTest.java',
1108
+ write 'src/test/java/FailingTest.java',
1000
1109
  'public class FailingTest extends junit.framework.TestCase { public void testNothing() { assertTrue(false); } }'
1001
1110
  define('foo') { test.using :integration }
1002
1111
  options.test = :all
@@ -20,7 +20,7 @@ require File.join(File.dirname(__FILE__), '../spec_helpers')
20
20
  describe URI, '#download' do
21
21
  before do
22
22
  write @source = 'source', @content = 'Just a file'
23
- @uri = URI("file://#{File.expand_path(@source)}")
23
+ @uri = URI(URI.escape("file://#{File.expand_path(@source)}"))
24
24
  @target = 'target'
25
25
  end
26
26
 
@@ -60,7 +60,7 @@ describe URI, '#upload' do
60
60
  before do
61
61
  write @source = 'source', @content = 'Just a file'
62
62
  @target = 'target'
63
- @uri = URI("file://#{File.expand_path(@target)}")
63
+ @uri = URI(URI.escape("file://#{File.expand_path(@target)}"))
64
64
  end
65
65
 
66
66
  it 'should upload file if found' do
@@ -149,7 +149,7 @@ end
149
149
  describe URI::FILE, '#read' do
150
150
  before do
151
151
  @filename = 'readme'
152
- @uri = URI("file:///#{File.expand_path(@filename)}")
152
+ @uri = URI(URI.escape("file:///#{File.expand_path(@filename)}"))
153
153
  @content = 'Readme. Please!'
154
154
  write 'readme', @content
155
155
  end
@@ -180,7 +180,7 @@ end
180
180
  describe URI::FILE, '#write' do
181
181
  before do
182
182
  @filename = 'readme'
183
- @uri = URI("file:///#{File.expand_path(@filename)}")
183
+ @uri = URI(URI.escape("file:///#{File.expand_path(@filename)}"))
184
184
  @content = 'Readme. Please!'
185
185
  end
186
186
 
@@ -240,7 +240,7 @@ describe URI::HTTP, '#read' do
240
240
  @http.should_receive(:use_ssl=).with(true)
241
241
  URI(@uri.to_s.sub(/http/, 'https')).read
242
242
  end
243
-
243
+
244
244
  it 'should use proxy from environment variable HTTP_PROXY when using http' do
245
245
  ENV['HTTP_PROXY'] = @proxy
246
246
  Net::HTTP.should_receive(:new).with(*@proxy_args).and_return(@http)
@@ -312,7 +312,7 @@ describe URI::HTTP, '#read' do
312
312
  request.should_receive(:basic_auth).with('john', 'secret')
313
313
  URI("http://john:secret@#{@host_domain}").read
314
314
  end
315
-
315
+
316
316
  it 'should preseve authentication information during a redirect' do
317
317
  Net::HTTP.should_receive(:new).twice.and_return(@http)
318
318
 
@@ -324,7 +324,7 @@ describe URI::HTTP, '#read' do
324
324
  Net::HTTP::Get.should_receive(:new).once.with('/', nil).and_return(request1)
325
325
  request1.should_receive(:basic_auth).with('john', 'secret')
326
326
  @http.should_receive(:request).with(request1).and_yield(redirect)
327
-
327
+
328
328
  # The second request will be ok
329
329
  ok = Net::HTTPOK.new(nil, nil, nil)
330
330
  ok.stub!(:read_body)
@@ -503,7 +503,7 @@ describe URI::SFTP, '#write' do
503
503
  end
504
504
 
505
505
  it 'should close all opened directories' do
506
- @sftp_session.should_receive(:opendir!).with(anything()).twice do |path|
506
+ @sftp_session.should_receive(:opendir!).with(anything()).twice do |path|
507
507
  @sftp_session.should_receive(:close).with(handle = Object.new)
508
508
  handle
509
509
  end
@@ -21,7 +21,7 @@ describe Hash do
21
21
  it "should find value for one key" do
22
22
  {:a => 1, :b => 2, :c => 3}.only(:a).should == {:a => 1}
23
23
  end
24
-
24
+
25
25
  it "should find values for multiple keys" do
26
26
  {:a => 1, :b => 2, :c => 3}.only(:b, :c).should == {:b => 2, :c => 3}
27
27
  end
@@ -36,19 +36,19 @@ describe OpenObject do
36
36
  it "should be kind of Hash" do
37
37
  Hash.should === @obj
38
38
  end
39
-
39
+
40
40
  it "should accept block that supplies default value" do
41
41
  obj = OpenObject.new { |hash, key| hash[key] = "New #{key}" }
42
42
  obj[:foo].should == "New foo"
43
43
  obj.keys.should == [:foo]
44
44
  end
45
-
45
+
46
46
  it "should combine initial values from hash argument and from block" do
47
47
  obj = OpenObject.new(:a => 6, :b => 2) { |h, k| h[k] = k.to_s * 2 }
48
48
  obj[:a].should == 6
49
49
  obj[:c].should == 'cc'
50
50
  end
51
-
51
+
52
52
  it "should allow reading a value by calling its name method" do
53
53
  @obj.b.should == 2
54
54
  end
@@ -60,8 +60,66 @@ describe OpenObject do
60
60
  it "should allow changing a value by calling its name= method" do
61
61
  lambda { @obj.c = 17 }.should change { @obj.c }.to(17)
62
62
  end
63
-
63
+
64
64
  it "should implement only method like a hash" do
65
65
  @obj.only(:a).should == { :a => 1 }
66
66
  end
67
67
  end
68
+
69
+ describe File do
70
+ # Quite a few of the other specs depend on File#utime working correctly.
71
+ # These specs validate that utime is working as expected.
72
+ describe "#utime" do
73
+ it "should update mtime of directories" do
74
+ mkpath 'tmp'
75
+ begin
76
+ creation_time = File.mtime('tmp')
77
+
78
+ sleep 1
79
+ File.utime(nil, nil, 'tmp')
80
+
81
+ File.mtime('tmp').should > creation_time
82
+ ensure
83
+ Dir.rmdir 'tmp'
84
+ end
85
+ end
86
+
87
+ it "should update mtime of files" do
88
+ FileUtils.touch('tmp')
89
+ begin
90
+ creation_time = File.mtime('tmp')
91
+
92
+ sleep 1
93
+ File.utime(nil, nil, 'tmp')
94
+
95
+ File.mtime('tmp').should > creation_time
96
+ ensure
97
+ File.delete 'tmp'
98
+ end
99
+ end
100
+
101
+ it "should be able to set mtime in the past" do
102
+ FileUtils.touch('tmp')
103
+ begin
104
+ time = Time.at((Time.now - 10).to_i)
105
+ File.utime(time, time, 'tmp')
106
+
107
+ File.mtime('tmp').should == time
108
+ ensure
109
+ File.delete 'tmp'
110
+ end
111
+ end
112
+
113
+ it "should be able to set mtime in the future" do
114
+ FileUtils.touch('tmp')
115
+ begin
116
+ time = Time.at((Time.now + 10).to_i)
117
+ File.utime(time, time, 'tmp')
118
+
119
+ File.mtime('tmp').should == time
120
+ ensure
121
+ File.delete 'tmp'
122
+ end
123
+ end
124
+ end
125
+ end
@@ -17,7 +17,7 @@ require File.join(File.dirname(__FILE__), '../spec_helpers')
17
17
 
18
18
 
19
19
  describe Buildr::Groovy::EasyB do
20
-
20
+
21
21
  def foo(*args, &prc)
22
22
  define('foo', *args) do
23
23
  test.using :easyb
@@ -58,9 +58,9 @@ describe Buildr::Groovy::EasyB do
58
58
  test.compile.language.should eql(:java)
59
59
  end
60
60
  end
61
-
61
+
62
62
  it 'should include src/spec/groovy/*Specification.groovy' do
63
- foo do
63
+ foo do
64
64
  spec = _('src/spec/groovy/SomeSpecification.groovy')
65
65
  write spec, 'true'
66
66
  test.invoke
@@ -69,12 +69,12 @@ describe Buildr::Groovy::EasyB do
69
69
  end
70
70
 
71
71
  it 'should include src/spec/groovy/*Story.groovy' do
72
- foo do
72
+ foo do
73
73
  spec = _('src/spec/groovy/SomeStory.groovy')
74
74
  write spec, 'true'
75
75
  test.invoke
76
76
  test.tests.should include(spec)
77
77
  end
78
78
  end
79
-
79
+
80
80
  end # EasyB