buildr 1.3.5-java → 1.4.0-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (151) hide show
  1. data/CHANGELOG +153 -8
  2. data/README.rdoc +1 -1
  3. data/addon/buildr/antlr.rb +5 -5
  4. data/addon/buildr/drb.rb +18 -18
  5. data/addon/buildr/hibernate.rb +18 -14
  6. data/addon/buildr/javacc.rb +4 -4
  7. data/addon/buildr/jetty.rb +5 -5
  8. data/addon/buildr/nailgun.rb +23 -23
  9. data/addon/buildr/openjpa.rb +1 -1
  10. data/addon/buildr/org/apache/buildr/BuildrNail$Main.class +0 -0
  11. data/addon/buildr/org/apache/buildr/BuildrNail.class +0 -0
  12. data/addon/buildr/org/apache/buildr/JettyWrapper$1.class +0 -0
  13. data/addon/buildr/org/apache/buildr/JettyWrapper$BuildrHandler.class +0 -0
  14. data/addon/buildr/org/apache/buildr/JettyWrapper.class +0 -0
  15. data/addon/buildr/protobuf.rb +75 -0
  16. data/addon/buildr/xmlbeans.rb +5 -5
  17. data/buildr.buildfile +2 -2
  18. data/buildr.gemspec +8 -7
  19. data/doc/_layouts/default.html +2 -2
  20. data/doc/artifacts.textile +4 -4
  21. data/doc/building.textile +35 -3
  22. data/doc/contributing.textile +5 -0
  23. data/doc/download.textile +16 -5
  24. data/doc/extending.textile +38 -12
  25. data/doc/installing.textile +6 -5
  26. data/doc/languages.textile +182 -42
  27. data/doc/more_stuff.textile +2 -2
  28. data/doc/packaging.textile +14 -15
  29. data/doc/projects.textile +7 -2
  30. data/doc/quick_start.textile +4 -4
  31. data/doc/scripts/buildr-git.rb +63 -63
  32. data/doc/scripts/gitflow.rb +21 -21
  33. data/doc/settings_profiles.textile +9 -2
  34. data/doc/testing.textile +16 -5
  35. data/etc/KEYS +38 -0
  36. data/lib/buildr.rb +1 -1
  37. data/lib/buildr/core.rb +1 -0
  38. data/lib/buildr/core/application.rb +33 -27
  39. data/lib/buildr/core/build.rb +41 -28
  40. data/lib/buildr/core/cc.rb +172 -0
  41. data/lib/buildr/core/checks.rb +1 -1
  42. data/lib/buildr/core/common.rb +7 -6
  43. data/lib/buildr/core/compile.rb +7 -8
  44. data/lib/buildr/core/doc.rb +263 -0
  45. data/lib/buildr/core/environment.rb +6 -6
  46. data/lib/buildr/core/filter.rb +77 -35
  47. data/lib/buildr/core/generate.rb +7 -7
  48. data/lib/buildr/core/help.rb +1 -1
  49. data/lib/buildr/core/osx.rb +6 -6
  50. data/lib/buildr/core/progressbar.rb +4 -4
  51. data/lib/buildr/core/project.rb +144 -36
  52. data/lib/buildr/core/shell.rb +34 -34
  53. data/lib/buildr/core/test.rb +89 -20
  54. data/lib/buildr/core/transports.rb +8 -7
  55. data/lib/buildr/core/util.rb +77 -23
  56. data/lib/buildr/groovy/bdd.rb +5 -5
  57. data/lib/buildr/groovy/compiler.rb +19 -15
  58. data/lib/buildr/groovy/shell.rb +6 -6
  59. data/lib/buildr/ide/eclipse.rb +148 -75
  60. data/lib/buildr/ide/eclipse/java.rb +3 -3
  61. data/lib/buildr/ide/eclipse/plugin.rb +8 -5
  62. data/lib/buildr/ide/eclipse/scala.rb +4 -2
  63. data/lib/buildr/ide/idea.rb +2 -2
  64. data/lib/buildr/ide/idea7x.rb +23 -4
  65. data/lib/buildr/java.rb +1 -0
  66. data/lib/buildr/java/ant.rb +4 -4
  67. data/lib/buildr/java/bdd.rb +51 -54
  68. data/lib/buildr/java/cobertura.rb +57 -35
  69. data/lib/buildr/java/commands.rb +14 -5
  70. data/lib/buildr/java/compiler.rb +3 -217
  71. data/lib/buildr/java/deprecated.rb +4 -4
  72. data/lib/buildr/java/doc.rb +70 -0
  73. data/lib/buildr/java/emma.rb +22 -22
  74. data/lib/buildr/java/jruby.rb +4 -4
  75. data/lib/buildr/java/jtestr_runner.rb.erb +27 -25
  76. data/lib/buildr/java/org/apache/buildr/JavaTestFilter.class +0 -0
  77. data/lib/buildr/java/org/apache/buildr/JavaTestFilter.java +8 -3
  78. data/lib/buildr/java/packaging.rb +30 -29
  79. data/lib/buildr/java/pom.rb +4 -4
  80. data/lib/buildr/java/rjb.rb +6 -6
  81. data/lib/buildr/java/test_result.rb +61 -85
  82. data/lib/buildr/java/tests.rb +44 -27
  83. data/lib/buildr/java/version_requirement.rb +8 -8
  84. data/lib/buildr/packaging/archive.rb +55 -22
  85. data/lib/buildr/packaging/artifact.rb +75 -36
  86. data/lib/buildr/packaging/artifact_namespace.rb +90 -78
  87. data/lib/buildr/packaging/artifact_search.rb +5 -5
  88. data/lib/buildr/packaging/gems.rb +11 -7
  89. data/lib/buildr/packaging/package.rb +10 -7
  90. data/lib/buildr/packaging/tar.rb +14 -14
  91. data/lib/buildr/packaging/version_requirement.rb +30 -10
  92. data/lib/buildr/packaging/ziptask.rb +51 -13
  93. data/lib/buildr/scala.rb +1 -0
  94. data/lib/buildr/scala/bdd.rb +25 -20
  95. data/lib/buildr/scala/compiler.rb +87 -40
  96. data/lib/buildr/scala/doc.rb +106 -0
  97. data/lib/buildr/scala/org/apache/buildr/SpecsSingletonRunner.class +0 -0
  98. data/lib/buildr/scala/org/apache/buildr/SpecsSingletonRunner.java +57 -0
  99. data/lib/buildr/scala/shell.rb +14 -9
  100. data/lib/buildr/scala/tests.rb +33 -26
  101. data/lib/buildr/shell.rb +33 -33
  102. data/rakelib/all-in-one.rake +113 -0
  103. data/rakelib/checks.rake +1 -1
  104. data/rakelib/doc.rake +7 -0
  105. data/rakelib/package.rake +1 -1
  106. data/rakelib/release.rake +9 -6
  107. data/rakelib/rspec.rake +26 -7
  108. data/rakelib/setup.rake +15 -3
  109. data/rakelib/stage.rake +18 -11
  110. data/spec/addon/drb_spec.rb +25 -25
  111. data/spec/core/application_spec.rb +111 -21
  112. data/spec/core/build_spec.rb +16 -15
  113. data/spec/core/cc_spec.rb +174 -0
  114. data/spec/core/checks_spec.rb +34 -34
  115. data/spec/core/common_spec.rb +51 -5
  116. data/spec/core/compile_spec.rb +89 -14
  117. data/spec/core/extension_spec.rb +127 -19
  118. data/spec/core/generate_spec.rb +2 -2
  119. data/spec/core/project_spec.rb +10 -10
  120. data/spec/core/test_spec.rb +144 -35
  121. data/spec/core/transport_spec.rb +8 -8
  122. data/spec/core/util_spec.rb +63 -5
  123. data/spec/groovy/bdd_spec.rb +5 -5
  124. data/spec/groovy/compiler_spec.rb +29 -18
  125. data/spec/ide/eclipse_spec.rb +185 -9
  126. data/spec/ide/idea7x_spec.rb +22 -10
  127. data/spec/java/ant_spec.rb +9 -5
  128. data/spec/java/bdd_spec.rb +29 -37
  129. data/spec/java/cobertura_spec.rb +12 -12
  130. data/spec/java/commands_spec.rb +34 -0
  131. data/spec/java/compiler_spec.rb +53 -53
  132. data/spec/java/emma_spec.rb +11 -11
  133. data/spec/java/java_spec.rb +10 -10
  134. data/spec/java/packaging_spec.rb +67 -20
  135. data/spec/java/test_coverage_helper.rb +18 -18
  136. data/spec/java/tests_spec.rb +13 -9
  137. data/spec/packaging/archive_spec.rb +187 -20
  138. data/spec/packaging/artifact_namespace_spec.rb +172 -83
  139. data/spec/packaging/artifact_spec.rb +83 -18
  140. data/spec/packaging/packaging_spec.rb +41 -14
  141. data/spec/sandbox.rb +23 -12
  142. data/spec/scala/bdd_spec.rb +13 -8
  143. data/spec/scala/compiler_spec.rb +18 -13
  144. data/spec/scala/scala.rb +3 -3
  145. data/spec/scala/tests_spec.rb +46 -24
  146. data/spec/spec_helpers.rb +28 -10
  147. data/spec/version_requirement_spec.rb +25 -11
  148. metadata +148 -132
  149. data/lib/buildr/scala/org/apache/buildr/SpecsSingletonRunner$.class +0 -0
  150. data/lib/buildr/scala/org/apache/buildr/SpecsSingletonRunner.scala +0 -35
  151. data/rakelib/stage.rake~ +0 -213
