buildr 1.3.5 → 1.4.0

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/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
@@ -31,7 +31,7 @@ describe Project, 'check task' do
31
31
  it "should execute all project's expectations" do
32
32
  task 'expectation'
33
33
  define 'foo', :version=>'1.0' do
34
- check { task('expectation').invoke }
34
+ check { task('expectation').invoke }
35
35
  end
36
36
  lambda { project('foo').task('package').invoke }.should run_task('expectation')
37
37
  end
@@ -52,7 +52,7 @@ describe Project, 'check task' do
52
52
  it "should fail if any expectation failed" do
53
53
  define 'foo', :version=>'1.0' do
54
54
  check
55
- check { fail 'sorry' }
55
+ check { fail 'sorry' }
56
56
  check
57
57
  end
58
58
  lambda { project('foo').task('package').invoke }.should raise_error(RuntimeError, /Checks failed/)
@@ -342,132 +342,132 @@ end
342
342
 
343
343
 
344
344
  describe Buildr::Checks::Expectation do
345
-
345
+
346
346
  shared_examples_for 'all archive types' do
347
-
347
+
348
348
  before do
349
349
  archive = @archive
350
350
  define 'foo', :version=>'1.0' do
351
351
  package(archive).include('resources')
352
352
  end
353
353
  end
354
-
354
+
355
355
  def check *args, &block
356
356
  project('foo').check *args, &block
357
357
  end
358
-
358
+
359
359
  def package
360
360
  project('foo').package(@archive)
361
361
  end
362
-
362
+
363
363
  describe '#exist' do
364
-
364
+
365
365
  it "should pass if archive path exists" do
366
366
  write 'resources/test'
367
367
  check(package.path('resources')) { it.should exist }
368
368
  lambda { project('foo').task('package').invoke }.should_not raise_error
369
369
  end
370
-
370
+
371
371
  it "should fail if archive path does not exist" do
372
372
  mkpath 'resources'
373
373
  check(package) { it.path('not-resources').should exist }
374
374
  lambda { project('foo').task('package').invoke }.should raise_error(RuntimeError, /Checks failed/)
375
375
  end
376
-
376
+
377
377
  it "should pass if archive entry exists" do
378
378
  write 'resources/test'
379
379
  check(package.entry('resources/test')) { it.should exist }
380
380
  check(package.path('resources').entry('test')) { it.should exist }
381
381
  lambda { project('foo').task('package').invoke }.should_not raise_error
382
382
  end
383
-
383
+
384
384
  it "should fail if archive path does not exist" do
385
385
  mkpath 'resources'
386
386
  check(package.entry('resources/test')) { it.should exist }
387
387
  lambda { project('foo').task('package').invoke }.should raise_error(RuntimeError, /Checks failed/)
388
- end
388
+ end
389
389
  end
390
-
390
+
391
391
  describe '#be_empty' do
392
392
  it "should pass if archive path is empty" do
393
393
  mkpath 'resources'
394
394
  check(package.path('resources')) { it.should be_empty }
395
395
  lambda { project('foo').task('package').invoke }.should_not raise_error
396
396
  end
397
-
397
+
398
398
  it "should fail if archive path has any entries" do
399
399
  write 'resources/test'
400
400
  check(package.path('resources')) { it.should be_empty }
401
401
  lambda { project('foo').task('package').invoke }.should raise_error(RuntimeError, /Checks failed/)
402
402
  end
403
-
403
+
404
404
  it "should pass if archive entry has no content" do
405
405
  write 'resources/test'
406
406
  check(package.entry('resources/test')) { it.should be_empty }
407
407
  check(package.path('resources').entry('test')) { it.should be_empty }
408
408
  lambda { project('foo').task('package').invoke }.should_not raise_error
409
409
  end
410
-
410
+
411
411
  it "should fail if archive entry has content" do
412
412
  write 'resources/test', 'something'
413
413
  check(package.entry('resources/test')) { it.should be_empty }
414
414
  lambda { project('foo').task('package').invoke }.should raise_error(RuntimeError, /Checks failed/)
415
415
  end
416
-
416
+
417
417
  it "should fail if archive entry does not exist" do
418
418
  mkpath 'resources'
419
419
  check(package.entry('resources/test')) { it.should be_empty }
420
420
  lambda { project('foo').task('package').invoke }.should raise_error(RuntimeError, /Checks failed/)
