require'fileutils'require'cucumber/formatter/console'require'cucumber/formatter/io'require'gherkin/formatter/escaping'moduleCucumbermoduleFormatter# The formatter used for <tt>--format pretty</tt> (the default formatter).## This formatter prints features to plain text - exactly how they were parsed,# just prettier. That means with proper indentation and alignment of table columns.## If the output is STDOUT (and not a file), there are bright colours to watch too.#classPrettyincludeFileUtilsincludeConsoleincludeIoincludeGherkin::Formatter::Escapingattr_writer:indentattr_reader:step_motherdefinitialize(step_mother,path_or_io,options)@step_mother,@io,@options=step_mother,ensure_io(path_or_io,"pretty"),options@exceptions=[]@indent=0@prefixes=options[:prefixes]||{}@delayed_announcements=[]enddefafter_features(features)print_summary(features)unless@options[:autoformat]enddefbefore_feature(feature)@exceptions=[]@indent=0if@options[:autoformat]file=File.join(@options[:autoformat],feature.file)dir=File.dirname(file)mkdir_p(dir)unlessFile.directory?(dir)@io=ensure_file(file,"pretty")endenddefcomment_line(comment_line)@io.puts(comment_line.indent(@indent))@io.flushenddefafter_tags(tags)if@indent==1@io.puts@io.flushendenddeftag_name(tag_name)tag=format_string(tag_name,:tag).indent(@indent)@io.print(tag)@io.flush@indent=1enddeffeature_name(keyword,name)@io.puts("#{keyword}: #{name}")@io.puts@io.flushenddefbefore_feature_element(feature_element)@indent=2@scenario_indent=2enddefafter_feature_element(feature_element)@io.puts@io.flushenddefbefore_background(background)@indent=2@scenario_indent=2@in_background=trueenddefafter_background(background)@in_background=nil@io.puts@io.flushenddefbackground_name(keyword,name,file_colon_line,source_indent)print_feature_element_name(keyword,name,file_colon_line,source_indent)enddefbefore_examples_array(examples_array)@indent=4@io.puts@visiting_first_example_name=trueenddefexamples_name(keyword,name)putsunless@visiting_first_example_name@visiting_first_example_name=falsenames=name.strip.empty??[name.strip]:name.split("\n")@io.puts(" #{keyword}: #{names[0]}")names[1..-1].each{|s|@io.puts" #{s}"}unlessnames.empty?@io.flush@indent=6@scenario_indent=6enddefbefore_outline_table(outline_table)@table=outline_tableenddefafter_outline_table(outline_table)@table=nil@indent=4enddefscenario_name(keyword,name,file_colon_line,source_indent)print_feature_element_name(keyword,name,file_colon_line,source_indent)enddefbefore_step(step)@current_step=step@indent=6enddefbefore_step_result(keyword,step_match,multiline_arg,status,exception,source_indent,background)@hide_this_step=falseifexceptionif@exceptions.include?(exception)@hide_this_step=truereturnend@exceptions<<exceptionendifstatus!=:failed&&@in_background^background@hide_this_step=truereturnend@status=statusenddefstep_name(keyword,step_match,status,source_indent,background)returnif@hide_this_stepsource_indent=nilunless@options[:source]name_to_report=format_step(keyword,step_match,status,source_indent)@io.puts(name_to_report.indent(@scenario_indent+2))print_announcementsenddefpy_string(string)returnif@hide_this_steps=%{"""\n#{string}\n"""}.indent(@indent)s=s.split("\n").map{|l|l=~/^\s+$/?'':l}.join("\n")@io.puts(format_string(s,@current_step.status))@io.flushenddefexception(exception,status)returnif@hide_this_stepprint_exception(exception,status,@indent)@io.flushenddefbefore_multiline_arg(multiline_arg)returnif@options[:no_multiline]||@hide_this_step@table=multiline_argenddefafter_multiline_arg(multiline_arg)@table=nilenddefbefore_table_row(table_row)returnif!@table||@hide_this_step@col_index=0@io.print' |'.indent(@indent-2)enddefafter_table_row(table_row)returnif!@table||@hide_this_stepprint_table_row_announcements@io.putsiftable_row.exception&&!@exceptions.include?(table_row.exception)print_exception(table_row.exception,table_row.status,@indent)endenddefafter_table_cell(cell)returnunless@table@col_index+=1enddeftable_cell_value(value,status)returnif!@table||@hide_this_stepstatus||=@status||:passedwidth=@table.col_width(@col_index)cell_text=escape_cell(value.to_s||'')padded=cell_text+(' '*(width-cell_text.unpack('U*').length))prefix=cell_prefix(status)@io.print(' '+format_string("#{prefix}#{padded}",status)+::Term::ANSIColor.reset(" |"))@io.flushendprivatedefprint_feature_element_name(keyword,name,file_colon_line,source_indent)@io.putsif@scenario_indent==6names=name.empty??[name]:name.split("\n")line="#{keyword}: #{names[0]}".indent(@scenario_indent)@io.print(line)if@options[:source]line_comment=" # #{file_colon_line}".indent(source_indent)@io.print(format_string(line_comment,:comment))end@io.putsnames[1..-1].each{|s|@io.puts" #{s}"}@io.flushenddefcell_prefix(status)@prefixes[status]enddefprint_summary(features)print_stats(features,@options.custom_profiles)print_snippets(@options)print_passing_wip(@options)endendendend