@@ -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
@@ -16,12 +16,12 @@
16
16
 
17
17
  require File.join(File.dirname(__FILE__), '../spec_helpers')
18
18
 
19
- describe 'groovyc compiler' do
20
-
19
+ describe 'groovyc compiler' do
20
+
21
21
  it 'should identify itself from groovy source directories' do
22
22
  write 'src/main/groovy/some/Hello.groovy', 'println "Hello Groovy"'
23
23
  write 'src/test/groovy/some/Hello.groovy', 'println "Hello Groovy"'
24
- define('foo') do
24
+ define('foo') do
25
25
  compile.compiler.should eql(:groovyc)
26
26
  test.compile.compiler.should eql(:groovyc)
27
27
  end
@@ -30,7 +30,7 @@ describe 'groovyc compiler' do
30
30
  it 'should identify if groovy sources are found on java directories' do
31
31
  write 'src/main/java/some/Hello.groovy', 'println "Hello Groovy"'
32
32
  write 'src/test/java/some/Hello.groovy', 'println "Hello Groovy"'
33
- define('foo') do
33
+ define('foo') do
34
34
  compile.compiler.should eql(:groovyc)
35
35
  test.compile.compiler.should eql(:groovyc)
36
36
  end
@@ -41,13 +41,13 @@ describe 'groovyc compiler' do
41
41
  write 'src/main/groovy/some/Hello.groovy', 'println "Hello Groovy"'
