Class: PrettyFace::Formatter::Html

Inherits:
Object
  • Object
show all
Includes:
Cucumber::Formatter::Duration, Cucumber::Formatter::Io, ViewHelper
Defined in:
lib/pretty_face/formatter/html.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from ViewHelper

#failed_scenario?, #scenario_average_duration, #scenario_count, #scenarios_summary_for, #start_time, #step_average_duration, #step_count, #steps_summary_for, #total_duration

Constructor Details

#initialize(step_mother, path_or_io, options) ⇒ Html

Returns a new instance of Html.



25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/pretty_face/formatter/html.rb', line 25

def initialize(step_mother, path_or_io, options)
  @path = path_or_io
  set_path_and_file(path_or_io)
  @path_to_erb = File.join(File.dirname(__FILE__), '..', 'templates')
  @step_mother = step_mother
  @options = options
  # The expand option is set to true by RubyMine and cannot be turned off using the IDE. This option causes
  # a test run while using this gem to terminate.
  @options[:expand] = false unless @options.nil?
  @report = Report.new
  @img_id = 0
  @logo = 'face.png'
end

Instance Attribute Details

#logoObject (readonly)

Returns the value of attribute logo.



23
24
25
# File 'lib/pretty_face/formatter/html.rb', line 23

def 
  @logo
end

#reportObject (readonly)

Returns the value of attribute report.



23
24
25
# File 'lib/pretty_face/formatter/html.rb', line 23

def report
  @report
end

Instance Method Details

#after_background(background) ⇒ Object



84
85
86
87
# File 'lib/pretty_face/formatter/html.rb', line 84

def after_background(background)
  @report.end_background
  @report.current_feature.background << ReportStep.new(background)
end

#after_feature(feature) ⇒ Object



76
77
78
# File 'lib/pretty_face/formatter/html.rb', line 76

def after_feature(feature)
  @report.current_feature.close(feature)
end

#after_feature_element(feature_element) ⇒ Object



95
96
97
98
99
# File 'lib/pretty_face/formatter/html.rb', line 95

def after_feature_element(feature_element)
  unless scenario_outline?(feature_element)
    process_scenario(feature_element)
  end
end

#after_features(features) ⇒ Object



125
126
127
128
129
130
131
# File 'lib/pretty_face/formatter/html.rb', line 125

def after_features(features)
  @features = features
  @duration = format_duration(Time.now - @tests_started)
  copy_images
  copy_stylesheets
  generate_report
end

#after_step(step) ⇒ Object



117
118
119
120
121
122
123
# File 'lib/pretty_face/formatter/html.rb', line 117

def after_step(step)
  step = process_step(step) unless step_belongs_to_outline? step
  if @cells
    step.table = @cells
    @cells = nil
  end
end

#after_table_row(example_row) ⇒ Object



105
106
107
108
109
110
111
# File 'lib/pretty_face/formatter/html.rb', line 105

def after_table_row(example_row)
  unless info_row?(example_row)
    @report.current_scenario.populate(example_row)
    build_scenario_outline_steps(example_row)
  end
  populate_cells(example_row) if example_row.instance_of? Cucumber::Ast::Table::Cells
end

#before_background(background) ⇒ Object



80
81
82
# File 'lib/pretty_face/formatter/html.rb', line 80

def before_background(background)
  @report.begin_background
end

#before_feature(feature) ⇒ Object



72
73
74
# File 'lib/pretty_face/formatter/html.rb', line 72

def before_feature(feature)
  @report.add_feature ReportFeature.new(feature, features_summary_file)
end

#before_feature_element(feature_element) ⇒ Object



89
90
91
92
93
# File 'lib/pretty_face/formatter/html.rb', line 89

def before_feature_element(feature_element)
  unless scenario_outline? feature_element
    @report.add_scenario  ReportScenario.new(feature_element)
  end
end

#before_features(features) ⇒ Object



62
63
64
65
# File 'lib/pretty_face/formatter/html.rb', line 62

def before_features(features)
  make_output_directories
  @tests_started = Time.now
end

#before_step(step) ⇒ Object



113
114
115
# File 'lib/pretty_face/formatter/html.rb', line 113

def before_step(step)
  @step_timer = Time.now
end

#before_table_row(example_row) ⇒ Object



101
102
103
# File 'lib/pretty_face/formatter/html.rb', line 101

def before_table_row(example_row)
  @report.add_scenario ReportScenario.new(example_row) unless info_row?(example_row)
end

#custom_feature_header?Boolean

Returns:

  • (Boolean)


146
147
148
149
150
151
152
153
# File 'lib/pretty_face/formatter/html.rb', line 146

def custom_feature_header?
  return false unless customization_directory

  Dir.foreach(customization_directory) do |file|
    return true if file == '_feature_header.erb'
  end
  false
end

#custom_suite_header?Boolean

Returns:

  • (Boolean)


137
138
139
140
141
142
143
144
# File 'lib/pretty_face/formatter/html.rb', line 137

def custom_suite_header?
  return false unless customization_directory

  Dir.foreach(customization_directory) do |file|
    return true if file == '_suite_header.erb'
  end
  false
end

#embed(src, mime_type, label) ⇒ Object



46
47
48
49
50
51
# File 'lib/pretty_face/formatter/html.rb', line 46

def embed(src, mime_type, label)
  case(mime_type)
  when /^image\/(png|gif|jpg|jpeg)/
    embed_image(src, label)
  end
end

#embed_image(src, label) ⇒ Object



53
54
55
56
57
58
59
60
# File 'lib/pretty_face/formatter/html.rb', line 53

def embed_image(src, label)
  @report.current_scenario.image << src.split(separator).last
  @report.current_scenario.image_label << label
  @report.current_scenario.image_id << "img_#{@img_id}"
  @img_id += 1
  filename = "#{File.dirname(@path)}#{separator}images"
  FileUtils.cp src, filename
end

#featuresObject



133
134
135
# File 'lib/pretty_face/formatter/html.rb', line 133

def features
  @report.features
end

#features_summary_fileObject



67
68
69
70
# File 'lib/pretty_face/formatter/html.rb', line 67

def features_summary_file
  parts = @io.path.split(separator)
  parts[parts.length - 1]
end

#set_path_and_file(path_or_io) ⇒ Object



39
40
41
42
43
44
# File 'lib/pretty_face/formatter/html.rb', line 39

def set_path_and_file(path_or_io)
  return if path_or_io.nil?
  dir = File.dirname(path_or_io)
  FileUtils.mkdir_p dir unless File.directory? dir
  @io = ensure_io(path_or_io, 'html')
end