buildr 1.3.1.1 → 1.3.2
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +26 -0
- data/NOTICE +3 -5
- data/README +1 -0
- data/Rakefile +4 -3
- data/addon/buildr/nailgun.rb +3 -2
- data/addon/buildr/xmlbeans.rb +1 -1
- data/buildr.gemspec +7 -7
- data/doc/css/syntax.css +40 -31
- data/doc/pages/building.textile +0 -1
- data/doc/pages/contributing.textile +21 -1
- data/doc/pages/download.textile +18 -5
- data/doc/pages/getting_started.textile +23 -12
- data/doc/pages/index.textile +1 -1
- data/doc/pages/packaging.textile +10 -7
- data/doc/pages/projects.textile +3 -3
- data/doc/pages/whats_new.textile +19 -0
- data/doc/scripts/install-jruby.sh +1 -1
- data/doc/scripts/install-linux.sh +4 -4
- data/lib/buildr.rb +1 -9
- data/lib/buildr/core/application.rb +11 -0
- data/lib/buildr/core/application_cli.rb +6 -1
- data/lib/buildr/core/build.rb +1 -1
- data/lib/buildr/core/compile.rb +6 -6
- data/lib/buildr/core/project.rb +1 -0
- data/lib/buildr/core/test.rb +3 -3
- data/lib/buildr/core/transports.rb +4 -2
- data/lib/buildr/core/util.rb +2 -0
- data/lib/buildr/ide/idea7x.rb +13 -12
- data/lib/buildr/java/compilers.rb +2 -4
- data/lib/buildr/java/org/apache/buildr/JavaTestFilter.class +0 -0
- data/lib/buildr/java/org/apache/buildr/JavaTestFilter.java +4 -1
- data/lib/buildr/java/test_frameworks.rb +162 -3
- data/rakelib/apache.rake +14 -0
- data/rakelib/package.rake +28 -0
- data/rakelib/setup.rake +3 -2
- data/spec/compile_spec.rb +9 -8
- data/spec/java_test_frameworks_spec.rb +19 -0
- data/spec/project_spec.rb +12 -0
- data/spec/sandbox.rb +4 -0
- data/spec/scala_compilers_spec.rb +1 -12
- data/spec/scala_test_frameworks_spec.rb +216 -0
- data/spec/test_spec.rb +20 -4
- data/spec/transport_spec.rb +30 -14
- data/spec/version_requirement_spec.rb +5 -1
- metadata +23 -13
@@ -18,7 +18,7 @@ if [ -z `which jruby` ] ; then
|
|
18
18
|
target=/opt/jruby
|
19
19
|
echo "Installing JRuby ${version} in ${target}"
|
20
20
|
sudo mkdir -p $(dirname ${target})
|
21
|
-
|
21
|
+
wget http://dist.codehaus.org/jruby/jruby-bin-${version}.tar.gz
|
22
22
|
tar -xz < jruby-bin-${version}.tar.gz
|
23
23
|
sudo mv jruby-${version} ${target}
|
24
24
|
rm jruby-bin-${version}.tar.gz
|
@@ -26,12 +26,12 @@ if [ -z `which ruby` ] ; then
|
|
26
26
|
sudo apt-get install ruby-full ruby1.8-dev libopenssl-ruby build-essential
|
27
27
|
# RubyGems broken on Ubunutu, installing directly from source.
|
28
28
|
echo "Installing RubyGems from RubyForge"
|
29
|
-
|
30
|
-
tar xzf rubygems-1.0.
|
31
|
-
cd rubygems-1.0
|
29
|
+
wget http://rubyforge.org/frs/download.php/38646/rubygems-1.2.0.tgz
|
30
|
+
tar xzf rubygems-1.2.0.tgz
|
31
|
+
cd rubygems-1.2.0
|
32
32
|
sudo ruby setup.rb
|
33
33
|
cd ..
|
34
|
-
rm -rf rubygems-1.0
|
34
|
+
rm -rf rubygems-1.2.0
|
35
35
|
# ruby is same as ruby1.8, we need gem that is same as gem1.8
|
36
36
|
sudo ln -s /usr/bin/gem1.8 /usr/bin/gem
|
37
37
|
else
|
data/lib/buildr.rb
CHANGED
@@ -15,16 +15,8 @@
|
|
15
15
|
|
16
16
|
|
17
17
|
$KCODE = 'utf8'
|
18
|
-
# in order to work around a bug in jruby (1.0.1 and trunk as of oct11, 2007)
|
19
|
-
# needle and net/ssh need to be loaded before -anything- else. please see
|
20
|
-
# http://jira.codehaus.org/browse/JRUBY-1188 for more info.
|
21
|
-
require 'net/ssh'
|
22
|
-
|
23
|
-
require 'highline/import'
|
24
|
-
require 'builder' # A different kind of buildr, one we use to create XML.
|
25
|
-
|
26
18
|
module Buildr
|
27
|
-
VERSION = '1.3.
|
19
|
+
VERSION = '1.3.2'.freeze # unless const_defined?(:VERSION)
|
28
20
|
end
|
29
21
|
|
30
22
|
require 'buildr/core'
|
@@ -35,6 +35,7 @@
|
|
35
35
|
# SOFTWARE.
|
36
36
|
|
37
37
|
|
38
|
+
require 'highline/import'
|
38
39
|
require 'benchmark'
|
39
40
|
require 'rake'
|
40
41
|
require 'rubygems/source_info_cache'
|
@@ -272,6 +273,16 @@ module Buildr
|
|
272
273
|
end
|
273
274
|
private :load_tasks
|
274
275
|
|
276
|
+
def display_prerequisites
|
277
|
+
invoke_task('buildr:initialize')
|
278
|
+
tasks.each do |task|
|
279
|
+
if task.name =~ options.show_task_pattern
|
280
|
+
puts "buildr #{task.name}"
|
281
|
+
task.prerequisites.each { |prereq| puts " #{prereq}" }
|
282
|
+
end
|
283
|
+
end
|
284
|
+
end
|
285
|
+
|
275
286
|
# :call-seq:
|
276
287
|
# deprecated(message)
|
277
288
|
#
|
@@ -54,6 +54,8 @@ module Buildr
|
|
54
54
|
'Require MODULE before executing buildfile.'],
|
55
55
|
['--trace', '-t', GetoptLong::NO_ARGUMENT,
|
56
56
|
'Turn on invoke/execute tracing, enable full backtrace.'],
|
57
|
+
['--prereqs', '-P', GetoptLong::OPTIONAL_ARGUMENT,
|
58
|
+
'Display tasks and dependencies, then exit.'],
|
57
59
|
['--version', '-v', GetoptLong::NO_ARGUMENT,
|
58
60
|
'Display the program version.'],
|
59
61
|
['--environment', '-e', GetoptLong::REQUIRED_ARGUMENT,
|
@@ -92,6 +94,9 @@ module Buildr
|
|
92
94
|
ENV['BUILDR_ENV'] = value
|
93
95
|
when '--require'
|
94
96
|
requires << value
|
97
|
+
when '--prereqs'
|
98
|
+
options.show_prereqs = true
|
99
|
+
options.show_task_pattern = Regexp.new(value || '.')
|
95
100
|
when '--nosearch', '--quiet', '--trace'
|
96
101
|
super
|
97
102
|
end
|
@@ -129,6 +134,6 @@ module Buildr
|
|
129
134
|
puts 'For help with your buildfile:'
|
130
135
|
puts ' buildr help'
|
131
136
|
end
|
132
|
-
|
137
|
+
|
133
138
|
end
|
134
139
|
end
|
data/lib/buildr/core/build.rb
CHANGED
@@ -125,7 +125,7 @@ module Buildr
|
|
125
125
|
version = with_next_version do |filename, version|
|
126
126
|
options = ['--buildfile', filename, 'DEBUG=no']
|
127
127
|
options << '--environment' << Buildr.environment unless Buildr.environment.to_s.empty?
|
128
|
-
sh "#{command} clean upload #{options.join(' ')}"
|
128
|
+
sh "#{command} _#{Buildr::VERSION}_ clean upload #{options.join(' ')}"
|
129
129
|
end
|
130
130
|
tag version
|
131
131
|
commit version + '-SNAPSHOT'
|
data/lib/buildr/core/compile.rb
CHANGED
@@ -168,17 +168,17 @@ module Buildr
|
|
168
168
|
def compile_map(sources, target)
|
169
169
|
target_ext = self.class.target_ext
|
170
170
|
ext_glob = Array(self.class.source_ext).join(',')
|
171
|
-
sources.flatten.inject({}) do |map, source|
|
171
|
+
sources.flatten.map{|f| File.expand_path(f)}.inject({}) do |map, source|
|
172
172
|
if File.directory?(source)
|
173
173
|
FileList["#{source}/**/*.{#{ext_glob}}"].reject { |file| File.directory?(file) }.
|
174
|
-
each { |file| map[file] = File.join(target, Util.relative_path(
|
174
|
+
each { |file| map[file] = File.join(target, Util.relative_path(file, source).ext(target_ext)) }
|
175
175
|
else
|
176
176
|
map[source] = File.join(target, File.basename(source).ext(target_ext))
|
177
177
|
end
|
178
178
|
map
|
179
179
|
end
|
180
180
|
end
|
181
|
-
|
181
|
+
|
182
182
|
end
|
183
183
|
|
184
184
|
end
|
@@ -223,7 +223,7 @@ module Buildr
|
|
223
223
|
raise 'No compiler selected and can\'t determine which compiler to use' unless compiler
|
224
224
|
raise 'No target directory specified' unless target
|
225
225
|
mkpath target.to_s, :verbose=>false
|
226
|
-
puts "Compiling #{task.name.gsub(/:[^:]*$/, '')}" if verbose
|
226
|
+
puts "Compiling #{task.name.gsub(/:[^:]*$/, '')} into #{target.to_s}" if verbose
|
227
227
|
@compiler.compile(sources.map(&:to_s), target.to_s, dependencies.map(&:to_s))
|
228
228
|
# By touching the target we let other tasks know we did something,
|
229
229
|
# and also prevent recompiling again for dependencies.
|
@@ -451,12 +451,12 @@ module Buildr
|
|
451
451
|
filter.target
|
452
452
|
end
|
453
453
|
|
454
|
-
protected
|
455
|
-
|
456
454
|
def prerequisites #:nodoc:
|
457
455
|
super + filter.sources.flatten
|
458
456
|
end
|
459
457
|
|
458
|
+
protected
|
459
|
+
|
460
460
|
# Associates this task with project and particular usage (:main, :test).
|
461
461
|
def associate_with(project, usage) #:nodoc:
|
462
462
|
@project, @usage = project, usage
|
data/lib/buildr/core/project.rb
CHANGED
@@ -64,6 +64,7 @@ module Buildr
|
|
64
64
|
# puts default.expand(:source, :main, :java)
|
65
65
|
# => "src/main/java"
|
66
66
|
def expand(*args)
|
67
|
+
args = args.compact.reject { |s| s.to_s.empty? }.map(&:to_sym)
|
67
68
|
return '' if args.empty?
|
68
69
|
@mapping[args] ||= File.join(*[expand(*args[0..-2]), args.last.to_s].reject(&:empty?)) if args.size > 1
|
69
70
|
return @mapping[args] || args.first.to_s
|
data/lib/buildr/core/test.rb
CHANGED
@@ -556,11 +556,11 @@ module Buildr
|
|
556
556
|
|
557
557
|
after_define do |project|
|
558
558
|
test = project.test
|
559
|
-
# Dependency on compiled code, its dependencies and resources.
|
560
|
-
test.with project.compile.dependencies
|
561
|
-
test.with [project.compile.target, project.resources.target].compact
|
562
559
|
# Dependency on compiled tests and resources. Dependencies added using with.
|
563
560
|
test.dependencies.concat [test.compile.target, test.resources.target].compact
|
561
|
+
# Dependency on compiled code, its dependencies and resources.
|
562
|
+
test.with [project.compile.target, project.resources.target].compact
|
563
|
+
test.with project.compile.dependencies
|
564
564
|
# Picking up the test frameworks adds further dependencies.
|
565
565
|
test.framework
|
566
566
|
|
@@ -17,6 +17,8 @@
|
|
17
17
|
require 'cgi'
|
18
18
|
require 'net/http'
|
19
19
|
require 'net/https'
|
20
|
+
# PATCH: On Windows, Net::SSH 2.0.2 attempts to load the Pageant DLLs which break on JRuby.
|
21
|
+
$LOAD_PATH << 'net/ssh/authentication/pageant' if RUBY_PLATFORM =~ /java/
|
20
22
|
require 'net/ssh'
|
21
23
|
require 'net/sftp'
|
22
24
|
require 'uri'
|
@@ -457,9 +459,9 @@ module URI
|
|
457
459
|
# To create a path, we need to create all its parent. We use realpath to determine if
|
458
460
|
# the path already exists, otherwise mkdir fails.
|
459
461
|
puts "Creating path #{path}" if Buildr.application.options.trace
|
460
|
-
File.dirname(path).split('/').inject('') do |base, part|
|
462
|
+
File.dirname(path).split('/').reject(&:empty?).inject('/') do |base, part|
|
461
463
|
combined = base + part
|
462
|
-
sftp.
|
464
|
+
sftp.close(sftp.opendir!(combined)) rescue sftp.mkdir! combined, {}
|
463
465
|
"#{combined}/"
|
464
466
|
end
|
465
467
|
|
data/lib/buildr/core/util.rb
CHANGED
data/lib/buildr/ide/idea7x.rb
CHANGED
@@ -76,9 +76,6 @@ module Buildr
|
|
76
76
|
# Separate artifacts from Maven2 repository
|
77
77
|
m2_libs, others = others.partition { |path| path.to_s.index(m2repo) == 0 }
|
78
78
|
|
79
|
-
# Generated: classpath elements in the project are assumed to be generated
|
80
|
-
generated, libs = others.partition { |path| path.to_s.index(project.path_to.to_s) == 0 }
|
81
|
-
|
82
79
|
# Project type is going to be the first package type
|
83
80
|
if package = project.packages.first
|
84
81
|
puts "Writing #{task.name}" if verbose
|
@@ -89,13 +86,15 @@ module Buildr
|
|
89
86
|
|
90
87
|
Buildr::Idea7x.generate_compile_output(project, xml, relative)
|
91
88
|
|
92
|
-
Buildr::Idea7x.generate_content(project, xml,
|
89
|
+
Buildr::Idea7x.generate_content(project, xml, relative)
|
93
90
|
|
94
91
|
Buildr::Idea7x.generate_order_entries(project_libs, xml)
|
95
92
|
|
96
|
-
ext_libs =
|
93
|
+
ext_libs = m2_libs.map { |path| "jar://#{path.to_s.sub(m2repo, "$M2_REPO$")}!/" }
|
94
|
+
ext_libs << "#{MODULE_DIR_URL}/#{relative[project.test.resources.target.to_s]}" if project.test.resources.target
|
95
|
+
ext_libs << "#{MODULE_DIR_URL}/#{relative[project.resources.target.to_s]}" if project.resources.target
|
96
|
+
|
97
97
|
Buildr::Idea7x.generate_module_libs(xml, ext_libs)
|
98
|
-
|
99
98
|
xml.orderEntryProperties
|
100
99
|
end
|
101
100
|
end
|
@@ -124,13 +123,14 @@ module Buildr
|
|
124
123
|
|
125
124
|
def generate_compile_output(project, xml, relative)
|
126
125
|
xml.output(:url=>"#{MODULE_DIR_URL}/#{relative[project.compile.target.to_s]}") if project.compile.target
|
127
|
-
xml.tag!("output-test", :url=>"#{MODULE_DIR_URL}/#{relative[project.test.compile.target.to_s]}") if project.test.compile.target
|
126
|
+
xml.tag!("output-test", :url=>"#{MODULE_DIR_URL}/#{relative[project.test.compile.target.to_s]}") if project.test.compile.target
|
127
|
+
xml.tag!("exclude-output")
|
128
128
|
end
|
129
129
|
|
130
|
-
def generate_content(project, xml,
|
130
|
+
def generate_content(project, xml, relative)
|
131
131
|
xml.content(:url=>"#{MODULE_DIR_URL}") do
|
132
132
|
unless project.compile.sources.empty?
|
133
|
-
srcs = project.compile.sources.map { |src| relative[src.to_s] }
|
133
|
+
srcs = project.compile.sources.map { |src| relative[src.to_s] }
|
134
134
|
srcs.sort.uniq.each do |path|
|
135
135
|
xml.sourceFolder :url=>"#{MODULE_DIR_URL}/#{path}", :isTestSource=>"false"
|
136
136
|
end
|
@@ -142,7 +142,7 @@ module Buildr
|
|
142
142
|
xml.sourceFolder :url=>"#{MODULE_DIR_URL}/#{path}", :isTestSource=>"true"
|
143
143
|
end
|
144
144
|
end
|
145
|
-
end
|
145
|
+
end
|
146
146
|
[project.resources=>false, project.test.resources=>true].each do |resources, test|
|
147
147
|
resources.each do |path|
|
148
148
|
path[0].sources.each do |srcpath|
|
@@ -150,7 +150,8 @@ module Buildr
|
|
150
150
|
end
|
151
151
|
end
|
152
152
|
end
|
153
|
-
xml.excludeFolder :url=>"#{MODULE_DIR_URL}/#{relative[project.
|
153
|
+
xml.excludeFolder :url=>"#{MODULE_DIR_URL}/#{relative[project.resources.target.to_s]}" if project.resources.target
|
154
|
+
xml.excludeFolder :url=>"#{MODULE_DIR_URL}/#{relative[project.test.resources.target.to_s]}" if project.test.resources.target
|
154
155
|
end
|
155
156
|
end
|
156
157
|
|
@@ -159,7 +160,7 @@ module Buildr
|
|
159
160
|
xml.orderEntry :type=>"module-library" do
|
160
161
|
xml.library do
|
161
162
|
xml.CLASSES do
|
162
|
-
xml.root :url=>
|
163
|
+
xml.root :url=> path
|
163
164
|
end
|
164
165
|
xml.JAVADOC
|
165
166
|
xml.SOURCES
|
@@ -100,7 +100,6 @@ module Buildr
|
|
100
100
|
# * :warnings -- Generate warnings if true (opposite of -nowarn).
|
101
101
|
# * :deprecation -- Output source locations where deprecated APIs are used.
|
102
102
|
# * :optimise -- Generates faster bytecode by applying optimisations to the program.
|
103
|
-
# * :source -- Source compatibility with specified release.
|
104
103
|
# * :target -- Class file compatibility with specified release.
|
105
104
|
# * :debug -- Generate debugging info.
|
106
105
|
# * :other -- Array of options to pass to the Scalac compiler as is, e.g. -Xprint-types
|
@@ -119,8 +118,8 @@ module Buildr
|
|
119
118
|
end
|
120
119
|
end
|
121
120
|
|
122
|
-
OPTIONS = [:warnings, :deprecation, :optimise, :
|
123
|
-
Java.classpath << dependencies
|
121
|
+
OPTIONS = [:warnings, :deprecation, :optimise, :target, :debug, :other]
|
122
|
+
Java.classpath << dependencies
|
124
123
|
|
125
124
|
specify :language=>:scala, :target=>'classes', :target_ext=>'class', :packaging=>:jar
|
126
125
|
|
@@ -167,7 +166,6 @@ module Buildr
|
|
167
166
|
args << "-g" if options[:debug]
|
168
167
|
args << "-deprecation" if options[:deprecation]
|
169
168
|
args << "-optimise" if options[:optimise]
|
170
|
-
args << "-source" << options[:source].to_s if options[:source]
|
171
169
|
args << "-target:jvm-" + options[:target].to_s if options[:target]
|
172
170
|
args + Array(options[:other])
|
173
171
|
end
|
Binary file
|
@@ -18,6 +18,7 @@
|
|
18
18
|
package org.apache.buildr;
|
19
19
|
|
20
20
|
import java.lang.reflect.Method;
|
21
|
+
import java.lang.reflect.Modifier;
|
21
22
|
import java.io.File;
|
22
23
|
import java.io.IOException;
|
23
24
|
import java.net.URL;
|
@@ -70,6 +71,8 @@ public class JavaTestFilter {
|
|
70
71
|
}
|
71
72
|
|
72
73
|
private boolean isTest(Class cls) {
|
74
|
+
if (Modifier.isAbstract(cls.getModifiers()) || !Modifier.isPublic(cls.getModifiers()))
|
75
|
+
return false;
|
73
76
|
if (interfaces != null) {
|
74
77
|
for (Iterator it = interfaces.iterator(); it.hasNext(); ) {
|
75
78
|
Class iface = (Class) it.next();
|
@@ -113,4 +116,4 @@ public class JavaTestFilter {
|
|
113
116
|
* indent-tabs-mode: nil
|
114
117
|
* c-basic-offset: 2
|
115
118
|
* End:
|
116
|
-
*/
|
119
|
+
*/
|
@@ -90,7 +90,22 @@ module Buildr
|
|
90
90
|
REQUIRES = ["jmock:jmock:jar:#{VERSION}"]
|
91
91
|
end
|
92
92
|
|
93
|
+
# Specs is available when using ScalaTest
|
94
|
+
module ScalaSpecs
|
95
|
+
# Specs version number.
|
96
|
+
VERSION = '1.2.9' unless const_defined?('VERSION')
|
97
|
+
# Specs artifact(s)
|
98
|
+
REQUIRES = ["org.specs:specs:jar:#{VERSION}"]
|
99
|
+
end
|
93
100
|
|
101
|
+
# ScalaCheck is available when using ScalaTest
|
102
|
+
module ScalaCheck
|
103
|
+
# ScalaCheck version number.
|
104
|
+
VERSION = '1.3' unless const_defined?('VERSION')
|
105
|
+
# ScalaCheck artifact(s)
|
106
|
+
REQUIRES = ["org.scalacheck:scalacheck:jar:#{VERSION}"]
|
107
|
+
end
|
108
|
+
|
94
109
|
# JUnit test framework, the default test framework for Java tests.
|
95
110
|
#
|
96
111
|
# Support the following options:
|
@@ -167,7 +182,7 @@ module Buildr
|
|
167
182
|
end
|
168
183
|
|
169
184
|
# JUnit version number.
|
170
|
-
VERSION = '4.
|
185
|
+
VERSION = '4.4' unless const_defined?('VERSION')
|
171
186
|
|
172
187
|
REQUIRES = ["junit:junit:jar:#{VERSION}"] + JMock::REQUIRES
|
173
188
|
|
@@ -249,7 +264,7 @@ module Buildr
|
|
249
264
|
class TestNG < TestFramework::Base
|
250
265
|
|
251
266
|
# TestNG version number.
|
252
|
-
VERSION = '5.
|
267
|
+
VERSION = '5.7' unless const_defined?('VERSION')
|
253
268
|
# TestNG specification.
|
254
269
|
REQUIRES = ["org.testng:testng:jar:jdk15:#{VERSION}"] + JMock::REQUIRES
|
255
270
|
|
@@ -278,11 +293,155 @@ module Buildr
|
|
278
293
|
|
279
294
|
end
|
280
295
|
|
281
|
-
|
296
|
+
# ScalaTest framework, the default test framework for Scala tests.
|
297
|
+
#
|
298
|
+
# Support the following options:
|
299
|
+
# * :properties -- Hash of system properties available to the test case.
|
300
|
+
# * :environment -- Hash of environment variables available to the test case.
|
301
|
+
# * :java_args -- Arguments passed as is to the JVM.
|
302
|
+
class ScalaTest < TestFramework::Base
|
303
|
+
|
304
|
+
class << self
|
305
|
+
# ScalaTest version number.
|
306
|
+
VERSION = '0.9.3' unless const_defined?('VERSION')
|
307
|
+
|
308
|
+
# ScalaTest dependencies
|
309
|
+
DEPENDS = ["org.scalatest:scalatest:jar:#{VERSION}"] +
|
310
|
+
JMock::REQUIRES +
|
311
|
+
ScalaSpecs::REQUIRES +
|
312
|
+
ScalaCheck::REQUIRES
|
313
|
+
|
314
|
+
ENABLED = DEPENDS.all? { |d| File.exist?(Buildr::Repositories.instance.locate(d)) }
|
315
|
+
|
316
|
+
desc "Download Scala artifacts"
|
317
|
+
task "buildr:scala:download" do
|
318
|
+
ScalaTest.download_dependencies
|
319
|
+
end
|
320
|
+
|
321
|
+
def required_artifacts
|
322
|
+
ENABLED ? DEPENDS : []
|
323
|
+
end
|
324
|
+
|
325
|
+
def download_dependencies
|
326
|
+
DEPENDS.each { |d| Buildr.artifact(d).invoke }
|
327
|
+
end
|
328
|
+
|
329
|
+
def applies_to?(project) #:nodoc:
|
330
|
+
if project.test.compile.language == :scala && !ENABLED
|
331
|
+
download_dependencies
|
332
|
+
fail "You must re-run buildr after downloading Scala artifacts for the first time"
|
333
|
+
end
|
334
|
+
project.test.compile.language == :scala
|
335
|
+
end
|
336
|
+
|
337
|
+
def available?(artifact_spec) #:nodoc:
|
338
|
+
File.exist?(Buildr::Repositories.instance.locate(artifact_spec))
|
339
|
+
end
|
340
|
+
end
|
341
|
+
|
342
|
+
REQUIRES = required_artifacts
|
343
|
+
|
344
|
+
# ScalaTest ant task
|
345
|
+
Java.classpath << "org.apache.ant:ant-junit:jar:#{Ant::VERSION}"
|
346
|
+
Java.classpath << REQUIRES
|
347
|
+
|
348
|
+
include TestFramework::JavaTest
|
349
|
+
|
350
|
+
# annotation-based group inclusion
|
351
|
+
attr_accessor :group_includes
|
352
|
+
|
353
|
+
# annotation-based group exclusion
|
354
|
+
attr_accessor :group_excludes
|
355
|
+
|
356
|
+
def initialize(test_task, options)
|
357
|
+
super
|
358
|
+
@group_includes = []
|
359
|
+
@group_excludes = []
|
360
|
+
end
|
361
|
+
|
362
|
+
def tests(dependencies) #:nodoc:
|
363
|
+
suites = filter_classes(dependencies, :interfaces => %w{org.scalatest.Suite})
|
364
|
+
# we should really filter using :class => %w{org.specs.Specification} instead of naming convention
|
365
|
+
specs = filter_classes(dependencies, :class_names => [/Specs?$/])
|
366
|
+
[suites, specs].flatten
|
367
|
+
end
|
368
|
+
|
369
|
+
def run(tests, dependencies) #:nodoc:
|
370
|
+
mkpath task.report_to.to_s
|
371
|
+
success = []
|
372
|
+
scalatest = tests.select { |t| t !~ /Specs?$/ }
|
373
|
+
specs = tests.select { |t| t =~ /Specs?$/ }
|
374
|
+
|
375
|
+
# Specs
|
376
|
+
#options = { :nostacktrace => false }.merge(options)
|
377
|
+
nostacktrace = (options[:nostacktrace]) ? "-ns" : ""
|
378
|
+
cmd_options = { :properties => options[:properties],
|
379
|
+
:java_args => options[:java_args],
|
380
|
+
:classpath => dependencies}
|
381
|
+
specs.each do |spec|
|
382
|
+
Java.load
|
383
|
+
begin
|
384
|
+
Java::Commands.java(spec, {:classpath => dependencies})
|
385
|
+
rescue => e
|
386
|
+
print e.message
|
387
|
+
else
|
388
|
+
success << spec
|
389
|
+
end
|
390
|
+
end
|
391
|
+
|
392
|
+
# ScalaTest
|
393
|
+
reporter_options = 'TFGBSAR' # testSucceeded, testFailed, testIgnored, suiteAborted, runStopped, runAborted, runCompleted
|
394
|
+
scalatest.each do |suite|
|
395
|
+
puts "ScalaTest #{suite.inspect}" if verbose
|
396
|
+
# Use Ant to execute the ScalaTest task, gives us performance and reporting.
|
397
|
+
reportFile = File.join(task.report_to.to_s, "TEST-#{suite}.txt")
|
398
|
+
Buildr.ant('scalatest') do |ant|
|
399
|
+
ant.taskdef :name=>'scalatest', :classname=>'org.scalatest.tools.ScalaTestTask'
|
400
|
+
ant.scalatest :runpath=>dependencies.join(File::PATH_SEPARATOR) do
|
401
|
+
ant.suite :classname=>suite
|
402
|
+
ant.reporter :type=>'stdout', :config=>reporter_options
|
403
|
+
ant.reporter :type=>'file', :filename=> reportFile, :config=>reporter_options
|
404
|
+
ant.includes group_includes.join(" ") if group_includes
|
405
|
+
ant.excludes group_excludes.join(" ") if group_excludes
|
406
|
+
(options[:properties] || []).each { |name, value| ant.property :name=>name, :value=>value }
|
407
|
+
end
|
408
|
+
end
|
409
|
+
|
410
|
+
# Parse for failures, errors, etc.
|
411
|
+
# This is a bit of a pain right now because ScalaTest doesn't flush its
|
412
|
+
# output synchronously before the Ant test finishes so we have to loop
|
413
|
+
# and wait for an indication that the test run was completed.
|
414
|
+
failed = false
|
415
|
+
completed = false
|
416
|
+
wait = 0
|
417
|
+
while (!completed) do
|
418
|
+
File.open(reportFile, "r") do |input|
|
419
|
+
while (line = input.gets) do
|
420
|
+
failed = (line =~ /(TEST FAILED -)|(RUN STOPPED)|(RUN ABORTED)/) unless failed
|
421
|
+
completed |= (line =~ /Run completed\./)
|
422
|
+
break if (failed || completed)
|
423
|
+
end
|
424
|
+
end
|
425
|
+
wait += 1
|
426
|
+
break if (failed || wait > 10)
|
427
|
+
unless completed
|
428
|
+
sleep(1)
|
429
|
+
end
|
430
|
+
end
|
431
|
+
success << suite if (completed && !failed)
|
432
|
+
end
|
433
|
+
|
434
|
+
success
|
435
|
+
end # run
|
436
|
+
|
437
|
+
end # ScalaTest
|
438
|
+
|
439
|
+
end # Buildr
|
282
440
|
|
283
441
|
|
284
442
|
Buildr::TestFramework << Buildr::JUnit
|
285
443
|
Buildr::TestFramework << Buildr::TestNG
|
444
|
+
Buildr::TestFramework << Buildr::ScalaTest
|
286
445
|
|
287
446
|
# Backward compatibility crap.
|
288
447
|
Buildr::JUnit::JUNIT_REQUIRES = Buildr::JUnit::REQUIRES
|