42
42
  write 'src/test/java/some/Empty.java', 'package some; public interface Empty {}'
43
43
  write 'src/test/groovy/some/Hello.groovy', 'println "Hello Groovy"'
44
- define('foo') do
44
+ define('foo') do
45
45
  compile.compiler.should eql(:groovyc)
46
46
  test.compile.compiler.should eql(:groovyc)
47
47
  end
48
48
  end
49
49
 
50
- it 'should identify from custom layout' do
50
+ it 'should identify from custom layout' do
51
51
  write 'groovy/Hello.groovy', 'println "Hello world"'
52
52
  write 'testing/Hello.groovy', 'println "Hello world"'
53
53
  custom = Layout.new
@@ -58,10 +58,10 @@ describe 'groovyc compiler' do
58
58
  test.compile.compiler.should eql(:groovyc)
59
59
  end
60
60
  end
61
-
61
+
62
62
  it 'should identify from compile source directories' do
63
- write 'src/com/example/Code.groovy', 'println "monkey code"'
64
- write 'testing/com/example/Test.groovy', 'println "some test"'
63
+ write 'src/com/example/Code.groovy', 'println "monkey code"'
64
+ write 'testing/com/example/Test.groovy', 'println "some test"'
65
65
  define 'foo' do
66
66
  lambda { compile.from 'src' }.should change { compile.compiler }.to(:groovyc)
