class XcodeResultBundleProcessor::TestSummaries::HTMLReport
Public Class Methods
new(results_bundle)
click to toggle source
# File lib/xcoderesultbundleprocessor/test_summaries/html_report.rb, line 6 def initialize(results_bundle) @results_bundle = results_bundle @stylesheet_path = File.join(File.dirname(__FILE__), '..', '..', '..', 'static', 'report.css') @js_path = File.join(File.dirname(__FILE__), '..', '..', '..', 'static', 'report.js') end
Public Instance Methods
_format_element_summary(buffer, element_summary)
click to toggle source
# File lib/xcoderesultbundleprocessor/test_summaries/html_report.rb, line 145 def _format_element_summary(buffer, element_summary) buffer << element_summary.summary element_summary.children.each do |child| _format_element_summary(buffer.indent, child) end buffer end
_format_test(test, mab, destination_dir)
click to toggle source
# File lib/xcoderesultbundleprocessor/test_summaries/html_report.rb, line 71 def _format_test(test, mab, destination_dir) mab.a name: test.identifier do if test.passed? mab.h2 test.summary else mab.h2.testFailed test.summary end end mab.ul do test.failure_summaries.each do |failure_summary| li do em "Failure at #{failure_summary.location}" pre failure_summary.message end end '' end mab.div.timelineContainer do table do tr do test.activities.each do |activity_summary| td do h4 activity_summary.title table do tr do activity_summary.subactivities.each do |subactivity| td do h5 subactivity.title unless subactivity.screenshot_path.nil? basename = File.basename(subactivity.screenshot_path) output_image_path = File.join(destination_dir, 'screenshots', basename) @results_bundle.copy_file(File.join('Attachments', subactivity.screenshot_path), output_image_path) img src: File.join('screenshots', basename) end unless subactivity.snapshot_path.nil? a.viewSnapshot href: '#' do 'View Snapshot' end pre.snapshot do @results_bundle.open_file(File.join('Attachments', subactivity.snapshot_path)) do |file| snapshot_plist = CFPropertyList::List.new(data: file.read) element_snapshot = ElementSnapshot.new(snapshot_plist) snapshot_summary = SnapshotSummary.parse(element_snapshot.to_h) buffer = IndentedStringBuffer.new _format_element_summary(buffer, snapshot_summary) end end end '' end end '' end end end end '' end end end '' end
save(destination_dir)
click to toggle source
# File lib/xcoderesultbundleprocessor/test_summaries/html_report.rb, line 12 def save(destination_dir) info "Saving HTML report to #{destination_dir}" raise "Destination directory #{destination_dir} already exists" if Dir.exist?(destination_dir) FileUtils.mkdir_p(File.join(destination_dir, 'screenshots')) info 'Deserializing logs' action_logs = LogDeserializer.deserialize_action_logs(@results_bundle) debug action_logs tests = TestSummaries.new(@results_bundle.read_plist('TestSummaries.plist')) debug "Formatting test summaries <#{tests.ai}>" Markaby::Builder.set_html5_options! Markaby::Builder.set(:indent, 2) mab = Markaby::Builder.new({}, self) report = mab.html5 do head do link rel: 'stylesheet', href: 'report.css' script src: 'report.js' do '' end end body do unless tests.failed_tests.empty? h1 'Failed Tests :(' ul do tests.failed_tests.each do |failed_test| li do a href: "##{failed_test.identifier}" do failed_test.identifier end end end end end h1 'Test Timelines' tests.tests.each do |test| _format_test(test, mab, destination_dir) end hr h1 'Action Logs' pre action_logs end end FileUtils.copy(@stylesheet_path, File.join(destination_dir, 'report.css')) FileUtils.copy(@js_path, File.join(destination_dir, 'report.js')) File.open(File.join(destination_dir, 'index.html'), 'w').write(report) end