buildr 1.3.2-java → 1.3.3-java
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 +66 -4
- data/{README → README.rdoc} +29 -16
- data/Rakefile +16 -20
- data/_buildr +38 -0
- data/addon/buildr/cobertura.rb +49 -45
- data/addon/buildr/emma.rb +238 -0
- data/addon/buildr/jetty.rb +1 -1
- data/addon/buildr/nailgun.rb +585 -661
- data/{lib/buildr/java → addon/buildr}/org/apache/buildr/BuildrNail$Main.class +0 -0
- data/{lib/buildr/java → addon/buildr}/org/apache/buildr/BuildrNail.class +0 -0
- data/{lib/buildr/java → addon/buildr}/org/apache/buildr/BuildrNail.java +0 -0
- data/bin/buildr +9 -2
- data/buildr.buildfile +53 -0
- data/buildr.gemspec +21 -14
- data/doc/css/default.css +51 -48
- data/doc/css/print.css +60 -55
- data/doc/images/favicon.png +0 -0
- data/doc/images/growl-icon.tiff +0 -0
- data/doc/images/project-structure.png +0 -0
- data/doc/pages/artifacts.textile +46 -156
- data/doc/pages/building.textile +63 -323
- data/doc/pages/contributing.textile +112 -102
- data/doc/pages/download.textile +19 -27
- data/doc/pages/extending.textile +27 -81
- data/doc/pages/getting_started.textile +44 -119
- data/doc/pages/index.textile +26 -47
- data/doc/pages/languages.textile +407 -0
- data/doc/pages/more_stuff.textile +92 -173
- data/doc/pages/packaging.textile +71 -239
- data/doc/pages/projects.textile +58 -233
- data/doc/pages/recipes.textile +19 -43
- data/doc/pages/settings_profiles.textile +39 -104
- data/doc/pages/testing.textile +41 -304
- data/doc/pages/troubleshooting.textile +29 -47
- data/doc/pages/whats_new.textile +69 -167
- data/doc/print.haml +0 -1
- data/doc/print.toc.yaml +1 -0
- data/doc/scripts/buildr-git.rb +1 -1
- data/doc/site.haml +1 -0
- data/doc/site.toc.yaml +8 -5
- data/{KEYS → etc/KEYS} +0 -0
- data/etc/git-svn-authors +16 -0
- data/lib/buildr.rb +2 -5
- data/lib/buildr/core/application.rb +192 -98
- data/lib/buildr/core/build.rb +140 -91
- data/lib/buildr/core/checks.rb +5 -5
- data/lib/buildr/core/common.rb +1 -1
- data/lib/buildr/core/compile.rb +12 -10
- data/lib/buildr/core/filter.rb +151 -46
- data/lib/buildr/core/generate.rb +9 -9
- data/lib/buildr/core/progressbar.rb +1 -1
- data/lib/buildr/core/project.rb +8 -7
- data/lib/buildr/core/test.rb +51 -26
- data/lib/buildr/core/transports.rb +22 -38
- data/lib/buildr/core/util.rb +78 -26
- data/lib/buildr/groovy.rb +18 -0
- data/lib/buildr/groovy/bdd.rb +105 -0
- data/lib/buildr/groovy/compiler.rb +138 -0
- data/lib/buildr/ide/eclipse.rb +102 -71
- data/lib/buildr/ide/idea.rb +7 -12
- data/lib/buildr/ide/idea7x.rb +7 -8
- data/lib/buildr/java.rb +4 -7
- data/lib/buildr/java/ant.rb +26 -5
- data/lib/buildr/java/bdd.rb +449 -0
- data/lib/buildr/java/commands.rb +9 -9
- data/lib/buildr/java/{compilers.rb → compiler.rb} +8 -90
- data/lib/buildr/java/jruby.rb +29 -11
- data/lib/buildr/java/jtestr_runner.rb.erb +116 -0
- data/lib/buildr/java/packaging.rb +23 -16
- data/lib/buildr/java/pom.rb +1 -1
- data/lib/buildr/java/rjb.rb +21 -8
- data/lib/buildr/java/test_result.rb +308 -0
- data/lib/buildr/java/tests.rb +324 -0
- data/lib/buildr/packaging/artifact.rb +12 -11
- data/lib/buildr/packaging/artifact_namespace.rb +7 -4
- data/lib/buildr/packaging/gems.rb +3 -3
- data/lib/buildr/packaging/zip.rb +13 -10
- data/lib/buildr/resources/buildr.icns +0 -0
- data/lib/buildr/scala.rb +19 -0
- data/lib/buildr/scala/compiler.rb +109 -0
- data/lib/buildr/scala/tests.rb +203 -0
- data/rakelib/apache.rake +71 -45
- data/rakelib/doc.rake +2 -2
- data/rakelib/package.rake +3 -2
- data/rakelib/rspec.rake +23 -21
- data/rakelib/setup.rake +34 -9
- data/rakelib/stage.rake +4 -1
- data/spec/addon/cobertura_spec.rb +77 -0
- data/spec/addon/emma_spec.rb +120 -0
- data/spec/addon/test_coverage_spec.rb +255 -0
- data/spec/{application_spec.rb → core/application_spec.rb} +82 -4
- data/spec/{artifact_namespace_spec.rb → core/artifact_namespace_spec.rb} +12 -1
- data/spec/core/build_spec.rb +415 -0
- data/spec/{checks_spec.rb → core/checks_spec.rb} +2 -2
- data/spec/{common_spec.rb → core/common_spec.rb} +119 -30
- data/spec/{compile_spec.rb → core/compile_spec.rb} +17 -13
- data/spec/core/generate_spec.rb +33 -0
- data/spec/{project_spec.rb → core/project_spec.rb} +9 -6
- data/spec/{test_spec.rb → core/test_spec.rb} +222 -28
- data/spec/{transport_spec.rb → core/transport_spec.rb} +5 -9
- data/spec/groovy/bdd_spec.rb +80 -0
- data/spec/{groovy_compilers_spec.rb → groovy/compiler_spec.rb} +1 -1
- data/spec/ide/eclipse_spec.rb +243 -0
- data/spec/{java_spec.rb → java/ant.rb} +7 -17
- data/spec/java/bdd_spec.rb +358 -0
- data/spec/{java_compilers_spec.rb → java/compiler_spec.rb} +1 -1
- data/spec/java/java_spec.rb +88 -0
- data/spec/{java_packaging_spec.rb → java/packaging_spec.rb} +65 -4
- data/spec/{java_test_frameworks_spec.rb → java/tests_spec.rb} +31 -10
- data/spec/{archive_spec.rb → packaging/archive_spec.rb} +12 -2
- data/spec/{artifact_spec.rb → packaging/artifact_spec.rb} +12 -5
- data/spec/{packaging_helper.rb → packaging/packaging_helper.rb} +0 -0
- data/spec/{packaging_spec.rb → packaging/packaging_spec.rb} +1 -1
- data/spec/sandbox.rb +22 -5
- data/spec/{scala_compilers_spec.rb → scala/compiler_spec.rb} +1 -1
- data/spec/{scala_test_frameworks_spec.rb → scala/tests_spec.rb} +11 -12
- data/spec/spec_helpers.rb +38 -17
- metadata +93 -70
- data/lib/buildr/java/bdd_frameworks.rb +0 -265
- data/lib/buildr/java/groovyc.rb +0 -137
- data/lib/buildr/java/test_frameworks.rb +0 -450
- data/spec/build_spec.rb +0 -193
- data/spec/java_bdd_frameworks_spec.rb +0 -238
- data/spec/spec.opts +0 -6
|
@@ -0,0 +1,120 @@
|
|
|
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 File.join(File.dirname(__FILE__), 'test_coverage_spec')
|
|
18
|
+
Sandbox.require_addon 'buildr/emma'
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
Buildr::Emma::requires
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
describe Buildr::Emma do
|
|
25
|
+
before do
|
|
26
|
+
# Reloading the addon because the sandbox removes all its actions
|
|
27
|
+
load File.expand_path('../addon/buildr/emma.rb')
|
|
28
|
+
@tool_module = Buildr::Emma
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it_should_behave_like 'test coverage tool'
|
|
32
|
+
|
|
33
|
+
describe 'project-specific' do
|
|
34
|
+
describe 'metadata file' do
|
|
35
|
+
it 'should have a default value' do
|
|
36
|
+
define('foo').emma.metadata_file.should point_to_path('reports/emma/coverage.em')
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
it 'should be overridable' do
|
|
40
|
+
define('foo') { emma.metadata_file = path_to('target/metadata.emma') }
|
|
41
|
+
project('foo').emma.metadata_file.should point_to_path('target/metadata.emma')
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
it 'should be created during instrumentation' do
|
|
45
|
+
write 'src/main/java/Foo.java', 'public class Foo {}'
|
|
46
|
+
define('foo')
|
|
47
|
+
task('foo:emma:instrument').invoke
|
|
48
|
+
file(project('foo').emma.metadata_file).should exist
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
describe 'coverage file' do
|
|
53
|
+
it 'should have a default value' do
|
|
54
|
+
define('foo').emma.coverage_file.should point_to_path('reports/emma/coverage.ec')
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
it 'should be overridable' do
|
|
58
|
+
define('foo') { emma.coverage_file = path_to('target/coverage.emma') }
|
|
59
|
+
project('foo').emma.coverage_file.should point_to_path('target/coverage.emma')
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
it 'should be created during test' do
|
|
63
|
+
write 'src/main/java/Foo.java', 'public class Foo {}'
|
|
64
|
+
write_test :for=>'Foo', :in=>'src/test/java'
|
|
65
|
+
define('foo')
|
|
66
|
+
task('foo:test').invoke
|
|
67
|
+
file(project('foo').emma.coverage_file).should exist
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
describe 'instrumentation' do
|
|
72
|
+
before do
|
|
73
|
+
['Foo', 'Bar'].each { |cls| write File.join('src/main/java', "#{cls}.java"), "public class #{cls} {}" }
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
it 'should instrument only included classes' do
|
|
77
|
+
define('foo') { emma.include 'Foo' }
|
|
78
|
+
task("foo:emma:instrument").invoke
|
|
79
|
+
Dir.chdir('target/instrumented/classes') { Dir.glob('*').sort.should == ['Foo.class'] }
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
it 'should not instrument excluded classes' do
|
|
83
|
+
define('foo') { emma.exclude 'Foo' }
|
|
84
|
+
task("foo:emma:instrument").invoke
|
|
85
|
+
Dir.chdir('target/instrumented/classes') { Dir.glob('*').sort.should == ['Bar.class'] }
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
it 'should instrument classes that are included but not excluded' do
|
|
89
|
+
write 'src/main/java/Baz.java', 'public class Baz {}'
|
|
90
|
+
define('foo') { emma.include('Ba*').exclude('*ar') }
|
|
91
|
+
task("foo:emma:instrument").invoke
|
|
92
|
+
Dir.chdir('target/instrumented/classes') { Dir.glob('*').sort.should == ['Baz.class'] }
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
describe 'reports' do
|
|
97
|
+
before do
|
|
98
|
+
write 'src/main/java/Foo.java', 'public class Foo {}'
|
|
99
|
+
write_test :for=>'Foo', :in=>'src/test/java'
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
describe 'in html' do
|
|
103
|
+
it 'should inform the user if no coverage data' do
|
|
104
|
+
rm 'src/test/java/FooTest.java'
|
|
105
|
+
define('foo')
|
|
106
|
+
lambda { task('foo:emma:html').invoke }.
|
|
107
|
+
should show_info(/No test coverage report for foo. Missing: #{project('foo').emma.coverage_file}/)
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
describe 'in xml' do
|
|
112
|
+
it 'should have an xml file' do
|
|
113
|
+
define('foo')
|
|
114
|
+
task('foo:emma:xml').invoke
|
|
115
|
+
file(File.join(project('foo').emma.report_dir, 'coverage.xml')).should exist
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
end
|
|
@@ -0,0 +1,255 @@
|
|
|
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 File.join(File.dirname(__FILE__), '../spec_helpers')
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
module TestCoverageHelper
|
|
21
|
+
def write_test options
|
|
22
|
+
write File.join(options[:in], "#{options[:for]}Test.java"),
|
|
23
|
+
"public class #{options[:for]}Test extends junit.framework.TestCase { public void test#{options[:for]}() { new #{options[:for]}(); } }"
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# Rspec matcher using file glob patterns.
|
|
27
|
+
class FileNamePatternMatcher
|
|
28
|
+
def initialize(pattern)
|
|
29
|
+
@expected_pattern = pattern
|
|
30
|
+
@pattern_matcher = lambda { |filename| File.fnmatch? pattern, filename }
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def matches?(directory)
|
|
34
|
+
@actual_filenames = Dir[File.join(directory,'*')]
|
|
35
|
+
@actual_filenames.any? &@pattern_matcher
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def failure_message
|
|
39
|
+
"Expected to find at least one element matching '#{@expected_pattern}' among #{@actual_filenames.inspect}, but found none"
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def negative_failure_message
|
|
43
|
+
"Expected to find no element matching '#{@expected_pattern}' among #{@actual_filenames.inspect}, but found matching element(s) #{@actual_filenames.select(&@pattern_matcher).inspect}"
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# Test if a directory contains at least one file matching a given glob pattern.
|
|
48
|
+
#
|
|
49
|
+
# For example, to check that a directory contains at least one HTML file:
|
|
50
|
+
# '/path/to/some/directory'.should have_files_matching('*.html')
|
|
51
|
+
def have_files_matching pattern
|
|
52
|
+
FileNamePatternMatcher.new pattern
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
describe 'test coverage tool', :shared=>true do
|
|
57
|
+
include TestCoverageHelper
|
|
58
|
+
|
|
59
|
+
def toolname
|
|
60
|
+
@tool_module.name.split('::').last.downcase
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def test_coverage_config
|
|
64
|
+
project('foo').send(toolname)
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
describe 'project-specific' do
|
|
68
|
+
|
|
69
|
+
before do
|
|
70
|
+
write 'src/main/java/Foo.java', 'public class Foo {}'
|
|
71
|
+
write_test :for=>'Foo', :in=>'src/test/java'
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
describe 'clean' do
|
|
75
|
+
before { define('foo') }
|
|
76
|
+
|
|
77
|
+
it 'should remove the instrumented directory' do
|
|
78
|
+
mkdir_p test_coverage_config.instrumented_dir.to_s
|
|
79
|
+
task('foo:clean').invoke
|
|
80
|
+
file(test_coverage_config.instrumented_dir).should_not exist
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
it 'should remove the reporting directory' do
|
|
84
|
+
mkdir_p test_coverage_config.report_dir
|
|
85
|
+
task('foo:clean').invoke
|
|
86
|
+
file(test_coverage_config.report_dir).should_not exist
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
describe 'instrumented directory' do
|
|
91
|
+
it 'should have a default value' do
|
|
92
|
+
define('foo')
|
|
93
|
+
test_coverage_config.instrumented_dir.should point_to_path('target/instrumented/classes')
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
it 'should be overridable' do
|
|
97
|
+
toolname = toolname()
|
|
98
|
+
define('foo') { send(toolname).instrumented_dir = path_to('target/coverage/classes') }
|
|
99
|
+
test_coverage_config.instrumented_dir.should point_to_path('target/coverage/classes')
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
it 'should be created during instrumentation' do
|
|
103
|
+
define('foo')
|
|
104
|
+
task("foo:#{toolname}:instrument").invoke
|
|
105
|
+
file(test_coverage_config.instrumented_dir).should exist
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
describe 'instrumentation' do
|
|
110
|
+
def instrumented_dir
|
|
111
|
+
file(test_coverage_config.instrumented_dir)
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
it 'should happen after compile' do
|
|
115
|
+
define('foo')
|
|
116
|
+
lambda { task("foo:#{toolname}:instrument").invoke }.should run_task('foo:compile')
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
it 'should put classes from compile.target in the instrumented directory' do
|
|
120
|
+
define('foo')
|
|
121
|
+
task("foo:#{toolname}:instrument").invoke
|
|
122
|
+
Dir.entries(instrumented_dir.to_s).should == Dir.entries(project('foo').compile.target.to_s)
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
it 'should touch instrumented directory if anything instrumented' do
|
|
126
|
+
a_long_time_ago = Time.now - 10
|
|
127
|
+
define('foo')
|
|
128
|
+
mkpath instrumented_dir.to_s
|
|
129
|
+
File.utime(a_long_time_ago, a_long_time_ago, instrumented_dir.to_s)
|
|
130
|
+
task("foo:#{toolname}:instrument").invoke
|
|
131
|
+
instrumented_dir.timestamp.should be_close(Time.now, 2)
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
it 'should not touch instrumented directory if nothing instrumented' do
|
|
135
|
+
a_long_time_ago = Time.now - 10
|
|
136
|
+
define('foo').compile.invoke
|
|
137
|
+
mkpath instrumented_dir.to_s
|
|
138
|
+
[project('foo').compile.target, instrumented_dir].map(&:to_s).each { |dir| File.utime(a_long_time_ago, a_long_time_ago, dir) }
|
|
139
|
+
task("foo:#{toolname}:instrument").invoke
|
|
140
|
+
instrumented_dir.timestamp.should be_close(a_long_time_ago, 2)
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
describe 'testing classpath' do
|
|
145
|
+
it 'should give priority to instrumented classes over non-instrumented ones' do
|
|
146
|
+
define('foo')
|
|
147
|
+
depends = project('foo').test.dependencies
|
|
148
|
+
depends.index(test_coverage_config.instrumented_dir).should < depends.index(project('foo').compile.target)
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
it 'should have the test coverage tools artifacts' do
|
|
152
|
+
define('foo')
|
|
153
|
+
@tool_module.requires.each { |artifact| project('foo').test.dependencies.should include(artifact) }
|
|
154
|
+
end
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
describe 'html report' do
|
|
158
|
+
it 'should have html files' do
|
|
159
|
+
define('foo')
|
|
160
|
+
task("foo:#{toolname}:html").invoke
|
|
161
|
+
test_coverage_config.report_to(:html).should have_files_matching('*.html')
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
it 'should contain full source code, including comments' do
|
|
165
|
+
write 'src/main/java/Foo.java',
|
|
166
|
+
'public class Foo { /* This comment is a TOKEN to check that test coverage reports include the source code */ }'
|
|
167
|
+
define('foo')
|
|
168
|
+
task("foo:#{toolname}:html").invoke
|
|
169
|
+
htlm_report_contents = Dir[File.join(test_coverage_config.report_dir, '**/*.html')].map{|path|File.open(path).read}.join
|
|
170
|
+
htlm_report_contents.should =~ /TOKEN/
|
|
171
|
+
end
|
|
172
|
+
end
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
describe 'cross-project' do
|
|
176
|
+
describe 'reporting' do
|
|
177
|
+
before do
|
|
178
|
+
write 'src/main/java/Foo.java', 'public class Foo {}'
|
|
179
|
+
write 'bar/src/main/java/Bar.java', 'public class Bar {}'
|
|
180
|
+
write_test :for=>'Bar', :in=>'bar/src/test/java'
|
|
181
|
+
define('foo') { define('bar') }
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
it 'should have a default target' do
|
|
185
|
+
@tool_module.report_to.should point_to_path(File.join('reports', toolname))
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
describe 'in html' do
|
|
189
|
+
it 'should be a defined task' do
|
|
190
|
+
Rake::Task.task_defined?("#{toolname}:html").should be(true)
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
it 'should happen after project instrumentation and testing' do
|
|
194
|
+
lambda { task("#{toolname}:html").invoke }.should run_tasks(["foo:#{toolname}:instrument", 'foo:bar:test'])
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
it 'should have html files' do
|
|
198
|
+
task("#{toolname}:html").invoke
|
|
199
|
+
@tool_module.report_to(:html).should have_files_matching('*.html')
|
|
200
|
+
end
|
|
201
|
+
|
|
202
|
+
it 'should contain full source code, including comments' do
|
|
203
|
+
write 'bar/src/main/java/Bar.java',
|
|
204
|
+
'public class Bar { /* This comment is a TOKEN to check that test coverage reports include the source code */ }'
|
|
205
|
+
task("#{toolname}:html").invoke
|
|
206
|
+
htlm_report_contents = Dir[File.join(@tool_module.report_to(:html), '**/*.html')].map{|path|File.open(path).read}.join
|
|
207
|
+
htlm_report_contents.should =~ /TOKEN/
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
it 'should handle gracefully a project with no source' do
|
|
211
|
+
define 'baz', :base_dir=>'baz'
|
|
212
|
+
task("#{toolname}:html").invoke
|
|
213
|
+
lambda { task("#{toolname}:html").invoke }.should_not raise_error
|
|
214
|
+
end
|
|
215
|
+
end
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
describe 'clean' do
|
|
219
|
+
it 'should remove the report directory' do
|
|
220
|
+
define('foo')
|
|
221
|
+
mkdir_p @tool_module.report_to
|
|
222
|
+
task("#{toolname}:clean").invoke
|
|
223
|
+
file(@tool_module.report_to).should_not exist
|
|
224
|
+
end
|
|
225
|
+
|
|
226
|
+
it 'should be called when calling global clean' do
|
|
227
|
+
define('foo')
|
|
228
|
+
lambda { task('clean').invoke }.should run_task("#{toolname}:clean")
|
|
229
|
+
end
|
|
230
|
+
end
|
|
231
|
+
end
|
|
232
|
+
|
|
233
|
+
describe 'project with no source' do
|
|
234
|
+
it 'should not define an html report task' do
|
|
235
|
+
define 'foo'
|
|
236
|
+
Rake::Task.task_defined?("foo:#{toolname}:html").should be(false)
|
|
237
|
+
end
|
|
238
|
+
|
|
239
|
+
it 'should not raise an error when instrumenting' do
|
|
240
|
+
define('foo')
|
|
241
|
+
lambda { task("foo:#{toolname}:instrument").invoke }.should_not raise_error
|
|
242
|
+
end
|
|
243
|
+
|
|
244
|
+
it 'should not add the instrumented directory to the testing classpath' do
|
|
245
|
+
define 'foo'
|
|
246
|
+
depends = project('foo').test.dependencies
|
|
247
|
+
depends.should_not include(test_coverage_config.instrumented_dir)
|
|
248
|
+
end
|
|
249
|
+
|
|
250
|
+
it 'should not add the test coverage tools artifacts to the testing classpath' do
|
|
251
|
+
define('foo')
|
|
252
|
+
@tool_module.requires.each { |artifact| project('foo').test.dependencies.should_not include(artifact) }
|
|
253
|
+
end
|
|
254
|
+
end
|
|
255
|
+
end
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
# the License.
|
|
15
15
|
|
|
16
16
|
|
|
17
|
-
require File.join(File.dirname(__FILE__), 'spec_helpers')
|
|
17
|
+
require File.join(File.dirname(__FILE__), '../spec_helpers')
|
|
18
18
|
|
|
19
19
|
|
|
20
20
|
describe Buildr::Application do
|
|
@@ -29,6 +29,17 @@ describe Buildr::Application do
|
|
|
29
29
|
end
|
|
30
30
|
end
|
|
31
31
|
|
|
32
|
+
describe '#run' do
|
|
33
|
+
it 'should execute *_load methods in order' do
|
|
34
|
+
last = nil
|
|
35
|
+
order = [:find_buildfile, :load_gems, :load_artifacts, :load_tasks,
|
|
36
|
+
:load_requires, :load_buildfile, :load_imports, :top_level]
|
|
37
|
+
order.each { |method| Buildr.application.should_receive(method).ordered }
|
|
38
|
+
Buildr.application.stub!(:exit) # With this, shows the correct error instead of SystemExit.
|
|
39
|
+
Buildr.application.run
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
32
43
|
describe 'environment' do
|
|
33
44
|
it 'should return value of BUILDR_ENV' do
|
|
34
45
|
ENV['BUILDR_ENV'] = 'qa'
|
|
@@ -44,13 +55,24 @@ describe Buildr::Application do
|
|
|
44
55
|
Buildr::Application.new.environment.should eql('test')
|
|
45
56
|
ENV['BUILDR_ENV'].should eql('test')
|
|
46
57
|
end
|
|
47
|
-
|
|
58
|
+
|
|
59
|
+
it 'should be echoed to user' do
|
|
60
|
+
write 'buildfile'
|
|
61
|
+
lambda { Buildr.application.send :load_buildfile }.should show_info(%r{(in .*, development)})
|
|
62
|
+
end
|
|
63
|
+
|
|
48
64
|
after do
|
|
49
65
|
ENV['BUILDR_ENV'] = nil
|
|
50
66
|
end
|
|
51
67
|
end
|
|
52
68
|
|
|
53
69
|
describe 'gems' do
|
|
70
|
+
before do
|
|
71
|
+
Buildr.application.private_methods(true).should include('load_gems')
|
|
72
|
+
class << Buildr.application
|
|
73
|
+
public :load_gems
|
|
74
|
+
end
|
|
75
|
+
end
|
|
54
76
|
|
|
55
77
|
def load_with_yaml
|
|
56
78
|
write 'build.yaml', <<-YAML
|
|
@@ -62,7 +84,7 @@ describe Buildr::Application do
|
|
|
62
84
|
end
|
|
63
85
|
|
|
64
86
|
it 'should return empty array if no gems specified' do
|
|
65
|
-
Buildr.application.load_gems
|
|
87
|
+
Buildr.application.load_gems
|
|
66
88
|
Buildr.application.gems.should be_empty
|
|
67
89
|
end
|
|
68
90
|
|
|
@@ -90,10 +112,15 @@ describe Buildr::Application do
|
|
|
90
112
|
|
|
91
113
|
describe 'load_gems' do
|
|
92
114
|
before do
|
|
115
|
+
Buildr.application.private_methods(true).should include('load_gems')
|
|
116
|
+
class << Buildr.application
|
|
117
|
+
public :load_gems
|
|
118
|
+
end
|
|
93
119
|
@spec = Gem::Specification.new do |spec|
|
|
94
120
|
spec.name = 'foo'
|
|
95
121
|
spec.version = '1.2'
|
|
96
122
|
end
|
|
123
|
+
$stdout.stub!(:isatty).and_return(true)
|
|
97
124
|
end
|
|
98
125
|
|
|
99
126
|
it 'should do nothing if no gems specified' do
|
|
@@ -306,9 +333,59 @@ describe Buildr, 'settings' do
|
|
|
306
333
|
YAML
|
|
307
334
|
Buildr.settings.profile.should == { 'foo'=>'bar' }
|
|
308
335
|
end
|
|
309
|
-
|
|
310
336
|
end
|
|
311
337
|
|
|
338
|
+
describe 'buildfile task' do
|
|
339
|
+
before do
|
|
340
|
+
@buildfile_time = Time.now - 10
|
|
341
|
+
write 'buildfile'; File.utime(@buildfile_time, @buildfile_time, 'buildfile')
|
|
342
|
+
end
|
|
343
|
+
|
|
344
|
+
it 'should point to the buildfile' do
|
|
345
|
+
Buildr.application.buildfile.should point_to_path('buildfile')
|
|
346
|
+
end
|
|
347
|
+
|
|
348
|
+
it 'should be a defined task' do
|
|
349
|
+
Buildr.application.buildfile.should == file(File.expand_path('buildfile'))
|
|
350
|
+
end
|
|
351
|
+
|
|
352
|
+
it 'should ignore any rake namespace' do
|
|
353
|
+
namespace 'dummy_ns' do
|
|
354
|
+
Buildr.application.buildfile.should point_to_path('buildfile')
|
|
355
|
+
end
|
|
356
|
+
end
|
|
357
|
+
|
|
358
|
+
it 'should have the same timestamp as the buildfile' do
|
|
359
|
+
Buildr.application.buildfile.timestamp.should be_close(@buildfile_time, 1)
|
|
360
|
+
end
|
|
361
|
+
|
|
362
|
+
it 'should have the same timestamp as build.yaml if the latter is newer' do
|
|
363
|
+
write 'build.yaml'; File.utime(@buildfile_time + 5, @buildfile_time + 5, 'build.yaml')
|
|
364
|
+
Buildr.application.run
|
|
365
|
+
Buildr.application.buildfile.timestamp.should be_close(@buildfile_time + 5, 1)
|
|
366
|
+
end
|
|
367
|
+
|
|
368
|
+
it 'should have the same timestamp as the buildfile if build.yaml is older' do
|
|
369
|
+
write 'build.yaml'; File.utime(@buildfile_time - 5, @buildfile_time - 5, 'build.yaml')
|
|
370
|
+
Buildr.application.run
|
|
371
|
+
Buildr.application.buildfile.timestamp.should be_close(@buildfile_time, 1)
|
|
372
|
+
end
|
|
373
|
+
|
|
374
|
+
it 'should have the same timestamp as build.rb in home dir if the latter is newer' do
|
|
375
|
+
write 'home/buildr.rb'; File.utime(@buildfile_time + 5, @buildfile_time + 5, 'home/buildr.rb')
|
|
376
|
+
Buildr.application.send :load_tasks
|
|
377
|
+
Buildr.application.buildfile.timestamp.should be_close(@buildfile_time + 5, 1)
|
|
378
|
+
end
|
|
379
|
+
|
|
380
|
+
it 'should include explicitly required files as dependencies' do
|
|
381
|
+
write 'some/file.rb'; File.utime(@buildfile_time + 5, @buildfile_time + 5, 'some/file.rb')
|
|
382
|
+
Buildr.application.instance_variable_set(:@requires, ['rbconfig', 'some/file.rb'])
|
|
383
|
+
Buildr.application.send :load_buildfile
|
|
384
|
+
Buildr.application.buildfile.timestamp.should be_close(@buildfile_time + 5, 1)
|
|
385
|
+
Buildr.application.buildfile.prerequisites.should include(File.expand_path('some/file.rb'))
|
|
386
|
+
Buildr.application.buildfile.prerequisites.should_not include('rbconfig')
|
|
387
|
+
end
|
|
388
|
+
end
|
|
312
389
|
end
|
|
313
390
|
|
|
314
391
|
|
|
@@ -332,3 +409,4 @@ describe Buildr do
|
|
|
332
409
|
end
|
|
333
410
|
end
|
|
334
411
|
end
|
|
412
|
+
|