require 'plugin' require 'constants' class XmlTestsReport < Plugin def setup @file_path = File.join( PROJECT_TEST_ARTIFACTS_PATH, 'report.xml' ) @results_list = [] @test_counter = 1 end def post_test_execute(arg_hash) return if not (arg_hash[:context] == TEST_TASKS_CONTEXT) @results_list << arg_hash[:result_file] end def post_build return if (not @ceedling[:task_invoker].test_invoked?) results = @ceedling[:plugin_reportinator].assemble_test_results(@results_list) @ceedling[:file_wrapper].open( @file_path, 'w' ) do |f| write_results( results, f ) end end private def write_results( results, stream ) write_header( stream ) write_failures( results[:failures], stream ) write_tests( results[:successes], stream, 'SuccessfulTests' ) write_tests( results[:ignores], stream, 'IgnoredTests' ) write_statistics( results[:counts], stream ) write_footer( stream ) end def write_header( stream ) stream.puts "" stream.puts "" end def write_failures( results, stream ) if (results.size == 0) stream.puts "\t" return end stream.puts "\t" results.each do |result| result[:collection].each do |item| filename = File.join( result[:source][:path], result[:source][:file] ) stream.puts "\t\t" stream.puts "\t\t\t#{filename}::#{item[:test]}" stream.puts "\t\t\tAssertion" stream.puts "\t\t\t" stream.puts "\t\t\t\t#{filename}" stream.puts "\t\t\t\t#{item[:line]}" stream.puts "\t\t\t" stream.puts "\t\t\t#{item[:message]}" stream.puts "\t\t" @test_counter += 1 end end stream.puts "\t" end def write_tests( results, stream, tag ) if (results.size == 0) stream.puts "\t<#{tag}/>" return end stream.puts "\t<#{tag}>" results.each do |result| result[:collection].each do |item| stream.puts "\t\t" stream.puts "\t\t\t#{File.join( result[:source][:path], result[:source][:file] )}::#{item[:test]}" stream.puts "\t\t" @test_counter += 1 end end stream.puts "\t" end def write_statistics( counts, stream ) stream.puts "\t" stream.puts "\t\t#{counts[:total]}" stream.puts "\t\t#{counts[:ignored]}" stream.puts "\t\t#{counts[:failed]}" stream.puts "\t\t0" stream.puts "\t\t#{counts[:failed]}" stream.puts "\t" end def write_footer( stream ) stream.puts "" end end