421
421
  end
422
422
  end
423
-
423
+
424
424
  describe '#contain(entry)' do
425
-
425
+
426
426
  it "should pass if archive entry content matches string" do
427
427
  write 'resources/test', 'something'
428
428
  check(package.entry('resources/test')) { it.should contain('thing') }
429
429
  lambda { project('foo').task('package').invoke }.should_not raise_error
430
430
  end
431
-
431
+
432
432
  it "should pass if archive entry content matches pattern" do
433
433
  write 'resources/test', "something\nor\another"
434
434
  check(package.entry('resources/test')) { it.should contain(/or/) }
435
435
  lambda { project('foo').task('package').invoke }.should_not raise_error
436
436
  end
437
-
437
+
438
438
  it "should pass if archive entry content matches all arguments" do
439
439
  write 'resources/test', "something\nor\nanother"
440
440
  check(package.entry('resources/test')) { it.should contain(/or/, /other/) }
441
441
  lambda { project('foo').task('package').invoke }.should_not raise_error
442
442
  end
443
-
443
+
444
444
  it "should fail unless archive path contains all arguments" do
445
445
  write 'resources/test', 'something'
446
446
  check(package.entry('resources/test')) { it.should contain(/some/, /other/) }
447
447
  lambda { project('foo').task('package').invoke }.should raise_error(RuntimeError, /Checks failed/)
448
448
  end
449
-
449
+
450
450
  it "should fail if archive entry content does not match" do
451
451
  write 'resources/test', 'something'
452
452
  check(package.entry('resources/test')) { it.should contain(/other/) }
453
453
  lambda { project('foo').task('package').invoke }.should raise_error(RuntimeError, /Checks failed/)
454
454
  end
455
-
455
+
456
456
  it "should fail if archive entry does not exist" do
457
457
  mkpath 'resources'
458
458
  check(package.entry('resources/test')) { it.should contain(/anything/) }
459
459
  lambda { project('foo').task('package').invoke }.should raise_error(RuntimeError, /Checks failed/)
460
460
  end
461
461
  end
462
-
462
+
463
463
  describe '#contain(path)' do
464
-
464
+
465
465
  it "should pass if archive path contains file" do
466
466
  write 'resources/test'
467
467
  check(package.path('resources')) { it.should contain('test') }
468
468
  lambda { project('foo').task('package').invoke }.should_not raise_error
469
469
  end
470
-
470
+
471
471
  it "should handle deep nesting" do
472
472
  write 'resources/test/test2.efx'
473
473
  check(package) { it.should contain('resources/test/test2.efx') }
@@ -475,25 +475,25 @@ describe Buildr::Checks::Expectation do
475
475
  check(package.path('resources/test')) { it.should contain('test2.efx') }
476
476
  lambda { project('foo').task('package').invoke }.should_not raise_error
477
477
  end
478
-
478
+
479
479
  it "should pass if archive path contains pattern" do
480
480
  write 'resources/with/test'
481
481
  check(package.path('resources')) { it.should contain('**/t*st') }
482
482
  lambda { project('foo').task('package').invoke }.should_not raise_error
483
483
  end
484
-
484
+
485
485
  it "should pass if archive path contains all arguments" do
486
486
  write 'resources/with/test'
487
487
  check(package.path('resources')) { it.should contain('**/test', '**/*') }
488
488
  lambda { project('foo').task('package').invoke }.should_not raise_error
489
489
  end
490
-
490
+
491
491
  it "should fail unless archive path contains all arguments" do
492
492
  write 'resources/test'
493
493
  check(package.path('resources')) { it.should contain('test', 'or-not') }
494
494
  lambda { project('foo').task('package').invoke }.should raise_error(RuntimeError, /Checks failed/)
495
495
  end
496
-
496
+
497
497
  it "should fail if archive path is empty" do
498
498
  mkpath 'resources'
499
499
  check(package.path('resources')) { it.should contain('test') }
@@ -501,17 +501,17 @@ describe Buildr::Checks::Expectation do
501
501
  end
502
502
  end
503
503
  end
504
-
504
+
505
505
  describe 'ZIP' do
506
506
  before { @archive = :jar }
507
507
  it_should_behave_like 'all archive types'
508
508
  end
509
-
509
+
510
510
  describe 'tar' do
511
511
  before { @archive = :tar }
