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.
- data/CHANGELOG +153 -8
- data/README.rdoc +1 -1
- data/addon/buildr/antlr.rb +5 -5
- data/addon/buildr/drb.rb +18 -18
- data/addon/buildr/hibernate.rb +18 -14
- data/addon/buildr/javacc.rb +4 -4
- data/addon/buildr/jetty.rb +5 -5
- data/addon/buildr/nailgun.rb +23 -23
- data/addon/buildr/openjpa.rb +1 -1
- data/addon/buildr/org/apache/buildr/BuildrNail$Main.class +0 -0
- data/addon/buildr/org/apache/buildr/BuildrNail.class +0 -0
- data/addon/buildr/org/apache/buildr/JettyWrapper$1.class +0 -0
- data/addon/buildr/org/apache/buildr/JettyWrapper$BuildrHandler.class +0 -0
- data/addon/buildr/org/apache/buildr/JettyWrapper.class +0 -0
- data/addon/buildr/protobuf.rb +75 -0
- data/addon/buildr/xmlbeans.rb +5 -5
- data/buildr.buildfile +2 -2
- data/buildr.gemspec +8 -7
- data/doc/_layouts/default.html +2 -2
- data/doc/artifacts.textile +4 -4
- data/doc/building.textile +35 -3
- data/doc/contributing.textile +5 -0
- data/doc/download.textile +16 -5
- data/doc/extending.textile +38 -12
- data/doc/installing.textile +6 -5
- data/doc/languages.textile +182 -42
- data/doc/more_stuff.textile +2 -2
- data/doc/packaging.textile +14 -15
- data/doc/projects.textile +7 -2
- data/doc/quick_start.textile +4 -4
- data/doc/scripts/buildr-git.rb +63 -63
- data/doc/scripts/gitflow.rb +21 -21
- data/doc/settings_profiles.textile +9 -2
- data/doc/testing.textile +16 -5
- data/etc/KEYS +38 -0
- data/lib/buildr.rb +1 -1
- data/lib/buildr/core.rb +1 -0
- data/lib/buildr/core/application.rb +33 -27
- data/lib/buildr/core/build.rb +41 -28
- data/lib/buildr/core/cc.rb +172 -0
- data/lib/buildr/core/checks.rb +1 -1
- data/lib/buildr/core/common.rb +7 -6
- data/lib/buildr/core/compile.rb +7 -8
- data/lib/buildr/core/doc.rb +263 -0
- data/lib/buildr/core/environment.rb +6 -6
- data/lib/buildr/core/filter.rb +77 -35
- data/lib/buildr/core/generate.rb +7 -7
- data/lib/buildr/core/help.rb +1 -1
- data/lib/buildr/core/osx.rb +6 -6
- data/lib/buildr/core/progressbar.rb +4 -4
- data/lib/buildr/core/project.rb +144 -36
- data/lib/buildr/core/shell.rb +34 -34
- data/lib/buildr/core/test.rb +89 -20
- data/lib/buildr/core/transports.rb +8 -7
- data/lib/buildr/core/util.rb +77 -23
- data/lib/buildr/groovy/bdd.rb +5 -5
- data/lib/buildr/groovy/compiler.rb +19 -15
- data/lib/buildr/groovy/shell.rb +6 -6
- data/lib/buildr/ide/eclipse.rb +148 -75
- data/lib/buildr/ide/eclipse/java.rb +3 -3
- data/lib/buildr/ide/eclipse/plugin.rb +8 -5
- data/lib/buildr/ide/eclipse/scala.rb +4 -2
- data/lib/buildr/ide/idea.rb +2 -2
- data/lib/buildr/ide/idea7x.rb +23 -4
- data/lib/buildr/java.rb +1 -0
- data/lib/buildr/java/ant.rb +4 -4
- data/lib/buildr/java/bdd.rb +51 -54
- data/lib/buildr/java/cobertura.rb +57 -35
- data/lib/buildr/java/commands.rb +14 -5
- data/lib/buildr/java/compiler.rb +3 -217
- data/lib/buildr/java/deprecated.rb +4 -4
- data/lib/buildr/java/doc.rb +70 -0
- data/lib/buildr/java/emma.rb +22 -22
- data/lib/buildr/java/jruby.rb +4 -4
- data/lib/buildr/java/jtestr_runner.rb.erb +27 -25
- data/lib/buildr/java/org/apache/buildr/JavaTestFilter.class +0 -0
- data/lib/buildr/java/org/apache/buildr/JavaTestFilter.java +8 -3
- data/lib/buildr/java/packaging.rb +30 -29
- data/lib/buildr/java/pom.rb +4 -4
- data/lib/buildr/java/rjb.rb +6 -6
- data/lib/buildr/java/test_result.rb +61 -85
- data/lib/buildr/java/tests.rb +44 -27
- data/lib/buildr/java/version_requirement.rb +8 -8
- data/lib/buildr/packaging/archive.rb +55 -22
- data/lib/buildr/packaging/artifact.rb +75 -36
- data/lib/buildr/packaging/artifact_namespace.rb +90 -78
- data/lib/buildr/packaging/artifact_search.rb +5 -5
- data/lib/buildr/packaging/gems.rb +11 -7
- data/lib/buildr/packaging/package.rb +10 -7
- data/lib/buildr/packaging/tar.rb +14 -14
- data/lib/buildr/packaging/version_requirement.rb +30 -10
- data/lib/buildr/packaging/ziptask.rb +51 -13
- data/lib/buildr/scala.rb +1 -0
- data/lib/buildr/scala/bdd.rb +25 -20
- data/lib/buildr/scala/compiler.rb +87 -40
- data/lib/buildr/scala/doc.rb +106 -0
- data/lib/buildr/scala/org/apache/buildr/SpecsSingletonRunner.class +0 -0
- data/lib/buildr/scala/org/apache/buildr/SpecsSingletonRunner.java +57 -0
- data/lib/buildr/scala/shell.rb +14 -9
- data/lib/buildr/scala/tests.rb +33 -26
- data/lib/buildr/shell.rb +33 -33
- data/rakelib/all-in-one.rake +113 -0
- data/rakelib/checks.rake +1 -1
- data/rakelib/doc.rake +7 -0
- data/rakelib/package.rake +1 -1
- data/rakelib/release.rake +9 -6
- data/rakelib/rspec.rake +26 -7
- data/rakelib/setup.rake +15 -3
- data/rakelib/stage.rake +18 -11
- data/spec/addon/drb_spec.rb +25 -25
- data/spec/core/application_spec.rb +111 -21
- data/spec/core/build_spec.rb +16 -15
- data/spec/core/cc_spec.rb +174 -0
- data/spec/core/checks_spec.rb +34 -34
- data/spec/core/common_spec.rb +51 -5
- data/spec/core/compile_spec.rb +89 -14
- data/spec/core/extension_spec.rb +127 -19
- data/spec/core/generate_spec.rb +2 -2
- data/spec/core/project_spec.rb +10 -10
- data/spec/core/test_spec.rb +144 -35
- data/spec/core/transport_spec.rb +8 -8
- data/spec/core/util_spec.rb +63 -5
- data/spec/groovy/bdd_spec.rb +5 -5
- data/spec/groovy/compiler_spec.rb +29 -18
- data/spec/ide/eclipse_spec.rb +185 -9
- data/spec/ide/idea7x_spec.rb +22 -10
- data/spec/java/ant_spec.rb +9 -5
- data/spec/java/bdd_spec.rb +29 -37
- data/spec/java/cobertura_spec.rb +12 -12
- data/spec/java/commands_spec.rb +34 -0
- data/spec/java/compiler_spec.rb +53 -53
- data/spec/java/emma_spec.rb +11 -11
- data/spec/java/java_spec.rb +10 -10
- data/spec/java/packaging_spec.rb +67 -20
- data/spec/java/test_coverage_helper.rb +18 -18
- data/spec/java/tests_spec.rb +13 -9
- data/spec/packaging/archive_spec.rb +187 -20
- data/spec/packaging/artifact_namespace_spec.rb +172 -83
- data/spec/packaging/artifact_spec.rb +83 -18
- data/spec/packaging/packaging_spec.rb +41 -14
- data/spec/sandbox.rb +23 -12
- data/spec/scala/bdd_spec.rb +13 -8
- data/spec/scala/compiler_spec.rb +18 -13
- data/spec/scala/scala.rb +3 -3
- data/spec/scala/tests_spec.rb +46 -24
- data/spec/spec_helpers.rb +28 -10
- data/spec/version_requirement_spec.rb +25 -11
- metadata +148 -132
- data/lib/buildr/scala/org/apache/buildr/SpecsSingletonRunner$.class +0 -0
- data/lib/buildr/scala/org/apache/buildr/SpecsSingletonRunner.scala +0 -35
- data/rakelib/stage.rake~ +0 -213
data/spec/java/tests_spec.rb
CHANGED
@@ -39,23 +39,25 @@ describe Buildr::JUnit do
|
|
39
39
|
project('foo').test.compile.dependencies.should include(artifact("junit:junit:jar:#{JUnit.version}"))
|
40
40
|
project('foo').test.dependencies.should include(artifact("junit:junit:jar:#{JUnit.version}"))
|
41
41
|
end
|
42
|
-
|
42
|
+
|
43
43
|
it 'should have REQUIRES up to version 1.5 since it was deprecated in 1.3.3' do
|
44
44
|
Buildr::VERSION.should < '1.5'
|
45
45
|
lambda { JUnit::REQUIRES }.should_not raise_error
|
46
46
|
end
|
47
|
-
|
47
|
+
|
48
48
|
it 'should pick JUnit version from junit build settings' do
|
49
49
|
Buildr::JUnit.instance_eval { @dependencies = nil }
|
50
50
|
write 'build.yaml', 'junit: 1.2.3'
|
51
51
|
define('foo') { test.using(:junit) }
|
52
52
|
project('foo').test.compile.dependencies.should include(artifact("junit:junit:jar:1.2.3"))
|
53
53
|
end
|
54
|
-
|
54
|
+
|
55
55
|
it 'should include JMock dependencies' do
|
56
56
|
define('foo') { test.using(:junit) }
|
57
|
-
|
58
|
-
|
57
|
+
two_or_later = JMock.version[0,1].to_i >= 2
|
58
|
+
group = two_or_later ? "org.jmock" : "jmock"
|
59
|
+
project('foo').test.compile.dependencies.should include(artifact("#{group}:jmock:jar:#{JMock.version}"))
|
60
|
+
project('foo').test.dependencies.should include(artifact("#{group}:jmock:jar:#{JMock.version}"))
|
59
61
|
end
|
60
62
|
|
61
63
|
it 'should pick JUnit version from junit build settings' do
|
@@ -65,7 +67,7 @@ describe Buildr::JUnit do
|
|
65
67
|
define('foo') { test.using(:junit) }
|
66
68
|
project('foo').test.compile.dependencies.should include(artifact("jmock:jmock:jar:1.2.3"))
|
67
69
|
end
|
68
|
-
|
70
|
+
|
69
71
|
it 'should include public classes extending junit.framework.TestCase' do
|
70
72
|
write 'src/test/java/com/example/FirstTest.java', <<-JAVA
|
71
73
|
package com.example;
|
@@ -287,7 +289,7 @@ describe Buildr::JUnit do
|
|
287
289
|
fork_tests :each
|
288
290
|
project('foo').test.failed_tests.should be_empty
|
289
291
|
end
|
290
|
-
|
292
|
+
|
291
293
|
after do
|
292
294
|
# Yes, this is ugly. Better solution?
|
293
295
|
Buildr::JUnit.instance_eval { @dependencies = nil }
|
@@ -374,8 +376,10 @@ describe Buildr::TestNG do
|
|
374
376
|
|
375
377
|
it 'should include TestNG dependencies' do
|
376
378
|
define('foo') { test.using :testng }
|
377
|
-
|
378
|
-
|
379
|
+
two_or_later = JMock.version[0,1].to_i >= 2
|
380
|
+
group = two_or_later ? "org.jmock" : "jmock"
|
381
|
+
project('foo').test.compile.dependencies.should include(artifact("#{group}:jmock:jar:#{JMock.version}"))
|
382
|
+
project('foo').test.dependencies.should include(artifact("#{group}:jmock:jar:#{JMock.version}"))
|
379
383
|
end
|
380
384
|
|
381
385
|
it 'should include classes using TestNG annotations' do
|
@@ -22,6 +22,8 @@ describe 'ArchiveTask', :shared=>true do
|
|
22
22
|
@dir = File.expand_path('test')
|
23
23
|
@files = %w{Test1.txt Text2.html}.map { |file| File.expand_path(file, @dir) }.
|
24
24
|
each { |file| write file, content_for(file) }
|
25
|
+
@empty_dirs = %w{EmptyDir1 EmptyDir2}.map { |file| File.expand_path(file, @dir) }.
|
26
|
+
each { |file| mkdir file }
|
25
27
|
end
|
26
28
|
|
27
29
|
# Not too smart, we just create some content based on file name to make sure you read what you write.
|
@@ -59,6 +61,11 @@ describe 'ArchiveTask', :shared=>true do
|
|
59
61
|
inspect_archive { |archive| archive.should be_empty }
|
60
62
|
end
|
61
63
|
|
64
|
+
it 'should raise error when include() is called with nil values' do
|
65
|
+
lambda { archive(@archive).include(nil) }.should raise_error
|
66
|
+
lambda { archive(@archive).include([nil]) }.should raise_error
|
67
|
+
end
|
68
|
+
|
62
69
|
it 'should create empty archive if called #clean method' do
|
63
70
|
archive(@archive).include(@files).clean.invoke
|
64
71
|
inspect_archive { |archive| archive.should be_empty }
|
@@ -83,6 +90,22 @@ describe 'ArchiveTask', :shared=>true do
|
|
83
90
|
inspect_archive.keys.should include('included')
|
84
91
|
end
|
85
92
|
|
93
|
+
it 'should archive artifacts' do
|
94
|
+
write 'library-1.0.txt', 'library-1.0'
|
95
|
+
artifact("org.example:library:txt:1.0").from 'library-1.0.txt'
|
96
|
+
archive(@archive).include("org.example:library:txt:1.0").invoke
|
97
|
+
inspect_archive.keys.should include('library-1.0.txt')
|
98
|
+
end
|
99
|
+
|
100
|
+
it 'should archive project artifacts' do
|
101
|
+
define 'p1' do
|
102
|
+
project.version = '1.0'
|
103
|
+
package(:zip)
|
104
|
+
end
|
105
|
+
archive(@archive).include(project('p1')).invoke
|
106
|
+
inspect_archive.keys.should include('p1-1.0.zip')
|
107
|
+
end
|
108
|
+
|
86
109
|
it 'should include entry for directory' do
|
87
110
|
archive(@archive).include(@dir).invoke
|
88
111
|
inspect_archive { |archive| @files.each { |f| archive['test/' + File.basename(f)].should eql(content_for(f)) } }
|
@@ -112,12 +135,18 @@ describe 'ArchiveTask', :shared=>true do
|
|
112
135
|
end
|
113
136
|
end
|
114
137
|
|
138
|
+
it 'should raise error when using :from with nil value' do
|
139
|
+
lambda {
|
140
|
+
archive(@archive).include(:from=>nil)
|
141
|
+
}.should raise_error
|
142
|
+
end
|
143
|
+
|
115
144
|
it 'should exclude entire directory and all its children' do
|
116
145
|
mkpath "#{@dir}/sub"
|
117
146
|
write "#{@dir}/sub/test"
|
118
147
|
archive(@archive).include(@dir).exclude("#{@dir}/sub").invoke
|
119
148
|
inspect_archive do |archive|
|
120
|
-
archive.keys.select { |file| file =~ /sub/ }.should be_empty
|
149
|
+
archive.keys.select { |file| file =~ /sub/ }.should be_empty
|
121
150
|
end
|
122
151
|
end
|
123
152
|
|
@@ -171,6 +200,11 @@ describe 'ArchiveTask', :shared=>true do
|
|
171
200
|
archive(@archive).include(@files.first, :as=>'test/sample').invoke
|
172
201
|
inspect_archive { |archive| @files.each { |f| archive['test/sample'].should eql(content_for(@files.first)) } }
|
173
202
|
end
|
203
|
+
|
204
|
+
it 'should archive directory into specified alias, without using "."' do
|
205
|
+
archive(@archive).include(@dir, :as=>'.').invoke
|
206
|
+
inspect_archive { |archive| archive.keys.should_not include(".") }
|
207
|
+
end
|
174
208
|
|
175
209
|
it 'should archive file into specified name/path' do
|
176
210
|
archive(@archive).include(@files.first, :as=>'test/sample', :path=>'path').invoke
|
@@ -219,19 +253,19 @@ describe 'ArchiveTask', :shared=>true do
|
|
219
253
|
create_for_merge do |src|
|
220
254
|
archive(@archive).merge(src).include(File.basename(@files.first))
|
221
255
|
archive(@archive).invoke
|
222
|
-
inspect_archive do |archive|
|
256
|
+
inspect_archive do |archive|
|
223
257
|
archive[File.basename(@files.first)].should eql(content_for(@files.first))
|
224
258
|
archive[File.basename(@files.last)].should be_nil
|
225
259
|
end
|
226
260
|
end
|
227
261
|
end
|
228
|
-
|
262
|
+
|
229
263
|
it 'should expand another archive file with exclude pattern' do
|
230
264
|
create_for_merge do |src|
|
231
265
|
archive(@archive).merge(src).exclude(File.basename(@files.first))
|
232
266
|
archive(@archive).invoke
|
233
|
-
inspect_archive do |archive|
|
234
|
-
@files[1..-1].each { |f| archive[File.basename(f)].should eql(content_for(f)) }
|
267
|
+
inspect_archive do |archive|
|
268
|
+
@files[1..-1].each { |f| archive[File.basename(f)].should eql(content_for(f)) }
|
235
269
|
archive[File.basename(@files.first)].should be_nil
|
236
270
|
end
|
237
271
|
end
|
@@ -285,7 +319,7 @@ describe 'ArchiveTask', :shared=>true do
|
|
285
319
|
# all included files newer.
|
286
320
|
File.utime Time.now - 100, Time.now - 100, @archive
|
287
321
|
archive(@archive).include(@files).invoke
|
288
|
-
File.stat(@archive).mtime.should be_close(Time.now, 10)
|
322
|
+
File.stat(@archive).mtime.should be_close(Time.now, 10)
|
289
323
|
end
|
290
324
|
|
291
325
|
it 'should do nothing if all files are uptodate' do
|
@@ -293,7 +327,7 @@ describe 'ArchiveTask', :shared=>true do
|
|
293
327
|
# By touching all files in the past, there's nothing new to update.
|
294
328
|
(@files + [@archive]).each { |f| File.utime Time.now - 100, Time.now - 100, f }
|
295
329
|
archive(@archive).include(@files).invoke
|
296
|
-
File.stat(@archive).mtime.should be_close(Time.now - 100, 10)
|
330
|
+
File.stat(@archive).mtime.should be_close(Time.now - 100, 10)
|
297
331
|
end
|
298
332
|
|
299
333
|
it 'should update if one of the files is recent' do
|
@@ -342,7 +376,7 @@ describe TarTask, ' gzipped' do
|
|
342
376
|
|
343
377
|
def inspect_archive
|
344
378
|
entries = {}
|
345
|
-
Zlib::GzipReader.open @archive do |gzip|
|
379
|
+
Zlib::GzipReader.open @archive do |gzip|
|
346
380
|
Archive::Tar::Minitar.open gzip, 'r' do |reader|
|
347
381
|
reader.each { |entry| entries[entry.directory ? "#{entry.name}/" : entry.name] = entry.read }
|
348
382
|
end
|
@@ -370,23 +404,50 @@ describe ZipTask do
|
|
370
404
|
entries
|
371
405
|
end
|
372
406
|
|
407
|
+
it 'should include empty dirs' do
|
408
|
+
archive(@archive).include(@dir)
|
409
|
+
archive(@archive).invoke
|
410
|
+
inspect_archive do |archive|
|
411
|
+
archive.keys.should include('test/EmptyDir1/')
|
412
|
+
end
|
413
|
+
end
|
414
|
+
|
415
|
+
it 'should include empty dirs from Dir' do
|
416
|
+
archive(@archive).include(Dir["#{@dir}/*"])
|
417
|
+
archive(@archive).invoke
|
418
|
+
inspect_archive do |archive|
|
419
|
+
archive.keys.should include('EmptyDir1/')
|
420
|
+
end
|
421
|
+
end
|
422
|
+
|
373
423
|
it 'should work with path object' do
|
374
424
|
archive(@archive).path('code').include(@files)
|
375
425
|
archive(@archive).invoke
|
376
426
|
inspect_archive { |archive| archive.keys.should include('code/') }
|
377
427
|
end
|
428
|
+
|
429
|
+
it 'should have path object that includes empty dirs' do
|
430
|
+
archive(@archive).path('code').include(Dir["#{@dir}/*"])
|
431
|
+
archive(@archive).invoke
|
432
|
+
inspect_archive do |archive|
|
433
|
+
archive.keys.should include('code/EmptyDir1/')
|
434
|
+
end
|
435
|
+
end
|
378
436
|
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
|
384
|
-
|
385
|
-
|
437
|
+
# chmod is not reliable on Windows
|
438
|
+
unless Buildr::Util.win_os?
|
439
|
+
it 'should preserve file permissions' do
|
440
|
+
# with JRuby it's important to use absolute paths with File.chmod()
|
441
|
+
# http://jira.codehaus.org/browse/JRUBY-3300
|
442
|
+
hello = File.expand_path('src/main/bin/hello')
|
443
|
+
write hello, 'echo hi'
|
444
|
+
File.chmod(0777, hello)
|
445
|
+
fail("Failed to set permission on #{hello}") unless (File.stat(hello).mode & 0777) == 0777
|
386
446
|
|
387
|
-
|
388
|
-
|
389
|
-
|
447
|
+
zip('foo.zip').include('src/main/bin/*').invoke
|
448
|
+
unzip('target' => 'foo.zip').extract
|
449
|
+
(File.stat('target/hello').mode & 0777).should == 0777
|
450
|
+
end
|
390
451
|
end
|
391
452
|
|
392
453
|
end
|
@@ -399,6 +460,8 @@ describe Unzip do
|
|
399
460
|
@files = %w{Test1.txt Text2.html}.map { |file| File.join(@dir, file) }.
|
400
461
|
each { |file| write file, content_for(file) }
|
401
462
|
@target = File.expand_path('target')
|
463
|
+
@targz = File.expand_path('test.tar.gz')
|
464
|
+
@targz2 = File.expand_path('test.tgz')
|
402
465
|
end
|
403
466
|
|
404
467
|
# Not too smart, we just create some content based on file name to
|
@@ -407,11 +470,21 @@ describe Unzip do
|
|
407
470
|
"Content for #{File.basename(file)}"
|
408
471
|
end
|
409
472
|
|
473
|
+
def with_tar(*args)
|
474
|
+
tar(@targz).include(*args.empty? ? @files : args).invoke
|
475
|
+
yield
|
476
|
+
end
|
477
|
+
|
478
|
+
def with_tar_too(*args)
|
479
|
+
tar(@targz2).include(*args.empty? ? @files : args).invoke
|
480
|
+
yield
|
481
|
+
end
|
482
|
+
|
410
483
|
def with_zip(*args)
|
411
484
|
zip(@zip).include(*args.empty? ? @files : args).invoke
|
412
485
|
yield
|
413
486
|
end
|
414
|
-
|
487
|
+
|
415
488
|
it 'should touch target directory' do
|
416
489
|
with_zip do
|
417
490
|
mkdir @target
|
@@ -428,6 +501,20 @@ describe Unzip do
|
|
428
501
|
end
|
429
502
|
end
|
430
503
|
|
504
|
+
it 'should expand files from a tar.gz file' do
|
505
|
+
with_tar do
|
506
|
+
unzip(@target=>@targz).target.invoke
|
507
|
+
@files.each { |f| File.read(File.join(@target, File.basename(f))).should eql(content_for(f)) }
|
508
|
+
end
|
509
|
+
end
|
510
|
+
|
511
|
+
it 'should expand files from a .tgz file' do
|
512
|
+
with_tar_too do
|
513
|
+
unzip(@target=>@targz2).target.invoke
|
514
|
+
@files.each { |f| File.read(File.join(@target, File.basename(f))).should eql(content_for(f)) }
|
515
|
+
end
|
516
|
+
end
|
517
|
+
|
431
518
|
it 'should expand all files' do
|
432
519
|
with_zip do
|
433
520
|
unzip(@target=>@zip).target.invoke
|
@@ -435,6 +522,13 @@ describe Unzip do
|
|
435
522
|
end
|
436
523
|
end
|
437
524
|
|
525
|
+
it 'should expand all files from a .tar.gz file' do
|
526
|
+
with_tar do
|
527
|
+
unzip(@target=>@targz).target.invoke
|
528
|
+
FileList[File.join(@target, '*')].size.should be(@files.size)
|
529
|
+
end
|
530
|
+
end
|
531
|
+
|
438
532
|
it 'should expand only included files' do
|
439
533
|
with_zip do
|
440
534
|
only = File.basename(@files.first)
|
@@ -444,6 +538,15 @@ describe Unzip do
|
|
444
538
|
end
|
445
539
|
end
|
446
540
|
|
541
|
+
it 'should expand only included files from a .tar.gz file' do
|
542
|
+
with_tar do
|
543
|
+
only = File.basename(@files.first)
|
544
|
+
unzip(@target=>@targz).include(only).target.invoke
|
545
|
+
FileList[File.join(@target, '*')].should include(File.expand_path(only, @target))
|
546
|
+
FileList[File.join(@target, '*')].size.should be(1)
|
547
|
+
end
|
548
|
+
end
|
549
|
+
|
447
550
|
it 'should expand all but excluded files' do
|
448
551
|
with_zip do
|
449
552
|
except = File.basename(@files.first)
|
@@ -453,6 +556,15 @@ describe Unzip do
|
|
453
556
|
end
|
454
557
|
end
|
455
558
|
|
559
|
+
it 'should expand all but excluded files with a .tar.gz file' do
|
560
|
+
with_tar do
|
561
|
+
except = File.basename(@files.first)
|
562
|
+
unzip(@target=>@targz).exclude(except).target.invoke
|
563
|
+
FileList[File.join(@target, '*')].should_not include(File.expand_path(except, @target))
|
564
|
+
FileList[File.join(@target, '*')].size.should be(@files.size - 1)
|
565
|
+
end
|
566
|
+
end
|
567
|
+
|
456
568
|
it 'should include with nested path patterns' do
|
457
569
|
with_zip @files, :path=>'test/path' do
|
458
570
|
only = File.basename(@files.first)
|
@@ -469,6 +581,22 @@ describe Unzip do
|
|
469
581
|
end
|
470
582
|
end
|
471
583
|
|
584
|
+
it 'should include with nested path patterns with a .tar.gz file' do
|
585
|
+
with_tar @files, :path=>'test/path' do
|
586
|
+
only = File.basename(@files.first)
|
587
|
+
unzip(@target=>@targz).include(only).target.invoke
|
588
|
+
FileList[File.join(@target, '*')].should be_empty
|
589
|
+
|
590
|
+
Rake::Task.clear ; rm_rf @target
|
591
|
+
unzip(@target=>@targz).include('test/path/' + only).target.invoke
|
592
|
+
FileList[File.join(@target, 'test/path/*')].size.should be(1)
|
593
|
+
|
594
|
+
Rake::Task.clear ; rm_rf @target
|
595
|
+
unzip(@target=>@targz).include('test/**/*').target.invoke
|
596
|
+
FileList[File.join(@target, 'test/path/*')].size.should be(2)
|
597
|
+
end
|
598
|
+
end
|
599
|
+
|
472
600
|
it 'should include with relative path' do
|
473
601
|
with_zip @files, :path=>'test/path' do
|
474
602
|
only = File.basename(@files.first)
|
@@ -488,7 +616,27 @@ describe Unzip do
|
|
488
616
|
FileList[File.join(@target, 'path/*')].size.should be(2)
|
489
617
|
end
|
490
618
|
end
|
491
|
-
|
619
|
+
|
620
|
+
it 'should include with relative path with a .tar.gz file' do
|
621
|
+
with_tar @files, :path=>'test/path' do
|
622
|
+
only = File.basename(@files.first)
|
623
|
+
unzip(@target=>@targz).tap { |unzip| unzip.from_path('test').include(only) }.target.invoke
|
624
|
+
FileList[File.join(@target, '*')].should be_empty
|
625
|
+
|
626
|
+
Rake::Task.clear ; rm_rf @target
|
627
|
+
unzip(@target=>@targz).tap { |unzip| unzip.from_path('test').include('test/*') }.target.invoke
|
628
|
+
FileList[File.join(@target, 'path/*')].should be_empty
|
629
|
+
|
630
|
+
Rake::Task.clear ; rm_rf @target
|
631
|
+
unzip(@target=>@targz).tap { |unzip| unzip.from_path('test').include('path/*' + only) }.target.invoke
|
632
|
+
FileList[File.join(@target, 'path/*')].size.should be(1)
|
633
|
+
|
634
|
+
Rake::Task.clear ; rm_rf @target
|
635
|
+
unzip(@target=>@targz).tap { |unzip| unzip.from_path('test').include('path/*') }.target.invoke
|
636
|
+
FileList[File.join(@target, 'path/*')].size.should be(2)
|
637
|
+
end
|
638
|
+
end
|
639
|
+
|
492
640
|
it 'should exclude with relative path' do
|
493
641
|
with_zip @files, :path=>'test' do
|
494
642
|
except = File.basename(@files.first)
|
@@ -498,6 +646,15 @@ describe Unzip do
|
|
498
646
|
end
|
499
647
|
end
|
500
648
|
|
649
|
+
it 'should exclude with relative path on a tar.gz file' do
|
650
|
+
with_tar @files, :path=>'test' do
|
651
|
+
except = File.basename(@files.first)
|
652
|
+
unzip(@target=>@targz).tap { |unzip| unzip.from_path('test').exclude(except) }.target.invoke
|
653
|
+
FileList[File.join(@target, '*')].should include(File.join(@target, File.basename(@files[1])))
|
654
|
+
FileList[File.join(@target, '*')].size.should be(@files.size - 1)
|
655
|
+
end
|
656
|
+
end
|
657
|
+
|
501
658
|
it "should handle relative paths without any includes or excludes" do
|
502
659
|
lib_files = %w{Test3.so Test4.rb}.
|
503
660
|
map { |file| File.join(@dir, file) }.
|
@@ -508,6 +665,16 @@ describe Unzip do
|
|
508
665
|
FileList[File.join(@target, '**/*')].should have(2).files
|
509
666
|
end
|
510
667
|
|
668
|
+
it "should handle relative paths without any includes or excludes with a tar.gz file" do
|
669
|
+
lib_files = %w{Test3.so Test4.rb}.
|
670
|
+
map { |file| File.join(@dir, file) }.
|
671
|
+
each { |file| write file, content_for(file) }
|
672
|
+
tar(@targz).include(@files, :path => 'src').include(lib_files, :path => 'lib').invoke
|
673
|
+
|
674
|
+
unzip(@target=>@targz).tap { |unzip| unzip.from_path('lib') }.target.invoke
|
675
|
+
FileList[File.join(@target, '**/*')].should have(2).files
|
676
|
+
end
|
677
|
+
|
511
678
|
it 'should return itself from root method' do
|
512
679
|
task = unzip(@target=>@zip)
|
513
680
|
task.root.should be(task)
|
@@ -26,46 +26,58 @@ describe Buildr::ArtifactNamespace do
|
|
26
26
|
Object.send :remove_const, :A
|
27
27
|
end
|
28
28
|
|
29
|
-
describe '.root' do
|
29
|
+
describe '.root' do
|
30
30
|
it 'should return the top level namespace' do
|
31
31
|
Buildr::ArtifactNamespace.root.should be_root
|
32
32
|
end
|
33
|
-
|
33
|
+
|
34
34
|
it 'should yield the namespace if a block is given' do
|
35
|
-
|
35
|
+
flag = false
|
36
|
+
Buildr::ArtifactNamespace.root { |ns| flag = true; ns.should be_root }
|
37
|
+
flag.should == true
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'should return the root when used outside of a project definition' do
|
41
|
+
artifact_ns.should be_root
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'should yield to a block when used outside of a project definition' do
|
45
|
+
flag = false
|
46
|
+
artifact_ns {|ns| flag = true; ns.should be_root}
|
47
|
+
flag.should == true
|
36
48
|
end
|
37
49
|
end
|
38
50
|
|
39
|
-
describe '.instance' do
|
51
|
+
describe '.instance' do
|
40
52
|
it 'should return the top level namespace when invoked outside a project definition' do
|
41
53
|
artifact_ns.should be_root
|
42
54
|
end
|
43
55
|
|
44
|
-
it 'should return the namespace for the receiving project' do
|
56
|
+
it 'should return the namespace for the receiving project' do
|
45
57
|
define('foo') { }
|
46
58
|
project('foo').artifact_ns.name.should == 'foo'
|
47
59
|
end
|
48
|
-
|
60
|
+
|
49
61
|
it 'should return the current project namespace when invoked inside a project' do
|
50
62
|
define 'foo' do
|
51
63
|
artifact_ns.should_not be_root
|
52
64
|
artifact_ns.name.should == 'foo'
|
53
|
-
task :doit do
|
65
|
+
task :doit do
|
54
66
|
artifact_ns.should_not be_root
|
55
67
|
artifact_ns.name.should == 'foo'
|
56
68
|
end.invoke
|
57
69
|
end
|
58
70
|
end
|
59
|
-
|
71
|
+
|
60
72
|
it 'should return the root namespace if given :root' do
|
61
73
|
artifact_ns(:root).should be_root
|
62
74
|
end
|
63
|
-
|
64
|
-
it 'should return the namespace for the given name' do
|
75
|
+
|
76
|
+
it 'should return the namespace for the given name' do
|
65
77
|
artifact_ns(:foo).name.should == 'foo'
|
66
78
|
artifact_ns('foo:bar').name.should == 'foo:bar'
|
67
79
|
artifact_ns(['foo', 'bar', 'baz']).name.should == 'foo:bar:baz'
|
68
|
-
abc_module do
|
80
|
+
abc_module do
|
69
81
|
artifact_ns(A::B::C).name.should == 'A::B::C'
|
70
82
|
end
|
71
83
|
artifact_ns(:root).should be_root
|
@@ -79,12 +91,12 @@ describe Buildr::ArtifactNamespace do
|
|
79
91
|
end
|
80
92
|
end
|
81
93
|
|
82
|
-
describe '#parent' do
|
83
|
-
it 'should be nil for root namespace' do
|
94
|
+
describe '#parent' do
|
95
|
+
it 'should be nil for root namespace' do
|
84
96
|
artifact_ns(:root).parent.should be_nil
|
85
97
|
end
|
86
|
-
|
87
|
-
it 'should be the parent namespace for nested modules' do
|
98
|
+
|
99
|
+
it 'should be the parent namespace for nested modules' do
|
88
100
|
abc_module do
|
89
101
|
artifact_ns(A::B::C).parent.should == artifact_ns(A::B)
|
90
102
|
artifact_ns(A::B).parent.should == artifact_ns(A)
|
@@ -93,8 +105,8 @@ describe Buildr::ArtifactNamespace do
|
|
93
105
|
end
|
94
106
|
|
95
107
|
it 'should be the parent namespace for nested projects' do
|
96
|
-
define 'a' do
|
97
|
-
define 'b' do
|
108
|
+
define 'a' do
|
109
|
+
define 'b' do
|
98
110
|
define 'c' do
|
99
111
|
artifact_ns.parent.should == artifact_ns(parent)
|
100
112
|
end
|
@@ -104,9 +116,9 @@ describe Buildr::ArtifactNamespace do
|
|
104
116
|
end
|
105
117
|
end
|
106
118
|
end
|
107
|
-
|
119
|
+
|
108
120
|
describe '#parent=' do
|
109
|
-
it 'should reject to set parent for root namespace' do
|
121
|
+
it 'should reject to set parent for root namespace' do
|
110
122
|
lambda { artifact_ns(:root).parent = :foo }.should raise_error(Exception, /cannot set parent/i)
|
111
123
|
end
|
112
124
|
|
@@ -118,10 +130,10 @@ describe Buildr::ArtifactNamespace do
|
|
118
130
|
end
|
119
131
|
|
120
132
|
it 'should allow to set parent to :current' do
|
121
|
-
abc_module do
|
133
|
+
abc_module do
|
122
134
|
mod = A::B
|
123
135
|
artifact_ns(mod).parent = :current
|
124
|
-
def mod.stuff
|
136
|
+
def mod.stuff
|
125
137
|
Buildr::artifact_ns(self)
|
126
138
|
end
|
127
139
|
define 'a' do
|
@@ -133,14 +145,14 @@ describe Buildr::ArtifactNamespace do
|
|
133
145
|
end
|
134
146
|
end
|
135
147
|
end
|
136
|
-
|
137
|
-
describe '#need' do
|
148
|
+
|
149
|
+
describe '#need' do
|
138
150
|
it 'should accept an artifact spec' do
|
139
151
|
define 'one' do
|
140
152
|
artifact_ns.need 'a:b:c:1'
|
141
153
|
# referenced by spec
|
142
154
|
artifact_ns['a:b:c'].should_not be_selected
|
143
|
-
|
155
|
+
|
144
156
|
# referenced by name
|
145
157
|
artifact_ns[:b].should_not be_selected
|
146
158
|
artifact_ns[:b].should be_satisfied_by('a:b:c:1')
|
@@ -155,7 +167,7 @@ describe Buildr::ArtifactNamespace do
|
|
155
167
|
artifact_ns.need 'thing -> a:b:c:2.1 -> ~>2.0'
|
156
168
|
# referenced by spec
|
157
169
|
artifact_ns['a:b:c'].should_not be_selected
|
158
|
-
|
170
|
+
|
159
171
|
# referenced by name
|
160
172
|
artifact_ns.key?(:b).should be_false
|
161
173
|
artifact_ns[:thing].should_not be_selected
|
@@ -165,7 +177,7 @@ describe Buildr::ArtifactNamespace do
|
|
165
177
|
end
|
166
178
|
end
|
167
179
|
|
168
|
-
it 'should accept a hash :name -> requirement_spec' do
|
180
|
+
it 'should accept a hash :name -> requirement_spec' do
|
169
181
|
define 'one' do
|
170
182
|
artifact_ns.need :thing => 'a:b:c:2.1 -> ~>2.0'
|
171
183
|
artifact_ns[:thing].should be_satisfied_by('a:b:c:2.5')
|
@@ -181,8 +193,8 @@ describe Buildr::ArtifactNamespace do
|
|
181
193
|
end
|
182
194
|
end
|
183
195
|
|
184
|
-
it 'should take a hash :name -> specs_array' do
|
185
|
-
define 'one' do
|
196
|
+
it 'should take a hash :name -> specs_array' do
|
197
|
+
define 'one' do
|
186
198
|
artifact_ns.need :things => ['foo:bar:jar:1.0',
|
187
199
|
'foo:baz:jar:2.0',]
|
188
200
|
artifact_ns['foo:bar:jar'].should_not be_selected
|
@@ -194,8 +206,8 @@ describe Buildr::ArtifactNamespace do
|
|
194
206
|
end
|
195
207
|
end
|
196
208
|
|
197
|
-
it 'should select best matching version if defined' do
|
198
|
-
define 'one' do
|
209
|
+
it 'should select best matching version if defined' do
|
210
|
+
define 'one' do
|
199
211
|
artifact_ns.use :a => 'foo:bar:jar:1.5'
|
200
212
|
artifact_ns.use :b => 'foo:baz:jar:2.0'
|
201
213
|
define 'two' do
|
@@ -205,7 +217,7 @@ describe Buildr::ArtifactNamespace do
|
|
205
217
|
artifact_ns.need :c => 'foo:bat:jar:3.0'
|
206
218
|
artifact_ns['foo:bat:jar'].should_not be_selected
|
207
219
|
artifact_ns[:c].should_not be_selected
|
208
|
-
|
220
|
+
|
209
221
|
artifact_ns.need :one => 'foo:bar:jar:>=1.0'
|
210
222
|
artifact_ns[:one].version.should == '1.5'
|
211
223
|
artifact_ns[:one].should be_selected
|
@@ -220,7 +232,7 @@ describe Buildr::ArtifactNamespace do
|
|
220
232
|
end
|
221
233
|
end
|
222
234
|
|
223
|
-
describe '#use' do
|
235
|
+
describe '#use' do
|
224
236
|
it 'should register the artifact on namespace' do
|
225
237
|
define 'one' do
|
226
238
|
artifact_ns.use :thing => 'a:b:c:1'
|
@@ -232,7 +244,7 @@ describe Buildr::ArtifactNamespace do
|
|
232
244
|
artifact_ns[:thing].requirement.should be_nil
|
233
245
|
artifact_ns[:thing].version.should == '2'
|
234
246
|
artifact_ns[:thing].id.should == 'd'
|
235
|
-
|
247
|
+
|
236
248
|
artifact_ns.use :copied => artifact_ns.parent[:thing]
|
237
249
|
artifact_ns[:copied].should_not == artifact_ns.parent[:thing]
|
238
250
|
artifact_ns[:copied].requirement.should be_nil
|
@@ -258,7 +270,7 @@ describe Buildr::ArtifactNamespace do
|
|
258
270
|
artifact_ns['a:b:c'].version.should == '2'
|
259
271
|
end
|
260
272
|
end
|
261
|
-
|
273
|
+
|
262
274
|
it 'should complain if namespace requirement is not satisfied' do
|
263
275
|
define 'one' do
|
264
276
|
artifact_ns.need :bar => 'foo:bar:baz:~>1.5'
|
@@ -266,7 +278,7 @@ describe Buildr::ArtifactNamespace do
|
|
266
278
|
end
|
267
279
|
end
|
268
280
|
|
269
|
-
it 'should be able to register a group' do
|
281
|
+
it 'should be able to register a group' do
|
270
282
|
specs = ['its:me:here:1', 'its:you:there:2']
|
271
283
|
artifact_ns.use :them => specs
|
272
284
|
artifact_ns[:them].map(&:to_spec).should == specs
|
@@ -274,7 +286,7 @@ describe Buildr::ArtifactNamespace do
|
|
274
286
|
artifact_ns[:you].should be_nil
|
275
287
|
end
|
276
288
|
|
277
|
-
it 'should be able to assign sub namespaces' do
|
289
|
+
it 'should be able to assign sub namespaces' do
|
278
290
|
artifact_ns(:foo).bar = "foo:bar:baz:0"
|
279
291
|
artifact_ns(:moo).foo = artifact_ns(:foo)
|
280
292
|
artifact_ns(:moo).foo.should == artifact_ns(:foo)
|
@@ -289,15 +301,22 @@ describe Buildr::ArtifactNamespace do
|
|
289
301
|
end
|
290
302
|
end
|
291
303
|
|
304
|
+
it 'should handle version string' do
|
305
|
+
foo = artifact_ns do |ns|
|
306
|
+
ns.bar = 'a:b:c:1'
|
307
|
+
end
|
308
|
+
foo.use :bar => '2.0'
|
309
|
+
foo.bar.version.should == '2.0'
|
310
|
+
end
|
292
311
|
end
|
293
312
|
|
294
|
-
describe '#values' do
|
295
|
-
it 'returns the artifacts defined on namespace' do
|
313
|
+
describe '#values' do
|
314
|
+
it 'returns the artifacts defined on namespace' do
|
296
315
|
define 'foo' do
|
297
316
|
artifact_ns.use 'foo:one:baz:1.0'
|
298
317
|
define 'bar' do
|
299
318
|
artifact_ns.use 'foo:two:baz:1.0'
|
300
|
-
|
319
|
+
|
301
320
|
specs = artifact_ns.values.map(&:to_spec)
|
302
321
|
specs.should include('foo:two:baz:1.0')
|
303
322
|
specs.should_not include('foo:one:baz:1.0')
|
@@ -309,13 +328,13 @@ describe Buildr::ArtifactNamespace do
|
|
309
328
|
end
|
310
329
|
end
|
311
330
|
|
312
|
-
describe '#values_at' do
|
313
|
-
it 'returns the named artifacts' do
|
331
|
+
describe '#values_at' do
|
332
|
+
it 'returns the named artifacts' do
|
314
333
|
define 'foo' do
|
315
334
|
artifact_ns.use 'foo:one:baz:1.0'
|
316
335
|
define 'bar' do
|
317
336
|
artifact_ns.use :foo_baz => 'foo:two:baz:1.0'
|
318
|
-
|
337
|
+
|
319
338
|
specs = artifact_ns.values_at('one').map(&:to_spec)
|
320
339
|
specs.should include('foo:one:baz:1.0')
|
321
340
|
specs.should_not include('foo:two:baz:1.0')
|
@@ -332,7 +351,7 @@ describe Buildr::ArtifactNamespace do
|
|
332
351
|
artifact_ns.use 'foo:one:baz:2.0'
|
333
352
|
define 'bar' do
|
334
353
|
artifact_ns.use :older => 'foo:one:baz:1.0'
|
335
|
-
|
354
|
+
|
336
355
|
specs = artifact_ns.values_at('foo:one:baz').map(&:to_spec)
|
337
356
|
specs.should include('foo:one:baz:1.0')
|
338
357
|
specs.should_not include('foo:one:baz:2.0')
|
@@ -348,7 +367,7 @@ describe Buildr::ArtifactNamespace do
|
|
348
367
|
artifact_ns.use 'foo:one:baz:2.0'
|
349
368
|
define 'bar' do
|
350
369
|
artifact_ns.use :older => 'foo:one:baz:1.0'
|
351
|
-
|
370
|
+
|
352
371
|
specs = artifact_ns.values_at('foo:one:baz:>1.0').map(&:to_spec)
|
353
372
|
specs.should include('foo:one:baz:2.0')
|
354
373
|
specs.should_not include('foo:one:baz:1.0')
|
@@ -356,14 +375,57 @@ describe Buildr::ArtifactNamespace do
|
|
356
375
|
end
|
357
376
|
end
|
358
377
|
end
|
359
|
-
|
360
|
-
describe '#
|
361
|
-
it '
|
378
|
+
|
379
|
+
describe '#artifacts' do
|
380
|
+
it 'returns artifacts in namespace' do
|
381
|
+
define 'one' do
|
382
|
+
artifact_ns[:foo] = 'group:foo:jar:1'
|
383
|
+
artifact_ns[:bar] = 'group:bar:jar:1'
|
384
|
+
artifact_ns.artifacts.map{|a| a.to_spec}.should include('group:foo:jar:1', 'group:bar:jar:1')
|
385
|
+
end
|
386
|
+
end
|
387
|
+
end
|
388
|
+
|
389
|
+
describe '#keys' do
|
390
|
+
it 'returns names in namespace' do
|
391
|
+
define 'one' do
|
392
|
+
artifact_ns[:foo] = 'group:foo:jar:1'
|
393
|
+
artifact_ns[:bar] = 'group:bar:jar:1'
|
394
|
+
artifact_ns.keys.should include('foo', 'bar')
|
395
|
+
end
|
396
|
+
end
|
397
|
+
end
|
398
|
+
|
399
|
+
describe '#delete' do
|
400
|
+
it 'deletes corresponding artifact requirement' do
|
401
|
+
define 'one' do
|
402
|
+
artifact_ns[:foo] = 'group:foo:jar:1'
|
403
|
+
artifact_ns[:bar] = 'group:bar:jar:1'
|
404
|
+
artifact_ns.delete :bar
|
405
|
+
artifact_ns.artifacts.map{|a| a.to_spec}.should include('group:foo:jar:1')
|
406
|
+
artifact_ns[:foo].to_spec.should eql('group:foo:jar:1')
|
407
|
+
end
|
408
|
+
end
|
409
|
+
end
|
410
|
+
|
411
|
+
describe '#clear' do
|
412
|
+
it 'clears all artifact requirements in namespace' do
|
413
|
+
define 'one' do
|
414
|
+
artifact_ns[:foo] = 'group:foo:jar:1'
|
415
|
+
artifact_ns[:bar] = 'group:bar:jar:1'
|
416
|
+
artifact_ns.clear
|
417
|
+
artifact_ns.artifacts.should be_empty
|
418
|
+
end
|
419
|
+
end
|
420
|
+
end
|
421
|
+
|
422
|
+
describe '#method_missing' do
|
423
|
+
it 'should use cool_aid! to create a requirement' do
|
362
424
|
define 'foo' do
|
363
425
|
artifact_ns.cool_aid!('cool:aid:jar:2').should be_kind_of(ArtifactNamespace::ArtifactRequirement)
|
364
426
|
artifact_ns[:cool_aid].version.should == '2'
|
365
427
|
artifact_ns[:cool_aid].should_not be_selected
|
366
|
-
define 'bar' do
|
428
|
+
define 'bar' do
|
367
429
|
artifact_ns.cool_aid! 'cool:aid:man:3', '>2'
|
368
430
|
artifact_ns[:cool_aid].version.should == '3'
|
369
431
|
artifact_ns[:cool_aid].requirement.should be_satisfied_by('2.5')
|
@@ -372,11 +434,11 @@ describe Buildr::ArtifactNamespace do
|
|
372
434
|
end
|
373
435
|
end
|
374
436
|
|
375
|
-
it 'should use cool_aid= as shorhand for [:cool_aid]=' do
|
437
|
+
it 'should use cool_aid= as shorhand for [:cool_aid]=' do
|
376
438
|
artifact_ns.cool_aid = 'cool:aid:jar:1'
|
377
439
|
artifact_ns[:cool_aid].should be_selected
|
378
440
|
end
|
379
|
-
|
441
|
+
|
380
442
|
it 'should use cool_aid as shorthand for [:cool_aid]' do
|
381
443
|
artifact_ns.need :cool_aid => 'cool:aid:jar:1'
|
382
444
|
artifact_ns.cool_aid.should_not be_selected
|
@@ -391,25 +453,25 @@ describe Buildr::ArtifactNamespace do
|
|
391
453
|
end
|
392
454
|
end
|
393
455
|
|
394
|
-
describe '#ns' do
|
456
|
+
describe '#ns' do
|
395
457
|
it 'should create a sub namespace' do
|
396
458
|
artifact_ns.ns :foo
|
397
459
|
artifact_ns[:foo].should be_kind_of(ArtifactNamespace)
|
398
460
|
artifact_ns(:foo).should_not === artifact_ns.foo
|
399
461
|
artifact_ns.foo.parent.should == artifact_ns
|
400
462
|
end
|
401
|
-
|
463
|
+
|
402
464
|
it 'should take any use arguments' do
|
403
465
|
artifact_ns.ns :foo, :bar => 'foo:bar:jar:0', :baz => 'foo:baz:jar:0'
|
404
466
|
artifact_ns.foo.bar.should be_selected
|
405
467
|
artifact_ns.foo[:baz].should be_selected
|
406
468
|
end
|
407
|
-
|
408
|
-
it 'should access sub artifacts using with foo_bar like syntax' do
|
469
|
+
|
470
|
+
it 'should access sub artifacts using with foo_bar like syntax' do
|
409
471
|
artifact_ns.ns :foo, :bar => 'foo:bar:jar:0', :baz => 'foo:baz:jar:0'
|
410
472
|
artifact_ns[:foo_baz].should be_selected
|
411
473
|
artifact_ns.foo_bar.should be_selected
|
412
|
-
|
474
|
+
|
413
475
|
artifact_ns.foo.ns :bat, 'bat:man:jar:>1'
|
414
476
|
batman = artifact_ns.foo.bat.man
|
415
477
|
batman.should be_selected
|
@@ -418,7 +480,7 @@ describe Buildr::ArtifactNamespace do
|
|
418
480
|
artifact_ns[:foo_bat_man].version.should == '3'
|
419
481
|
end
|
420
482
|
|
421
|
-
it 'should include sub artifacts when calling #values' do
|
483
|
+
it 'should include sub artifacts when calling #values' do
|
422
484
|
artifact_ns.ns :bat, 'bat:man:jar:>1'
|
423
485
|
artifact_ns.values.should_not be_empty
|
424
486
|
artifact_ns.values.first.unversioned_spec.should == 'bat:man:jar'
|
@@ -435,13 +497,13 @@ describe Buildr::ArtifactNamespace do
|
|
435
497
|
lambda { artifact_ns.ns(:foo) }.should raise_error(TypeError, /not a sub/i)
|
436
498
|
end
|
437
499
|
|
438
|
-
it 'should clone artifacts when assigned' do
|
500
|
+
it 'should clone artifacts when assigned' do
|
439
501
|
artifact_ns(:foo).bar = "foo:bar:jar:0"
|
440
502
|
artifact_ns(:moo).ns :muu, :miu => artifact_ns(:foo).bar
|
441
503
|
artifact_ns(:moo).muu.miu.should_not == artifact_ns(:foo).bar
|
442
504
|
artifact_ns(:moo).muu.miu.to_spec.should == artifact_ns(:foo).bar.to_spec
|
443
505
|
end
|
444
|
-
|
506
|
+
|
445
507
|
it 'should clone parent artifacts by name' do
|
446
508
|
define 'foo' do
|
447
509
|
artifact_ns.bar = "foo:bar:jar:0"
|
@@ -462,12 +524,39 @@ describe Buildr::ArtifactNamespace do
|
|
462
524
|
|
463
525
|
end # ArtifactNamespace
|
464
526
|
|
527
|
+
describe Buildr::ArtifactNamespace::ArtifactRequirement do
|
528
|
+
before(:each) { Buildr::ArtifactNamespace.clear }
|
529
|
+
it 'should be created from artifact_ns' do
|
530
|
+
foo = artifact_ns do |ns|
|
531
|
+
ns.bar = 'a:b:c:1.0'
|
532
|
+
end
|
533
|
+
foo.bar.should be_kind_of(ArtifactNamespace::ArtifactRequirement)
|
534
|
+
end
|
535
|
+
|
536
|
+
it 'should handle version as string' do
|
537
|
+
foo = artifact_ns do |ns|
|
538
|
+
ns.bar = 'a:b:c:1.0'
|
539
|
+
end
|
540
|
+
foo.bar.version = '2.0'
|
541
|
+
foo.bar.version.should == '2.0'
|
542
|
+
end
|
543
|
+
|
544
|
+
it 'should handle version string directly' do
|
545
|
+
foo = artifact_ns do |ns|
|
546
|
+
ns.bar = 'a:b:c:1.0'
|
547
|
+
end
|
548
|
+
foo.bar = '2.0'
|
549
|
+
foo.bar.version.should == '2.0'
|
550
|
+
end
|
551
|
+
|
552
|
+
end # ArtifactRequirement
|
553
|
+
|
465
554
|
describe Buildr do
|
466
555
|
before(:each) { Buildr::ArtifactNamespace.clear }
|
467
556
|
|
468
|
-
describe '.artifacts' do
|
557
|
+
describe '.artifacts' do
|
469
558
|
it 'should take ruby symbols and ask the current namespace for them' do
|
470
|
-
define 'foo' do
|
559
|
+
define 'foo' do
|
471
560
|
artifact_ns.cool = 'cool:aid:jar:1.0'
|
472
561
|
artifact_ns.use 'some:other:jar:1.0'
|
473
562
|
artifact_ns.use 'bat:man:jar:1.0'
|
@@ -475,8 +564,8 @@ describe Buildr do
|
|
475
564
|
compile.dependencies.map(&:to_spec).should include('cool:aid:jar:1.0', 'some:other:jar:1.0', 'bat:man:jar:1.0')
|
476
565
|
end
|
477
566
|
end
|
478
|
-
|
479
|
-
it 'should take a namespace' do
|
567
|
+
|
568
|
+
it 'should take a namespace' do
|
480
569
|
artifact_ns(:moo).muu = 'moo:muu:jar:1.0'
|
481
570
|
define 'foo' do
|
482
571
|
compile.with artifact_ns(:moo)
|
@@ -484,28 +573,28 @@ describe Buildr do
|
|
484
573
|
end
|
485
574
|
end
|
486
575
|
end
|
487
|
-
|
576
|
+
|
488
577
|
describe '.artifact' do
|
489
|
-
it 'should search current namespace if given a symbol' do
|
490
|
-
define 'foo' do
|
578
|
+
it 'should search current namespace if given a symbol' do
|
579
|
+
define 'foo' do
|
491
580
|
artifact_ns.use :cool => 'cool:aid:jar:1.0'
|
492
581
|
define 'bar' do
|
493
582
|
artifact(:cool).should == artifact_ns[:cool].artifact
|
494
583
|
end
|
495
584
|
end
|
496
585
|
end
|
497
|
-
|
498
|
-
it 'should search current namespace if given a symbol spec' do
|
499
|
-
define 'foo' do
|
586
|
+
|
587
|
+
it 'should search current namespace if given a symbol spec' do
|
588
|
+
define 'foo' do
|
500
589
|
artifact_ns.use 'cool:aid:jar:1.0'
|
501
590
|
define 'bar' do
|
502
591
|
artifact(:'cool:aid:jar').should == artifact_ns[:aid].artifact
|
503
592
|
end
|
504
593
|
end
|
505
594
|
end
|
506
|
-
|
595
|
+
|
507
596
|
it 'should fail when no artifact by that name is found' do
|
508
|
-
define 'foo' do
|
597
|
+
define 'foo' do
|
509
598
|
artifact_ns.use 'cool:aid:jar:1.0'
|
510
599
|
define 'bar' do
|
511
600
|
lambda { artifact(:cool) }.should raise_error(IndexError, /artifact/)
|
@@ -524,12 +613,12 @@ describe "Extension using ArtifactNamespace" do
|
|
524
613
|
ensure
|
525
614
|
Object.send :remove_const, :A
|
526
615
|
end
|
527
|
-
|
616
|
+
|
528
617
|
it 'can register namespace listeners' do
|
529
618
|
abc_module do
|
530
619
|
# An example extension to illustrate namespace listeners and method forwarding
|
531
620
|
class A::Example
|
532
|
-
|
621
|
+
|
533
622
|
module Ext
|
534
623
|
include Buildr::Extension
|
535
624
|
def example; @example ||= A::Example.new; end
|
@@ -537,22 +626,22 @@ describe "Extension using ArtifactNamespace" do
|
|
537
626
|
Rake::Task.define_task('example') { p.example.doit }
|
538
627
|
end
|
539
628
|
end
|
540
|
-
|
629
|
+
|
541
630
|
REQUIRES = ArtifactNamespace.for(self) do |ns|
|
542
631
|
ns.xmlbeans! 'org.apache.xmlbeans:xmlbeans:jar:2.3.0', '>2'
|
543
632
|
ns.stax_api! 'stax:stax-api:jar:>=1.0.1'
|
544
633
|
end
|
545
634
|
|
546
635
|
attr_reader :options, :requires
|
547
|
-
|
636
|
+
|
548
637
|
def initialize
|
549
638
|
# We could actually use the REQUIRES namespace, but to make things
|
550
|
-
# a bit more interesting, suppose each Example instance can have its
|
639
|
+
# a bit more interesting, suppose each Example instance can have its
|
551
640
|
# own artifact requirements in adition to those specified on REQUIRES.
|
552
641
|
# To achieve this we create an anonymous namespace.
|
553
642
|
@requires = ArtifactNamespace.new # a namespace per instance
|
554
643
|
REQUIRES.each { |requirement| @requires.need requirement }
|
555
|
-
|
644
|
+
|
556
645
|
# For user convenience, we make the options object respond to
|
557
646
|
# :xmlbeans, :xmlbeans=, :xmlbeans?
|
558
647
|
# forwarding them to the namespace.
|
@@ -573,7 +662,7 @@ describe "Extension using ArtifactNamespace" do
|
|
573
662
|
end
|
574
663
|
|
575
664
|
include Spec::Matchers # for assertions
|
576
|
-
|
665
|
+
|
577
666
|
# Called with the ArtifactRequirement that has just been selected
|
578
667
|
# by a user. This allows extension author to selectively perform
|
579
668
|
# some action by inspecting the requirement state.
|
@@ -591,20 +680,20 @@ describe "Extension using ArtifactNamespace" do
|
|
591
680
|
# Now call ant task with our selected artifact and options
|
592
681
|
classpath = requires.map(&:artifact).map(&:to_s).join(File::PATH_SEPARATOR)
|
593
682
|
lambda { ant('thing') { |ant| ant.classpath classpath, :math => options[:math] } }
|
594
|
-
|
683
|
+
|
595
684
|
# We are not a Project instance, hence we have no artifact_ns
|
596
685
|
lambda { artifact_ns }.should raise_error(NameError)
|
597
686
|
|
598
687
|
# Extension authors may NOT rely project's namespaces.
|
599
|
-
# However the ruby-way gives you power and at the same time
|
688
|
+
# However the ruby-way gives you power and at the same time
|
600
689
|
# makes you dangerous, (think open-modules, monkey-patching)
|
601
690
|
# Given that buildr is pure ruby, consider it a sharp-edged sword.
|
602
|
-
# Having said that, you may actually inspect a project's
|
691
|
+
# Having said that, you may actually inspect a project's
|
603
692
|
# namespace, but don't write on it without letting your users
|
604
693
|
# know you will.
|
605
694
|
# This example obtains the current project namespace to make
|
606
695
|
# some assertions.
|
607
|
-
|
696
|
+
|
608
697
|
# To obtain a project's namespace we need either
|
609
698
|
# 1) a reference to the project, and call artifact_ns on it
|
610
699
|
# project.artifact_ns # the namespace for project
|
@@ -627,7 +716,7 @@ describe "Extension using ArtifactNamespace" do
|
|
627
716
|
end
|
628
717
|
end
|
629
718
|
end
|
630
|
-
|
719
|
+
|
631
720
|
define 'foo' do
|
632
721
|
define 'bar' do
|
633
722
|
extend A::Example::Ext
|
@@ -643,7 +732,7 @@ describe "Extension using ArtifactNamespace" do
|
|
643
732
|
|
644
733
|
project('foo:bar').example.requires.should_not == project('foo:baz').example.requires
|
645
734
|
project('foo:bar').example.requires.xmlbeans.should_not == project('foo:baz').example.requires.xmlbeans
|
646
|
-
|
735
|
+
|
647
736
|
# current namespace outside a project is :root, see the stax callback
|
648
737
|
project('foo:baz').example.options.stax_api = '1.6180'
|
649
738
|
# we call the task outside the project, see #doit
|