buildr 1.3.5-java → 1.4.0-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (151) hide show
  1. data/CHANGELOG +153 -8
  2. data/README.rdoc +1 -1
  3. data/addon/buildr/antlr.rb +5 -5
  4. data/addon/buildr/drb.rb +18 -18
  5. data/addon/buildr/hibernate.rb +18 -14
  6. data/addon/buildr/javacc.rb +4 -4
  7. data/addon/buildr/jetty.rb +5 -5
  8. data/addon/buildr/nailgun.rb +23 -23
  9. data/addon/buildr/openjpa.rb +1 -1
  10. data/addon/buildr/org/apache/buildr/BuildrNail$Main.class +0 -0
  11. data/addon/buildr/org/apache/buildr/BuildrNail.class +0 -0
  12. data/addon/buildr/org/apache/buildr/JettyWrapper$1.class +0 -0
  13. data/addon/buildr/org/apache/buildr/JettyWrapper$BuildrHandler.class +0 -0
  14. data/addon/buildr/org/apache/buildr/JettyWrapper.class +0 -0
  15. data/addon/buildr/protobuf.rb +75 -0
  16. data/addon/buildr/xmlbeans.rb +5 -5
  17. data/buildr.buildfile +2 -2
  18. data/buildr.gemspec +8 -7
  19. data/doc/_layouts/default.html +2 -2
  20. data/doc/artifacts.textile +4 -4
  21. data/doc/building.textile +35 -3
  22. data/doc/contributing.textile +5 -0
  23. data/doc/download.textile +16 -5
  24. data/doc/extending.textile +38 -12
  25. data/doc/installing.textile +6 -5
  26. data/doc/languages.textile +182 -42
  27. data/doc/more_stuff.textile +2 -2
  28. data/doc/packaging.textile +14 -15
  29. data/doc/projects.textile +7 -2
  30. data/doc/quick_start.textile +4 -4
  31. data/doc/scripts/buildr-git.rb +63 -63
  32. data/doc/scripts/gitflow.rb +21 -21
  33. data/doc/settings_profiles.textile +9 -2
  34. data/doc/testing.textile +16 -5
  35. data/etc/KEYS +38 -0
  36. data/lib/buildr.rb +1 -1
  37. data/lib/buildr/core.rb +1 -0
  38. data/lib/buildr/core/application.rb +33 -27
  39. data/lib/buildr/core/build.rb +41 -28
  40. data/lib/buildr/core/cc.rb +172 -0
  41. data/lib/buildr/core/checks.rb +1 -1
  42. data/lib/buildr/core/common.rb +7 -6
  43. data/lib/buildr/core/compile.rb +7 -8
  44. data/lib/buildr/core/doc.rb +263 -0
  45. data/lib/buildr/core/environment.rb +6 -6
  46. data/lib/buildr/core/filter.rb +77 -35
  47. data/lib/buildr/core/generate.rb +7 -7
  48. data/lib/buildr/core/help.rb +1 -1
  49. data/lib/buildr/core/osx.rb +6 -6
  50. data/lib/buildr/core/progressbar.rb +4 -4
  51. data/lib/buildr/core/project.rb +144 -36
  52. data/lib/buildr/core/shell.rb +34 -34
  53. data/lib/buildr/core/test.rb +89 -20
  54. data/lib/buildr/core/transports.rb +8 -7
  55. data/lib/buildr/core/util.rb +77 -23
  56. data/lib/buildr/groovy/bdd.rb +5 -5
  57. data/lib/buildr/groovy/compiler.rb +19 -15
  58. data/lib/buildr/groovy/shell.rb +6 -6
  59. data/lib/buildr/ide/eclipse.rb +148 -75
  60. data/lib/buildr/ide/eclipse/java.rb +3 -3
  61. data/lib/buildr/ide/eclipse/plugin.rb +8 -5
  62. data/lib/buildr/ide/eclipse/scala.rb +4 -2
  63. data/lib/buildr/ide/idea.rb +2 -2
  64. data/lib/buildr/ide/idea7x.rb +23 -4
  65. data/lib/buildr/java.rb +1 -0
  66. data/lib/buildr/java/ant.rb +4 -4
  67. data/lib/buildr/java/bdd.rb +51 -54
  68. data/lib/buildr/java/cobertura.rb +57 -35
  69. data/lib/buildr/java/commands.rb +14 -5
  70. data/lib/buildr/java/compiler.rb +3 -217
  71. data/lib/buildr/java/deprecated.rb +4 -4
  72. data/lib/buildr/java/doc.rb +70 -0
  73. data/lib/buildr/java/emma.rb +22 -22
  74. data/lib/buildr/java/jruby.rb +4 -4
  75. data/lib/buildr/java/jtestr_runner.rb.erb +27 -25
  76. data/lib/buildr/java/org/apache/buildr/JavaTestFilter.class +0 -0
  77. data/lib/buildr/java/org/apache/buildr/JavaTestFilter.java +8 -3
  78. data/lib/buildr/java/packaging.rb +30 -29
  79. data/lib/buildr/java/pom.rb +4 -4
  80. data/lib/buildr/java/rjb.rb +6 -6
  81. data/lib/buildr/java/test_result.rb +61 -85
  82. data/lib/buildr/java/tests.rb +44 -27
  83. data/lib/buildr/java/version_requirement.rb +8 -8
  84. data/lib/buildr/packaging/archive.rb +55 -22
  85. data/lib/buildr/packaging/artifact.rb +75 -36
  86. data/lib/buildr/packaging/artifact_namespace.rb +90 -78
  87. data/lib/buildr/packaging/artifact_search.rb +5 -5
  88. data/lib/buildr/packaging/gems.rb +11 -7
  89. data/lib/buildr/packaging/package.rb +10 -7
  90. data/lib/buildr/packaging/tar.rb +14 -14
  91. data/lib/buildr/packaging/version_requirement.rb +30 -10
  92. data/lib/buildr/packaging/ziptask.rb +51 -13
  93. data/lib/buildr/scala.rb +1 -0
  94. data/lib/buildr/scala/bdd.rb +25 -20
  95. data/lib/buildr/scala/compiler.rb +87 -40
  96. data/lib/buildr/scala/doc.rb +106 -0
  97. data/lib/buildr/scala/org/apache/buildr/SpecsSingletonRunner.class +0 -0
  98. data/lib/buildr/scala/org/apache/buildr/SpecsSingletonRunner.java +57 -0
  99. data/lib/buildr/scala/shell.rb +14 -9
  100. data/lib/buildr/scala/tests.rb +33 -26
  101. data/lib/buildr/shell.rb +33 -33
  102. data/rakelib/all-in-one.rake +113 -0
  103. data/rakelib/checks.rake +1 -1
  104. data/rakelib/doc.rake +7 -0
  105. data/rakelib/package.rake +1 -1
  106. data/rakelib/release.rake +9 -6
  107. data/rakelib/rspec.rake +26 -7
  108. data/rakelib/setup.rake +15 -3
  109. data/rakelib/stage.rake +18 -11
  110. data/spec/addon/drb_spec.rb +25 -25
  111. data/spec/core/application_spec.rb +111 -21
  112. data/spec/core/build_spec.rb +16 -15
  113. data/spec/core/cc_spec.rb +174 -0
  114. data/spec/core/checks_spec.rb +34 -34
  115. data/spec/core/common_spec.rb +51 -5
  116. data/spec/core/compile_spec.rb +89 -14
  117. data/spec/core/extension_spec.rb +127 -19
  118. data/spec/core/generate_spec.rb +2 -2
  119. data/spec/core/project_spec.rb +10 -10
  120. data/spec/core/test_spec.rb +144 -35
  121. data/spec/core/transport_spec.rb +8 -8
  122. data/spec/core/util_spec.rb +63 -5
  123. data/spec/groovy/bdd_spec.rb +5 -5
  124. data/spec/groovy/compiler_spec.rb +29 -18
  125. data/spec/ide/eclipse_spec.rb +185 -9
  126. data/spec/ide/idea7x_spec.rb +22 -10
  127. data/spec/java/ant_spec.rb +9 -5
  128. data/spec/java/bdd_spec.rb +29 -37
  129. data/spec/java/cobertura_spec.rb +12 -12
  130. data/spec/java/commands_spec.rb +34 -0
  131. data/spec/java/compiler_spec.rb +53 -53
  132. data/spec/java/emma_spec.rb +11 -11
  133. data/spec/java/java_spec.rb +10 -10
  134. data/spec/java/packaging_spec.rb +67 -20
  135. data/spec/java/test_coverage_helper.rb +18 -18
  136. data/spec/java/tests_spec.rb +13 -9
  137. data/spec/packaging/archive_spec.rb +187 -20
  138. data/spec/packaging/artifact_namespace_spec.rb +172 -83
  139. data/spec/packaging/artifact_spec.rb +83 -18
  140. data/spec/packaging/packaging_spec.rb +41 -14
  141. data/spec/sandbox.rb +23 -12
  142. data/spec/scala/bdd_spec.rb +13 -8
  143. data/spec/scala/compiler_spec.rb +18 -13
  144. data/spec/scala/scala.rb +3 -3
  145. data/spec/scala/tests_spec.rb +46 -24
  146. data/spec/spec_helpers.rb +28 -10
  147. data/spec/version_requirement_spec.rb +25 -11
  148. metadata +148 -132
  149. data/lib/buildr/scala/org/apache/buildr/SpecsSingletonRunner$.class +0 -0
  150. data/lib/buildr/scala/org/apache/buildr/SpecsSingletonRunner.scala +0 -35
  151. data/rakelib/stage.rake~ +0 -213
