JaCoCo test coverage for tests added.
Project: http://git-wip-us.apache.org/repos/asf/ode/repo Commit: http://git-wip-us.apache.org/repos/asf/ode/commit/24013c82 Tree: http://git-wip-us.apache.org/repos/asf/ode/tree/24013c82 Diff: http://git-wip-us.apache.org/repos/asf/ode/diff/24013c82 Branch: refs/heads/ode-1.3.6.x Commit: 24013c8295280a66b2f427a6ffaa3f00c3bbc0ed Parents: 6535d00 Author: Tammo van Lessen <[email protected]> Authored: Tue Oct 1 18:50:58 2013 +0200 Committer: Tammo van Lessen <[email protected]> Committed: Tue Oct 1 18:50:58 2013 +0200 ---------------------------------------------------------------------- tasks/jacoco.rake | 228 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 228 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ode/blob/24013c82/tasks/jacoco.rake ---------------------------------------------------------------------- diff --git a/tasks/jacoco.rake b/tasks/jacoco.rake new file mode 100644 index 0000000..08b5493 --- /dev/null +++ b/tasks/jacoco.rake @@ -0,0 +1,228 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with this +# work for additional information regarding copyright ownership. The ASF +# licenses this file to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations under +# the License. + +module Buildr + # Initial support for JaCoCo coverage reports. + # WARNING: Experimental and may change radically. + module JaCoCo + class << self + VERSION = '0.5.10.201208310627' + + def version + @version || Buildr.settings.build['jacoco'] || VERSION + end + + def version=(value) + @version = value + end + + def agent_spec + ["org.jacoco:org.jacoco.agent:jar:runtime:#{version}"] + end + + def ant_spec + [ + "org.jacoco:org.jacoco.report:jar:#{version}", + "org.jacoco:org.jacoco.core:jar:#{version}", + "org.jacoco:org.jacoco.ant:jar:#{version}", + 'asm:asm:jar:3.3.1', + 'asm:asm-commons:jar:3.3.1', + 'asm:asm-tree:jar:3.3.1' + ] + end + end + + class Config + + attr_writer :enabled + + def enabled? + @enabled.nil? ? true : @enabled + end + + attr_writer :destfile + + def destfile + @destfile || "#{self.report_dir}/jacoco.cov" + end + + attr_writer :output + + def output + @output || 'file' + end + + attr_accessor :sessionid + attr_accessor :address + attr_accessor :port + attr_accessor :classdumpdir + attr_accessor :dumponexit + attr_accessor :append + attr_accessor :exclclassloader + + def includes + @includes ||= [] + end + + def excludes + @excludes ||= [] + end + + attr_writer :report_dir + + def report_dir + @report_dir || project._(:reports, :jacoco) + end + + attr_writer :generate_xml + + def generate_xml? + @generate_xml.nil? ? false : @generate_xml + end + + attr_writer :xml_output_file + + def xml_output_file + @xml_output_file || "#{self.report_dir}/jacoco.xml" + end + + attr_writer :generate_html + + def generate_html? + @generate_html.nil? ? false : @generate_html + end + + attr_writer :html_output_directory + + def html_output_directory + @html_output_directory || "#{self.report_dir}/jacoco" + end + + protected + + def initialize(project) + @project = project + end + + attr_reader :project + + end + + module ProjectExtension + include Extension + + def jacoco + @jacoco ||= Buildr::JaCoCo::Config.new(project) + end + + after_define do |project| + unless project.test.compile.target.nil? || !project.jacoco.enabled? + project.test.setup do + agent_jar = Buildr.artifacts(Buildr::JaCoCo.agent_spec).each(&:invoke).map(&:to_s).join('') + options = [] + ["destfile", + "append", + "exclclassloader", + "sessionid", + "dumponexit", + "output", + "address", + "port", + "classdumpdir"].each do |option| + value = project.jacoco.send(option.to_sym) + options << "#{option}=#{value}" unless value.nil? + end + options << "includes=#{project.jacoco.includes.join(':')}" unless project.jacoco.includes.empty? + options << "excludes=#{project.jacoco.excludes.join(':')}" unless project.jacoco.excludes.empty? + + agent_config = "-javaagent:#{agent_jar}=#{options.join(',')}" + project.test.options[:java_args] = (project.test.options[:java_args] || []) + [agent_config] + end + namespace 'jacoco' do + if project.jacoco.generate_xml? + desc "Generate JaCoCo reports." + task 'reports' do + Buildr.ant "jacoco" do |ant| + ant.taskdef(:resource => "org/jacoco/ant/antlib.xml") do |ant| + ant.classpath :path => Buildr.artifacts(Buildr::JaCoCo.ant_spec).each(&:invoke).map(&:to_s).join(File::PATH_SEPARATOR) + end + ant.report do |ant| + ant.executiondata do |ant| + ant.file :file => project.jacoco.destfile + end + + ant.structure(:name => project.name) do |ant| + if project.compile.target + ant.classfiles do |ant| + ant.fileset :dir => project.compile.target + end + end + ant.sourcefiles(:encoding => "UTF-8") do |ant| + project.compile.sources.each do |path| + ant.fileset :dir => path.to_s + end + end + end + + ant.xml :destfile => project.jacoco.xml_output_file if project.jacoco.generate_xml? + ant.html :destdir => project.jacoco.html_output_directory if project.jacoco.generate_html? + end + end + end + end + end + end + end + namespace 'jacoco' do + desc "Generate JaCoCo reports." + task 'report' do + Buildr.ant "jacoco" do |ant| + ant.taskdef(:resource => "org/jacoco/ant/antlib.xml") do |ant| + ant.classpath :path => Buildr.artifacts(Buildr::JaCoCo.ant_spec).each(&:invoke).map(&:to_s).join(File::PATH_SEPARATOR) + end + ant.report do |ant| + ant.executiondata do |ant| + Buildr.projects.each do |project| + ant.fileset :file=>project.jacoco.destfile if File.exist?(project.jacoco.destfile) + end + end + + ant.structure(:name => "Jacoco Report") do |ant| + ant.classfiles do |ant| + Buildr.projects.map(&:compile).map(&:target).flatten.map(&:to_s).each do |src| + ant.fileset :dir=>src.to_s if File.exist?(src) + end + end + ant.sourcefiles(:encoding => "UTF-8") do |ant| + Buildr.projects.map(&:compile).map(&:sources).flatten.map(&:to_s).each do |src| + ant.fileset :dir=>src.to_s if File.exist?(src) + end + end + end + + ant.html :destdir => "reports/jacoco" + ant.xml :destfile => "reports/jacoco/jacoco.xml" + ant.csv :destfile => "reports/jacoco/jacoco.csv" + end + end + end + end + end + end +end + +class Buildr::Project + include Buildr::JaCoCo::ProjectExtension +end \ No newline at end of file
