buildr 1.3.4 → 1.3.5

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 (105) hide show
  1. data/CHANGELOG +35 -0
  2. data/README.rdoc +1 -1
  3. data/Rakefile +1 -1
  4. data/buildr.buildfile +6 -1
  5. data/buildr.gemspec +10 -9
  6. data/doc/_config.yml +1 -0
  7. data/doc/_layouts/default.html +25 -19
  8. data/doc/artifacts.textile +0 -36
  9. data/doc/building.textile +0 -38
  10. data/doc/contributing.textile +51 -15
  11. data/doc/css/default.css +11 -4
  12. data/doc/css/print.css +32 -24
  13. data/doc/download.textile +2 -1
  14. data/doc/extending.textile +10 -20
  15. data/doc/images/1442160941-frontcover.jpg +0 -0
  16. data/doc/images/asf-logo.png +0 -0
  17. data/doc/images/note.png +0 -0
  18. data/doc/images/project-structure.png +0 -0
  19. data/doc/images/tip.png +0 -0
  20. data/doc/images/zbuildr.png +0 -0
  21. data/doc/index.textile +39 -17
  22. data/doc/{getting_started.textile → installing.textile} +2 -67
  23. data/doc/languages.textile +50 -52
  24. data/doc/more_stuff.textile +154 -62
  25. data/doc/packaging.textile +0 -82
  26. data/doc/preface.textile +41 -15
  27. data/doc/projects.textile +0 -18
  28. data/doc/quick_start.textile +210 -0
  29. data/doc/scripts/install-linux.sh +10 -2
  30. data/doc/settings_profiles.textile +1 -33
  31. data/doc/testing.textile +6 -32
  32. data/lib/buildr.rb +2 -1
  33. data/lib/buildr/core.rb +6 -0
  34. data/lib/buildr/core/application.rb +2 -5
  35. data/lib/buildr/core/build.rb +29 -19
  36. data/lib/buildr/core/compile.rb +22 -4
  37. data/lib/buildr/core/filter.rb +2 -4
  38. data/lib/buildr/core/project.rb +5 -4
  39. data/lib/buildr/core/shell.rb +198 -0
  40. data/lib/buildr/core/test.rb +2 -0
  41. data/lib/buildr/core/transports.rb +18 -19
  42. data/lib/buildr/core/util.rb +178 -9
  43. data/lib/buildr/groovy.rb +1 -0
  44. data/lib/buildr/groovy/bdd.rb +5 -5
  45. data/lib/buildr/groovy/shell.rb +48 -0
  46. data/lib/buildr/ide/eclipse.rb +148 -36
  47. data/lib/buildr/ide/eclipse/java.rb +53 -0
  48. data/lib/buildr/ide/eclipse/plugin.rb +68 -0
  49. data/lib/buildr/ide/eclipse/scala.rb +66 -0
  50. data/lib/buildr/java/bdd.rb +16 -8
  51. data/lib/buildr/java/cobertura.rb +44 -13
  52. data/lib/buildr/java/commands.rb +5 -3
  53. data/lib/buildr/java/org/apache/buildr/JavaTestFilter.class +0 -0
  54. data/lib/buildr/java/org/apache/buildr/JavaTestFilter.java +18 -0
  55. data/lib/buildr/java/packaging.rb +2 -2
  56. data/lib/buildr/java/rjb.rb +1 -1
  57. data/lib/buildr/java/test_result.rb +48 -1
  58. data/lib/buildr/java/tests.rb +8 -5
  59. data/lib/buildr/packaging/artifact_namespace.rb +1 -1
  60. data/lib/buildr/packaging/package.rb +6 -2
  61. data/lib/buildr/packaging/zip.rb +10 -1
  62. data/lib/buildr/packaging/ziptask.rb +5 -2
  63. data/lib/buildr/scala.rb +1 -0
  64. data/lib/buildr/scala/bdd.rb +17 -8
  65. data/lib/buildr/scala/compiler.rb +66 -21
  66. data/lib/buildr/scala/org/apache/buildr/SpecsSingletonRunner$.class +0 -0
  67. data/lib/buildr/scala/org/apache/buildr/SpecsSingletonRunner.class +0 -0
  68. data/lib/buildr/scala/org/apache/buildr/SpecsSingletonRunner.scala +35 -0
  69. data/lib/buildr/scala/shell.rb +55 -0
  70. data/lib/buildr/scala/tests.rb +6 -5
  71. data/lib/buildr/shell.rb +180 -0
  72. data/rakelib/doc.rake +2 -3
  73. data/rakelib/jekylltask.rb +42 -32
  74. data/rakelib/package.rake +4 -2
  75. data/rakelib/rspec.rake +3 -3
  76. data/rakelib/setup.rake +7 -1
  77. data/rakelib/stage.rake +9 -2
  78. data/rakelib/stage.rake~ +213 -0
  79. data/spec/core/application_spec.rb +84 -1
  80. data/spec/core/build_spec.rb +54 -2
  81. data/spec/core/common_spec.rb +1 -1
  82. data/spec/core/compile_spec.rb +2 -1
  83. data/spec/core/extension_spec.rb +93 -0
  84. data/spec/core/test_spec.rb +2 -2
  85. data/spec/core/transport_spec.rb +1 -1
  86. data/spec/groovy/bdd_spec.rb +6 -6
  87. data/spec/groovy/compiler_spec.rb +1 -0
  88. data/spec/ide/eclipse_spec.rb +262 -72
  89. data/spec/java/{ant.rb → ant_spec.rb} +0 -0
  90. data/spec/java/bdd_spec.rb +15 -0
  91. data/spec/java/cobertura_spec.rb +9 -1
  92. data/spec/java/emma_spec.rb +1 -1
  93. data/spec/java/java_spec.rb +26 -0
  94. data/spec/java/packaging_spec.rb +9 -7
  95. data/spec/java/{test_coverage_spec.rb → test_coverage_helper.rb} +6 -4
  96. data/spec/java/tests_spec.rb +22 -0
  97. data/spec/packaging/archive_spec.rb +14 -0
  98. data/spec/packaging/artifact_spec.rb +2 -2
  99. data/spec/packaging/packaging_spec.rb +97 -2
  100. data/spec/sandbox.rb +3 -1
  101. data/spec/scala/bdd_spec.rb +17 -48
  102. data/spec/scala/compiler_spec.rb +31 -2
  103. data/spec/scala/tests_spec.rb +1 -0
  104. data/spec/spec_helpers.rb +12 -0
  105. metadata +145 -148