@@ -22,7 +22,7 @@ module Buildr
22
22
  # Search best artifact version from remote repositories
23
23
  module ArtifactSearch
24
24
  extend self
25
-
25
+
26
26
  def include(method = nil)
27
27
  (@includes ||= []).tap { push method if method }
28
28
  end
@@ -61,11 +61,11 @@ module Buildr
61
61
  "\n You may need to use an specific version instead of a requirement" unless result
62
62
  spec.merge :version => result
63
63
  end
64
-
64
+
65
65
  def requirement?(spec)
66
66
  VersionRequirement.requirement?(spec[:version])
67
67
  end
68
-
68
+
69
69
  private
70
70
  def search_methods
71
71
  [].tap do
@@ -90,7 +90,7 @@ module Buildr
90
90
  in_memory
91
91
  end
92
92
  end
93
-
93
+
94
94
  def local_versions(spec, repo)
95
95
  path = (spec[:group].split(/\./) + [spec[:id]]).flatten.join('/')
96
96
  Dir[File.expand_path(path + "/*", repo)].map { |d| d.pathmap("%f") }.sort.reverse
@@ -119,7 +119,7 @@ module Buildr
119
119
  vers << a.innerHTML.chop if a.innerHTML[-1..-1] == '/'
120
120
  vers
