buildr 1.3.2 → 1.3.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (124) hide show
  1. data/CHANGELOG +66 -4
  2. data/{README → README.rdoc} +29 -16
  3. data/Rakefile +16 -20
  4. data/_buildr +38 -0
  5. data/addon/buildr/cobertura.rb +49 -45
  6. data/addon/buildr/emma.rb +238 -0
  7. data/addon/buildr/jetty.rb +1 -1
  8. data/addon/buildr/nailgun.rb +585 -661
  9. data/{lib/buildr/java → addon/buildr}/org/apache/buildr/BuildrNail$Main.class +0 -0
  10. data/{lib/buildr/java → addon/buildr}/org/apache/buildr/BuildrNail.class +0 -0
  11. data/{lib/buildr/java → addon/buildr}/org/apache/buildr/BuildrNail.java +0 -0
  12. data/bin/buildr +9 -2
  13. data/buildr.buildfile +53 -0
  14. data/buildr.gemspec +21 -14
  15. data/doc/css/default.css +51 -48
  16. data/doc/css/print.css +60 -55
  17. data/doc/images/favicon.png +0 -0
  18. data/doc/images/growl-icon.tiff +0 -0
  19. data/doc/images/project-structure.png +0 -0
  20. data/doc/pages/artifacts.textile +46 -156
  21. data/doc/pages/building.textile +63 -323
  22. data/doc/pages/contributing.textile +112 -102
  23. data/doc/pages/download.textile +19 -27
  24. data/doc/pages/extending.textile +27 -81
  25. data/doc/pages/getting_started.textile +44 -119
  26. data/doc/pages/index.textile +26 -47
  27. data/doc/pages/languages.textile +407 -0
  28. data/doc/pages/more_stuff.textile +92 -173
  29. data/doc/pages/packaging.textile +71 -239
  30. data/doc/pages/projects.textile +58 -233
  31. data/doc/pages/recipes.textile +19 -43
  32. data/doc/pages/settings_profiles.textile +39 -104
  33. data/doc/pages/testing.textile +41 -304
  34. data/doc/pages/troubleshooting.textile +29 -47
  35. data/doc/pages/whats_new.textile +69 -167
  36. data/doc/print.haml +0 -1
  37. data/doc/print.toc.yaml +1 -0
  38. data/doc/scripts/buildr-git.rb +1 -1
  39. data/doc/site.haml +1 -0
  40. data/doc/site.toc.yaml +8 -5
  41. data/{KEYS → etc/KEYS} +0 -0
  42. data/etc/git-svn-authors +16 -0
  43. data/lib/buildr.rb +2 -5
  44. data/lib/buildr/core/application.rb +192 -98
  45. data/lib/buildr/core/build.rb +140 -91
  46. data/lib/buildr/core/checks.rb +5 -5
  47. data/lib/buildr/core/common.rb +1 -1
  48. data/lib/buildr/core/compile.rb +12 -10
  49. data/lib/buildr/core/filter.rb +151 -46
  50. data/lib/buildr/core/generate.rb +9 -9
  51. data/lib/buildr/core/progressbar.rb +1 -1
  52. data/lib/buildr/core/project.rb +8 -7
  53. data/lib/buildr/core/test.rb +51 -26
  54. data/lib/buildr/core/transports.rb +22 -38
  55. data/lib/buildr/core/util.rb +78 -26
  56. data/lib/buildr/groovy.rb +18 -0
  57. data/lib/buildr/groovy/bdd.rb +105 -0
  58. data/lib/buildr/groovy/compiler.rb +138 -0
  59. data/lib/buildr/ide/eclipse.rb +102 -71
  60. data/lib/buildr/ide/idea.rb +7 -12
  61. data/lib/buildr/ide/idea7x.rb +7 -8
  62. data/lib/buildr/java.rb +4 -7
  63. data/lib/buildr/java/ant.rb +26 -5
  64. data/lib/buildr/java/bdd.rb +449 -0
  65. data/lib/buildr/java/commands.rb +9 -9
  66. data/lib/buildr/java/{compilers.rb → compiler.rb} +8 -90
  67. data/lib/buildr/java/jruby.rb +29 -11
  68. data/lib/buildr/java/jtestr_runner.rb.erb +116 -0
  69. data/lib/buildr/java/packaging.rb +23 -16
  70. data/lib/buildr/java/pom.rb +1 -1
  71. data/lib/buildr/java/rjb.rb +21 -8
  72. data/lib/buildr/java/test_result.rb +308 -0
  73. data/lib/buildr/java/tests.rb +324 -0
  74. data/lib/buildr/packaging/artifact.rb +12 -11
  75. data/lib/buildr/packaging/artifact_namespace.rb +7 -4
  76. data/lib/buildr/packaging/gems.rb +3 -3
  77. data/lib/buildr/packaging/zip.rb +13 -10
  78. data/lib/buildr/resources/buildr.icns +0 -0
  79. data/lib/buildr/scala.rb +19 -0
  80. data/lib/buildr/scala/compiler.rb +109 -0
  81. data/lib/buildr/scala/tests.rb +203 -0
  82. data/rakelib/apache.rake +71 -45
  83. data/rakelib/doc.rake +2 -2
  84. data/rakelib/package.rake +3 -2
  85. data/rakelib/rspec.rake +23 -21
  86. data/rakelib/setup.rake +34 -9
  87. data/rakelib/stage.rake +4 -1
  88. data/spec/addon/cobertura_spec.rb +77 -0
  89. data/spec/addon/emma_spec.rb +120 -0
  90. data/spec/addon/test_coverage_spec.rb +255 -0
  91. data/spec/{application_spec.rb → core/application_spec.rb} +82 -4
  92. data/spec/{artifact_namespace_spec.rb → core/artifact_namespace_spec.rb} +12 -1
  93. data/spec/core/build_spec.rb +415 -0
  94. data/spec/{checks_spec.rb → core/checks_spec.rb} +2 -2
  95. data/spec/{common_spec.rb → core/common_spec.rb} +119 -30
  96. data/spec/{compile_spec.rb → core/compile_spec.rb} +17 -13
  97. data/spec/core/generate_spec.rb +33 -0
  98. data/spec/{project_spec.rb → core/project_spec.rb} +9 -6
  99. data/spec/{test_spec.rb → core/test_spec.rb} +222 -28
  100. data/spec/{transport_spec.rb → core/transport_spec.rb} +5 -9
  101. data/spec/groovy/bdd_spec.rb +80 -0
  102. data/spec/{groovy_compilers_spec.rb → groovy/compiler_spec.rb} +1 -1
  103. data/spec/ide/eclipse_spec.rb +243 -0
  104. data/spec/{java_spec.rb → java/ant.rb} +7 -17
  105. data/spec/java/bdd_spec.rb +358 -0
  106. data/spec/{java_compilers_spec.rb → java/compiler_spec.rb} +1 -1
  107. data/spec/java/java_spec.rb +88 -0
  108. data/spec/{java_packaging_spec.rb → java/packaging_spec.rb} +65 -4
  109. data/spec/{java_test_frameworks_spec.rb → java/tests_spec.rb} +31 -10
  110. data/spec/{archive_spec.rb → packaging/archive_spec.rb} +12 -2
  111. data/spec/{artifact_spec.rb → packaging/artifact_spec.rb} +12 -5
  112. data/spec/{packaging_helper.rb → packaging/packaging_helper.rb} +0 -0
  113. data/spec/{packaging_spec.rb → packaging/packaging_spec.rb} +1 -1
  114. data/spec/sandbox.rb +22 -5
  115. data/spec/{scala_compilers_spec.rb → scala/compiler_spec.rb} +1 -1
  116. data/spec/{scala_test_frameworks_spec.rb → scala/tests_spec.rb} +11 -12
  117. data/spec/spec_helpers.rb +38 -17
  118. metadata +103 -70
  119. data/lib/buildr/java/bdd_frameworks.rb +0 -265
  120. data/lib/buildr/java/groovyc.rb +0 -137
  121. data/lib/buildr/java/test_frameworks.rb +0 -450
  122. data/spec/build_spec.rb +0 -193
  123. data/spec/java_bdd_frameworks_spec.rb +0 -238
  124. data/spec/spec.opts +0 -6