@@ -80,6 +80,13 @@ describe Buildr::Application do
80
80
  lambda { Buildr.application.send :load_buildfile }.should show(%r{(in .*, spec)})
81
81
  end
82
82
  end
83
+
84
+ describe 'options' do
85
+ it "should have 'tasks' as the sole default rakelib" do
86
+ Buildr.application.send(:handle_options)
87
+ Buildr.application.options.rakelib.should == ['tasks']
88
+ end
89
+ end
83
90
 
84
91
  describe 'gems' do
85
92
  before do
@@ -123,7 +130,6 @@ describe Buildr::Application do
123
130
  end
124
131
  end
125
132
 
126
-
127
133
  describe 'load_gems' do
128
134
  before do
129
135
  class << Buildr.application
@@ -234,6 +240,83 @@ describe Buildr::Application do
234
240
  end
235
241
  end
236
242
 
243
+ describe 'load_tasks' do
244
+ before do
245
+ class << Buildr.application
246
+ public :load_tasks
247
+ end
248
+ @original_loaded_features = $LOADED_FEATURES.dup
249
+ Buildr.application.options.rakelib = ["tasks"]
250
+ end
251
+
252
+ after do
253
+ $taskfiles = nil
254
+ ($LOADED_FEATURES - @original_loaded_features).each do |new_load|
255
+ $LOADED_FEATURES.delete(new_load)
256
+ end
257
+ end
258
+
259
+ def write_task(filename)
260
+ write filename, <<-RUBY
261
+ $taskfiles ||= []
262
+ $taskfiles << __FILE__
263
+ RUBY
264
+ end
265
+
266
+ def loaded_tasks
267
+ @loaded ||= Buildr.application.load_tasks
268
+ $taskfiles
269
+ end
270
+
271
+ it "should load {options.rakelib}/foo.rake" do
272
+ write_task 'tasks/foo.rake'
273
+ loaded_tasks.should have(1).task
274
+ loaded_tasks.first.should =~ %r{tasks/foo\.rake$}
275
+ end
276
+
277
+ it 'should load all *.rake files from the rakelib' do
278
+ write_task 'tasks/bar.rake'
279
+ write_task 'tasks/quux.rake'
280
+ loaded_tasks.should have(2).tasks
281
+ end
282
+
283
+ it 'should not load files which do not have the .rake extension' do
284
+ write_task 'tasks/foo.rb'
285
+ write_task 'tasks/bar.rake'
286
+ loaded_tasks.should have(1).task
287
+ loaded_tasks.first.should =~ %r{tasks/bar\.rake$}
288
+ end
289
+
290
+ it 'should load files only from the directory specified in the rakelib option' do
291
+ Buildr.application.options.rakelib = ['extensions']
292
+ write_task 'extensions/amp.rake'
293
+ write_task 'tasks/bar.rake'
294
+ write_task 'extensions/foo.rake'
295
+ loaded_tasks.should have(2).tasks
296
+ %w[amp foo].each do |filename|
297
+ loaded_tasks.select{|x| x =~ %r{extensions/#{filename}\.rake}}.should have(1).entry
298
+ end
299
+ end
300
+
301
+ it 'should load files from all the directories specified in the rakelib option' do
302
+ Buildr.application.options.rakelib = ['ext', 'more', 'tasks']
303
+ write_task 'ext/foo.rake'
304
+ write_task 'tasks/bar.rake'
305
+ write_task 'tasks/zeb.rake'
306
+ write_task 'more/baz.rake'
307
+ loaded_tasks.should have(4).tasks
308
+ end
309
+
310
+ it 'should not load files from the rakelib more than once' do
311
+ write_task 'tasks/new_one.rake'
312
+ write_task 'tasks/already.rake'
313
+ $LOADED_FEATURES << 'tasks/already.rake'
314
+
315
+ loaded_tasks.should have(1).task
316
+ loaded_tasks.first.should =~ %r{tasks/new_one\.rake$}
317
+ end
318
+ end
319
+
237
320
  end
238
321
 
239
322
 
@@ -211,7 +211,7 @@ nothing to commit (working directory clean)
211
211
  Git.uncommitted_files.should be_empty
212
212
  end
213
213
 
214
- it 'should reject a dirty repository' do
214
+ it 'should reject a dirty repository, Git 1.4.2 or former' do
215
215
  Git.should_receive(:`).with('git status').and_return <<-EOF
216
216
  # On branch master
217
217
  #
@@ -229,6 +229,24 @@ nothing to commit (working directory clean)
229
229
  EOF
230
230
  Git.uncommitted_files.should include('lib/buildr.rb', 'error.log')
231
231
  end
232
+
233
+ it 'should reject a dirty repository, Git 1.4.3 or higher' do
234
+ Git.should_receive(:`).with('git status').and_return <<-EOF
235
+ # On branch master
236
+ # Changed but not updated:
237
+ # (use "git add <file>..." to update what will be committed)
238
+ #
239
+ #\tmodified: lib/buildr.rb
240
+ #\tmodified: spec/buildr_spec.rb
241
+ #
242
+ # Untracked files:
243
+ # (use "git add <file>..." to include in what will be committed)
244
+ #
245
+ #\terror.log
246
+ no changes added to commit (use "git add" and/or "git commit -a")
247
+ EOF
248
+ Git.uncommitted_files.should include('lib/buildr.rb', 'error.log')
249
+ end
232
250
  end
233
251
 
234
252
  describe '#remote' do
@@ -327,6 +345,31 @@ describe Svn do
327
345
  end # of Buildr::Svn
328
346
 
329
347
 
348
+ describe Release do
349
+ describe 'find' do
350
+ it 'should return GitRelease if project uses Git' do
351
+ write '.git/config'
352
+ Release.find.should be_instance_of(GitRelease)
353
+ end
354
+
355
+ it 'should return SvnRelease if project uses SVN' do
356
+ write '.svn/xml'
357
+ Release.find.should be_instance_of(SvnRelease)
358
+ end
359
+
360
+ it 'should return nil if no known release process' do
361
+ Dir.chdir(Dir.tmpdir) do
362
+ Release.find.should be_nil
363
+ end
364
+ end
365
+
366
+ after :each do
367
+ Release.instance_exec { @release = nil }
368
+ end
369
+ end
370
+ end
371
+
372
+
330
373
  describe 'a release process', :shared=>true do
331
374
 
332
375
  describe '#make' do
@@ -358,6 +401,13 @@ describe 'a release process', :shared=>true do
358
401
  file('buildfile').should contain('VERSION_NUMBER = "1.0.1-SNAPSHOT"')
359
402
  end
360
403
 
404
+ it 'should keep leading zeros in the next version number' do
405
+ write 'buildfile', "VERSION_NUMBER = '1.0.001-SNAPSHOT'"
406
+ @release.stub!(:tag_release)
407
+ @release.make
408
+ file('buildfile').should contain('VERSION_NUMBER = "1.0.002-SNAPSHOT"')
409
+ end
410
+
361
411
  it 'should commit the updated buildfile' do
362
412
  @release.stub!(:tag_release)
363
413
  @release.make
@@ -484,7 +534,9 @@ describe GitRelease do
484
534
 
485
535
  describe '#applies_to?' do
486
536
  it 'should reject a non-git repo' do
487
- GitRelease.applies_to?.should be_false
537
+ Dir.chdir(Dir.tmpdir) do
538
+ GitRelease.applies_to?.should be_false
539
+ end
488
540
  end
489
541
 
490
542
  it 'should accept a git repo' do
@@ -32,7 +32,7 @@ describe Buildr.method(:struct) do
32
32
  end
33
33
 
34
34
  it 'should return members when requested' do
35
- @struct.members.sort.should eql(@hash.keys.map(&:to_s).sort)
35
+ @struct.members.map(&:to_s).sort.should eql(@hash.keys.map(&:to_s).sort)
36
36
  end
37
37
 
38
38
  it 'should return valued when requested' do
@@ -293,7 +293,8 @@ describe Buildr::CompileTask, '#invoke' do
293
293
  end
294
294
 
295
295
  it 'should run all source files as prerequisites' do
296
- file(mkpath('src')).should_receive :invoke_prerequisites
296
+ mkpath 'src'
297
+ file('src').should_receive :invoke_prerequisites
297
298
  compile_task.from('src').invoke
298
299
  end
299
300
 
@@ -0,0 +1,93 @@
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
+
20
+ describe Extension do
21
+
22
+ it 'should call Extension.first_time during include' do
23
+ TestExtension.should_receive(:first_time_called).once
24
+ class Buildr::Project
25
+ include TestExtension
26
+ end
27
+ end
28
+
29
+ it 'should call before_define and after_define in order when project is defined' do
30
+ begin
31
+ TestExtension.initialized do |extension|
32
+ extension.should_receive(:before_define_called).once.ordered
33
+ extension.should_receive(:after_define_called).once.ordered
34
+ end
35
+ class Buildr::Project
36
+ include TestExtension
37
+ end
38
+ define('foo')
39
+ ensure
40
+ TestExtension.initialized { |ignore| }
41
+ end
42
+ end
43
+
44
+ it 'should call before_define and after_define for each project defined' do
45
+ begin
46
+ extensions = 0
47
+ TestExtension.initialized do |extension|
48
+ extensions += 1
49
+ extension.should_receive(:before_define_called).once.ordered
50
+ extension.should_receive(:after_define_called).once.ordered
51
+ end
52
+ class Buildr::Project
53
+ include TestExtension
54
+ end
55
+ define('foo')
56
+ define('bar')
57
+ extensions.should equal(2)
58
+ ensure
59
+ TestExtension.initialized { |ignore| }
60
+ end
61
+ end
62
+ end
63
+
64
+ module TestExtension
65
+ include Extension
66
+
67
+ def initialize(*args)
68
+ # callback is used to obtain extension instance created by buildr
69
+ @@initialized.call(self) if @@initialized
70
+ super
71
+ end
72
+
73
+ def TestExtension.initialized(&block)
74
+ @@initialized = block
75
+ end
76
+
77
+ first_time do
78
+ TestExtension.first_time_called()
79
+ end
80
+
81
+ before_define do |project|
82
+ project.before_define_called()
83
+ end
84
+
85
+ after_define do |project|
86
+ project.after_define_called()
87
+ end
88
+
89
+ def TestExtension.first_time_called()
90
+ end
91
+
92
+ end
93
+
@@ -333,10 +333,10 @@ describe Buildr::TestTask, 'with passing tests' do
333
333
  it 'should execute teardown task' do
334
334
  lambda { test_task.invoke }.should run_task('foo:test:teardown')
335
335
  end
336
-
336
+
337
337
  it 'should update the last successful run timestamp' do
338
338
  before = Time.now ; test_task.invoke ; after = Time.now
339
- (before-1..after+1).should include(test_task.timestamp)
339
+ (before-1..after+1).should cover(test_task.timestamp)
340
340
  end
341
341
  end
342
342
 
@@ -511,7 +511,7 @@ describe URI::SFTP, '#write' do
511
511
  end
512
512
 
513
513
  it 'should create missing paths on server' do
514
- @sftp_session.should_receive(:opendir!).twice { |path| fail unless path == '/root' }
514
+ @sftp_session.should_receive(:opendir!) { |path| fail unless path == '/root' }
515
515
  @sftp_session.should_receive(:mkdir!).once.with('/root/path', {})
516
516
  @uri.write @content
517
517
  end
@@ -31,11 +31,11 @@ describe Buildr::Groovy::EasyB do
31
31
 
32
32
  it 'should apply to a project having EasyB sources' do
33
33
  define('one', :base_dir => 'one') do
34
- write _('src/spec/groovy/SomeBehaviour.groovy'), 'true;'
34
+ write _('src/spec/groovy/SomeSpecification.groovy'), 'true;'
35
35
  Buildr::Groovy::EasyB.applies_to?(self).should be_true
36
36
  end
37
37
  define('two', :base_dir => 'two') do
38
- write _('src/test/groovy/SomeBehaviour.groovy'), 'true;'
38
+ write _('src/test/groovy/SomeSpecification.groovy'), 'true;'
39
39
  Buildr::Groovy::EasyB.applies_to?(self).should be_false
40
40
  end
41
41
  define('three', :base_dir => 'three') do
@@ -54,14 +54,14 @@ describe Buildr::Groovy::EasyB do
54
54
 
55
55
  it 'should select a java compiler if java sources are found' do
56
56
  foo do
57
- write _('src/spec/java/SomeBehavior.java'), 'public class SomeBehavior {}'
57
+ write _('src/spec/java/SomeSpecification.java'), 'public class SomeSpecification {}'
58
58
  test.compile.language.should eql(:java)
59
59
  end
60
60
  end
61
61
 
62
- it 'should include src/spec/groovy/*Behavior.groovy' do
62
+ it 'should include src/spec/groovy/*Specification.groovy' do
63
63
  foo do
64
- spec = _('src/spec/groovy/SomeBehavior.groovy')
64
+ spec = _('src/spec/groovy/SomeSpecification.groovy')
65
65
  write spec, 'true'
66
66
  test.invoke
67
67
  test.tests.should include(spec)
@@ -77,4 +77,4 @@ describe Buildr::Groovy::EasyB do
77
77
  end
78
78
  end
79
79
 
80
- end # EasyB
80
+ end # EasyB
@@ -151,6 +151,7 @@ describe 'groovyc compiler options' do
151
151
  return compile
152
152
  end
153
153
  end
154
+ project('foo').compile
154
155
  end
155
156
 
156
157
  it 'should set warning option to false by default' do
@@ -17,85 +17,93 @@
17
17
  require File.join(File.dirname(__FILE__), '../spec_helpers')
18
18
 
19
19
 
20
+ JAVA_CONTAINER = Buildr::Eclipse::Java::CONTAINER
21
+ SCALA_CONTAINER = Buildr::Eclipse::Scala::CONTAINER
22
+ PLUGIN_CONTAINER = Buildr::Eclipse::Plugin::CONTAINER
23
+
24
+ JAVA_NATURE = Buildr::Eclipse::Java::NATURE
25
+ SCALA_NATURE = Buildr::Eclipse::Scala::NATURE
26
+ PLUGIN_NATURE = Buildr::Eclipse::Plugin::NATURE
27
+
28
+ JAVA_BUILDER = Buildr::Eclipse::Java::BUILDER
29
+ SCALA_BUILDER = Buildr::Eclipse::Scala::BUILDER
30
+ PLUGIN_BUILDERS = Buildr::Eclipse::Plugin::BUILDERS
31
+
32
+
20
33
  module EclipseHelper
21
34
  def classpath_xml_elements
22
35
  task('eclipse').invoke
23
36
  REXML::Document.new(File.open('.classpath')).root.elements
24
37
  end
25
-
26
- def classpath_sources attribute='path'
38
+
39
+ def classpath_sources(attribute='path')
27
40
  classpath_xml_elements.collect("classpathentry[@kind='src']") { |n| n.attributes[attribute] }
28
41
  end
29
-
42
+
30
43
  # <classpathentry path="PATH" output="RETURNED_VALUE"/>
31
- def classpath_specific_output path
44
+ def classpath_specific_output(path)
32
45
  specific_output = classpath_xml_elements.collect("classpathentry[@path='#{path}']") { |n| n.attributes['output'] }
33
46
  raise "expected: one output attribute for path '#{path}, got: #{specific_output.inspect}" if specific_output.length > 1
34
47
  specific_output[0]
35
48
  end
36
-
49
+
37
50
  # <classpathentry path="RETURNED_VALUE" kind="output"/>
38
51
  def classpath_default_output
39
52
  default_output = classpath_xml_elements.collect("classpathentry[@kind='output']") { |n| n.attributes['path'] }
40
53
  raise "expected: one path attribute for kind='output', got: #{default_output.inspect}" if default_output.length > 1
41
54
  default_output[0]
42
55
  end
43
-
56
+
44
57
  # <classpathentry path="PATH" sourcepath="RETURNED_VALUE" kind="var"/>
45
- def sourcepath_for_path path
58
+ def sourcepath_for_path(path)
46
59
  classpath_xml_elements.collect("classpathentry[@kind='var',@path='#{path}']") do |n|
47
60
  n.attributes['sourcepath'] || 'no source artifact'
48
61
  end
49
62
  end
50
-
63
+
51
64
  def project_xml_elements
52
65
  task('eclipse').invoke
53
66
  REXML::Document.new(File.open('.project')).root.elements
54
67
  end
68
+
69
+ def project_natures
70
+ project_xml_elements.collect("natures/nature") { |n| n.text }
71
+ end
72
+
73
+ def build_commands
74
+ project_xml_elements.collect("buildSpec/buildCommand/name") { |n| n.text }
75
+ end
76
+
77
+ def classpath_containers(attribute='path')
78
+ classpath_xml_elements.collect("classpathentry[@kind='con']") { |n| n.attributes[attribute] }
79
+ end
55
80
  end
56
81
 
57
82
 
58
83
  describe Buildr::Eclipse do
59
84
  include EclipseHelper
60
-
61
- describe "eclipse's .project file" do
62
-
63
- JAVA_CONTAINER = 'org.eclipse.jdt.launching.JRE_CONTAINER'
64
- SCALA_CONTAINER = 'ch.epfl.lamp.sdt.launching.SCALA_CONTAINER'
65
85
 
66
- SCALA_NATURE = 'ch.epfl.lamp.sdt.core.scalanature'
67
- JAVA_NATURE = 'org.eclipse.jdt.core.javanature'
68
-
69
- SCALA_BUILDER = 'ch.epfl.lamp.sdt.core.scalabuilder'
70
- JAVA_BUILDER = 'org.eclipse.jdt.core.javabuilder'
86
+ describe "eclipse's .project file" do
71
87
 
72
- def project_natures
73
- project_xml_elements.collect("natures/nature") { |n| n.text }
74
- end
75
-
76
- def build_commands
77
- project_xml_elements.collect("buildSpec/buildCommand/name") { |n| n.text }
78
- end
79
-
80
88
  describe 'java project' do
81
89
  before do
82
90
  write 'buildfile'
83
91
  write 'src/main/java/Main.java'
84
92
  end
85
-
93
+
86
94
  it 'should have Java nature' do
87
95
  define('foo')
88
96
  project_natures.should include(JAVA_NATURE)
89
97
  end
90
-
98
+
91
99
  it 'should have Java build command' do
92
100
  define('foo')
93
101
  build_commands.should include(JAVA_BUILDER)
94
102
  end
95
103
  end
96
-
104
+
97
105
  describe 'nested java project' do
98
-
106
+
99
107
  it 'should have name corresponding to its project definition' do
100
108
  mkdir 'foo'
101
109
  define('myproject') {
@@ -108,42 +116,102 @@ describe Buildr::Eclipse do
108
116
  end
109
117
 
110
118
  end
111
-
119
+
112
120
  describe 'scala project' do
113
-
121
+
122
+ before do
123
+ define 'foo' do
124
+ eclipse.natures :scala
125
+ end
126
+ end
127
+
128
+ it 'should have Scala nature before Java nature' do
129
+ project_natures.should include(SCALA_NATURE)
130
+ project_natures.should include(JAVA_NATURE)
131
+ project_natures.index(SCALA_NATURE).should < project_natures.index(JAVA_NATURE)
132
+ end
133
+
134
+ it 'should have Scala build command and no Java build command' do
135
+ build_commands.should include(SCALA_BUILDER)
136
+ build_commands.should_not include(JAVA_BUILDER)
137
+ end
138
+ end
139
+
140
+ describe 'standard scala project' do
141
+
114
142
  before do
115
143
  write 'buildfile'
116
144
  write 'src/main/scala/Main.scala'
145
+ define 'foo'
117
146
  end
118
-
147
+
119
148
  it 'should have Scala nature before Java nature' do
120
- define('foo')
121
149
  project_natures.should include(SCALA_NATURE)
122
150
  project_natures.should include(JAVA_NATURE)
123
151
  project_natures.index(SCALA_NATURE).should < project_natures.index(JAVA_NATURE)
124
152
  end
125
-
153
+
154
+ it 'should have Scala build command and no Java build command' do
155
+ build_commands.should include(SCALA_BUILDER)
156
+ build_commands.should_not include(JAVA_BUILDER)
157
+ end
158
+ end
159
+
160
+ describe 'non-standard scala project' do
161
+
162
+ before do
163
+ write 'buildfile'
164
+ write 'src/main/foo/Main.scala'
165
+ define 'foo' do
166
+ eclipse.natures = :scala
167
+ end
168
+ end
169
+
170
+ it 'should have Scala nature before Java nature' do
171
+ project_natures.should include(SCALA_NATURE)
172
+ project_natures.should include(JAVA_NATURE)
173
+ project_natures.index(SCALA_NATURE).should < project_natures.index(JAVA_NATURE)
174
+ end
175
+
126
176
  it 'should have Scala build command and no Java build command' do
127
- define('foo')
128
177
  build_commands.should include(SCALA_BUILDER)
129
178
  build_commands.should_not include(JAVA_BUILDER)
130
179
  end
131
180
  end
181
+
182
+ describe 'Plugin project' do
183
+
184
+ before do
185
+ write 'buildfile'
186
+ write 'src/main/java/Activator.java'
187
+ write 'plugin.xml'
188
+ end
189
+
190
+ it 'should have plugin nature before Java nature' do
191
+ define('foo')
192
+ project_natures.should include(PLUGIN_NATURE)
193
+ project_natures.should include(JAVA_NATURE)
194
+ project_natures.index(PLUGIN_NATURE).should < project_natures.index(JAVA_NATURE)
195
+ end
196
+
197
+ it 'should have plugin build commands and the Java build command' do
198
+ define('foo')
199
+ build_commands.should include(PLUGIN_BUILDERS[0])
200
+ build_commands.should include(PLUGIN_BUILDERS[1])
201
+ build_commands.should include(JAVA_BUILDER)
202
+ end
203
+ end
132
204
  end
133
-
205
+
134
206
  describe "eclipse's .classpath file" do
135
-
207
+
136
208
  describe 'scala project' do
137
209
 
138
- def classpath_containers attribute='path'
139
- classpath_xml_elements.collect("classpathentry[@kind='con']") { |n| n.attributes[attribute] }
140
- end
141
-
142
210
  before do
143
211
  write 'buildfile'
144
212
  write 'src/main/scala/Main.scala'
145
213
  end
146
-
214
+
147
215
  it 'should have SCALA_CONTAINER before JAVA_CONTAINER' do
148
216
  define('foo')
149
217
  classpath_containers.should include(SCALA_CONTAINER)
@@ -151,15 +219,15 @@ describe Buildr::Eclipse do
151
219
  classpath_containers.index(SCALA_CONTAINER).should < classpath_containers.index(JAVA_CONTAINER)
152
220
  end
153
221
  end
154
-
222
+
155
223
  describe 'source folders' do
156
-
224
+
157
225
  before do
158
226
  write 'buildfile'
159
227
  write 'src/main/java/Main.java'
160
228
  write 'src/test/java/Test.java'
161
229
  end
162
-
230
+
163
231
  describe 'source', :shared=>true do
164
232
  it 'should ignore CVS and SVN files' do
165
233
  define('foo')
@@ -170,106 +238,106 @@ describe Buildr::Eclipse do
170
238
  end
171
239
  end
172
240
  end
173
-
241
+
174
242
  describe 'main code' do
175
243
  it_should_behave_like 'source'
176
-
244
+
177
245
  it 'should accept to come from the default directory' do
178
246
  define('foo')
179
247
  classpath_sources.should include('src/main/java')
180
248
  end
181
-
249
+
182
250
  it 'should accept to come from a user-defined directory' do
183
251
  define('foo') { compile path_to('src/java') }
184
252
  classpath_sources.should include('src/java')
185
253
  end
186
-
254
+
187
255
  it 'should accept a file task as a main source folder' do
188
256
  define('foo') { compile apt }
189
257
  classpath_sources.should include('target/generated/apt')
190
258
  end
191
-
259
+
192
260
  it 'should go to the default target directory' do
193
261
  define('foo')
194
262
  classpath_specific_output('src/main/java').should be(nil)
195
263
  classpath_default_output.should == 'target/classes'
196
264
  end
197
265
  end
198
-
266
+
199
267
  describe 'test code' do
200
268
  it_should_behave_like 'source'
201
-
269
+
202
270
  it 'should accept to come from the default directory' do
203
271
  define('foo')
204
272
  classpath_sources.should include('src/test/java')
205
273
  end
206
-
274
+
207
275
  it 'should accept to come from a user-defined directory' do
208
276
  define('foo') { test.compile path_to('src/test') }
209
277
  classpath_sources.should include('src/test')
210
278
  end
211
-
279
+
212
280
  it 'should go to the default target directory' do
213
281
  define('foo')
214
282
  classpath_specific_output('src/test/java').should == 'target/test/classes'
215
283
  end
216
-
284
+
217
285
  it 'should accept to be the only code in the project' do
218
286
  rm 'src/main/java/Main.java'
219
287
  define('foo')
220
288
  classpath_sources.should include('src/test/java')
221
289
  end
222
290
  end
223
-
291
+
224
292
  describe 'main resources' do
225
293
  it_should_behave_like 'source'
226
-
294
+
227
295
  before do
228
296
  write 'src/main/resources/config.xml'
229
297
  end
230
-
298
+
231
299
  it 'should accept to come from the default directory' do
232
300
  define('foo')
233
301
  classpath_sources.should include('src/main/resources')
234
302
  end
235
-
303
+
236
304
  it 'should share a classpath entry if it comes from a directory with code' do
237
305
  write 'src/main/java/config.properties'
238
306
  define('foo') { resources.from('src/main/java').exclude('**/*.java') }
239
307
  classpath_sources.select { |path| path == 'src/main/java'}.length.should == 1
240
308
  end
241
-
309
+
242
310
  it 'should go to the default target directory' do
243
311
  define('foo')
244
312
  classpath_specific_output('src/main/resources').should == 'target/resources'
245
313
  end
246
314
  end
247
-
315
+
248
316
  describe 'test resources' do
249
317
  it_should_behave_like 'source'
250
-
318
+
251
319
  before do
252
320
  write 'src/test/resources/config-test.xml'
253
321
  end
254
-
322
+
255
323
  it 'should accept to come from the default directory' do
256
324
  define('foo')
257
325
  classpath_sources.should include('src/test/resources')
258
326
  end
259
-
327
+
260
328
  it 'should share a classpath entry if it comes from a directory with code' do
261
329
  write 'src/test/java/config-test.properties'
262
330
  define('foo') { test.resources.from('src/test/java').exclude('**/*.java') }
263
331
  classpath_sources.select { |path| path == 'src/test/java'}.length.should == 1
264
332
  end
265
-
333
+
266
334
  it 'should go to the default target directory' do
267
335
  define('foo')
268
336
  classpath_specific_output('src/test/resources').should == 'target/test/resources'
269
337
  end
270
338
  end
271
339
  end
272
-
340
+
273
341
  describe 'project depending on another project' do
274
342
  it 'should have the underlying project in its classpath' do
275
343
  mkdir 'foo'
@@ -285,27 +353,149 @@ describe Buildr::Eclipse do
285
353
  end
286
354
  end
287
355
  end
288
-
356
+
357
+ describe 'local dependency' do
358
+ before do
359
+ write 'lib/some-local.jar'
360
+ define('foo') { compile.using(:javac).with(_('lib/some-local.jar')) }
361
+ end
362
+
363
+ it 'should have a lib artifact reference in the .classpath file' do
364
+ classpath_xml_elements.collect("classpathentry[@kind='lib']") { |n| n.attributes['path'] }.
365
+ should include(File.expand_path 'lib/some-local.jar')
366
+ end
367
+ end
368
+
369
+ describe 'generated .classes' do
370
+ before do
371
+ write 'lib/some.class'
372
+ define('foo') { compile.using(:javac).with(_('lib')) }
373
+ end
374
+
375
+ it 'should have src reference in the .classpath file' do
376
+ classpath_xml_elements.collect("classpathentry[@kind='src']") { |n| n.attributes['path'] }.
377
+ should include('lib')
378
+ end
379
+ end
380
+
289
381
  describe 'maven2 artifact dependency' do
290
382
  before do
291
383
  define('foo') { compile.using(:javac).with('com.example:library:jar:2.0') }
292
384
  artifact('com.example:library:jar:2.0') { |task| write task.name }
293
385
  task('eclipse').invoke
294
386
  end
295
-
387
+
296
388
  it 'should have a reference in the .classpath file relative to the local M2 repo' do
297
389
  classpath_xml_elements.collect("classpathentry[@kind='var']") { |n| n.attributes['path'] }.
298
390
  should include('M2_REPO/com/example/library/2.0/library-2.0.jar')
299
391
  end
300
-
392
+
301
393
  it 'should be downloaded' do
302
394
  file(artifact('com.example:library:jar:2.0').name).should exist
303
395
  end
304
-
396
+
305
397
  it 'should have a source artifact reference in the .classpath file' do
306
398
  sourcepath_for_path('M2_REPO/com/example/library/2.0/library-2.0.jar').
307
399
  should == ['M2_REPO/com/example/library/2.0/library-2.0-sources.jar']
308
400
  end
309
401
  end
310
-
402
+
403
+ describe 'maven2 repository variable' do
404
+ it 'should be configurable' do
405
+ define('foo') do
406
+ eclipse.options.m2_repo_var = 'PROJ_REPO'
407
+ compile.using(:javac).with('com.example:library:jar:2.0')
408
+ end
409
+ artifact('com.example:library:jar:2.0') { |task| write task.name }
410
+
411
+ task('eclipse').invoke
412
+ classpath_xml_elements.collect("classpathentry[@kind='var']") { |n| n.attributes['path'] }.
413
+ should include('PROJ_REPO/com/example/library/2.0/library-2.0.jar')
414
+ end
415
+
416
+ it 'should pick the parent value by default' do
417
+ define('foo') do
418
+ eclipse.options.m2_repo_var = 'FOO_REPO'
419
+ define('bar')
420
+
421
+ define('bar2') do
422
+ eclipse.options.m2_repo_var = 'BAR2_REPO'
423
+ end
424
+ end
425
+ project('foo:bar').eclipse.options.m2_repo_var.should eql('FOO_REPO')
426
+ project('foo:bar2').eclipse.options.m2_repo_var.should eql('BAR2_REPO')
427
+ end
428
+ end
429
+
430
+ describe 'natures variable' do
431
+ it 'should be configurable' do
432
+ define('foo') do
433
+ eclipse.natures = 'dummyNature'
434
+ compile.using(:javac).with('com.example:library:jar:2.0')
435
+ end
436
+ artifact('com.example:library:jar:2.0') { |task| write task.name }
437
+ project_natures.should include('dummyNature')
438
+ end
439
+
440
+ it 'should pick the parent value by default' do
441
+ define('foo') do
442
+ eclipse.natures = 'foo_nature'
443
+ define('bar')
444
+
445
+ define('bar2') do
446
+ eclipse.natures = 'bar2_nature'
447
+ end
448
+ end
449
+ project('foo:bar').eclipse.natures.should include('foo_nature')
450
+ project('foo:bar2').eclipse.natures.should include('bar2_nature')
451
+ end
452
+ end
453
+
454
+ describe 'builders variable' do
455
+ it 'should be configurable' do
456
+ define('foo') do
457
+ eclipse.builders 'dummyBuilder'
458
+ compile.using(:javac).with('com.example:library:jar:2.0')
459
+ end
460
+ artifact('com.example:library:jar:2.0') { |task| write task.name }
461
+ build_commands.should include('dummyBuilder')
462
+ end
463
+
464
+ it 'should pick the parent value by default' do
465
+ define('foo') do
466
+ eclipse.builders = 'foo_builder'
467
+ define('bar')
468
+
469
+ define('bar2') do
470
+ eclipse.builders = 'bar2_builder'
471
+ end
472
+ end
473
+ project('foo:bar').eclipse.builders.should include('foo_builder')
474
+ project('foo:bar2').eclipse.builders.should include('bar2_builder')
475
+ end
476
+ end
477
+
478
+ describe 'classpath_containers variable' do
479
+ it 'should be configurable' do
480
+ define('foo') do
481
+ eclipse.classpath_containers = 'myOlGoodContainer'
482
+ compile.using(:javac).with('com.example:library:jar:2.0')
483
+ end
484
+ artifact('com.example:library:jar:2.0') { |task| write task.name }
485
+ classpath_containers.should include('myOlGoodContainer')
486
+ end
487
+
488
+ it 'should pick the parent value by default' do
489
+ define('foo') do
490
+ eclipse.classpath_containers = 'foo_classpath_containers'
491
+ define('bar')
492
+
493
+ define('bar2') do
494
+ eclipse.classpath_containers = 'bar2_classpath_containers'
495
+ end
496
+ end
497
+ project('foo:bar').eclipse.classpath_containers.should include('foo_classpath_containers')
498
+ project('foo:bar2').eclipse.classpath_containers.should include('bar2_classpath_containers')
499
+ end
500
+ end
311
501
  end