67
67
  lambda { test.compile.from 'testing' }.should change { test.compile.compiler }.to(:groovyc)
@@ -91,25 +91,36 @@ describe 'groovyc compiler' do
91
91
  lambda { compile.using(:groovyc) }.should_not change { compile.sources }
92
92
  end
93
93
  end
94
-
94
+
95
95
  it 'should compile groovy sources' do
96
96
  write 'src/main/groovy/some/Example.groovy', 'package some; class Example { static main(args) { println "Hello" } }'
97
97
  define('foo').compile.invoke
98
98
  file('target/classes/some/Example.class').should exist
99
99
  end
100
100
 
101
+ it 'should compile test groovy sources that rely on junit' do
102
+ write 'src/main/groovy/some/Example.groovy', 'package some; class Example { static main(args) { println "Hello" } }'
103
+ write 'src/test/groovy/some/ExampleTest.groovy', "package some\n import junit.framework.TestCase\n class ExampleTest extends TestCase { public testHello() { println \"Hello\" } }"
104
+ foo = define('foo') do
105
+ test.using :junit
106
+ end
107
+ foo.test.compile.invoke
108
+ file('target/classes/some/Example.class').should exist
109
+ file('target/test/classes/some/ExampleTest.class').should exist
110
+ end
111
+
101
112
  it 'should include as classpath dependency' do
102
113
  write 'src/bar/groovy/some/Foo.groovy', 'package some; interface Foo {}'
103
114
  write 'src/main/groovy/some/Example.groovy', 'package some; class Example implements Foo { }'
104
- define('bar', :version => '1.0') do
115
+ define('bar', :version => '1.0') do
105
116
  compile.from('src/bar/groovy').into('target/bar')
106
117
  package(:jar)
107
118
  end
108
119
  lambda { define('foo').compile.with(project('bar').package(:jar)).invoke }.should run_task('foo:compile')
109
120
  file('target/classes/some/Example.class').should exist
110
121
  end
111
-
112
- it 'should cross compile java sources' do
122
+
123
+ it 'should cross compile java sources' do
113
124
  write 'src/main/java/some/Foo.java', 'package some; public interface Foo { public void hello(); }'
114
125
  write 'src/main/java/some/Baz.java', 'package some; public class Baz extends Bar { }'
115
126
  write 'src/main/groovy/some/Bar.groovy', 'package some; class Bar implements Foo { def void hello() { } }'
@@ -117,7 +128,7 @@ describe 'groovyc compiler' do
117
128
  %w{Foo Bar Baz}.each { |f| file("target/classes/some/#{f}.class").should exist }
118
129
  end
119
130
 
120
- it 'should cross compile test java sources' do
131
+ it 'should cross compile test java sources' do
121
132
  write 'src/test/java/some/Foo.java', 'package some; public interface Foo { public void hello(); }'
122
133
  write 'src/test/java/some/Baz.java', 'package some; public class Baz extends Bar { }'
123
134
  write 'src/test/groovy/some/Bar.groovy', 'package some; class Bar implements Foo { def void hello() { } }'
@@ -137,7 +148,7 @@ describe 'groovyc compiler' do
137
148
  end
138
149
 
139
150
  describe 'groovyc compiler options' do
140
-
151
+
141
152
  def groovyc(&prc)
142
153
  define('foo') do
143
154
  compile.using(:groovyc)
@@ -153,8 +164,8 @@ describe 'groovyc compiler options' do
153
164
  end