121
121
  }.sort.reverse
122
- else
122
+ else
123
123
  fail "Don't know how to parse #{from}: \n#{xml.inspect}"
124
124
  end
125
125
  end
@@ -59,13 +59,17 @@ module Buildr
59
59
  def create_from(file_map)
60
60
  spec.mark_version
61
61
  spec.validate
62
- Gem::Package.open(name, 'w', nil) do |pkg|
63
- pkg.metadata = spec.to_yaml
64
- file_map.each do |path, content|
65
- next if content.nil? || File.directory?(content.to_s)
66
- pkg.add_file_simple(path, File.stat(name).mode & 0777, File.size(content.to_s)) do |os|
67
- File.open(content.to_s, "rb") do |file|
68
- os.write file.read(4096) until file.eof?
62
+
63
+ File.open(name, 'w') do |io|
64
+ Gem::Package.open(io, 'w', nil) do |pkg|
65
+ pkg.metadata = spec.to_yaml
66
+ file_map.each do |path, content|
67
+ p "path #{path} content #{content}"
68
+ next if content.nil? || File.directory?(content.to_s)
69
+ pkg.add_file_simple(path, File.stat(content.to_s).mode & 0777, File.size(content.to_s)) do |os|
70
+ File.open(content.to_s, "rb") do |file|
71
+ os.write file.read(4096) until file.eof?
72
+ end
69
73
  end
70
74
  end
71
75
  end
@@ -43,7 +43,7 @@ module Buildr
43
43
  end
44
44
  end
45
45
 
46
- before_define do |project|
46
+ before_define(:package => :build) do |project|
47
47
  [ :package, :install, :uninstall, :upload ].each { |name| project.recursive_task name }
48
48
  # Need to run build before package, since package is often used as a dependency by tasks that
49
49
  # expect build to happen.
@@ -52,6 +52,8 @@ module Buildr
52
52
  project.version ||= project.parent && project.parent.version
53
53
  end
54
54
 
55
+ after_define(:package)
56
+
55
57
  # The project's identifier. Same as the project name, with colons replaced by dashes.