@@ -1,137 +0,0 @@
1
- # Licensed to the Apache Software Foundation (ASF) under one or more
2
- # contributor license agreements. See the NOTICE file distributed with this
3
- # work for additional information regarding copyright ownership. The ASF
4
- # licenses this file to you under the Apache License, Version 2.0 (the
5
- # "License"); you may not use this file except in compliance with the License.
6
- # You may obtain a copy of the License at
7
- #
8
- # http://www.apache.org/licenses/LICENSE-2.0
9
- #
10
- # Unless required by applicable law or agreed to in writing, software
11
- # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12
- # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13
- # License for the specific language governing permissions and limitations under
14
- # the License.
15
-
16
-
17
- module Buildr
18
- module Compiler
19
- # Groovyc compiler:
20
- # compile.using(:groovyc)
21
- #
22
- # You need to require 'buildr/java/groovyc' if you need to use this compiler.
23
- #
24
- # Used by default if .groovy files are found in the src/main/groovy directory (or src/test/groovy)
25
- # and sets the target directory to target/classes (or target/test/classes).
26
- #
27
- # Groovyc is a joint compiler, this means that when selected for a project, this compiler is used
28
- # to compile both groovy and java sources. It's recommended that Groovy sources are placed in the
29
- # src/main/groovy directory, even though this compiler also looks in src/main/java
30
- #
31
- # Groovyc accepts the following options:
32
- #
33
- # * :encoding -- Encoding of source files
34
- # * :verbose -- Asks the compiler for verbose output, true when running in verbose mode.
35
- # * :fork -- Whether to execute groovyc using a spawned instance of the JVM; defaults to no
36
- # * :memoryInitialSize -- The initial size of the memory for the underlying VM, if using fork mode; ignored otherwise.
37
- # Defaults to the standard VM memory setting. (Examples: 83886080, 81920k, or 80m)
38
- # * :memoryMaximumSize -- The maximum size of the memory for the underlying VM, if using fork mode; ignored otherwise.
39
- # Defaults to the standard VM memory setting. (Examples: 83886080, 81920k, or 80m)
40
- # * :listfiles -- Indicates whether the source files to be compiled will be listed; defaults to no
41
- # * :stacktrace -- If true each compile error message will contain a stacktrace
42
- # * :warnings -- Issue warnings when compiling. True when running in verbose mode.
43
- # * :debug -- Generates bytecode with debugging information. Set from the debug
44
- # environment variable/global option.
45
- # * :deprecation -- If true, shows deprecation messages. False by default.
46
- # * :optimise -- Generates faster bytecode by applying optimisations to the program.
47
- # * :source -- Source code compatibility.
48
- # * :target -- Bytecode compatibility.
49
- # * :javac -- Hash of options passed to the ant javac task
50
- #
51
- class Groovyc < Base
52
-
53
- # The groovyc compiler jars are added to classpath at load time,
54
- # if you want to customize artifact versions, you must set them on the
55
- #
56
- # artifact_ns['Buildr::Compiler::Groovyc'].groovy = '1.5.4'
57
- #
58
- # namespace before this file is required.
59
- REQUIRES = ArtifactNamespace.for(self) do |ns|
60
- ns.groovy! 'org.codehaus.groovy:groovy:jar:>=1.5.3'
61
- ns.commons_cli! 'commons-cli:commons-cli:jar:>=1.0'
62
- ns.asm! 'asm:asm:jar:>=2.2'
63
- ns.antlr! 'antlr:antlr:jar:>=2.7.7'
64
- end
65
-
66
- ANT_TASK = 'org.codehaus.groovy.ant.Groovyc'
67
- GROOVYC_OPTIONS = [:encoding, :verbose, :fork, :memoryInitialSize, :memoryMaximumSize, :listfiles, :stacktrace]
68
- JAVAC_OPTIONS = [:optimise, :warnings, :debug, :deprecation, :source, :target, :javac]
69
- OPTIONS = GROOVYC_OPTIONS + JAVAC_OPTIONS
70
-
71
- class << self
72
- def dependencies #:nodoc:
73
- REQUIRES.artifacts
74
- end
75
-
76
- def applies_to?(project, task) #:nodoc:
77
- paths = task.sources + [sources].flatten.map { |src| Array(project.path_to(:source, task.usage, src.to_sym)) }
78
- paths.flatten!
79
- # Just select if we find .groovy files
80
- paths.any? { |path| !Dir["#{path}/**/*.groovy"].empty? }
81
- end
82
- end
83
-
84
- Java.classpath << dependencies
85
-
86
- specify :language => :groovy, :sources => [:groovy, :java], :source_ext => [:groovy, :java],
87
- :target => 'classes', :target_ext => 'class', :packaging => :jar
88
-
89
- def initialize(project, options) #:nodoc:
90
- super
91
- options[:debug] = Buildr.options.debug if options[:debug].nil?
92
- options[:deprecation] ||= false
93
- options[:optimise] ||= false
94
- options[:verbose] ||= Buildr.application.options.trace if options[:verbose].nil?
95
- options[:warnings] = verbose if options[:warnings].nil?
96
- options[:javac] = OpenObject.new if options[:javac].nil?
97
- end
98
-
99
- # http://groovy.codehaus.org/The+groovyc+Ant+Task
100
- def compile(sources, target, dependencies) #:nodoc:
101
- return if Buildr.application.options.dryrun
102
- Buildr.ant 'groovyc' do |ant|
103
- classpath = dependencies | self.class.dependencies.map(&:to_s)
104
- ant.taskdef :name => 'groovyc', :classname => ANT_TASK, :classpath => classpath.join(File::PATH_SEPARATOR)
105
- ant.groovyc groovyc_options(sources, target) do
106
- sources.each { |src| ant.src :path => src }
107
- ant.classpath do
108
- classpath.each { |dep| ant.pathelement :path => dep }
109
- end
110
- ant.javac(javac_options)
111
- end
112
- end
113
- end
114
-
115
- private
116
- def groovyc_options(sources, target)
117
- check_options options, OPTIONS
118
- groovyc_options = options.to_hash.only(*GROOVYC_OPTIONS)
119
- groovyc_options[:destdir] = File.expand_path(target)
120
- groovyc_options
121
- end
122
-
123
- def javac_options
124
- check_options options, OPTIONS
125
- javac_options = options.to_hash.only(*JAVAC_OPTIONS)
126
- javac_options[:optimize] = (javac_options.delete(:optimise) || false)
127
- javac_options[:nowarn] = (javac_options.delete(:warnings) || verbose).to_s !~ /^(true|yes|on)$/i
128
- other = javac_options.delete(:javac) || {}
129
- javac_options.merge!(other)
130
- javac_options
131
- end
132
-
133
- end
134
- end
135
- end
136
-
137
- Buildr::Compiler.compilers.unshift Buildr::Compiler::Groovyc
@@ -1,450 +0,0 @@
1
- # Licensed to the Apache Software Foundation (ASF) under one or more
2
- # contributor license agreements. See the NOTICE file distributed with this
3
- # work for additional information regarding copyright ownership. The ASF
4
- # licenses this file to you under the Apache License, Version 2.0 (the
5
- # "License"); you may not use this file except in compliance with the License.
6
- # You may obtain a copy of the License at
7
- #
8
- # http://www.apache.org/licenses/LICENSE-2.0
9
- #
10
- # Unless required by applicable law or agreed to in writing, software
11
- # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12
- # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13
- # License for the specific language governing permissions and limitations under
14
- # the License.
15
-
16
-
17
- require 'buildr/core/build'
18
- require 'buildr/core/compile'
19
- require 'buildr/java/ant'
20
-
21
- module Buildr
22
-
23
- class TestFramework
24
- module JavaTest
25
-
26
- # Add buildr utilities (JavaTestFilter) to classpath
27
- Java.classpath << File.join(File.dirname(__FILE__))
28
-
29
- def self.included(mod)
30
- super
31
- mod.extend ClassMethods
32
- end
33
-
34
- private
35
- # :call-seq:
36
- # filter_classes(dependencies, criteria)
37
- #
38
- # Return a list of classnames that match the given criteria.
39
- # The criteria parameter is a hash that must contain at least one of:
40
- #
41
- # * :class_names -- List of patterns to match against class name
42
- # * :interfaces -- List of java interfaces or java classes
43
- # * :class_annotations -- List of annotations on class level
44
- # * :method_annotations -- List of annotations on method level
45
- #
46
- def filter_classes(dependencies, criteria = {})
47
- return [] unless task.compile.target
48
- target = task.compile.target.to_s
49
- candidates = Dir["#{target}/**/*.class"].
50
- map { |file| Util.relative_path(file, target).ext('').gsub(File::SEPARATOR, '.') }.
51
- reject { |name| name =~ /\$/ }
52
- result = []
53
- if criteria[:class_names]
54
- result.concat candidates.select { |name| criteria[:class_names].flatten.any? { |pat| pat === name } }
55
- end
56
- begin
57
- Java.load
58
- filter = Java.org.apache.buildr.JavaTestFilter.new(dependencies.to_java(Java.java.lang.String))
59
- if criteria[:interfaces]
60
- filter.add_interfaces(criteria[:interfaces].to_java(Java.java.lang.String))
61
- end
62
- if criteria[:class_annotations]
63
- filter.add_class_annotations(criteria[:class_annotations].to_java(Java.java.lang.String))
64
- end
65
- if criteria[:method_annotations]
66
- filter.add_method_annotations(criteria[:method_annotations].to_java(Java.java.lang.String))
67
- end
68
- result.concat filter.filter(candidates.to_java(Java.java.lang.String)).map(&:to_s)
69
- rescue =>ex
70
- puts "#{ex.class}: #{ex.message}" if verbose
71
- raise
72
- end
73
- result.uniq
74
- end
75
-
76
- module ClassMethods
77
- def applies_to?(project) #:nodoc:
78
- project.test.compile.language == :java
79
- end
80
- end
81
-
82
- end
83
- end
84
-
85
- # JMock is available when using JUnit and TestNG, JBehave.
86
- module JMock
87
- # JMock version.
88
- VERSION = '1.2.0' unless const_defined?('VERSION')
89
- # JMock specification.
90
- REQUIRES = ["jmock:jmock:jar:#{VERSION}"]
91
- end
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
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
-
109
- # JUnit test framework, the default test framework for Java tests.
110
- #
111
- # Support the following options:
112
- # * :fork -- If true/:once (default), fork for each test class. If :each, fork for each individual
113
- # test case. If false, run all tests in the same VM (fast, but dangerous).
114
- # * :clonevm -- If true clone the VM each time it is forked.
115
- # * :properties -- Hash of system properties available to the test case.
116
- # * :environment -- Hash of environment variables available to the test case.
117
- # * :java_args -- Arguments passed as is to the JVM.
118
- class JUnit < TestFramework::Base
119
-
120
- # Used by the junit:report task. Access through JUnit#report if you want to set various
121
- # options for that task, for example:
122
- # JUnit.report.frames = false
123
- class Report
124
-
125
- # Ant-Trax required for running the JUnitReport task.
126
- Java.classpath << "org.apache.ant:ant-trax:jar:#{Ant::VERSION}"
127
-
128
- # Parameters passed to the Ant JUnitReport task.
129
- attr_reader :params
130
- # True (default) to produce a report using frames, false to produce a single-page report.
131
- attr_accessor :frames
132
- # Directory for the report style (defaults to using the internal style).
133
- attr_accessor :style_dir
134
- # Target directory for generated report.
135
- attr_accessor :target
136
-
137
- def initialize
138
- @params = {}
139
- @frames = true
140
- @target = 'reports/junit'
141
- end
142
-
143
- # :call-seq:
144
- # generate(projects, target?)
145
- #
146
- # Generates a JUnit report for these projects (must run JUnit tests first) into the
147
- # target directory. You can specify a target, or let it pick the default one from the
148
- # target attribute.
149
- def generate(projects, target = @target.to_s)
150
- html_in = File.join(target, 'html')
151
- rm_rf html_in ; mkpath html_in
152
-
153
- Buildr.ant('junit-report') do |ant|
154
- ant.junitreport :todir=>target do
155
- projects.select { |project| project.test.framework == :junit }.
156
- map { |project| project.test.report_to.to_s }.select { |path| File.exist?(path) }.
157
- each { |path| ant.fileset(:dir=>path) { ant.include :name=>'TEST-*.xml' } }
158
- options = { :format=>frames ? 'frames' : 'noframes' }
159
- options[:styledir] = style_dir if style_dir
160
- ant.report options.merge(:todir=>html_in) do
161
- params.each { |key, value| ant.param :name=>key, :expression=>value }
162
- end
163
- end
164
- end
165
- end
166
-
167
- end
168
-
169
- class << self
170
-
171
- # :call-seq:
172
- # report()
173
- #
174
- # Returns the Report object used by the junit:report task. You can use this object to set
175
- # various options that affect your report, for example:
176
- # JUnit.report.frames = false
177
- # JUnit.report.params['title'] = 'My App'
178
- def report
179
- @report ||= Report.new
180
- end
181
-
182
- end
183
-
184
- # JUnit version number.
185
- VERSION = '4.4' unless const_defined?('VERSION')
186
-
187
- REQUIRES = ["junit:junit:jar:#{VERSION}"] + JMock::REQUIRES
188
-
189
- # Ant-JUnit requires for JUnit and JUnit reports tasks.
190
- Java.classpath << "org.apache.ant:ant-junit:jar:#{Ant::VERSION}"
191
-
192
- include TestFramework::JavaTest
193
-
194
- def tests(dependencies) #:nodoc:
195
- filter_classes(dependencies,
196
- :interfaces => %w{junit.framework.TestCase},
197
- :class_annotations => %w{org.junit.runner.RunWith},
198
- :method_annotations => %w{org.junit.Test})
199
- end
200
-
201
- def run(tests, dependencies) #:nodoc:
202
- # Use Ant to execute the Junit tasks, gives us performance and reporting.
203
- Buildr.ant('junit') do |ant|
204
- case options[:fork]
205
- when false
206
- forking = {}
207
- when :each
208
- forking = { :fork=>true, :forkmode=>'perTest' }
209
- when true, :once
210
- forking = { :fork=>true, :forkmode=>'once' }
211
- else
212
- fail 'Option fork must be :once, :each or false.'
213
- end
214
- mkpath task.report_to.to_s
215
- ant.junit forking.merge(:clonevm=>options[:clonevm] || false, :dir=>task.send(:project).path_to) do
216
- ant.classpath :path=>dependencies.join(File::PATH_SEPARATOR)
217
- (options[:properties] || []).each { |key, value| ant.sysproperty :key=>key, :value=>value }
218
- (options[:environment] || []).each { |key, value| ant.env :key=>key, :value=>value }
219
- Array(options[:java_args]).each { |value| ant.jvmarg :value=>value }
220
- ant.formatter :type=>'plain'
221
- ant.formatter :type=>'plain', :usefile=>false # log test
222
- ant.formatter :type=>'xml'
223
- ant.batchtest :todir=>task.report_to.to_s, :failureproperty=>'failed' do
224
- ant.fileset :dir=>task.compile.target.to_s do
225
- tests.each { |test| ant.include :name=>File.join(*test.split('.')).ext('class') }
226
- end
227
- end
228
- end
229
- return tests unless ant.project.getProperty('failed')
230
- end
231
- # But Ant doesn't tell us what went kaput, so we'll have to parse the test files.
232
- tests.inject([]) do |passed, test|
233
- report_file = File.join(task.report_to.to_s, "TEST-#{test}.txt")
234
- if File.exist?(report_file)
235
- report = File.read(report_file)
236
- # The second line (if exists) is the status line and we scan it for its values.
237
- status = (report.split("\n")[1] || '').scan(/(run|failures|errors):\s*(\d+)/i).
238
- inject(Hash.new(0)) { |hash, pair| hash[pair[0].downcase.to_sym] = pair[1].to_i ; hash }
239
- passed << test if status[:failures] == 0 && status[:errors] == 0
240
- end
241
- passed
242
- end
243
- end
244
-
245
- namespace 'junit' do
246
- desc "Generate JUnit tests report in #{report.target}"
247
- task('report') do |task|
248
- report.generate Project.projects
249
- puts "Generated JUnit tests report in #{report.target}" if verbose
250
- end
251
- end
252
-
253
- task('clean') { rm_rf report.target.to_s }
254
-
255
- end
256
-
257
-
258
- # TestNG test framework. To use in your project:
259
- # test.using :testng
260
- #
261
- # Support the following options:
262
- # * :properties -- Hash of properties passed to the test suite.
263
- # * :java_args -- Arguments passed to the JVM.
264
- class TestNG < TestFramework::Base
265
-
266
- # TestNG version number.
267
- VERSION = '5.7' unless const_defined?('VERSION')
268
- # TestNG specification.
269
- REQUIRES = ["org.testng:testng:jar:jdk15:#{VERSION}"] + JMock::REQUIRES
270
-
271
- include TestFramework::JavaTest
272
-
273
- def tests(dependencies) #:nodoc:
274
- filter_classes(dependencies,
275
- :class_annotations => %w{org.testng.annotations.Test},
276
- :method_annotations => %w{org.testng.annotations.Test})
277
- end
278
-
279
- def run(tests, dependencies) #:nodoc:
280
- cmd_args = [ 'org.testng.TestNG', '-sourcedir', task.compile.sources.join(';'), '-suitename', task.send(:project).name ]
281
- cmd_args << '-d' << task.report_to.to_s
282
- cmd_options = { :properties=>options[:properties], :java_args=>options[:java_args],
283
- :classpath=>dependencies }
284
- tests.inject([]) do |passed, test|
285
- begin
286
- Java::Commands.java cmd_args, '-testclass', test, cmd_options.merge(:name=>test)
287
- passed << test
288
- rescue
289
- passed
290
- end
291
- end
292
- end
293
-
294
- end
295
-
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
440
-
441
-
442
- Buildr::TestFramework << Buildr::JUnit
443
- Buildr::TestFramework << Buildr::TestNG
444
- Buildr::TestFramework << Buildr::ScalaTest
445
-
446
- # Backward compatibility crap.
447
- Buildr::JUnit::JUNIT_REQUIRES = Buildr::JUnit::REQUIRES
448
- Buildr::TestNG::TestNG_REQUIRES = Buildr::TestNG::REQUIRES
449
- Java::JUnit = Buildr::JUnit
450
- Java::TestNG = Buildr::TestNG