# ========================================================================= # Ceedling - Test-Centered Build System for C # ThrowTheSwitch.org # Copyright (c) 2010-25 Mike Karlesky, Mark VanderVoord, & Greg Williams # SPDX-License-Identifier: MIT # ========================================================================= require 'tests_reporter' class HtmlTestsReporter < TestsReporter def setup() super( default_filename: 'tests_report.html' ) end # HTML header def header(results:, stream:) stream.puts "" stream.puts '' stream.puts '' stream.puts '' stream.puts '' stream.puts '' stream.puts 'Test Overview' stream.puts '' stream.puts '' stream.puts '' end # CppUnit XML test list contents def body(results:, stream:) write_statistics( results[:counts], stream) write_failures( results[:failures], stream) write_tests( results[:ignores], stream, "Ignored Tests", "ignored" ) write_tests( results[:successes], stream, "Success Tests", "success" ) end # HTML footer def footer(results:, stream:) stream.puts '' stream.puts '' end ### Private private def write_statistics(counts, stream) stream.puts '

Summary

' stream.puts '' stream.puts '' stream.puts '' stream.puts "" stream.puts "" stream.puts "" stream.puts "" stream.puts "" stream.puts "" stream.puts "" stream.puts "
TotalPassedIgnoredFailed
#{counts[:total]}#{counts[:total] - counts[:ignored] - counts[:failed]}#{counts[:ignored]}#{counts[:failed]}
" end def write_failures(results, stream) return if results.size.zero? stream.puts '

Failed Tests

' stream.puts '' stream.puts '' stream.puts '' results.each do |result| filename = result[:source][:file] @first_row = true result[:collection].each do |item| stream.puts "" if @first_row stream.puts "" @first_row = false end stream.puts "" if item[:message].empty? stream.puts "" else if item[:message].size > 150 stream.puts "" else stream.puts "" end end stream.puts "" end end stream.puts "" stream.puts "
FileLocationMessage
#{filename}#{item[:test]}::#{item[:line]}
Message hidden due to long length.#{item[:message]}
#{item[:message]}
" end def write_tests(results, stream, title, style) return if results.size.zero? stream.puts "

#{title}

" stream.puts "" stream.puts '' stream.puts '' results.each do |result| filename = result[:source][:file] @first_row = true result[:collection].each do |item| stream.puts "" if @first_row stream.puts "" @first_row = false end stream.puts "" if item[:message].empty? stream.puts "" else if item[:message].size > 150 stream.puts "" else stream.puts "" end end stream.puts "" end end stream.puts "" stream.puts "
FileNameMessage
#{filename}#{item[:test]}
Message hidden due to long length.#{item[:message]}
#{item[:message]}
" end end