-
Notifications
You must be signed in to change notification settings - Fork 12
/
console_formatter.rb
78 lines (68 loc) · 1.99 KB
/
console_formatter.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
module Coco
# I format coverages data for console output.
#
class ConsoleFormatter
# Public: Get a colored report, formatted for console output.
#
# Returns percent covered and associated filenames as a multilines
# or a single line String.
#
def format
@config[:single_line_report] ? single_line_message : multilines_message
end
# Get the link for the report's index file.
#
# Returns String.
#
def link
unless @formatted_output.empty?
'See file://' +
File.expand_path(File.join(Coco::HtmlDirectory.new.coverage_dir,
'index.html'))
end
end
# Public: Creates a new ConsoleFormatter.
#
# uncovered - An Array list of uncovered files.
# threshold - The Fixnum percentage threshold.
# result - A CoverageResult.
# config - A Configuration.
#
def initialize(uncovered, threshold, result, config)
@uncovered = uncovered
@result = result
@formatted_output = []
compute_percentage
add_percentage_to_uncovered
@formatted_output.sort!
@formatted_output.map! do |percentage, filename|
text = ColoredString.new "#{percentage}% #{filename}"
if percentage <= 50
text.red
elsif percentage >= threshold
text.green
else
text.yellow
end
end
@summary = Summary.new(result, uncovered)
@config = config
end
private
def compute_percentage
@result.not_covered_enough.each do |filename, coverage|
percentage = CoverageStat.coverage_percent(coverage)
@formatted_output << [percentage, filename]
end
end
def add_percentage_to_uncovered
@uncovered.each { |filename| @formatted_output << [0, filename] }
end
def single_line_message
ColoredString.new(@summary.to_s).yellow
end
def multilines_message
@formatted_output.join("\n") + "\n" + @summary.to_s + "\n"
end
end
end