154
165
  project('foo').compile
155
166
  end
156
-
157
- it 'should set warning option to false by default' do
167
+
168
+ it 'should set warning option to false by default' do
158
169
  groovyc do
159
170
  compile.options.warnings.should be_false
160
171
  @compiler.javac_options[:nowarn].should be_true
@@ -177,7 +188,7 @@ describe 'groovyc compiler options' do
177
188
  trace true
178
189
  groovyc.options.verbose.should be_true
179
190
  end
180
-
191
+
181
192
  it 'should set debug option to false based on Buildr.options' do
182
193
  Buildr.options.debug = false
183
194
  groovyc.options.debug.should be_false
@@ -33,7 +33,7 @@ PLUGIN_BUILDERS = Buildr::Eclipse::Plugin::BUILDERS
33
33
  module EclipseHelper
34
34
  def classpath_xml_elements
35
35
  task('eclipse').invoke
36
- REXML::Document.new(File.open('.classpath')).root.elements
36
+ File.open('.classpath') { |f| REXML::Document.new(f).root.elements }
37
37
  end
38
38
 
39
39
  def classpath_sources(attribute='path')
@@ -63,7 +63,7 @@ module EclipseHelper
63
63
 
64
64
  def project_xml_elements
65
65
  task('eclipse').invoke
66
- REXML::Document.new(File.open('.project')).root.elements
66
+ File.open('.project') { |f| REXML::Document.new(f).root.elements }
67
67
  end
68
68
 
69
69
  def project_natures
@@ -85,6 +85,54 @@ describe Buildr::Eclipse do
85
85
 
86
86
  describe "eclipse's .project file" do
87
87
 
88
+ describe 'default project' do
89
+ before do
90
+ write 'buildfile'
91
+ write 'src/main/nono/Main.nono'
92
+ end
93
+
94
+ it 'should not have natures' do
95
+ define('foo')
96
+ project_natures.should be_empty
97
+ end
98
+
99
+ it 'should not have build commands' do
100
+ define('foo')
101
+ build_commands.should be_empty
102
+ end
103
+
104
+ it 'should generate a .project file' do
105
+ define('foo')
106
+ task('eclipse').invoke
107
+ File.open('.project') do |f|
108
+ REXML::Document.new(f).root.
109
+ elements.collect("name") { |e| e.text }.should == ['foo']
110
+ end
111
+ end
112
+
113
+ it 'should not generate a .classpath file' do
114
+ define('foo')
115
+ task('eclipse').invoke
116
+ File.exists?('.classpath').should be_false
117
+ end
118
+ end
119
+
120
+ describe 'parent project' do
121
+ before do
122
+ write 'buildfile'
123
+ mkpath 'bar'
124
+ end
125
+
126
+ it 'should not generate a .project for the parent project' do
127
+ define('foo') do
128
+ define('bar')
129
+ end
130
+ task('eclipse').invoke
131
+ File.exists?('.project').should be_false
132
+ File.exists?(File.join('bar','.project')).should be_true
133
+ end
134
+ end
135
+
88
136
  describe 'java project' do
89
137
  before do
90
138
  write 'buildfile'
@@ -111,8 +159,10 @@ describe Buildr::Eclipse do
111
159
  define('foo') { compile.using(:javac); package :jar }
112
160
  }
113
161
  task('eclipse').invoke
114
- REXML::Document.new(File.open(File.join('foo', '.project'))).root.
115
- elements.collect("name") { |e| e.text }.should == ['myproject-foo']
162
+ File.open(File.join('foo', '.project')) do |f|
163
+ REXML::Document.new(f).root.
164
+ elements.collect("name") { |e| e.text }.should == ['myproject-foo']
165
+ end
116
166
  end
117
167
 
118
168
  end
@@ -201,6 +251,68 @@ describe Buildr::Eclipse do
201
251
  build_commands.should include(JAVA_BUILDER)
202
252
  end
203
253
  end
