ittayd-buildr 1.3.4 → 1.3.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (169) hide show
  1. data/CHANGELOG +62 -9
  2. data/NOTICE +1 -1
  3. data/README.rdoc +9 -21
  4. data/Rakefile +20 -39
  5. data/_buildr +1 -0
  6. data/{spec/java/ant.rb → _jbuildr} +11 -15
  7. metadata +30 -210
  8. data/DISCLAIMER +0 -7
  9. data/addon/buildr/antlr.rb +0 -65
  10. data/addon/buildr/cobertura.rb +0 -22
  11. data/addon/buildr/drb.rb +0 -281
  12. data/addon/buildr/emma.rb +0 -22
  13. data/addon/buildr/hibernate.rb +0 -142
  14. data/addon/buildr/javacc.rb +0 -85
  15. data/addon/buildr/jdepend.rb +0 -60
  16. data/addon/buildr/jetty.rb +0 -248
  17. data/addon/buildr/jibx.rb +0 -86
  18. data/addon/buildr/nailgun.rb +0 -221
  19. data/addon/buildr/openjpa.rb +0 -90
  20. data/addon/buildr/org/apache/buildr/BuildrNail$Main.class +0 -0
  21. data/addon/buildr/org/apache/buildr/BuildrNail.class +0 -0
  22. data/addon/buildr/org/apache/buildr/BuildrNail.java +0 -41
  23. data/addon/buildr/org/apache/buildr/JettyWrapper$1.class +0 -0
  24. data/addon/buildr/org/apache/buildr/JettyWrapper$BuildrHandler.class +0 -0
  25. data/addon/buildr/org/apache/buildr/JettyWrapper.class +0 -0
  26. data/addon/buildr/org/apache/buildr/JettyWrapper.java +0 -144
  27. data/addon/buildr/path.rb +0 -136
  28. data/addon/buildr/xmlbeans.rb +0 -93
  29. data/buildr.buildfile +0 -53
  30. data/buildr.gemspec +0 -58
  31. data/doc/css/default.css +0 -228
  32. data/doc/css/print.css +0 -100
  33. data/doc/css/syntax.css +0 -52
  34. data/doc/images/apache-incubator-logo.png +0 -0
  35. data/doc/images/buildr-hires.png +0 -0
  36. data/doc/images/buildr.png +0 -0
  37. data/doc/images/favicon.png +0 -0
  38. data/doc/images/growl-icon.tiff +0 -0
  39. data/doc/images/note.png +0 -0
  40. data/doc/images/project-structure.png +0 -0
  41. data/doc/images/tip.png +0 -0
  42. data/doc/images/zbuildr.tif +0 -0
  43. data/doc/pages/artifacts.textile +0 -207
  44. data/doc/pages/building.textile +0 -240
  45. data/doc/pages/contributing.textile +0 -208
  46. data/doc/pages/download.textile +0 -62
  47. data/doc/pages/extending.textile +0 -175
  48. data/doc/pages/getting_started.textile +0 -273
  49. data/doc/pages/index.textile +0 -42
  50. data/doc/pages/languages.textile +0 -407
  51. data/doc/pages/mailing_lists.textile +0 -17
  52. data/doc/pages/more_stuff.textile +0 -314
  53. data/doc/pages/packaging.textile +0 -427
  54. data/doc/pages/projects.textile +0 -274
  55. data/doc/pages/recipes.textile +0 -103
  56. data/doc/pages/settings_profiles.textile +0 -274
  57. data/doc/pages/testing.textile +0 -212
  58. data/doc/pages/troubleshooting.textile +0 -103
  59. data/doc/pages/whats_new.textile +0 -323
  60. data/doc/print.haml +0 -51
  61. data/doc/print.toc.yaml +0 -29
  62. data/doc/scripts/buildr-git.rb +0 -412
  63. data/doc/scripts/install-jruby.sh +0 -44
  64. data/doc/scripts/install-linux.sh +0 -64
  65. data/doc/scripts/install-osx.sh +0 -52
  66. data/doc/site.haml +0 -56
  67. data/doc/site.toc.yaml +0 -47
  68. data/etc/KEYS +0 -151
  69. data/etc/git-svn-authors +0 -16
  70. data/lib/buildr.rb +0 -33
  71. data/lib/buildr/core.rb +0 -29
  72. data/lib/buildr/core/application.rb +0 -665
  73. data/lib/buildr/core/build.rb +0 -311
  74. data/lib/buildr/core/checks.rb +0 -254
  75. data/lib/buildr/core/common.rb +0 -150
  76. data/lib/buildr/core/compile.rb +0 -590
  77. data/lib/buildr/core/environment.rb +0 -117
  78. data/lib/buildr/core/filter.rb +0 -366
  79. data/lib/buildr/core/generate.rb +0 -195
  80. data/lib/buildr/core/help.rb +0 -119
  81. data/lib/buildr/core/osx.rb +0 -49
  82. data/lib/buildr/core/progressbar.rb +0 -156
  83. data/lib/buildr/core/project.rb +0 -923
  84. data/lib/buildr/core/test.rb +0 -715
  85. data/lib/buildr/core/transports.rb +0 -560
  86. data/lib/buildr/core/util.rb +0 -294
  87. data/lib/buildr/groovy.rb +0 -18
  88. data/lib/buildr/groovy/bdd.rb +0 -106
  89. data/lib/buildr/groovy/compiler.rb +0 -138
  90. data/lib/buildr/ide.rb +0 -19
  91. data/lib/buildr/ide/eclipse.rb +0 -222
  92. data/lib/buildr/ide/idea.ipr.template +0 -300
  93. data/lib/buildr/ide/idea.rb +0 -190
  94. data/lib/buildr/ide/idea7x.ipr.template +0 -290
  95. data/lib/buildr/ide/idea7x.rb +0 -212
  96. data/lib/buildr/java.rb +0 -23
  97. data/lib/buildr/java/ant.rb +0 -92
  98. data/lib/buildr/java/bdd.rb +0 -451
  99. data/lib/buildr/java/cobertura.rb +0 -236
  100. data/lib/buildr/java/commands.rb +0 -211
  101. data/lib/buildr/java/compiler.rb +0 -348
  102. data/lib/buildr/java/deprecated.rb +0 -141
  103. data/lib/buildr/java/emma.rb +0 -238
  104. data/lib/buildr/java/jruby.rb +0 -117
  105. data/lib/buildr/java/jtestr_runner.rb.erb +0 -116
  106. data/lib/buildr/java/org/apache/buildr/JavaTestFilter.class +0 -0
  107. data/lib/buildr/java/org/apache/buildr/JavaTestFilter.java +0 -119
  108. data/lib/buildr/java/packaging.rb +0 -717
  109. data/lib/buildr/java/pom.rb +0 -174
  110. data/lib/buildr/java/rjb.rb +0 -155
  111. data/lib/buildr/java/test_result.rb +0 -307
  112. data/lib/buildr/java/tests.rb +0 -329
  113. data/lib/buildr/java/version_requirement.rb +0 -172
  114. data/lib/buildr/packaging.rb +0 -24
  115. data/lib/buildr/packaging/archive.rb +0 -488
  116. data/lib/buildr/packaging/artifact.rb +0 -759
  117. data/lib/buildr/packaging/artifact_namespace.rb +0 -972
  118. data/lib/buildr/packaging/artifact_search.rb +0 -140
  119. data/lib/buildr/packaging/gems.rb +0 -102
  120. data/lib/buildr/packaging/package.rb +0 -233
  121. data/lib/buildr/packaging/tar.rb +0 -186
  122. data/lib/buildr/packaging/version_requirement.rb +0 -172
  123. data/lib/buildr/packaging/zip.rb +0 -64
  124. data/lib/buildr/packaging/ziptask.rb +0 -313
  125. data/lib/buildr/resources/buildr.icns +0 -0
  126. data/lib/buildr/scala.rb +0 -19
  127. data/lib/buildr/scala/compiler.rb +0 -109
  128. data/lib/buildr/scala/tests.rb +0 -203
  129. data/rakelib/apache.rake +0 -191
  130. data/rakelib/changelog.rake +0 -57
  131. data/rakelib/doc.rake +0 -103
  132. data/rakelib/package.rake +0 -76
  133. data/rakelib/release.rake +0 -65
  134. data/rakelib/rspec.rake +0 -83
  135. data/rakelib/rubyforge.rake +0 -56
  136. data/rakelib/scm.rake +0 -49
  137. data/rakelib/setup.rake +0 -81
  138. data/rakelib/stage.rake +0 -48
  139. data/spec/addon/drb_spec.rb +0 -328
  140. data/spec/core/application_spec.rb +0 -419
  141. data/spec/core/build_spec.rb +0 -423
  142. data/spec/core/checks_spec.rb +0 -519
  143. data/spec/core/common_spec.rb +0 -670
  144. data/spec/core/compile_spec.rb +0 -582
  145. data/spec/core/generate_spec.rb +0 -33
  146. data/spec/core/project_spec.rb +0 -776
  147. data/spec/core/test_spec.rb +0 -1098
  148. data/spec/core/transport_spec.rb +0 -500
  149. data/spec/groovy/bdd_spec.rb +0 -80
  150. data/spec/groovy/compiler_spec.rb +0 -239
  151. data/spec/ide/eclipse_spec.rb +0 -311
  152. data/spec/java/bdd_spec.rb +0 -358
  153. data/spec/java/cobertura_spec.rb +0 -77
  154. data/spec/java/compiler_spec.rb +0 -446
  155. data/spec/java/emma_spec.rb +0 -120
  156. data/spec/java/java_spec.rb +0 -96
  157. data/spec/java/packaging_spec.rb +0 -1120
  158. data/spec/java/test_coverage_spec.rb +0 -255
  159. data/spec/java/tests_spec.rb +0 -471
  160. data/spec/packaging/archive_spec.rb +0 -503
  161. data/spec/packaging/artifact_namespace_spec.rb +0 -646
  162. data/spec/packaging/artifact_spec.rb +0 -795
  163. data/spec/packaging/packaging_helper.rb +0 -63
  164. data/spec/packaging/packaging_spec.rb +0 -589
  165. data/spec/sandbox.rb +0 -139
  166. data/spec/scala/compiler_spec.rb +0 -228
  167. data/spec/scala/tests_spec.rb +0 -215
  168. data/spec/spec_helpers.rb +0 -327
  169. data/spec/version_requirement_spec.rb +0 -123