512
512
  it_should_behave_like 'all archive types'
513
513
  end
514
-
514
+
515
515
  describe 'tgz' do
516
516
  before { @archive = :tgz }
517
517
  it_should_behave_like 'all archive types'
@@ -218,7 +218,7 @@ describe Buildr.method(:filter) do
218
218
  def source
219
219
  File.expand_path('src')
220
220
  end
221
-
221
+
222
222
  it 'should return a Filter for the source' do
223
223
  filter(source).should be_kind_of(Filter)
224
224
  end
@@ -309,6 +309,21 @@ describe Buildr::Filter do
309
309
  Dir['target/*'].sort.should eql(['target/file2', 'target/file3'])
310
310
  end
311
311
 
312
+ it 'should respond to :include with regular expressions and use these inclusion patterns' do
313
+ @filter.from('src').into('target').include(/file[2|3]/).run
314
+ Dir['target/*'].sort.should eql(['target/file2', 'target/file3'])
315
+ end
316
+
317
+ it 'should respond to :include with a Proc and use these inclusion patterns' do
318
+ @filter.from('src').into('target').include(lambda {|file| file[-1, 1].to_i%2 == 0}).run
319
+ Dir['target/*'].sort.should eql(['target/file2', 'target/file4'])
320
+ end
321
+
322
+ it 'should respond to :include with a FileTask and use these inclusion patterns' do
323
+ @filter.from('src').into('target').include(file('target/file2'), file('target/file4')).run
324
+ Dir['target/*'].sort.should eql(['target/file2', 'target/file4'])
325
+ end
326
+
312
327
  it 'should respond to :exclude and return self' do
313
328
  @filter.exclude('file').should be(@filter)
314
329
  end
@@ -318,6 +333,31 @@ describe Buildr::Filter do
318
333
  Dir['target/*'].sort.should eql(['target/file1', 'target/file4'])
319
334
  end
320
335
 
336
+ it 'should respond to :exclude with regular expressions and use these exclusion patterns' do
337
+ @filter.from('src').into('target').exclude(/file[2|3]/).run
338
+ Dir['target/*'].sort.should eql(['target/file1', 'target/file4'])
339
+ end
340
+
341
+ it 'should respond to :exclude with a Proc and use these exclusion patterns' do
342
+ @filter.from('src').into('target').exclude(lambda {|file| file[-1, 1].to_i%2 == 0}).run
343
+ Dir['target/*'].sort.should eql(['target/file1', 'target/file3'])
344
+ end
345
+
346
+ it 'should respond to :exclude with a FileTask and use these exclusion patterns' do
347
+ @filter.from('src').into('target').exclude(file('target/file1'), file('target/file3')).run
348
+ Dir['target/*'].sort.should eql(['target/file2', 'target/file4'])
349
+ end
350
+
351
+ it 'should respond to :exclude with a FileTask, use these exclusion patterns and depend on those tasks' do
352
+ file1 = false
353
+ file2 = false
354
+ @filter.from('src').into('target').exclude(file('target/file1').enhance { file1 = true }, file('target/file3').enhance {file2 = true }).run
355
+ Dir['target/*'].sort.should eql(['target/file2', 'target/file4'])
356
+ @filter.target.invoke
357
+ file1.should be_true
358
+ file2.should be_true
359
+ end
360
+
321
361
  it 'should copy files over' do
322
362
  @filter.from('src').into('target').run
323
363
  Dir['target/*'].sort.each do |file|
@@ -419,6 +459,12 @@ describe Buildr::Filter do
419
459
  @filter.using('key1'=>'value1', 'key2'=>'value2').mapper.should eql(:maven)
420
460
  end
421
461
 
462
+ it 'should apply hash mapping with boolean values' do
463
+ write "src/file", "${key1} and ${key2}"
464
+ @filter.from('src').into('target').using(:key1=>true, :key2=>false).run
465
+ read("target/file").should eql("true and false")
466
+ end
467
+
422
468
  it 'should apply hash mapping using regular expression' do
423
469
  1.upto(4) { |i| write "src/file#{i}", "file#{i} with #key1# and #key2#" }