254
+
255
+ describe 'Plugin project' do
256
+
257
+ before do
258
+ write 'buildfile'
259
+ write 'src/main/java/Activator.java'
260
+ write 'plugin.xml'
261
+ end
262
+
263
+ it 'should have plugin nature before Java nature' do
264
+ define('foo')
265
+ project_natures.should include(PLUGIN_NATURE)
266
+ project_natures.should include(JAVA_NATURE)
267
+ project_natures.index(PLUGIN_NATURE).should < project_natures.index(JAVA_NATURE)
268
+ end
269
+
270
+ it 'should have plugin build commands and the Java build command' do
271
+ define('foo')
272
+ build_commands.should include(PLUGIN_BUILDERS[0])
273
+ build_commands.should include(PLUGIN_BUILDERS[1])
274
+ build_commands.should include(JAVA_BUILDER)
275
+ end
276
+ end
277
+
278
+ describe 'Plugin project with META-INF/MANIFEST.MF' do
279
+
280
+ before do
281
+ write 'buildfile'
282
+ write 'src/main/java/Activator.java'
283
+ end
284
+
285
+ it 'should have plugin nature by default if MANIFEST.MF contains "Bundle-SymbolicName:"' do
286
+ write 'META-INF/MANIFEST.MF', <<-MANIFEST
287
+ Manifest-Version: 1.0
288
+ Name: example/
289
+ Specification-Title: "Examples"
290
+ Specification-Version: "1.0"
291
+ Specification-Vendor: "Acme Corp.".
292
+ Implementation-Title: "example"
293
+ Implementation-Version: "build57"
294
+ Implementation-Vendor: "Acme Corp."
295
+ Bundle-SymbolicName: acme.plugin.example
296
+ MANIFEST
297
+ define('foo')
298
+ project_natures.should include(PLUGIN_NATURE)
299
+ end
300
+
301
+ it 'should not have plugin nature if MANIFEST.MF exists but doesn\'t contain "Bundle-SymbolicName:"' do
302
+ write 'META-INF/MANIFEST.MF', <<-MANIFEST
303
+ Manifest-Version: 1.0
304
+ Name: example/
305
+ Specification-Title: "Examples"
306
+ Specification-Version: "1.0"
307
+ Specification-Vendor: "Acme Corp.".
308
+ Implementation-Title: "example"
309
+ Implementation-Version: "build57"
310
+ Implementation-Vendor: "Acme Corp."
311
+ MANIFEST
312
+ define('foo')
313
+ project_natures.should_not include(PLUGIN_NATURE)
314
+ end
315
+ end
204
316
  end
205
317
 
206
318
  describe "eclipse's .classpath file" do
@@ -348,8 +460,10 @@ describe Buildr::Eclipse do
348
460
  define('bar') { compile.using(:javac).with project('foo'); }
349
461
  }
350
462
  task('eclipse').invoke
351
- REXML::Document.new(File.open(File.join('bar', '.classpath'))).root.
352
- elements.collect("classpathentry[@kind='src']") { |n| n.attributes['path'] }.should include('/myproject-foo')
463
+ File.open(File.join('bar', '.classpath')) do |f|
464
+ REXML::Document.new(f).root.
465
+ elements.collect("classpathentry[@kind='src']") { |n| n.attributes['path'] }.should include('/myproject-foo')
466
+ end
353
467
  end
354
468
  end
355
469
  end
@@ -359,10 +473,26 @@ describe Buildr::Eclipse do
359
473
  write 'lib/some-local.jar'
360
474
  define('foo') { compile.using(:javac).with(_('lib/some-local.jar')) }
361
475
  end
362
-
476
+
363
477
  it 'should have a lib artifact reference in the .classpath file' do
364
478
  classpath_xml_elements.collect("classpathentry[@kind='lib']") { |n| n.attributes['path'] }.