@@ -1,795 +0,0 @@
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 Artifact do
21
- before do
22
- @spec = { :group=>'com.example', :id=>'library', :type=>:jar, :version=>'2.0' }
23
- @artifact = artifact(@spec)
24
- @classified = artifact(@spec.merge(:classifier=>'all'))
25
- @snapshot = artifact(@spec.merge({ :version=>'2.1-SNAPSHOT' }))
26
- end
27
-
28
- it 'should act as one' do
29
- @artifact.should respond_to(:to_spec)
30
- end
31
-
32
- it 'should have an artifact identifier' do
33
- @artifact.id.should eql('library')
34
- end
35
-
36
- it 'should have a group identifier' do
37
- @artifact.group.should eql('com.example')
38
- end
39
-
40
- it 'should have a version number' do
41
- @artifact.version.should eql('2.0')
42
- end
43
-
44
- it 'should know if it is a snapshot' do
45
- @artifact.should_not be_snapshot
46
- @classified.should_not be_snapshot
47
- @snapshot.should be_snapshot
48
- end
49
-
50
- it 'should have a file type' do
51
- @artifact.type.should eql(:jar)
52
- end
53
-
54
- it 'should understand classifier' do
55
- @artifact.classifier.should be_nil
56
- @classified.classifier.should eql('all')
57
- end
58
-
59
- it 'should return hash specification' do
60
- @artifact.to_hash.should == @spec
61
- @artifact.to_spec_hash.should == @spec
62
- @classified.to_hash.should == @spec.merge(:classifier=>'all')
63
- end
64
-
65
- it 'should return string specification' do
66
- @artifact.to_spec.should eql('com.example:library:jar:2.0')
67
- @classified.to_spec.should eql('com.example:library:jar:all:2.0')
68
- end
69
-
70
- it 'should have associated POM artifact' do
71
- @artifact.pom.to_hash.should == @artifact.to_hash.merge(:type=>:pom)
72
- end
73
-
74
- it 'should have one POM artifact for all classifiers' do
75
- @classified.pom.to_hash.should == @classified.to_hash.merge(:type=>:pom).except(:classifier)
76
- end
77
-
78
- it 'should have associated sources artifact' do
79
- @artifact.sources_artifact.to_hash.should == @artifact.to_hash.merge(:classifier=>'sources')
80
- end
81
-
82
- it 'should download file if file does not exist' do
83
- lambda { @artifact.invoke }.should raise_error(Exception, /No remote repositories/)
84
- lambda { @classified.invoke }.should raise_error(Exception, /No remote repositories/)
85
- end
86
-
87
- it 'should not download file if file exists' do
88
- write repositories.locate(@artifact)
89
- lambda { @artifact.invoke }.should_not raise_error
90
- write repositories.locate(@classified)
91
- lambda { @classified.invoke }.should_not raise_error
92
- end
93
-
94
- it 'should handle lack of POM gracefully' do
95
- repositories.remote = 'http://example.com'
96
- URI.should_receive(:download).twice { |uri, target, options| raise URI::NotFoundError if uri.to_s.ends_with('.pom') }
97
- lambda { @artifact.invoke }.should_not raise_error
98
- end
99
-
100
- it 'should pass if POM provided' do
101
- repositories.remote = 'http://example.com'
102
- @artifact.pom.enhance { |task| write task.name, @artifact.pom_xml }
103
- write repositories.locate(@artifact)
104
- lambda { @artifact.invoke }.should_not raise_error
105
- end
106
-
107
- it 'should pass if POM not required' do
108
- repositories.remote = 'http://example.com'
109
- class << @artifact ; def pom() ; end ; end
110
- write repositories.locate(@artifact)
111
- lambda { @artifact.invoke }.should_not raise_error
112
- end
113
-
114
- it 'should not download file if dry-run' do
115
- dryrun do
116
- lambda { @artifact.invoke }.should_not raise_error
117
- lambda { @classified.invoke }.should_not raise_error
118
- end
119
- end
120
-
121
- it 'should resolve to path in local repository' do
122
- @artifact.to_s.should == File.join(repositories.local, 'com/example/library/2.0/library-2.0.jar')
123
- @classified.to_s.should == File.join(repositories.local, 'com/example/library/2.0/library-2.0-all.jar')
124
- end
125
-
126
- it 'should return a list of all registered artifact specifications' do
127
- define('foo', :version=>'1.0') { package :jar }
128
- Artifact.list.should include(@artifact.to_spec)
129
- Artifact.list.should include(@classified.to_spec)
130
- Artifact.list.should include('foo:foo:jar:1.0')
131
- end
132
- end
133
-
134
-
135
- describe Repositories, 'local' do
136
- it 'should default to .m2 path' do
137
- # For convenience, sandbox actually sets the local repository to a temp directory
138
- repositories.local = nil
139
- repositories.local.should eql(File.expand_path('.m2/repository', ENV['HOME']))
140
- end
141
-
142
- it 'should be settable' do
143
- repositories.local = '.m2/local'
144
- repositories.local.should eql(File.expand_path('.m2/local'))
145
- end
146
-
147
- it 'should reset to default' do
148
- repositories.local = '.m2/local'
149
- repositories.local = nil
150
- repositories.local.should eql(File.expand_path('~/.m2/repository'))
151
- end
152
-
153
- it 'should locate file from string specification' do
154
- repositories.local = nil
155
- repositories.locate('com.example:library:jar:2.0').should eql(
156
- File.expand_path('~/.m2/repository/com/example/library/2.0/library-2.0.jar'))
157
- end
158
-
159
- it 'should locate file from hash specification' do
160
- repositories.local = nil
161
- repositories.locate(:group=>'com.example', :id=>'library', :version=>'2.0').should eql(
162
- File.expand_path('~/.m2/repository/com/example/library/2.0/library-2.0.jar'))
163
- end
164
-
165
- it 'should load path from settings file' do
166
- write 'home/.buildr/settings.yaml', <<-YAML
167
- repositories:
168
- local: my_repo
169
- YAML
170
- repositories.local.should eql(File.expand_path('my_repo'))
171
- end
172
- end
173
-
174
-
175
- describe Repositories, 'remote' do
176
- before do
177
- @repos = [ 'http://www.ibiblio.org/maven2', 'http://repo1.maven.org/maven2' ]
178
- end
179
-
180
- it 'should be empty initially' do
181
- repositories.remote.should be_empty
182
- end
183
-
184
- it 'should be settable' do
185
- repositories.remote = @repos.first
186
- repositories.remote.should eql([@repos.first])
187
- end
188
-
189
- it 'should be settable from array' do
190
- repositories.remote = @repos
191
- repositories.remote.should eql(@repos)
192
- end
193
-
194
- it 'should add and return repositories in order' do
195
- @repos.each { |url| repositories.remote << url }
196
- repositories.remote.should eql(@repos)
197
- end
198
-
199
- it 'should be used to download artifact' do
200
- repositories.remote = 'http://example.com'
201
- URI.should_receive(:download).twice.and_return { |uri, target, options| write target }
202
- lambda { artifact('com.example:library:jar:2.0').invoke }.
203
- should change { File.exist?(File.join(repositories.local, 'com/example/library/2.0/library-2.0.jar')) }.to(true)
204
- end
205
-
206
- it 'should lookup in array order' do
207
- repositories.remote = [ 'http://example.com', 'http://example.org' ]
208
- order = ['com', 'org']
209
- URI.should_receive(:download).any_number_of_times do |uri, target, options|
210
- order.shift if order.first && uri.to_s[order.first]
211
- fail URI::NotFoundError unless order.empty?
212
- write target
213
- end
214
- lambda { artifact('com.example:library:jar:2.0').invoke }.should change { order.empty? }
215
- end
216
-
217
- it 'should fail if artifact not found' do
218
- repositories.remote = 'http://example.com'
219
- URI.should_receive(:download).once.ordered.and_return { fail URI::NotFoundError }
220
- lambda { artifact('com.example:library:jar:2.0').invoke }.should raise_error(RuntimeError, /Failed to download/)
221
- File.exist?(File.join(repositories.local, 'com/example/library/2.0/library-2.0.jar')).should be_false
222
- end
223
-
224
- it 'should support artifact classifier' do
225
- repositories.remote = 'http://example.com'
226
- URI.should_receive(:download).twice.and_return { |uri, target, options| write target }
227
- lambda { artifact('com.example:library:jar:all:2.0').invoke }.
228
- should change { File.exist?(File.join(repositories.local, 'com/example/library/2.0/library-2.0-all.jar')) }.to(true)
229
- end
230
-
231
- it 'should deal well with repositories URL that lack the last slash' do
232
- repositories.remote = 'http://example.com/base'
233
- uri = nil
234
- URI.should_receive(:download).twice.and_return { |uri, target, options| }
235
- artifact('group:id:jar:1.0').invoke
236
- uri.to_s.should eql('http://example.com/base/group/id/1.0/id-1.0.pom')
237
- end
238
-
239
- it 'should deal well with repositories URL that have the last slash' do
240
- repositories.remote = 'http://example.com/base/'
241
- uri = nil
242
- URI.should_receive(:download).twice.and_return { |uri, target, options| }
243
- artifact('group:id:jar:1.0').invoke
244
- uri.to_s.should eql('http://example.com/base/group/id/1.0/id-1.0.pom')
245
- end
246
-
247
- it 'should resolve m2-style deployed snapshots' do
248
- metadata = <<-XML
249
- <?xml version='1.0' encoding='UTF-8'?>
250
- <metadata>
251
- <groupId>com.example</groupId>
252
- <artifactId>library</artifactId>
253
- <version>2.1-SNAPSHOT</version>
254
- <versioning>
255
- <snapshot>
256
- <timestamp>20071012.190008</timestamp>
257
- <buildNumber>8</buildNumber>
258
- </snapshot>
259
- <lastUpdated>20071012190008</lastUpdated>
260
- </versioning>
261
- </metadata>
262
- XML
263
- repositories.remote = 'http://example.com'
264
- URI.should_receive(:download).twice.with(uri(/2.1-SNAPSHOT\/library-2.1-SNAPSHOT.(jar|pom)$/), anything()).
265
- and_return { fail URI::NotFoundError }
266
- URI.should_receive(:download).twice.with(uri(/2.1-SNAPSHOT\/maven-metadata.xml$/), duck_type(:write)).
267
- and_return { |uri, target, options| target.write(metadata) }
268
- URI.should_receive(:download).twice.with(uri(/2.1-SNAPSHOT\/library-2.1-20071012.190008-8.(jar|pom)$/), /2.1-SNAPSHOT\/library-2.1-SNAPSHOT.(jar|pom)$/).
269
- and_return { |uri, target, options| write target }
270
- lambda { artifact('com.example:library:jar:2.1-SNAPSHOT').invoke }.
271
- should change { File.exist?(File.join(repositories.local, 'com/example/library/2.1-SNAPSHOT/library-2.1-SNAPSHOT.jar')) }.to(true)
272
- end
273
-
274
- it 'should handle missing maven metadata by reporting the artifact unavailable' do
275
- repositories.remote = 'http://example.com'
276
- URI.should_receive(:download).with(uri(/2.1-SNAPSHOT\/library-2.1-SNAPSHOT.jar$/), anything()).
277
- and_return { fail URI::NotFoundError }
278
- URI.should_receive(:download).with(uri(/2.1-SNAPSHOT\/maven-metadata.xml$/), duck_type(:write)).
279
- and_return { fail URI::NotFoundError }
280
- lambda { artifact('com.example:library:jar:2.1-SNAPSHOT').invoke }.should raise_error(RuntimeError, /Failed to download/)
281
- File.exist?(File.join(repositories.local, 'com/example/library/2.1-SNAPSHOT/library-2.1-SNAPSHOT.jar')).should be_false
282
- end
283
-
284
- it 'should handle missing m2 snapshots by reporting the artifact unavailable' do
285
- metadata = <<-XML
286
- <?xml version='1.0' encoding='UTF-8'?>
287
- <metadata>
288
- <groupId>com.example</groupId>
289
- <artifactId>library</artifactId>
290
- <version>2.1-SNAPSHOT</version>
291
- <versioning>
292
- <snapshot>
293
- <timestamp>20071012.190008</timestamp>
294
- <buildNumber>8</buildNumber>
295
- </snapshot>
296
- <lastUpdated>20071012190008</lastUpdated>
297
- </versioning>
298
- </metadata>
299
- XML
300
- repositories.remote = 'http://example.com'
301
- URI.should_receive(:download).with(uri(/2.1-SNAPSHOT\/library-2.1-SNAPSHOT.jar$/), anything()).
302
- and_return { fail URI::NotFoundError }
303
- URI.should_receive(:download).with(uri(/2.1-SNAPSHOT\/maven-metadata.xml$/), duck_type(:write)).
304
- and_return { |uri, target, options| target.write(metadata) }
305
- URI.should_receive(:download).with(uri(/2.1-SNAPSHOT\/library-2.1-20071012.190008-8.jar$/), anything()).
306
- and_return { fail URI::NotFoundError }
307
- lambda { artifact('com.example:library:jar:2.1-SNAPSHOT').invoke }.should raise_error(RuntimeError, /Failed to download/)
308
- File.exist?(File.join(repositories.local, 'com/example/library/2.1-SNAPSHOT/library-2.1-SNAPSHOT.jar')).should be_false
309
- end
310
-
311
- it 'should load with all repositories specified in settings file' do
312
- write 'home/.buildr/settings.yaml', <<-YAML
313
- repositories:
314
- remote:
315
- - http://example.com
316
- - http://example.org
317
- YAML
318
- repositories.remote.should include('http://example.com', 'http://example.org')
319
- end
320
-
321
- it 'should load with all repositories specified in build.yaml file' do
322
- write 'build.yaml', <<-YAML
323
- repositories:
324
- remote:
325
- - http://example.com
326
- - http://example.org
327
- YAML
328
- repositories.remote.should include('http://example.com', 'http://example.org')
329
- end
330
-
331
- it 'should load with all repositories specified in settings and build.yaml files' do
332
- write 'home/.buildr/settings.yaml', <<-YAML
333
- repositories:
334
- remote:
335
- - http://example.com
336
- YAML
337
- write 'build.yaml', <<-YAML
338
- repositories:
339
- remote:
340
- - http://example.org
341
- YAML
342
- repositories.remote.should include('http://example.com', 'http://example.org')
343
- end
344
- end
345
-
346
-
347
- describe Repositories, 'release_to' do
348
- it 'should accept URL as first argument' do
349
- repositories.release_to = 'http://example.com'
350
- repositories.release_to.should == { :url=>'http://example.com' }
351
- end
352
-
353
- it 'should accept hash with options' do
354
- repositories.release_to = { :url=>'http://example.com', :username=>'john' }
355
- repositories.release_to.should == { :url=>'http://example.com', :username=>'john' }
356
- end
357
-
358
- it 'should allow the hash to be manipulated' do
359
- repositories.release_to = 'http://example.com'
360
- repositories.release_to.should == { :url=>'http://example.com' }
361
- repositories.release_to[:username] = 'john'
362
- repositories.release_to.should == { :url=>'http://example.com', :username=>'john' }
363
- end
364
-
365
- it 'should load URL from settings file' do
366
- write 'home/.buildr/settings.yaml', <<-YAML
367
- repositories:
368
- release_to: http://john:secret@example.com
369
- YAML
370
- repositories.release_to.should == { :url=>'http://john:secret@example.com' }
371
- end
372
-
373
- it 'should load URL, username and password from settings file' do
374
- write 'home/.buildr/settings.yaml', <<-YAML
375
- repositories:
376
- release_to:
377
- url: http://example.com
378
- username: john
379
- password: secret
380
- YAML
381
- repositories.release_to.should == { :url=>'http://example.com', :username=>'john', :password=>'secret' }
382
- end
383
- end
384
-
385
-
386
- describe Buildr, '#artifact' do
387
- before { @spec = { :group=>'com.example', :id=>'library', :type=>'jar', :version=>'2.0' } }
388
-
389
- it 'should accept hash specification' do
390
- artifact(:group=>'com.example', :id=>'library', :type=>'jar', :version=>'2.0').should respond_to(:invoke)
391
- end
392
-
393
- it 'should reject partial hash specifier' do
394
- lambda { artifact(@spec.merge(:group=>nil)) }.should raise_error
395
- lambda { artifact(@spec.merge(:id=>nil)) }.should raise_error
396
- lambda { artifact(@spec.merge(:version=>nil)) }.should raise_error
397
- end
398
-
399
- it 'should complain about invalid key' do
400
- lambda { artifact(@spec.merge(:error=>true)) }.should raise_error(ArgumentError, /no such option/i)
401
- end
402
-
403
- it 'should use JAR type by default' do
404
- artifact(@spec.merge(:type=>nil)).should respond_to(:invoke)
405
- end
406
-
407
- it 'should accept string specification' do
408
- artifact('com.example:library:jar:2.0').should respond_to(:invoke)
409
- end
410
-
411
- it 'should reject partial string specifier' do
412
- artifact('com.example:library::2.0')
413
- lambda { artifact('com.example:library:jar') }.should raise_error
414
- lambda { artifact('com.example:library:jar:') }.should raise_error
415
- lambda { artifact('com.example:library::2.0') }.should_not raise_error
416
- lambda { artifact('com.example::jar:2.0') }.should raise_error
417
- lambda { artifact(':library:jar:2.0') }.should raise_error
418
- end
419
-
420
- it 'should create a task naming the artifact in the local repository' do
421
- file = File.join(repositories.local, 'com', 'example', 'library', '2.0', 'library-2.0.jar')
422
- Rake::Task.task_defined?(file).should be_false
423
- artifact('com.example:library:jar:2.0').name.should eql(file)
424
- end
425
-
426
- it 'should use from method to install artifact from existing file' do
427
- write 'test.jar'
428
- artifact = artifact('group:id:jar:1.0').from('test.jar')
429
- lambda { artifact.invoke }.should change { File.exist?(artifact.to_s) }.to(true)
430
- end
431
-
432
- it 'should reference artifacts defined on build.yaml by using ruby symbols' do
433
- write 'build.yaml', <<-YAML
434
- artifacts:
435
- j2ee: geronimo-spec:geronimo-spec-j2ee:jar:1.4-rc4
436
- YAML
437
- Buildr.application.send(:load_artifact_ns)
438
- artifact(:j2ee).to_s.pathmap('%f').should == 'geronimo-spec-j2ee-1.4-rc4.jar'
439
- end
440
- end
441
-
442
-
443
- describe Buildr, '#artifacts' do
444
- it 'should return a list of artifacts from all its arguments' do
445
- specs = [ 'saxon:saxon:jar:8.4', 'saxon:saxon-dom:jar:8.4', 'saxon:saxon-xpath:jar:8.4' ]
446
- artifacts(*specs).should eql(specs.map { |spec| artifact(spec) })
447
- end
448
-
449
- it 'should accept nested arrays' do
450
- specs = [ 'saxon:saxon:jar:8.4', 'saxon:saxon-dom:jar:8.4', 'saxon:saxon-xpath:jar:8.4' ]
451
- artifacts([[specs[0]]], [[specs[1]], specs[2]]).should eql(specs.map { |spec| artifact(spec) })
452
- end
453
-
454
- it 'should accept struct' do
455
- specs = struct(:main=>'saxon:saxon:jar:8.4', :dom=>'saxon:saxon-dom:jar:8.4', :xpath=>'saxon:saxon-xpath:jar:8.4')
456
- artifacts(specs).should eql(specs.values.map { |spec| artifact(spec) })
457
- end
458
-
459
- it 'should ignore duplicates' do
460
- artifacts('saxon:saxon:jar:8.4', 'saxon:saxon:jar:8.4').size.should be(1)
461
- end
462
-
463
- it 'should accept and return existing tasks' do
464
- artifacts(task('foo'), task('bar')).should eql([task('foo'), task('bar')])
465
- end
466
-
467
- it 'should accept filenames and expand them' do
468
- artifacts('test').map(&:to_s).should eql([File.expand_path('test')])
469
- end
470
-
471
- it 'should accept filenames and return filenames' do
472
- artifacts('c:test').first.should be_kind_of(String)
473
- end
474
-
475
- it 'should accept project and return all its packaging tasks' do
476
- define 'foobar', :group=>'group', :version=>'1.0' do
477
- package :jar, :id=>'code'
478
- package :war, :id=>'webapp'
479
- end
480
- foobar = project('foobar')
481
- artifacts(foobar).should eql([
482
- task(foobar.path_to('target/code-1.0.jar')),
483
- task(foobar.path_to('target/webapp-1.0.war'))
484
- ])
485
- end
486
-
487
- it 'should complain about an invalid specification' do
488
- lambda { artifacts(5) }.should raise_error
489
- lambda { artifacts('group:no:version:') }.should raise_error
490
- end
491
- end
492
-
493
-
494
- describe Buildr, '#group' do
495
- it 'should accept list of artifact identifiers' do
496
- list = group('saxon', 'saxon-dom', 'saxon-xpath', :under=>'saxon', :version=>'8.4')
497
- list.should include(artifact('saxon:saxon:jar:8.4'))
498
- list.should include(artifact('saxon:saxon-dom:jar:8.4'))
499
- list.should include(artifact('saxon:saxon-xpath:jar:8.4'))
500
- list.size.should be(3)
501
- end
502
-
503
- it 'should accept array with artifact identifiers' do
504
- list = group(%w{saxon saxon-dom saxon-xpath}, :under=>'saxon', :version=>'8.4')
505
- list.should include(artifact('saxon:saxon:jar:8.4'))
506
- list.should include(artifact('saxon:saxon-dom:jar:8.4'))
507
- list.should include(artifact('saxon:saxon-xpath:jar:8.4'))
508
- list.size.should be(3)
509
- end
510
-
511
- it 'should accept a type' do
512
- list = group('struts-bean', 'struts-html', :under=>'struts', :type=>'tld', :version=>'1.1')
513
- list.should include(artifact('struts:struts-bean:tld:1.1'))
514
- list.should include(artifact('struts:struts-html:tld:1.1'))
515
- list.size.should be(2)
516
- end
517
-
518
- end
519
-
520
- describe Buildr, '#install' do
521
- before do
522
- @spec = 'group:id:jar:1.0'
523
- write @file = 'test.jar'
524
- end
525
-
526
- it 'should return the install task' do
527
- install.should be(task('install'))
528
- end
529
-
530
- it 'should accept artifacts to install' do
531
- install artifact(@spec)
532
- lambda { install @file }.should raise_error(ArgumentError)
533
- end
534
-
535
- it 'should install artifact when install task is run' do
536
- write @file
537
- install artifact(@spec).from(@file)
538
- lambda { install.invoke }.should change { File.exist?(artifact(@spec).to_s) }.to(true)
539
- end
540
-
541
- it 'should install POM alongside artifact' do
542
- write @file
543
- install artifact(@spec).from(@file)
544
- lambda { install.invoke }.should change { File.exist?(artifact(@spec).pom.to_s) }.to(true)
545
- end
546
- end
547
-
548
-
549
- describe Buildr, '#upload' do
550
- before do
551
- @spec = 'group:id:jar:1.0'
552
- write @file = 'test.jar'
553
- repositories.release_to = 'sftp://example.com/base'
554
- end
555
-
556
- it 'should return the upload task' do
557
- upload.should be(task('upload'))
558
- end
559
-
560
- it 'should accept artifacts to upload' do
561
- upload artifact(@spec)
562
- lambda { upload @file }.should raise_error(ArgumentError)
563
- end
564
-
565
- it 'should upload artifact when upload task is run' do
566
- write @file
567
- upload artifact(@spec).from(@file)
568
- URI.should_receive(:upload).once.
569
- with(URI.parse('sftp://example.com/base/group/id/1.0/id-1.0.jar'), artifact(@spec).to_s, anything)
570
- URI.should_receive(:upload).once.
571
- with(URI.parse('sftp://example.com/base/group/id/1.0/id-1.0.pom'), artifact(@spec).pom.to_s, anything)
572
- upload.invoke
573
- end
574
- end
575
-
576
-
577
- describe ActsAsArtifact, '#upload' do
578
- it 'should be used to upload artifact' do
579
- artifact = artifact('com.example:library:jar:2.0')
580
- # Prevent artifact from downloading anything.
581
- write repositories.locate(artifact)
582
- write repositories.locate(artifact.pom)
583
- URI.should_receive(:upload).once.
584
- with(URI.parse('sftp://example.com/base/com/example/library/2.0/library-2.0.pom'), artifact.pom.to_s, anything)
585
- URI.should_receive(:upload).once.
586
- with(URI.parse('sftp://example.com/base/com/example/library/2.0/library-2.0.jar'), artifact.to_s, anything)
587
- verbose(false) { artifact.upload(:url=>'sftp://example.com/base') }
588
- end
589
-
590
- it 'should support artifact classifier' do
591
- artifact = artifact('com.example:library:jar:all:2.0')
592
- # Prevent artifact from downloading anything.
593
- write repositories.locate(artifact)
594
- write repositories.locate(artifact.pom)
595
- URI.should_receive(:upload).at_least(:once).
596
- with(URI.parse('sftp://example.com/base/com/example/library/2.0/library-2.0.pom'), artifact.pom.to_s, anything)
597
- URI.should_receive(:upload).at_least(:once).
598
- with(URI.parse('sftp://example.com/base/com/example/library/2.0/library-2.0-all.jar'), artifact.to_s, anything)
599
- verbose(false) { artifact.upload(:url=>'sftp://example.com/base') }
600
- end
601
-
602
- it 'should complain without any repository configuration' do
603
- artifact = artifact('com.example:library:jar:2.0')
604
- # Prevent artifact from downloading anything.
605
- write repositories.locate(artifact)
606
- write repositories.locate(artifact.pom)
607
- lambda { artifact.upload }.should raise_error(Exception, /where to upload/)
608
- end
609
-
610
- it 'should accept repositories.upload setting' do
611
- artifact = artifact('com.example:library:jar:2.0')
612
- # Prevent artifact from downloading anything.
613
- write repositories.locate(artifact)
614
- write repositories.locate(artifact.pom)
615
- URI.should_receive(:upload).at_least(:once)
616
- repositories.release_to = 'sftp://example.com/base'
617
- artifact.upload
618
- lambda { artifact.upload }.should_not raise_error
619
- end
620
- end
621
-
622
-
623
- describe Rake::Task, ' artifacts' do
624
- it 'should download all specified artifacts' do
625
- artifact 'group:id:jar:1.0'
626
- repositories.remote = 'http://example.com'
627
- URI.should_receive(:download).twice.and_return { |uri, target, options| write target }
628
- task('artifacts').invoke
629
- end
630
-
631
- it 'should fail if failed to download an artifact' do
632
- artifact 'group:id:jar:1.0'
633
- lambda { task('artifacts').invoke }.should raise_error(RuntimeError, /No remote repositories/)
634
- end
635
-
636
- it 'should succeed if artifact already exists' do
637
- write repositories.locate(artifact('group:id:jar:1.0'))
638
- suppress_stdout do
639
- lambda { task('artifacts').invoke }.should_not raise_error
640
- end
641
- end
642
- end
643
-
644
-
645
- describe Rake::Task, ' artifacts:sources' do
646
-
647
- before do
648
- task('artifacts:sources').clear
649
- repositories.remote = 'http://example.com'
650
- end
651
-
652
- it 'should download sources for all specified artifacts' do
653
- artifact 'group:id:jar:1.0'
654
- URI.should_receive(:download).any_number_of_times.and_return { |uri, target| write target }
655
- lambda { task('artifacts:sources').invoke }.should change { File.exist?('home/.m2/repository/group/id/1.0/id-1.0-sources.jar') }.to(true)
656
- end
657
-
658
- it "should not try to download sources for the project's artifacts" do
659
- define('foo', :version=>'1.0') { package(:jar) }
660
- URI.should_not_receive(:download)
661
- task('artifacts:sources').invoke
662
- end
663
-
664
- describe 'when the source artifact does not exist' do
665
-
666
- before do
667
- artifact 'group:id:jar:1.0'
668
- URI.should_receive(:download).any_number_of_times.and_raise(URI::NotFoundError)
669
- end
670
-
671
- it 'should not fail' do
672
- lambda { task('artifacts:sources').invoke }.should_not raise_error
673
- end
674
-
675
- it 'should inform the user' do
676
- lambda { task('artifacts:sources').invoke }.should show_info('Failed to download group:id:jar:sources:1.0. Skipping it.')
677
- end
678
- end
679
- end
680
-
681
-
682
- describe Buildr, '#transitive' do
683
- before do
684
- repositories.remote = 'http://example.com'
685
- @simple = [ 'saxon:saxon:jar:8.4', 'saxon:saxon-dom:jar:8.4', 'saxon:saxon-xpath:jar:8.4' ]
686
- @simple.map { |spec| artifact(spec).pom }.each { |task| write task.name, task.pom_xml }
687
- @provided = @simple.first
688
- @complex = 'group:app:jar:1.0'
689
- write artifact(@complex).pom.to_s, <<-XML
690
- <project>
691
- <artifactId>app</artifactId>
692
- <groupId>group</groupId>
693
- <dependencies>
694
- <dependency>
695
- <artifactId>saxon</artifactId>
696
- <groupId>saxon</groupId>
697
- <version>8.4</version>
698
- <scope>provided</scope>
699
- </dependency>
700
- <dependency>
701
- <artifactId>saxon-dom</artifactId>
702
- <groupId>saxon</groupId>
703
- <version>8.4</version>
704
- <scope>runtime</scope>
705
- </dependency>
706
- <dependency>
707
- <artifactId>saxon-xpath</artifactId>
708
- <groupId>saxon</groupId>
709
- <version>8.4</version>
710
- </dependency>
711
- <dependency>
712
- <artifactId>saxon-nosuch</artifactId>
713
- <groupId>saxon</groupId>
714
- <version>8.4</version>
715
- <scope>test</scope>
716
- </dependency>
717
- </dependencies>
718
- </project>
719
- XML
720
- @transitive = 'master:app:war:1.0'
721
- write artifact(@transitive).pom.to_s, <<-XML
722
- <project>
723
- <artifactId>app</artifactId>
724
- <groupId>group</groupId>
725
- <dependencies>
726
- <dependency>
727
- <artifactId>app</artifactId>
728
- <groupId>group</groupId>
729
- <version>1.0</version>
730
- </dependency>
731
- </dependencies>
732
- </project>
733
- XML
734
- end
735
-
736
- it 'should return a list of artifacts from all its arguments' do
737
- specs = [ 'saxon:saxon:jar:8.4', 'saxon:saxon-dom:jar:8.4', 'saxon:saxon-xpath:jar:8.4' ]
738
- transitive(*specs).should eql(specs.map { |spec| artifact(spec) })
739
- end
740
-
741
- it 'should accept nested arrays' do
742
- specs = [ 'saxon:saxon:jar:8.4', 'saxon:saxon-dom:jar:8.4', 'saxon:saxon-xpath:jar:8.4' ]
743
- transitive([[specs[0]]], [[specs[1]], specs[2]]).should eql(specs.map { |spec| artifact(spec) })
744
- end
745
-
746
- it 'should accept struct' do
747
- specs = struct(:main=>'saxon:saxon:jar:8.4', :dom=>'saxon:saxon-dom:jar:8.4', :xpath=>'saxon:saxon-xpath:jar:8.4')
748
- transitive(specs).should eql(specs.values.map { |spec| artifact(spec) })
749
- end
750
-
751
- it 'should ignore duplicates' do
752
- transitive('saxon:saxon:jar:8.4', 'saxon:saxon:jar:8.4').size.should be(1)
753
- end
754
-
755
- it 'should accept and return existing tasks' do
756
- transitive(task('foo'), task('bar')).should eql([task('foo'), task('bar')])
757
- end
758
-
759
- it 'should accept filenames and expand them' do
760
- transitive('test').map(&:to_s).should eql([File.expand_path('test')])
761
- end
762
-
763
- it 'should accept filenames and return file task' do
764
- transitive('c:test').first.should be_kind_of(Rake::FileTask)
765
- end
766
-
767
- it 'should accept project and return all its packaging tasks' do
768
- define 'foobar', :group=>'group', :version=>'1.0' do
769
- package :jar, :id=>'code'
770
- package :war, :id=>'webapp'
771
- end
772
- foobar = project('foobar')
773
- transitive(foobar).should eql([
774
- task(foobar.path_to('target/code-1.0.jar')),
775
- task(foobar.path_to('target/webapp-1.0.war'))
776
- ])
777
- end
778
-
779
- it 'should complain about an invalid specification' do
780
- lambda { transitive(5) }.should raise_error
781
- lambda { transitive('group:no:version:') }.should raise_error
782
- end
783
-
784
- it 'should bring artifact and its dependencies' do
785
- transitive(@complex).should eql(artifacts(@complex, @simple))
786
- end
787
-
788
- it 'should bring dependencies of POM without artifact itself' do
789
- transitive(@complex.sub(/jar/, 'pom')).should eql(artifacts(@simple))
790
- end
791
-
792
- it 'should bring artifact and transitive depenencies' do
793
- transitive(@transitive).should eql(artifacts(@transitive, @complex, @simple - [@provided]))
794
- end
795
- end