addon/buildr/cobertura.rb in vic-buildr-1.3.3 vs addon/buildr/cobertura.rb in vic-buildr-1.3.4

- old
+ new

@@ -12,224 +12,11 @@ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations under # the License. -require 'buildr/java' - - -module Buildr - - # Provides the <code>cobertura:html</code> and <code>cobertura:xml</code> tasks. - # Require explicitly using <code>require "buildr/cobertura"</code>. - # - # You can generate cobertura reports for a single project - # using the project name as prefix: - # - # project_name:cobertura:html - # - # You can also specify which classes to include/exclude from instrumentation by - # passing a class name regexp to the <code>cobertura.include</code> or - # <code>cobertura.exclude</code> methods. - # - # define 'someModule' do - # cobertura.include 'some.package.*' - # cobertura.include /some.(foo|bar).*/ - # cobertura.exclude 'some.foo.util.SimpleUtil' - # cobertura.exclude /*.Const(ants)?/i - # end - module Cobertura - - class << self - - REQUIRES = ["net.sourceforge.cobertura:cobertura:jar:1.9", "log4j:log4j:jar:1.2.9", - "asm:asm:jar:2.2.1", "asm:asm-tree:jar:2.2.1", "oro:oro:jar:2.0.8"] unless const_defined?('REQUIRES') - - def requires() - @requires ||= Buildr.artifacts(REQUIRES).each(&:invoke).map(&:to_s) - end - - def report_to(file = nil) - File.expand_path(File.join(*["reports/cobertura", file.to_s].compact)) - end - - def data_file() - File.expand_path("reports/cobertura.ser") - end - - end - - class CoberturaConfig # :nodoc: - - def initialize(project) - @project = project - end - - attr_reader :project - private :project - - attr_writer :data_file, :instrumented_dir, :report_dir - - def data_file - @data_file ||= project.path_to(:reports, 'cobertura.ser') - end - - def instrumented_dir - @instrumented_dir ||= project.path_to(:target, :instrumented, :classes) - end - - def report_dir - @report_dir ||= project.path_to(:reports, :cobertura) - end - - def report_to(file = nil) - File.expand_path(File.join(*[report_dir, file.to_s].compact)) - end - - # :call-seq: - # project.cobertura.include(*classPatterns) - # - def include(*classPatterns) - includes.push(*classPatterns.map { |p| String === p ? Regexp.new(p) : p }) - self - end - - def includes - @includeClasses ||= [] - end - - # :call-seq: - # project.cobertura.exclude(*classPatterns) - # - def exclude(*classPatterns) - excludes.push(*classPatterns.map { |p| String === p ? Regexp.new(p) : p }) - self - end - - def excludes - @excludeClasses ||= [] - end - - def sources - project.compile.sources - end - end - - module CoberturaExtension # :nodoc: - include Buildr::Extension - - def cobertura - @cobertura_config ||= CoberturaConfig.new(self) - end - - after_define do |project| - cobertura = project.cobertura - - namespace 'cobertura' do - unless project.compile.target.nil? - # Instrumented bytecode goes in a different directory. This task creates before running the test - # cases and monitors for changes in the generate bytecode. - instrumented = project.file(cobertura.instrumented_dir => project.compile.target) do |task| - mkdir_p task.to_s, :verbose => false - unless project.compile.sources.empty? - info "Instrumenting classes with cobertura data file #{cobertura.data_file}" - Buildr.ant "cobertura" do |ant| - ant.taskdef :classpath=>Cobertura.requires.join(File::PATH_SEPARATOR), :resource=>"tasks.properties" - ant.send "cobertura-instrument", :todir=>task.to_s, :datafile=>cobertura.data_file do - includes, excludes = cobertura.includes, cobertura.excludes - - classes_dir = project.compile.target.to_s - if includes.empty? && excludes.empty? - ant.fileset :dir => classes_dir do - ant.include :name => "**/*.class" - end - else - includes = [//] if includes.empty? - Dir.glob(File.join(classes_dir, "**/*.class")) do |cls| - cls_name = cls.gsub(/#{classes_dir}\/?|\.class$/, '').gsub('/', '.') - if includes.any? { |p| p === cls_name } && !excludes.any? { |p| p === cls_name } - ant.fileset :file => cls - end - end - end - end - end - end - touch task.to_s, :verbose=>false - end - - task 'instrument' => instrumented - - # We now have two target directories with bytecode. It would make sense to remove compile.target - # and add instrumented instead, but apparently Cobertura only creates some of the classes, so - # we need both directories and instrumented must come first. - project.test.dependencies.unshift cobertura.instrumented_dir - project.test.with Cobertura.requires - project.test.options[:properties]["net.sourceforge.cobertura.datafile"] = cobertura.data_file - - [:xml, :html].each do |format| - task format => ['instrument', 'test'] do - info "Creating test coverage reports in #{cobertura.report_to(format)}" - Buildr.ant "cobertura" do |ant| - ant.taskdef :classpath=>Cobertura.requires.join(File::PATH_SEPARATOR), :resource=>"tasks.properties" - ant.send "cobertura-report", :format=>format, - :destdir=>cobertura.report_to(format), :datafile=>cobertura.data_file do - cobertura.sources.flatten.each do |src| - ant.fileset(:dir=>src.to_s) if File.exist?(src.to_s) - end - end - end - end - end - end - - end - - project.clean do - rm_rf [cobertura.report_to, cobertura.data_file, cobertura.instrumented_dir], :verbose=>false - end - - end - - end - - class Buildr::Project - include CoberturaExtension - end - - namespace "cobertura" do - - task "instrument" do - Buildr.projects.each do |project| - project.cobertura.data_file = data_file - project.test.options[:properties]["net.sourceforge.cobertura.datafile"] = data_file - project.task('cobertura:instrument').invoke - end - end - - [:xml, :html].each do |format| - report_target = report_to(format) - desc "Run the test cases and produce code coverage reports in #{report_target}" - task format => ["instrument", "test"] do - info "Creating test coverage reports in #{report_target}" - Buildr.ant "cobertura" do |ant| - ant.taskdef :classpath=>requires.join(File::PATH_SEPARATOR), :resource=>"tasks.properties" - ant.send "cobertura-report", :destdir=>report_target, :format=>format, :datafile=>data_file do - Buildr.projects.map(&:cobertura).map(&:sources).flatten.each do |src| - ant.fileset :dir=>src.to_s if File.exist?(src.to_s) - end - end - end - end - end - - task "clean" do - rm_rf [report_to, data_file], :verbose=>false - end - end - - task "clean" do - task("cobertura:clean").invoke if Dir.pwd == Rake.application.original_dir - end - - end +if Buildr::VERSION < '1.5' + Buildr.application.deprecated "'buildr/cobertura', use 'buildr/java/cobertura' instead" + require 'buildr/java/cobertura' +else + raise "#{__FILE__} should be removed since its use is deprecated since version 1.3.4" end