365
- should include(File.expand_path 'lib/some-local.jar')
479
+ should include('lib/some-local.jar')
480
+ end
481
+ end
482
+
483
+ describe 'project .classpath' do
484
+ before do
485
+ mkdir_p '../libs'
486
+ write '../libs/some-local.jar'
487
+ define('foo') do
488
+ eclipse.classpath_variables :LIBS => '../libs', :LIBS2 => '../libs2'
489
+ compile.using(:javac).with(_('../libs/some-local.jar'))
490
+ end
491
+ end
492
+
493
+ it 'supports generating library paths with classpath variables' do
494
+ classpath_xml_elements.collect("classpathentry[@kind='var']") { |n| n.attributes['path'] }.
495
+ should include('LIBS/some-local.jar')
366
496
  end
367
497
  end
368
498
 
@@ -371,7 +501,7 @@ describe Buildr::Eclipse do
371
501
  write 'lib/some.class'
372
502
  define('foo') { compile.using(:javac).with(_('lib')) }
373
503
  end
374
-
504
+
375
505
  it 'should have src reference in the .classpath file' do
376
506
  classpath_xml_elements.collect("classpathentry[@kind='src']") { |n| n.attributes['path'] }.
377
507
  should include('lib')
@@ -449,6 +579,13 @@ describe Buildr::Eclipse do
449
579
  project('foo:bar').eclipse.natures.should include('foo_nature')
450
580
  project('foo:bar2').eclipse.natures.should include('bar2_nature')
451
581
  end
582
+
583
+ it 'should handle arrays correctly' do
584
+ define('foo') do
585
+ eclipse.natures ['foo_nature', 'bar_nature']
586
+ end
587
+ project('foo').eclipse.natures.should == ['foo_nature', 'bar_nature']
588
+ end
452
589
  end
453
590
 
454
591
  describe 'builders variable' do
@@ -473,6 +610,13 @@ describe Buildr::Eclipse do
473
610
  project('foo:bar').eclipse.builders.should include('foo_builder')
474
611
  project('foo:bar2').eclipse.builders.should include('bar2_builder')
475
612
  end
613
+
614
+ it 'should handle arrays correctly' do
615
+ define('foo') do
616
+ eclipse.builders ['foo_builder', 'bar_builder']
617
+ end
618
+ project('foo').eclipse.builders.should == ['foo_builder', 'bar_builder']
619
+ end
476
620
  end
477
621
 
478
622
  describe 'classpath_containers variable' do
@@ -497,5 +641,37 @@ describe Buildr::Eclipse do
497
641
  project('foo:bar').eclipse.classpath_containers.should include('foo_classpath_containers')
498
642
  project('foo:bar2').eclipse.classpath_containers.should include('bar2_classpath_containers')
499
643
  end
644
+
645
+ it 'should handle arrays correctly' do
646
+ define('foo') do
647
+ eclipse.classpath_containers ['foo_cc', 'bar_cc']
648
+ end
649
+ project('foo').eclipse.classpath_containers.should == ['foo_cc', 'bar_cc']
650
+ end
651
+ end
652
+
653
+ describe 'exclude_libs' do
654
+ it 'should support artifacts' do
655
+ define('foo') do
656
+ compile.using(:javac).with('com.example:library:jar:2.0')
657
+ eclipse.exclude_libs += [ artifact('com.example:library:jar:2.0') ]
658
+ end
659
+ artifact('com.example:library:jar:2.0') { |task| write task.name }
660
+
661
+ task('eclipse').invoke
662
+ classpath_xml_elements.collect("classpathentry[@kind='var']") { |n| n.attributes['path'] }.
663
+ should_not include('M2_REPO/com/example/library/2.0/library-2.0.jar')
664
+ end
665
+ it 'should support string paths' do
666
+ define('foo') do
667
+ compile.using(:javac).with _('path/to/library.jar')
668
+ eclipse.exclude_libs += [ _('path/to/library.jar') ]
669
+ end
670
+ write project('foo').path_to('path/to/library.jar')
671
+
672
+ task('eclipse').invoke
673
+ classpath_xml_elements.collect("classpathentry[@kind='lib']") { |n| n.attributes['path'] }.
674
+ should_not include('path/to/library.jar')
675
+ end
500
676
  end
501
677
  end