require'erb'beginrequire'builder'rescueLoadErrorgem'builder'require'builder'endmoduleCucumbermoduleFormatterclassHtml<Ast::VisitorincludeERB::Util# for the #h methoddefinitialize(step_mother,io,options)super(step_mother)@builder=Builder::XmlMarkup.new(:target=>io,:indent=>2)enddefvisit_features(features)# <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">@builder.declare!(:DOCTYPE,:html,:PUBLIC,'-//W3C//DTD XHTML 1.0 Strict//EN','http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd')@builder.html(:xmlns=>'http://www.w3.org/1999/xhtml')do@builder.headdo@builder.meta(:content=>'text/html;charset=utf-8')@builder.title'Cucumber'inline_cssend@builder.bodydo@builder.div(:class=>'cucumber')dosuperendendendenddefvisit_feature(feature)@builder.div(:class=>'feature')dosuperendenddefvisit_feature_name(name)lines=name.split(/\r?\n/)@builder.h2(lines[0])@builder.pdolines[1..-1].eachdo|line|@builder.text!(line.strip)@builder.brendendenddefvisit_background(background)@builder.div(:class=>'background')dosuperendenddefvisit_background_name(keyword,name,file_colon_line,source_indent)@builder.h3("#{keyword}#{name}")enddefvisit_feature_element(feature_element)@builder.div(:class=>'scenario')dosuperend@open_step_list=trueenddefvisit_scenario_name(keyword,name,file_colon_line,source_indent)@builder.h3("#{keyword}#{name}")enddefvisit_outline_table(outline_table)@outline_row=0@builder.tabledosuper(outline_table)end@outline_row=nilenddefvisit_examples_name(keyword,name)@builder.h4("#{keyword}#{name}")enddefvisit_steps(steps)@builder.oldosuperendenddefvisit_step(step)@step_id=step.dom_idsuperenddefvisit_step_result(keyword,step_match,multiline_arg,status,exception,source_indent,background)@status=status@builder.li(:id=>@step_id,:class=>status)dosuper(keyword,step_match,multiline_arg,status,exception,source_indent,background)endenddefvisit_step_name(keyword,step_match,status,source_indent,background)@step_matches||=[]@skip_step=@step_matches.index(step_match)@step_matches<<step_matchunless@skip_stepstep_name=step_match.format_args(lambda{|param|"<span>#{param}</span>"})@builder.divdo|div|div<<h("#{keyword}#{step_name}").gsub(/<span>/,'<span>').gsub(/<\/span>/,'</span>')endendenddefvisit_exception(exception,status)@builder.pre(format_exception(exception),:class=>status)enddefvisit_multiline_arg(multiline_arg)returnif@skip_stepifAst::Table===multiline_arg@builder.tabledosuperendelsesuperendenddefvisit_py_string(string)@builder.pre(:class=>@status)do|pre|pre<<stringendenddefvisit_table_row(table_row)@row_id=table_row.dom_id@col_index=0@builder.tr(:id=>@row_id)dosuperendiftable_row.exception@builder.trdo@builder.td(:colspan=>@col_index.to_s,:class=>'failed')do@builder.predo|pre|pre<<format_exception(table_row.exception)endendendend@outline_row+=1if@outline_rowenddefvisit_table_cell_value(value,width,status)cell_type=@outline_row==0?:th::tdattributes={:id=>"#{@row_id}_#{@col_index}"}attributes[:class]=statusifstatus@builder.__send__(cell_type,value,attributes)@col_index+=1enddefannounce(announcement)@builder.pre(announcement,:class=>'announcement')endprivatedefinline_css@builder.style(:type=>'text/css')do@builder.text!(File.read(File.dirname(__FILE__)+'/cucumber.css'))endenddefformat_exception(exception)(["#{exception.message} (#{exception.class})"]+exception.backtrace).join("\n")endendendend