56
58
  # The ID for project foo:bar is foo-bar.
57
59
  def id
@@ -123,16 +125,17 @@ module Buildr
123
125
  # The file name is determined from the specification passed to the package method, however, some
124
126
  # packagers need to override this. For example, package(:sources) produces a file with the extension
125
127
  # 'zip' and the classifier 'sources'. If you need to overwrite the default implementation, you should
126
- # also include a method named package_as_[type]_respec. For example:
128
+ # also include a method named package_as_[type]_spec. For example:
127
129
  # def package_as_sources_spec(spec) #:nodoc:
128
- # { :type=>:zip, :classifier=>'sources' }.merge(spec)
130
+ # # Change the source distribution to .jar extension
131
+ # spec.merge({ :type=>:jar, :classifier=>'sources' })
129
132
  # end
130
133
  def package(*args)
131
134
  spec = Hash === args.last ? args.pop.dup : {}
132
135
  no_options = spec.empty? # since spec is mutated
133
136
  if spec[:file]
134
137
  rake_check_options spec, :file, :type
135
- spec[:type] = args.shift || spec[:type] || spec[:file].split('.').last
138
+ spec[:type] = args.shift || spec[:type] || spec[:file].split('.').last.to_sym
136
139
  file_name = spec[:file]
137
140
  else
138
141
  rake_check_options spec, *ActsAsArtifact::ARTIFACT_ATTRIBUTES
@@ -148,9 +151,9 @@ module Buildr
148
151
  spec = send("package_as_#{spec[:type]}_spec", spec) if respond_to?("package_as_#{spec[:type]}_spec")
149
152
  file_name = path_to(:target, Artifact.hash_to_file_name(spec))
150
153
  end
151
- package = (no_options && packages.detect { |pkg| pkg.type == spec[:type] &&
152
- (spec[:classifier].nil? || pkg.classifier == spec[:classifier])}) ||
153
- packages.find { |pkg| pkg.name == file_name } ||
154
+ package = (no_options && packages.detect { |pkg| pkg.type == spec[:type] &&
155
+ (pkg.respond_to?(:classifier) ? pkg.classifier : nil) == spec[:classifier]}) ||
156
+ packages.find { |pkg| pkg.name == file_name } ||
154
157
  packager.call(file_name)
155
158
  else
156
159
  Buildr.application.deprecated "We changed the way package_as methods are implemented. See the package method documentation for more details."
@@ -41,7 +41,7 @@ module Buildr
41
41
 
42
42
  def initialize(*args, &block) #:nodoc:
43
43
  super
44
- self.gzip = name =~ /\.[t?]gz$/
44
+ self.gzip = name =~ /\.t?gz$/
45
45
  self.mode = '0755'
46
46
  end
47
47
 
@@ -54,13 +54,13 @@ module Buildr
54
54
  def entry(entry_name)
55
55
  Buildr::TarEntry.new(self, entry_name)
56
56
  end
57
-
57
+
58
58
  def entries() #:nodoc:
59
59
  tar_entries = nil
60
60
  with_uncompressed_tar { |tar| tar_entries = tar.entries }
61
61
  tar_entries
62
62
  end
63
-
63
+
64
64
  # :call-seq:
65
65
  # with_uncompressed_tar { |tar_entries| ... }
66
66
  #
@@ -73,7 +73,7 @@ module Buildr
73
73
  Archive::Tar::Minitar.open(name, &block)
74
74
  end
75
75
  end
76
-
76
+
77
77
  private
78
78
 
79
79
  def create_from(file_map)
@@ -110,15 +110,15 @@ module Buildr
110
110
  end
111
111
 
112
112
  end
113
-
114
-
113
+
114
+
115
115
  class TarEntry #:nodoc:
116
-
116
+
117
117
  def initialize(tar_task, entry_name)
118
118
  @tar_task = tar_task
119
119
  @entry_name = entry_name
120
120
  end
121
-
121
+
122
122
  # :call-seq:
123
123
  # contain?(*patterns) => boolean
124
124
  #
@@ -129,7 +129,7 @@ module Buildr
129
129
  patterns.map { |pattern| Regexp === pattern ? pattern : Regexp.new(Regexp.escape(pattern.to_s)) }.
130
130
  all? { |pattern| content =~ pattern }
131
131
  end
132
-
132
+
133
133
  # :call-seq:
134
134
  # empty?() => boolean
