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
@@ -72,7 +72,7 @@ describe Buildr::Application do
72
72
  Buildr.application.environment.should eql('test')
73
73
  ENV['BUILDR_ENV'].should eql('test')
74
74
  end
75
-
75
+
76
76
  it 'should be echoed to user' do
77
77
  write 'buildfile'
78
78
  ENV['BUILDR_ENV'] = 'spec'
@@ -80,12 +80,22 @@ describe Buildr::Application do
80
80
  lambda { Buildr.application.send :load_buildfile }.should show(%r{(in .*, spec)})
81
81
  end
82
82
  end
83
-
83
+
84
84
  describe 'options' do
85
85
  it "should have 'tasks' as the sole default rakelib" do
86
86
  Buildr.application.send(:handle_options)
87
87
  Buildr.application.options.rakelib.should == ['tasks']
88
88
  end
89
+
90
+ it 'should show the version when prompted with -V' do
91
+ ARGV.push('-V')
92
+ test_exit(0) { Buildr.application.send(:handle_options) }.should show(/Buildr #{Buildr::VERSION}.*/)
93
+ end
94
+
95
+ it 'should show the version when prompted with --version' do
96
+ ARGV.push('--version')
97
+ test_exit(0) { Buildr.application.send(:handle_options) }.should show(/Buildr #{Buildr::VERSION}.*/)
98
+ end
89
99
  end
90
100
 
91
101
  describe 'gems' do
@@ -248,45 +258,45 @@ describe Buildr::Application do
248
258
  @original_loaded_features = $LOADED_FEATURES.dup
249
259
  Buildr.application.options.rakelib = ["tasks"]
250
260
  end
251
-
261
+
252
262
  after do
253
263
  $taskfiles = nil
254
264
  ($LOADED_FEATURES - @original_loaded_features).each do |new_load|
255
265
  $LOADED_FEATURES.delete(new_load)
256
266
  end
257
267
  end
258
-
268
+
259
269
  def write_task(filename)
260
270
  write filename, <<-RUBY
261
271
  $taskfiles ||= []
262
272
  $taskfiles << __FILE__
263
273
  RUBY
264
274
  end
265
-
275
+
266
276
  def loaded_tasks
267
277
  @loaded ||= Buildr.application.load_tasks
268
278
  $taskfiles
269
279
  end
270
-
280
+
271
281
  it "should load {options.rakelib}/foo.rake" do
272
282
  write_task 'tasks/foo.rake'
273
283
  loaded_tasks.should have(1).task
274
284
  loaded_tasks.first.should =~ %r{tasks/foo\.rake$}
275
285
  end
276
-
286
+
277
287
  it 'should load all *.rake files from the rakelib' do
278
288
  write_task 'tasks/bar.rake'
279
289
  write_task 'tasks/quux.rake'
280
290
  loaded_tasks.should have(2).tasks
281
291
  end
282
-
292
+
283
293
  it 'should not load files which do not have the .rake extension' do
284
294
  write_task 'tasks/foo.rb'
285
295
  write_task 'tasks/bar.rake'
286
296
  loaded_tasks.should have(1).task
287
297
  loaded_tasks.first.should =~ %r{tasks/bar\.rake$}
288
298
  end
289
-
299
+
290
300
  it 'should load files only from the directory specified in the rakelib option' do
291
301
  Buildr.application.options.rakelib = ['extensions']
292
302
  write_task 'extensions/amp.rake'
@@ -297,7 +307,7 @@ describe Buildr::Application do
297
307
  loaded_tasks.select{|x| x =~ %r{extensions/#{filename}\.rake}}.should have(1).entry
298
308
  end
299
309
  end
300
-
310
+
301
311
  it 'should load files from all the directories specified in the rakelib option' do
302
312
  Buildr.application.options.rakelib = ['ext', 'more', 'tasks']
303
313
  write_task 'ext/foo.rake'
@@ -306,17 +316,71 @@ describe Buildr::Application do
306
316
  write_task 'more/baz.rake'
307
317
  loaded_tasks.should have(4).tasks
308
318
  end
309
-
319
+
310
320
  it 'should not load files from the rakelib more than once' do
311
321
  write_task 'tasks/new_one.rake'
312
322
  write_task 'tasks/already.rake'
313
323
  $LOADED_FEATURES << 'tasks/already.rake'
314
-
324
+
315
325
  loaded_tasks.should have(1).task
316
326
  loaded_tasks.first.should =~ %r{tasks/new_one\.rake$}
317
327
  end
318
328
  end
319
329
 
330
+ describe 'exception handling' do
331
+
332
+ it 'should exit when given a SystemExit exception' do
333
+ test_exit(3) { Buildr.application.standard_exception_handling { raise SystemExit.new(3) } }
334
+ end
335
+
336
+ it 'should exit with status 1 when given an OptionParser::ParseError exception' do
337
+ test_exit(1) { Buildr.application.standard_exception_handling { raise OptionParser::ParseError.new() } }
338
+ end
339
+
340
+ it 'should exit with status 1 when given any other type of exception exception' do
341
+ test_exit(1) { Buildr.application.standard_exception_handling { raise Exception.new() } }
342
+ end
343
+
344
+ it 'should print the class name and the message when receiving an exception (except when the exception is named Exception)' do
345
+
346
+ # Our fake $stderr for the exercise. We could start it with a matcher instead
347
+ class FakeStdErr
348
+
349
+ attr_accessor :messages
350
+
351
+ def puts(*args)
352
+ @messages ||= []
353
+ @messages += args
354
+ end
355
+
356
+ alias :write :puts
357
+ end
358
+
359
+ # Save the old $stderr and make sure to restore it in the end.
360
+ old_stderr = $stderr
361
+ begin
362
+
363
+ $stderr = FakeStdErr.new
364
+ test_exit(1) {
365
+ Buildr.application.send :standard_exception_handling do
366
+ class MyOwnNicelyNamedException < Exception
367
+ end
368
+ raise MyOwnNicelyNamedException.new('My message')
369
+ end
370
+ }.call
371
+ $stderr.messages.select {|msg| msg =~ /.*MyOwnNicelyNamedException : My message.*/}.size.should == 1
372
+ $stderr.messages.clear
373
+ test_exit(1) {
374
+ Buildr.application.send :standard_exception_handling do
375
+ raise Exception.new('My message')
376
+ end
377
+ }.call
378
+ $stderr.messages.select {|msg| msg =~ /.*My message.*/ && !(msg =~ /Exception/)}.size.should == 1
379
+ end
380
+ $stderr = old_stderr
381
+ end
382
+ end
383
+
320
384
  end
321
385
 
322
386
 
@@ -439,48 +503,55 @@ describe Buildr, 'settings' do
439
503
  @buildfile_time = Time.now - 10
440
504
  write 'buildfile'; File.utime(@buildfile_time, @buildfile_time, 'buildfile')
441
505
  end
442
-
506
+
443
507
  it 'should point to the buildfile' do
444
508
  Buildr.application.buildfile.should point_to_path('buildfile')
445
509
  end
446
-
510
+
447
511
  it 'should be a defined task' do
448
512
  Buildr.application.buildfile.should == file(File.expand_path('buildfile'))
449
513
  end
450
-
514
+
451
515
  it 'should ignore any rake namespace' do
452
516
  namespace 'dummy_ns' do
453
517
  Buildr.application.buildfile.should point_to_path('buildfile')
454
518
  end
455
519
  end
456
-
520
+
457
521
  it 'should have the same timestamp as the buildfile' do
458
522
  Buildr.application.buildfile.timestamp.should be_close(@buildfile_time, 1)
459
523
  end
460
-
524
+
461
525
  it 'should have the same timestamp as build.yaml if the latter is newer' do
462
526
  write 'build.yaml'; File.utime(@buildfile_time + 5, @buildfile_time + 5, 'build.yaml')
463
527
  Buildr.application.run
464
528
  Buildr.application.buildfile.timestamp.should be_close(@buildfile_time + 5, 1)
465
529
  end
466
-
530
+
467
531
  it 'should have the same timestamp as the buildfile if build.yaml is older' do
468
532
  write 'build.yaml'; File.utime(@buildfile_time - 5, @buildfile_time - 5, 'build.yaml')
469
533
  Buildr.application.run
470
534
  Buildr.application.buildfile.timestamp.should be_close(@buildfile_time, 1)
471
535
  end
472
-
473
- it 'should have the same timestamp as build.rb in home dir if the latter is newer' do
536
+
537
+ it 'should have the same timestamp as build.rb in home dir if the latter is newer (until version 1.6)' do
538
+ Buildr::VERSION.should < '1.6'
474
539
  write 'home/buildr.rb'; File.utime(@buildfile_time + 5, @buildfile_time + 5, 'home/buildr.rb')
475
540
  Buildr.application.send :load_tasks
476
541
  Buildr.application.buildfile.timestamp.should be_close(@buildfile_time + 5, 1)
477
542
  end
543
+
544
+ it 'should have the same timestamp as build.rb in home dir if the latter is newer' do
545
+ write 'home/.buildr/buildr.rb'; File.utime(@buildfile_time + 5, @buildfile_time + 5, 'home/.buildr/buildr.rb')
546
+ Buildr.application.send :load_tasks
547
+ Buildr.application.buildfile.timestamp.should be_close(@buildfile_time + 5, 1)
548
+ end
478
549
  end
479
550
  end
480
551
 
481
552
 
482
553
  describe Buildr do
483
-
554
+
484
555
  describe 'environment' do
485
556
  it 'should be same as Buildr.application.environment' do
486
557
  Buildr.environment.should eql(Buildr.application.environment)
@@ -498,5 +569,24 @@ describe Buildr do
498
569
  Buildr.settings.should == Buildr.application.settings
499
570
  end
500
571
  end
572
+
573
+ end
574
+
575
+ describe Rake do
576
+ describe 'define_task' do
577
+ it 'should restore call chain when invoke is called' do
578
+ task1 = Rake::Task.define_task('task1') do
579
+ end
580
+
581
+ task2 = Rake::Task.define_task('task2') do
582
+ chain1 = Thread.current[:rake_chain]
583
+ task1.invoke
584
+ chain2 = Thread.current[:rake_chain]
585
+ chain2.should == chain1
586
+ end
587
+
588
+ task2.invoke
589
+ end
590
+ end
501
591
  end
502
592
 
@@ -169,7 +169,7 @@ describe Project, '#target' do
169
169
  @project.layout[:target] = 'baz'
170
170
  @project.target.should eql('baz')
171
171
  end
172
-
172
+
173
173
  it 'should be removed in version 1.5 since it was deprecated in version 1.3' do
174
174
  Buildr::VERSION.should < '1.5'
175
175
  end
@@ -194,7 +194,7 @@ describe Project, '#reports' do
194
194
  @project.layout[:reports] = 'baz'
195
195
  @project.reports.should eql('baz')
196
196
  end
197
-
197
+
198
198
  it 'should be removed in version 1.5 since it was deprecated in version 1.3' do
199
199
  Buildr::VERSION.should < '1.5'
200
200
  end
@@ -221,7 +221,7 @@ nothing to commit (working directory clean)
221
221
  #
222
222
  # modified: lib/buildr.rb
223
223
  # modified: spec/buildr_spec.rb
224
- #
224
+ #
225
225
  # Untracked files:
226
226
  # (use "git add <file>..." to include in what will be committed)
227
227
  #
@@ -232,7 +232,7 @@ nothing to commit (working directory clean)
232
232
 
233
233
  it 'should reject a dirty repository, Git 1.4.3 or higher' do
234
234
  Git.should_receive(:`).with('git status').and_return <<-EOF
235
- # On branch master
235
+ # On branch master
236
236
  # Changed but not updated:
237
237
  # (use "git add <file>..." to update what will be committed)
238
238
  #
@@ -381,7 +381,7 @@ describe 'a release process', :shared=>true do
381
381
  @release.should_receive(:ruby).with('-S', 'buildr', "_#{Buildr::VERSION}_", '--buildfile', File.expand_path('buildfile.next'),
382
382
  '--environment', 'development', 'clean', 'upload', 'DEBUG=no')
383
383
  end
384
-
384
+
385
385
  it 'should tag a release with the release version' do
386
386
  @release.stub!(:update_version_to_next)
387
387
  @release.should_receive(:tag_release).with('1.0.0')
@@ -412,7 +412,7 @@ describe 'a release process', :shared=>true do
412
412
  @release.stub!(:tag_release)
413
413
  @release.make
414
414
  file('buildfile').should contain('VERSION_NUMBER = "1.0.1-SNAPSHOT"')
415
- end
415
+ end
416
416
  end
417
417
 
418
418
  describe '#resolve_tag' do
@@ -421,15 +421,15 @@ describe 'a release process', :shared=>true do
421
421
  end
422
422
 
423
423
  it 'should return tag specified by tag_name' do
424
- @release.tag_name = 'first'
424
+ Release.tag_name = 'first'
425
425
  @release.send(:resolve_tag).should == 'first'
426
426
  end
427
-
427
+
428
428
  it 'should use tag returned by tag_name if tag_name is a proc' do
429
- @release.tag_name = lambda { |version| "buildr-#{version}" }
429
+ Release.tag_name = lambda { |version| "buildr-#{version}" }
430
430
  @release.send(:resolve_tag).should == 'buildr-1.0.0'
431
431
  end
432
- after { @release.tag_name = nil }
432
+ after { Release.tag_name = nil }
433
433
  end
434
434
 
435
435
  describe '#tag_release' do
@@ -501,13 +501,13 @@ describe 'a release process', :shared=>true do
501
501
  end
502
502
 
503
503
  it 'should use the commit message specified by commit_message' do
504
- @release.commit_message = 'Here is my custom message'
504
+ Release.commit_message = 'Here is my custom message'
505
505
  @release.should_receive(:message).and_return('Here is my custom message')
506
506
  @release.update_version_to_next
507
507
  end
508
-
508
+
509
509
  it 'should use the commit message returned by commit_message if commit_message is a proc' do
510
- @release.commit_message = lambda { |new_version|
510
+ Release.commit_message = lambda { |new_version|
511
511
  new_version.should == '1.0.1-SNAPSHOT'
512
512
  "increment version number to #{new_version}"
513
513
  }
@@ -518,6 +518,7 @@ describe 'a release process', :shared=>true do
518
518
  it 'should inform the user of the new version' do
519
519
  lambda { @release.update_version_to_next }.should show_info('Current version is now 1.0.1-SNAPSHOT')
520
520
  end
521
+ after { Release.commit_message = nil }
521
522
  end
522
523
 
523
524
  end
@@ -542,7 +543,7 @@ describe GitRelease do
542
543
  it 'should accept a git repo' do
543
544
  FileUtils.mkdir '.git'
544
545
  FileUtils.touch File.join('.git', 'config')
545
- GitRelease.applies_to?.should be_true
546
+ GitRelease.applies_to?.should be_true
546
547
  end
547
548
  end
548
549
 
@@ -636,7 +637,7 @@ describe SvnRelease do
636
637
 
637
638
  it 'should accept a git repo' do
638
639
  FileUtils.touch '.svn'
639
- SvnRelease.applies_to?.should be_true
640
+ SvnRelease.applies_to?.should be_true
640
641
  end
641
642
  end
642
643
 
@@ -0,0 +1,174 @@
1
+ # Licensed to the Apache Software Foundation (ASF) under one or more
2
+ # contributor license agreements. See the NOTICE file distributed with this
3
+ # work for additional information regarding copyright ownership. The ASF
4
+ # licenses this file to you under the Apache License, Version 2.0 (the
5
+ # "License"); you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12
+ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13
+ # License for the specific language governing permissions and limitations under
14
+ # the License.
15
+
16
+
17
+ require File.join(File.dirname(__FILE__), '../spec_helpers')
18
+
19
+ module CCHelper
20
+ def setup_cc
21
+ project = define('foo')
22
+
23
+ cc = project.cc
24
+ project.stub!(:task).with(:cc).and_return(cc)
25
+
26
+ compile = mock 'compile'
27
+ project.stub!(:task).with(:compile).and_return(compile)
28
+
29
+ test_compile = mock 'test:compile'
30
+ project.stub!(:task).with('test:compile').and_return(test_compile)
31
+
32
+ filter = mock('resources').tap do |resources|
33
+ project.stub!(:task).with(:resources).and_return(resources)
34
+
35
+ back = mock 'filter'
36
+ resources.stub!(:filter).and_return(back)
37
+
38
+ back
39
+ end
40
+
41
+ sources
42
+ tests
43
+ resources
44
+
45
+ [ project, compile, test_compile, filter ]
46
+ end
47
+
48
+ def sources
49
+ @sources ||= ['Test1.java', 'Test2.java'].map { |f| File.join('src/main/java/thepackage', f) }.
50
+ each { |src| write src, "package thepackage; class #{src.pathmap('%n')} {}" }
51
+ end
52
+
53
+ def tests
54
+ @tests ||= ['Test1.java', 'Test2.java'].map { |f| File.join('src/test/java/thepackage', f) }.
55
+ each { |src| write src, "package thepackage; class #{src.pathmap('%n')} {}" }
56
+ end
57
+
58
+ def resources
59
+ @resources ||= ['Test1.html', 'Test2.html'].map { |f| File.join('src/main/resources', f) }.
60
+ each { |src| write src, '<html></html>' }
61
+ end
62
+ end
63
+
64
+ describe Buildr::CCTask do
65
+ include CCHelper
66
+
67
+ it 'should default to a delay of 0.2' do
68
+ define('foo').cc.delay.should == 0.2
69
+ end
70
+
71
+ it 'should compile and test:compile on initial start' do
72
+ project, compile, test_compile, filter = setup_cc
73
+
74
+ compile.should_receive :invoke
75
+ test_compile.should_receive :invoke
76
+ filter.should_not_receive :run
77
+
78
+ thread = Thread.new do
79
+ project.cc.invoke
80
+ end
81
+
82
+ sleep 0.5
83
+
84
+ thread.exit
85
+ end
86
+
87
+ it 'should detect a file change' do |spec|
88
+
89
+ write 'src/main/java/Example.java', "public class Example {}"
90
+ write 'src/test/java/ExampleTest.java', "public class ExampleTest {}"
91
+
92
+ project = define("foo")
93
+ cc = project.cc
94
+
95
+ compile = project.compile
96
+
97
+
98
+ test_compile = project.test.compile
99
+
100
+ filter = project.resources
101
+
102
+ # After first period:
103
+ compile.should_receive :invoke
104
+ test_compile.should_receive :invoke
105
+ filter.should_not_receive :run
106
+
107
+ thread = Thread.new do
108
+ project.cc.invoke
109
+ end
110
+
111
+ sleep 1
112
+
113
+ compile.should_receive :reenable
114
+ compile.should_receive :invoke
115
+
116
+ test_compile.should_receive :reenable
117
+ test_compile.should_receive :invoke
118
+
119
+ filter.should_not_receive :run
120
+
121
+ sleep 1 # Wait one sec as the timestamp needs to be different.
122
+ touch File.join(Dir.pwd, 'src/main/java/Example.java')
123
+ sleep 0.2# Wait one standard delay
124
+
125
+ thread.exit
126
+ end
127
+
128
+
129
+ it 'should support subprojects' do |spec|
130
+
131
+ write 'foo/src/main/java/Example.java', "public class Example {}"
132
+ write 'foo/src/test/java/ExampleTest.java', "public class ExampleTest {}"
133
+
134
+ define 'container' do
135
+ define('foo')
136
+ end
137
+
138
+ project = project("container:foo")
139
+ cc = project.cc
140
+
141
+ compile = project.compile
142
+
143
+ test_compile = project.test.compile
144
+
145
+ filter = project.resources
146
+
147
+
148
+ # After first period:
149
+ compile.should_receive :invoke
150
+ test_compile.should_receive :invoke
151
+ filter.should_not_receive :run
152
+
153
+ thread = Thread.new do
154
+ project("container").cc.invoke
155
+ end
156
+
157
+ sleep 0.5
158
+
159
+ # After we changed the file:
160
+ compile.should_receive :reenable
161
+ compile.should_receive :invoke
162
+
163
+ test_compile.should_receive :reenable
164
+ test_compile.should_receive :invoke
165
+
166
+ filter.should_not_receive :run
167
+
168
+ sleep 1 # Wait one sec as the timestamp needs to be different.
169
+ touch File.join(Dir.pwd, 'foo/src/main/java/Example.java')
170
+ sleep 0.2 # Wait one standard delay
171
+
172
+ thread.exit
173
+ end
174
+ end