424
470
  @filter.from('src').into('target').using(/#(.*?)#/, 'key1'=>'value1', 'key2'=>'value2').run
@@ -495,14 +541,14 @@ describe Buildr::Filter do
495
541
  end
496
542
  end
497
543
 
498
- describe Filter::Mapper do
499
-
544
+ describe Filter::Mapper do
545
+
500
546
  module MooMapper
501
547
  def moo_config(*args, &block)
502
548
  raise ArgumentError, "Expected moo block" unless block_given?
503
549
  { :moos => args, :callback => block }
504
550
  end
505
-
551
+
506
552
  def moo_transform(content, path = nil)
507
553
  content.gsub(/moo+/i) do |str|
508
554
  moos = yield :moos # same than config[:moos]
@@ -645,7 +691,7 @@ name3=double\\\\hash
645
691
  PROPS
646
692
  hash.should == {'name1'=>"with\tand", 'name2'=>"with\nand\f", 'name3'=>'double\hash'}
647
693
  end
648
-
694
+
649
695
  it 'should ignore whitespace' do
650
696
  hash = Hash.from_java_properties('name1 = value1')
651
697
  hash.should == {'name1'=>'value1'}
@@ -22,6 +22,14 @@ module CompilerHelper
22
22
  @compile_task ||= define('foo').compile.using(:javac)
23
23
  end
24
24
 
25
+ def compile_task_without_compiler
26
+ @compile_task ||= define('foo').compile
27
+ end
28
+
29
+ def file_task
30
+ @file_taks ||= define('bar').file('src')
31
+ end
32
+
25
33
  def sources
26
34
  @sources ||= ['Test1.java', 'Test2.java'].map { |f| File.join('src/main/java/thepackage', f) }.
27
35
  each { |src| write src, "package thepackage; class #{src.pathmap('%n')} {}" }
@@ -47,6 +55,10 @@ describe Buildr::CompileTask do
47
55
  compile_task.from(sources).should be(compile_task)
48
56
  end
49
57
 
58
+ it 'should respond to from() with FileTask having no compiler set and return self' do
59
+ compile_task_without_compiler.from(file_task).should be(compile_task)
60
+ end
61
+
50
62
  it 'should respond to from() and add sources' do
51
63
  compile_task.from sources, File.dirname(sources.first)
52
64
  compile_task.sources.should == sources + [File.dirname(sources.first)]
@@ -90,8 +102,17 @@ describe Buildr::CompileTask do
90
102
  lambda { define('foo') { compile.using(:unknown) } }.should raise_error(ArgumentError, /unknown compiler/i)
91
103
  end
92
104
 
93
- it 'should only allow setting the compiler once' do
94
- lambda { define('foo') { compile.using(:javac).using(:scalac) } }.should raise_error(RuntimeError, /already selected/i)
105
+ it 'should allow overriding the guessed compiler' do
106
+ write "src/main/java/com/example/Hello.java", ""
107
+ old_compiler = nil
108
+ new_compiler = nil
109
+ define('foo') {
110
+ old_compiler = compile.compiler
111
+ compile.using(:scalac)
112
+ new_compiler = compile.compiler
113
+ }
114
+ old_compiler.should == :javac
115
+ new_compiler.should == :scalac
95
116
  end
96
117
  end
97
118
 
@@ -100,7 +121,7 @@ describe Buildr::CompileTask, '#compiler' do
100
121
  it 'should be nil if no compiler identifier' do
101
122
  define('foo').compile.compiler.should be_nil
102
123
  end
103
-
124
+
104
125
  it 'should return the selected compiler' do
105
126
  define('foo') { compile.using(:javac) }
106
127
  project('foo').compile.compiler.should eql(:javac)
@@ -128,7 +149,7 @@ describe Buildr::CompileTask, '#language' do
128
149
  it 'should be nil if no compiler identifier' do
129
150
  define('foo').compile.language.should be_nil
130
151
  end
131
-
152
+
132
153
  it 'should return the appropriate language' do
133
154
  define('foo') { compile.using(:javac) }
134
155
  project('foo').compile.language.should eql(:java)
@@ -242,7 +263,7 @@ describe Buildr::CompileTask, '#options' do
242
263
  compile_task.options.foo = 'bar'
243
264
  compile_task.options.foo.should eql('bar')
244
265
  end
245
-
266
+
246
267
  it 'should have bracket accessors' do
247
268
  compile_task.options[:foo] = 'bar'
248
269
  compile_task.options[:foo].should eql('bar')
@@ -337,6 +358,15 @@ describe Buildr::CompileTask, '#invoke' do
337
358
  lambda { compile_task.from(sources).invoke }.should_not run_task('foo:compile')
338
359
  end
339
360
 
361
+ it 'should not force compilation if dependencies older than compiled' do
362
+ jars; project('jars').task("package").invoke
363
+ time = Time.now
364
+ jars.each { |jar| File.utime(time - 1 , time - 1, jar) }
365
+ sources.map { |src| File.utime(time, time, src); src.pathmap("#{compile_task.target}/thepackage/%n.class") }.
366
+ each { |kls| write kls ; File.utime(time, time, kls) }
367
+ lambda { compile_task.from(sources).with(jars).invoke }.should_not run_task('foo:compile')
368
+ end
369
+
340
370
  it 'should force compilation if dependencies newer than compiled' do
341
371
  jars; project('jars').task("package").invoke
342
372
  # On my machine the times end up the same, so need to push dependencies in the past.
@@ -348,15 +378,6 @@ describe Buildr::CompileTask, '#invoke' do
348
378
  lambda { compile_task.from(sources).with(jars).invoke }.should run_task('foo:compile')
349
379
  end
350
380
 
351
- it 'should not force compilation if dependencies older than compiled' do
352
- jars; project('jars').task("package").invoke
353
- time = Time.now
354
- jars.each { |jar| File.utime(time - 1 , time - 1, jar) }
355
- sources.map { |src| File.utime(time, time, src); src.pathmap("#{compile_task.target}/thepackage/%n.class") }.
356
- each { |kls| write kls ; File.utime(time, time, kls) }
357
- lambda { compile_task.from(sources).with(jars).invoke }.should_not run_task('foo:compile')
358
- end
359
-
360
381
  it 'should timestamp target directory if specified' do
361
382
  time = Time.now - 10
362
383
  mkpath compile_task.target.to_s
@@ -551,6 +572,31 @@ describe Project, '#resources' do
551
572
  file('target/resources/foo').should contain('Foo')
552
573
  end
553
574
 
575
+ it 'should copy new resources to target directory' do
576
+ time = Time.now
577
+ mkdir_p 'target/resources'
578
+ File.utime(time-1, time-1, 'target/resources')
579
+
580
+ write 'src/main/resources/foo', 'Foo'
581
+
582
+ define('foo')
583
+ project('foo').file('target/resources').invoke
584
+ file('target/resources/foo').should exist
585
+ end
586
+
587
+ it 'should copy updated resources to target directory' do
588
+ time = Time.now
589
+ mkdir_p 'target/resources'
590
+ write 'target/resources/foo', 'Foo'
591
+ File.utime(time-1, time-1, 'target/resources')
592
+ File.utime(time-1, time-1, 'target/resources/foo')
593
+
594
+ write 'src/main/resources/foo', 'Foo2'
595
+ define('foo')
596
+ project('foo').file('target/resources').invoke
597
+ file('target/resources/foo').should contain('Foo2')
598
+ end
599
+
554
600
  it 'should not create target directory unless there are resources' do
555
601
  define('foo').compile.invoke
556
602
  file('target/resources').should_not exist
@@ -580,4 +626,33 @@ describe Project, '#resources' do
580
626
  define('foo').compile.invoke
581
627
  file('target/resources/foo').should contain('bar')
582
628
  end
629
+
630
+ it 'should use current profile as default for filtering' do
631
+ write 'profiles.yaml', <<-YAML
632
+ development:
633
+ filter:
634
+ foo: bar
635
+ YAML
636
+ write 'src/main/resources/foo', '${foo} ${baz}'
637
+ define('foo') do
638
+ resources.filter.using 'baz' => 'qux'
639
+ end
640
+ project('foo').compile.invoke
641
+ file('target/resources/foo').should contain('bar qux')
642
+ end
643
+
644
+ it 'should allow clearing default filter mapping' do
645
+ write 'profiles.yaml', <<-YAML
646
+ development:
647
+ filter:
648
+ foo: bar
649
+ YAML
650
+ write 'src/main/resources/foo', '${foo} ${baz}'
651
+ define('foo') do
652
+ resources.filter.mapping.clear
653
+ resources.filter.using 'baz' => 'qux'
654
+ end
655
+ project('foo').compile.invoke
656
+ file('target/resources/foo').should contain('${foo} qux')
657
+ end
583
658
  end