135
135
  #
@@ -137,7 +137,7 @@ module Buildr
137
137
  def empty?()
138
138
  read_content_from_tar.nil?
139
139
  end
140
-
140
+
141
141
  # :call-seq:
142
142
  # exist() => boolean
143
143
  #
@@ -147,13 +147,13 @@ module Buildr
147
147
  @tar_task.with_uncompressed_tar { |tar| exist = tar.any? { |entry| entry.name == @entry_name } }
148
148
  exist
149
149
  end
150
-
150
+
151
151
  def to_s #:nodoc:
152
152
  @entry_name
153
153
  end
154
-
154
+
155
155
  private
156
-
156
+
157
157
  def read_content_from_tar
158
158
  content = Errno::ENOENT.new("No such file or directory - #{@entry_name}")
159
159
  @tar_task.with_uncompressed_tar do |tar|
@@ -163,7 +163,7 @@ module Buildr
163
163
  content
164
164
  end
165
165
  end
166
-
166
+
167
167
  end
168
168
 
169
169
 
@@ -14,14 +14,34 @@
14
14
  # the License.
15
15
 
16
16
 
17
+ # Rubygems 1.3.6 removed the 'version' accessor so monkey-patch it back to
18
+ # circumvent version validation. This is needed because Gem::Version doesn't
19
+ # accept version specs with dashes.
20
+ unless Gem::Version.new(0).respond_to?(:version=)
21
+ class Gem::Version
22
+ def version=(version)
23
+ @version = version.to_s
24
+ @version.strip!
25
+
26
+ # re-prime @segments
27
+ @segments = nil
28
+ segments
29
+ end
30
+ end
31
+ end
32
+
17
33
  module Buildr
18
-
34
+
19
35
  #
20
36
  # See ArtifactNamespace#need
21
37
  class VersionRequirement
22
-
38
+
23
39
  CMP_PROCS = Gem::Requirement::OPS.dup
24
- CMP_REGEX = Gem::Requirement::OP_RE.dup
40
+ CMP_REGEX = if defined?(Gem::Requirement::OP_RE)
41
+ Gem::Requirement::OP_RE
42
+ else
43
+ Gem::Requirement::OPS.keys.map { |k| Regexp.quote k }.join "|"
44
+ end
25
45
  CMP_CHARS = CMP_PROCS.keys.join
26
46
  BOOL_CHARS = '\|\&\!'
27
47
  VER_CHARS = '\w\.\-'
@@ -29,18 +49,18 @@ module Buildr
29
49
  class << self
30
50
  # is +str+ a version string?
31
51
  def version?(str)
