=begin -------------------------------------------------------------------------------- Stop the Vitro application, delete all MySQL tables from the Vitro database, and start the application again. -------------------------------------------------------------------------------- Parameters: tomcat_stop_command A "shell" command that will stop the Tomcat server. tomcat_stop_delay Number of seconds to wait after the tomcat_stop_command returns before proceeding. tomcat_start_command A "shell" command that will start the Tomcat server. tomcat_start_delay Number of seconds to wait after the tomcat_start_command returns before proceeding. mysql_username A user account that has authority to drop the Vitro database in MySQL. mysql_password The password for mysql_username. database_name The name of the Vitro database in MySQL. -------------------------------------------------------------------------------- =end class OutputSummaryFormatter # ------------------------------------------------------------------------------------ private # ------------------------------------------------------------------------------------ # # Write the beginning of the summary file. # This includes the HTML header, and the banner. # # f -- a file, already open for output. # def write_summary_header(f) if @osp.overall_status == Status::BAD status = "FAILURE" html_class = Status::html_class(Status::BAD) else status = "SUCCESS" html_class = Status::html_class(Status::GOOD) end f.print < Summary of Acceptance Tests #{@osp.start_time}
Acceptance test results: #{@osp.start_time}
#{status}
END_HEADER end # Write the first section of the summary file. This section contains # nested tables with fixed formats, containing overall stats. # # f -- a file, already open for output. # def write_summary_stats_section(f) how_many_tests = @osp.tests.length how_many_pass = 0 how_many_fail = 0 how_many_ignore = 0 @osp.tests.each do |t| how_many_pass += 1 if t.status == Status::GOOD how_many_ignore += 1 if t.status == Status::FAIR how_many_fail += 1 if t.status == Status::BAD end if how_many_pass > 0 pass_class = Status::html_class(Status::GOOD) else pass_class = '' end if how_many_fail > 0 fail_class = Status::html_class(Status::BAD) else fail_class = '' end if how_many_ignore > 0 ignore_class = Status::html_class(Status::FAIR) else ignore_class = '' end f.print <Summary
Start time:#{@osp.start_time}
End time#{@osp.end_time}
Elapsed time#{@osp.elapsed_time}
Suites#{@osp.suites.length}
Total tests#{@osp.tests.length}
Passing tests#{how_many_pass}
Failing tests#{how_many_fail}
Ignored tests#{how_many_ignore}
END_STATS end # Write a table of failed tests to the summary file, with links # to the detailed output for each test. # # While we're at it, write the list of failed tests to the console. # # f -- a file, already open for output. # def write_summary_failure_section(f) fails = [] @osp.tests.each do |t| fails << t if t.status == Status::BAD end f.print "
Failing tests
\n\n \n" f.print " \n" if fails.empty? f.print " \n" f.print " \n" f.print " \n" else fails.each do |t| f.print " \n" f.print " \n" f.print " \n" f.print " \n" puts ">>>>>TEST FAILED: #{t.suite_name}, #{t.test_name} (not in ignored_tests.txt)" end end f.print "
Suite nameTest name
No tests failed.
#{t.suite_name}#{t.test_name}
\n\n" end # Write a table of ignored tests to the summary file, with links # to the detailed output for each test. # # f -- a file, already open for output. # def write_summary_ignore_section(f) ignores = [] @osp.tests.each do |t| ignores << t if t.status == Status::FAIR end f.print "
Ignored tests
\n\n \n" f.print " \n" if ignores.empty? f.print " \n" f.print " \n" f.print " \n" else ignores.each do |t| f.print " \n" f.print " \n" f.print " \n" f.print " \n" f.print " \n" end end f.print "
Suite nameTest nameReason for ignoring
No tests ignored.
#{t.suite_name}#{t.test_name}#{t.reason_for_ignoring}
\n\n" end # Write a table of any error messages or warnings found in the log file. # # f -- a file, already open for output. # def write_error_messages_section(f) f.print "
Errors and warnings
\n" f.print " " if @osp.errors.empty? && @osp.warnings.empty? f.print " " else @osp.errors.each() do |e| f.print " " end @osp.warnings.each() do |w| f.print " " end end f.print "
No errors or warnings
ERROR#{e}
WARN#{w}
\n\n" end # Write a table of the suites to the summary file, with links # to the detailed output for each suite. # # f -- a file, already open for output. # def write_summary_suites_section(f) f.print "
Suites
\n" f.print " \n" @osp.suites.each() do |s| f.print " \n" f.print " \n" f.print " \n" end f.print "
#{s.name}
\n\n" end # Write a table of all tests to the summary file, with links # to the detailed output for each test. # # f -- a file, already open for output. # def write_summary_all_tests_section(f) f.print "
All tests
\n\n \n" f.print " \n" if @osp.tests.empty? f.print " \n" f.print " \n" f.print " \n" else @osp.tests.each do |t| f.print " \n" f.print " \n" f.print " \n" f.print " \n" end end f.print "
Suite nameTest name
No tests.
#{t.suite_name}#{t.test_name}
\n\n" end # Copy the log to the summary file, and close the HTML tags. # # f -- a file, already open for output. # def write_summary_footer(f) f.print "
Log
\n
\n"
    File.open(@log_file) do |log|
      FileUtils::copy_stream(log, f)
    end
    f.print "  
\n\n\n\n" end # ------------------------------------------------------------------------------------ public # ------------------------------------------------------------------------------------ # Set up and get ready to process. # def initialize(output_suite_parser, log_file) @osp = output_suite_parser @log_file = log_file end def format(f) write_summary_header(f) write_summary_stats_section(f) write_error_messages_section(f) write_summary_failure_section(f) write_summary_ignore_section(f) write_summary_suites_section(f) write_summary_all_tests_section(f) write_summary_footer(f) end end