buildr 1.3.5-x86-mswin32 → 1.4.0-x86-mswin32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +149 -133
- 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
|