32
- /^\s*[#{VER_CHARS}]+\s*$/ === str
52
+ /^\s*\d[#{VER_CHARS}]*\s*$/ === str
33
53
  end
34
-
54
+
35
55
  # is +str+ a version requirement?
36
56
  def requirement?(str)
37
57
  /[#{BOOL_CHARS}#{CMP_CHARS}\(\)]/ === str
38
58
  end
39
-
59
+
40
60
  # :call-seq:
41
61
  # VersionRequirement.create(" >1 <2 !(1.5) ") -> requirement
42
62
  #
43
- # parse the +str+ requirement
63
+ # parse the +str+ requirement
44
64
  def create(str)
45
65
  instance_eval normalize(str)
46
66
  rescue StandardError => e
@@ -61,7 +81,7 @@ module Buildr
61
81
  vreq.negative = !vreq.negative
62
82
  vreq
63
83
  end
64
-
84
+
65
85
  def normalize(str)
66
86
  str = str.strip
67
87
  if str[/[^\s\(\)#{BOOL_CHARS + VER_CHARS + CMP_CHARS}]/]
@@ -147,7 +167,7 @@ module Buildr
147
167
  def &(other)
148
168
  operation(:&, other)
149
169
  end
150
-
170
+
151
171
  # return the parsed expression
152
172
  def to_s
153
173
  str = requirements.map(&:to_s).join(" " + @op.to_s + " ").to_s
@@ -160,7 +180,7 @@ module Buildr
160
180
  protected
161
181
  attr_reader :requirements, :op
162
182
  def operation(op, other)
163
- @op ||= op
183
+ @op ||= op
164
184
  if negative == other.negative && @op == op && other.requirements.size == 1
165
185
  @requirements << other.requirements.first
166
186
  self
@@ -106,7 +106,7 @@ module Buildr
106
106
  end
107
107
 
108
108
 
109
- # An object for unzipping a file into a target directory. You can tell it to include
109
+ # An object for unzipping/untarring a file into a target directory. You can tell it to include
110
110
  # or exclude only specific files and directories, and also to map files from particular
111
111
  # paths inside the zip file into the target directory. Once ready, call #extract.
112
112
  #
@@ -131,7 +131,7 @@ module Buildr
131
131
  # :call-seq:
132
132
  # extract
133
133
  #
134
- # Extract the zip file into the target directory.
134
+ # Extract the zip/tgz file into the target directory.
135
135
  #
136
136
  # You can call this method directly. However, if you are using the #unzip method,
137
137
  # it creates a file task for the target directory: use that task instead as a
@@ -148,16 +148,36 @@ module Buildr
148
148
 
149
149
  # Otherwise, empty unzip creates target as a file when touching.
150
150
  mkpath target.to_s
151
- Zip::ZipFile.open(zip_file.to_s) do |zip|
152
- entries = zip.collect
153
- @paths.each do |path, patterns|
154
- patterns.map(entries).each do |dest, entry|
155
- next if entry.directory?
156
- dest = File.expand_path(dest, target.to_s)
157
- trace "Extracting #{dest}"
158
- mkpath File.dirname(dest) rescue nil
159
- entry.restore_permissions = true
160
- entry.extract(dest) { true }
151
+ if zip_file.to_s.match /\.t?gz$/
152
+ #un-tar.gz
153
+ Zlib::GzipReader.open(zip_file.to_s) { |tar|
154
+ Archive::Tar::Minitar::Input.open(tar) do |inp|
155
+ inp.each do |tar_entry|
156
+ @paths.each do |path, patterns|
157
+ patterns.map([tar_entry]).each do |dest, entry|
158
+ next if entry.directory?
159
+ dest = File.expand_path(dest, target.to_s)
160
+ trace "Extracting #{dest}"
161
+ mkpath File.dirname(dest) rescue nil
162
+ #entry.restore_permissions = true
163
+ File.open(dest, 'w') {|f| f.write entry.read}
164
+ end
165
+ end
166
+ end
167
+ end
168
+ }
169
+ else
170
+ Zip::ZipFile.open(zip_file.to_s) do |zip|
171
+ entries = zip.collect
172
+ @paths.each do |path, patterns|
173
+ patterns.map(entries).each do |dest, entry|
174
+ next if entry.directory?
175
+ dest = File.expand_path(dest, target.to_s)
176
+ trace "Extracting #{dest}"
177
+ mkpath File.dirname(dest) rescue nil
178
+ entry.restore_permissions = true
179
+ entry.extract(dest) { true }
180
+ end
161
181
  end
162
182
  end
163
183
  end
@@ -165,6 +185,24 @@ module Buildr
165
185
  touch target.to_s
166
186
  end
167
187
 
188
+ #reads the includes/excludes and apply them to the entry_name
189
+ def included?(entry_name)
190
+ @paths.each do |path, patterns|
191
+ return true if path.nil?
192
+ if entry_name =~ /^#{path}/
193
+ short = entry_name.sub(path, '')
194
+ if patterns.include.any? { |pattern| File.fnmatch(pattern, entry_name) } &&
195
+ !patterns.exclude.any? { |pattern| File.fnmatch(pattern, entry_name) }
196
+ # trace "tar_entry.full_name " + entry_name + " is included"
197
+ return true
198
+ end
199
+ end
200
+ end
201
+ # trace "tar_entry.full_name " + entry_name + " is excluded"
202
+ return false
203
+ end
204
+
205
+
168
206
  # :call-seq:
169
207
  # include(*files) => self
170
208
  # include(*files, :path=>name) => self
@@ -303,7 +341,7 @@ module Buildr
303
341
  #
304
342
  # For example:
305
343
  # unzip('all'=>'test.zip')
306
- # unzip('src'=>'test.zip').include('README', 'LICENSE')
344
+ # unzip('src'=>'test.zip').include('README', 'LICENSE')
307
345
  # unzip('libs'=>'test.zip').from_path('libs')
308
346
  def unzip(args)
309
347
  target, arg_names, zip_file = Buildr.application.resolve_args([args])
data/lib/buildr/scala.rb CHANGED
@@ -20,6 +20,7 @@ Buildr.repositories.remote << 'http://scala-tools.org/repo-releases'
20
20
  require 'buildr/scala/compiler'
21
21
  require 'buildr/scala/tests'
22
22
  require 'buildr/scala/bdd'
23
+ require 'buildr/scala/doc'
23
24
  require 'buildr/scala/shell'
24
25
 
25
26
  Object::Scala = Buildr::Scala
@@ -20,29 +20,36 @@ require 'buildr/java/bdd'
20
20
  require 'buildr/scala/tests'
21
21
 
22
22
  module Buildr::Scala
23
-
23
+
24
24
  # Specs is a Scala based BDD framework.
25
25
  # To use in your project:
26
26
  #
27
27
  # test.using :specs
28
- #
28
+ #
29
29
  # This framework will search in your project for:
30
30
  # src/spec/scala/**/*.scala
31
31
  class Specs < Buildr::TestFramework::JavaBDD
32
32
  @lang = :scala
33
33
  @bdd_dir = :spec
34
34
 
35
- VERSION = '1.5.0'
36
-
35
+ VERSION = '1.6.2.1'
36
+
37
37
  class << self
38
38
  def version
39
39
  Buildr.settings.build['scala.specs'] || VERSION
40
40
  end
41
-
41
+
42
42
  def dependencies
43
- ["org.scala-tools.testing:specs:jar:#{version}"] + Check.dependencies + JUnit.dependencies
43
+ unless @dependencies
44
+ super
45
+ # Add utility classes (e.g. SpecsSingletonRunner) and other dependencies
46
+ @dependencies |= [ File.join(File.dirname(__FILE__)) ] +
47
+ ["org.scala-tools.testing:specs:jar:#{version}"] +
48
+ Check.dependencies + JUnit.dependencies + Scalac.dependencies
49
+ end
50
+ @dependencies
44
51
  end
45
-
52
+
46
53
  def applies_to?(project) #:nodoc:
47
54
  !Dir[project.path_to(:source, bdd_dir, lang, '**/*.scala')].empty?
48
55
  end
@@ -57,39 +64,37 @@ module Buildr::Scala
57
64
 
58
65
  def initialize(task, options) #:nodoc:
59
66
  super
60
-
67
+
61
68
  specs = task.project.path_to(:source, :spec, :scala)
62
69
  task.compile.from specs if File.directory?(specs)
63
-
70
+
64
71
  resources = task.project.path_to(:source, :spec, :resources)
65
72
  task.resources.from resources if File.directory?(resources)
66
73
  end
67
-
74
+
68
75
  def tests(dependencies)
69
- dependencies += [task.compile.target.to_s]
70
76
  candidates = filter_classes(dependencies, :interfaces => ['org.specs.Specification'])
71
-
77
+
72
78
  Java.load # Java is already loaded, but just in case
73
-
79
+
74
80
  filter = Java.org.apache.buildr.JavaTestFilter.new(dependencies.to_java(Java.java.lang.String))
75
81
  filter.add_fields ['MODULE$'].to_java(Java.java.lang.String)
76
- filter.filter(candidates.to_java(Java.java.lang.String)) # we only want singletons
82
+ filter.filter(candidates.to_java(Java.java.lang.String)).map { |s| s[0..(s.size - 2)] }
77
83
  end
78
-
84
+
79
85
  def run(specs, dependencies) #:nodoc:
80
- dependencies += [task.compile.target.to_s, File.join(File.dirname(__FILE__))] + Scalac.dependencies
81
-
82
86
  cmd_options = { :properties => options[:properties],
83
87
  :java_args => options[:java_args],
84
- :classpath => dependencies}
88
+ :classpath => dependencies,
89
+ :name => false }
85
90
 
86
91
  runner = 'org.apache.buildr.SpecsSingletonRunner'
87
92
  specs.inject [] do |passed, spec|
88
93
  begin
89
94
  unless Util.win_os?
90
- Java::Commands.java(runner, task.compile.target.to_s, '-c', spec, cmd_options)
95
+ Java::Commands.java(runner, task.compile.target.to_s, '-c', spec + '$', cmd_options)
91
96
  else
92
- Java::Commands.java(runner, task.compile.target.to_s, spec, cmd_options)
97
+ Java::Commands.java(runner, task.compile.target.to_s, spec + '$', cmd_options)
93
98
  end
94
99
  rescue => e
95
100
  passed