simplecov-badge 1.0.2 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +92 -5
- data/lib/simplecov-badge.rb +103 -90
- data/lib/simplecov-badge/version.rb +1 -1
- data/spec/simplecov-badge_spec.rb +48 -26
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 63cbd31bade8e277a79de7ad257d991c45e70a0e
|
4
|
+
data.tar.gz: 84d6f952d41b24981183d12780f4844c2e703e25
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 63466a277761c6316e75c1b7ab7a7cb69c91c7d236b233a50ba9ddaaeaf8c9464baf87c32057af5339198ec685675286c4b5566b795dd403f1ec6f3ed0b82866
|
7
|
+
data.tar.gz: f6434a9dc4d48d036ab6a89405590666d81408b16287d21da8124578e11bf9d80b8249afa45ab09b39a9f93f06508d3ed2b0b71195bd697426ff80245dd8b7a5
|
data/README.md
CHANGED
@@ -1,17 +1,104 @@
|
|
1
1
|
# Badge formatter for SimpleCov
|
2
|
-
====================================
|
3
2
|
[ ](https://www.codeship.io/projects/3367)
|
4
3
|
[ ](http://matthew342.github.io/simplecov-badge/coverage/index.html)
|
5
4
|
|
5
|
+
Generates coverage badges from SimpleCov using ImageMagick. Great for small private repos that don't want to pay for a [hosted service](https://coveralls.io/).
|
6
|
+
|
6
7
|
***Note: To learn more about SimpleCov, check out the main repo at https://github.com/colszowka/simplecov***
|
7
8
|
|
8
|
-
|
9
|
+
## Examples
|
10
|
+
The left side of the badge shows and is color-coded for the percentage of lines covered. The right side is color-coded for the strength of coverage (in terms of hits/line).
|
11
|
+
####Simple
|
12
|
+
----------
|
13
|
+

|
14
|
+
####Including Group sub-badges and timestamp
|
15
|
+
----------
|
16
|
+

|
17
|
+
|
18
|
+
## Installation
|
19
|
+
# In your gemfile
|
20
|
+
gem 'simplecov-badge', :require => false
|
21
|
+
|
22
|
+
## Usage
|
23
|
+
# Wherever your SimpleCov.start block is (spec_helper.rb, test_helper.rb, or .simplecov)
|
24
|
+
SimpleCov.start 'rails' do
|
25
|
+
require 'simplecov-badge'
|
26
|
+
# add your normal SimpleCov configs
|
27
|
+
add_filter "/app/admin/"
|
28
|
+
# configure any options you want for SimpleCov::Formatter::BadgeFormatter
|
29
|
+
SimpleCov::Formatter::BadgeFormatter.generate_groups = true
|
30
|
+
SimpleCov::Formatter::BadgeFormatter.strength_foreground = true
|
31
|
+
SimpleCov::Formatter::BadgeFormatter.timestamp = true
|
32
|
+
# call SimpleCov::Formatter::BadgeFormatter after the normal HTMLFormatter
|
33
|
+
SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
|
34
|
+
SimpleCov::Formatter::HTMLFormatter,
|
35
|
+
SimpleCov::Formatter::BadgeFormatter,
|
36
|
+
]
|
37
|
+
end
|
38
|
+
|
39
|
+
## Use with your CI
|
40
|
+
Your badge will be generated in the /coverage directory of your project folder. From there, you can push it wherever you like. Two common options are to push to S3 or to push to GitHub Pages.
|
41
|
+
|
42
|
+
####If you want to store your coverage reports in GitHub Pages
|
43
|
+
--------
|
44
|
+
You can do something like this as the last step in your build/deploy (assuming you've already created an orphan gh-pages branch):
|
45
|
+
|
46
|
+
mkdir ../tmp-coverage
|
47
|
+
cp -r coverage/ ../tmp-coverage/
|
48
|
+
git config --global user.email "CI@example.com"
|
49
|
+
git config --global user.name "CI Server"
|
50
|
+
cd ..
|
51
|
+
git clone --branch gh-pages git@github.com:matthew342/simplecov-badge.git gh-pages-clone
|
52
|
+
cd gh-pages-clone
|
53
|
+
cp -r ../tmp-coverage/. .
|
54
|
+
rm -r ../tmp-coverage
|
55
|
+
git add .
|
56
|
+
git commit -a -m "CI: Coverage for $COMMIT_ID"
|
57
|
+
git push origin gh-pages:gh-pages
|
58
|
+
|
59
|
+
REMEMBER Gitub Pages are public - so if your repo is private pushing somewhere else might be a better idea.
|
60
|
+
|
61
|
+
####If you want to store your coverage reports in S3
|
62
|
+
--------
|
63
|
+
Use one of the S3 wrappers for your language to automate pushing the files into an access-controlled S3 bucket. I use the [S3 gem](https://github.com/qoobaa/s3).
|
64
|
+
|
65
|
+
## Options
|
66
|
+
Set these in your SimpleCov.start block - see Usage section.
|
67
|
+
<table>
|
68
|
+
<tr>
|
69
|
+
<td>Name</td>
|
70
|
+
<td>Description</td>
|
71
|
+
<td>Default</td>
|
72
|
+
</tr>
|
73
|
+
<tr><td>strength_indicator_title</td><td>Title for right portion of badge, which can be colored according to coverage strength (i.e. >1 hits/line = green, == 1 hits/line = yellow, <1 hits/line = red)</td><td> 'TEST COVERAGE'</td></tr>
|
74
|
+
<tr><td>generate_groups </td><td>Whether to generate sub-badges for each group under the main badge</td><td>true</td></tr>
|
75
|
+
<tr><td>timestamp </td><td>Stick a timestamp on the bottom of the badge</td><td> false</td></tr>
|
76
|
+
<tr><td>green </td><td>The specific color to be used for 'green'</td><td> '#4fb151'</td></tr>
|
77
|
+
<tr><td>yellow </td><td>The specific color to be used for 'yellow'</td><td> '#ded443'</td></tr>
|
78
|
+
<tr><td>red </td><td>The specific color to be used for 'red'</td><td> '#a23e3f'</td></tr>
|
79
|
+
<tr><td>number_font </td><td>The font to use for the coverage percentage (for the main badge)</td><td> 'Helvetica-Narrow-Bold'</td></tr>
|
80
|
+
<tr><td>number_font_size </td><td>Size of font to use for the coverage percentage (for the main badge)</td><td> 20</td></tr>
|
81
|
+
<tr><td>name_font </td><td>The font to use for the name portion of the badge (of the main badge)</td><td> 'Helvetica'</td></tr>
|
82
|
+
<tr><td>name_font_size </td><td>Size of font to use for the name portion (of the main badge)</td><td> 17</td></tr>
|
83
|
+
<tr><td>badge_height </td><td>Height of the badge</td><td> 25</td></tr>
|
84
|
+
<tr><td>use_strength_color </td><td>Whether to color-code the name portion of the badge according to the coverage strength (NOT the covered percentage)</td><td> true</td></tr>
|
85
|
+
<tr><td>strength_foreground </td><td>Whether to color the foreground instead of the background when coloring the name portion of the badge according to the coverage strength</td><td> false</td></tr>
|
86
|
+
<tr><td>group_number_font </td><td>Same as above, but for group sub-badges</td><td> 'Helvetica-Narrow-Bold'</td></tr>
|
87
|
+
<tr><td>group_number_font_size </td><td>Same as above, but for group sub-badges</td><td> 20</td></tr>
|
88
|
+
<tr><td>group_name_font </td><td>Same as above, but for group sub-badges</td><td> 'Helvetica-Bold'</td></tr>
|
89
|
+
<tr><td>group_name_font_size </td><td>Same as above, but for group sub-badges</td><td> 17</td></tr>
|
90
|
+
<tr><td>group_badge_height </td><td>Same as above, but for group sub-badges</td><td> 25</td></tr>
|
91
|
+
<tr><td>use_strength_color_for_group_name </td><td>Same as above, but for group sub-badges</td><td> true</td></tr>
|
92
|
+
<tr><td>group_strength_foreground </td><td>Same as above, but for group sub-badges</td><td> true</td></tr>
|
93
|
+
</table>
|
9
94
|
|
95
|
+
#### Note on Patches/Pull Requests
|
10
96
|
|
11
|
-
|
12
|
-
|
97
|
+
Pull requests are much appreciated - but please add tests!
|
98
|
+
Run the test suite by cloning down the repo, then:
|
13
99
|
|
14
|
-
|
100
|
+
bundle install
|
101
|
+
rspec
|
15
102
|
|
16
103
|
|
17
104
|
Copyright
|
data/lib/simplecov-badge.rb
CHANGED
@@ -7,14 +7,14 @@ ImageMagickError = Class.new(StandardError)
|
|
7
7
|
|
8
8
|
class SimpleCov::Formatter::BadgeFormatter
|
9
9
|
# Set up config variables.
|
10
|
-
options = {:
|
10
|
+
options = {:badge_title => 'TEST COVERAGE', :generate_groups => true, :timestamp => false, :green => '#4fb151',
|
11
11
|
:yellow => '#ded443', :red => '#a23e3f', :number_font => 'Helvetica-Narrow-Bold',
|
12
12
|
:number_font_size => 20, :name_font => 'Helvetica', :name_font_size => 17,
|
13
|
-
:badge_height =>
|
13
|
+
:badge_height => 27, :strength_foreground => false,
|
14
14
|
:group_number_font => 'Helvetica-Narrow-Bold', :group_number_font_size => 20,
|
15
15
|
:group_name_font => 'Helvetica-Bold', :group_name_font_size => 17,
|
16
|
-
:group_badge_height =>
|
17
|
-
:
|
16
|
+
:group_badge_height => 27, :group_strength_foreground => true, :color_code_title => true,
|
17
|
+
:group_color_code_title => true}
|
18
18
|
|
19
19
|
# set up class variables and getters/setters
|
20
20
|
options.each do |opt,v|
|
@@ -31,6 +31,7 @@ class SimpleCov::Formatter::BadgeFormatter
|
|
31
31
|
check_imagemagick
|
32
32
|
generate_header_badge(result)
|
33
33
|
generate_group_badges(result) if @@generate_groups
|
34
|
+
generate_timestamp if @@timestamp
|
34
35
|
puts output_message(result)
|
35
36
|
rescue ImageMagickError => e
|
36
37
|
puts e
|
@@ -43,10 +44,24 @@ class SimpleCov::Formatter::BadgeFormatter
|
|
43
44
|
def generate_header_badge(result)
|
44
45
|
overall_cov = result.source_files.covered_percent.round(0)
|
45
46
|
overall_strength = result.covered_strength.round(0)
|
47
|
+
generator(overall_cov, overall_strength, false)
|
48
|
+
end
|
49
|
+
|
50
|
+
def generate_group_badges(result)
|
51
|
+
result.groups.each do |name, files|
|
52
|
+
cov = files.covered_percent.round(0)
|
53
|
+
strength = files.covered_strength.round(0)
|
54
|
+
generator(cov, strength, name)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def generator(cov, strength, group)
|
46
59
|
command = []
|
47
60
|
command[0] = """
|
48
|
-
convert -size 52x#{
|
49
|
-
-gravity
|
61
|
+
convert -size 52x#{get_config('badge_height', group)} xc:'#{coverage_color(cov)}' -pointsize #{get_config('number_font_size', group)} -font \"#{get_config('number_font', group)}\" \
|
62
|
+
-gravity center -fill white -draw \"kerning 2 text +2,-1 '#{cov}%'\" \
|
63
|
+
-pointsize 10 -font \"#{get_config('number_font', group)}\" \
|
64
|
+
-gravity south -fill white -draw \"text 0,-1 'coverage'\" \
|
50
65
|
-alpha set -bordercolor none -border 3 \
|
51
66
|
-gravity North -chop 0x3 \
|
52
67
|
-gravity South -chop 0x3 \
|
@@ -54,32 +69,45 @@ class SimpleCov::Formatter::BadgeFormatter
|
|
54
69
|
#{output_path}/tmp.png
|
55
70
|
"""
|
56
71
|
command[1] = """
|
57
|
-
convert #{output_path}/tmp.png \\( -size
|
58
|
-
-pointsize #{
|
59
|
-
-draw \"kerning 1 text 4,19 '#{@@
|
60
|
-
-gravity West \
|
61
|
-
-background
|
62
|
-
-
|
63
|
-
-background
|
72
|
+
convert #{output_path}/tmp.png \\( -size 260x#{get_config('badge_height', group)} xc:\"#{title_background(cov, strength, get_config('strength_foreground', group), get_config('color_code_title', group))}\" \
|
73
|
+
-pointsize #{get_config('name_font_size', group)} -fill \"#{title_foreground(cov, strength, get_config('strength_foreground', group), get_config('color_code_title', group))}\" -font \"#{get_config('name_font', group)}\" \
|
74
|
+
-draw \"kerning 1 text 4,19 '#{group ? group.upcase : @@badge_title}'\" \
|
75
|
+
-gravity West -background white -splice 1x0 \
|
76
|
+
-background black -splice 1x0 -trim +repage \
|
77
|
+
-gravity West -chop 1x0 -gravity East \
|
78
|
+
-background \"#{title_background(cov, strength, get_config('strength_foreground', group), get_config('color_code_title', group))}\" -splice 3x0 \\) \
|
64
79
|
-background none +append #{output_path}/tmp.png
|
65
80
|
"""
|
66
|
-
command[2] =
|
67
|
-
|
81
|
+
command[2] = """
|
82
|
+
convert #{output_path}/tmp.png \\( -size 52x#{get_config('badge_height', group)} xc:\"#{strength_background(strength, get_config('strength_foreground', group))}\" -pointsize #{get_config('number_font_size', group)} -font \"#{get_config('number_font', group)}\" \
|
83
|
+
-gravity Center -fill white -draw \"kerning 2 text 0,-1 '#{strength}'\" \
|
84
|
+
-pointsize 10 -font \"#{get_config('number_font', group)}\" \
|
85
|
+
-gravity south -fill white -draw \"text 0,-1 'hits/line'\" \
|
86
|
+
-alpha set -bordercolor none -border 3 \
|
87
|
+
-gravity North -chop 0x3 \
|
88
|
+
-gravity South -chop 0x3 \
|
89
|
+
-gravity East -chop 3x0 \\) \
|
90
|
+
-background none +append #{output_path}/tmp.png
|
91
|
+
"""
|
92
|
+
command[3] = """
|
93
|
+
convert #{output_path}/tmp.png -format 'roundrectangle 1,1 %[fx:w+4],%[fx:h+4] 10,10' \
|
68
94
|
-write info:#{output_path}/tmp.mvg \
|
69
95
|
-alpha set -bordercolor none -border 3 \
|
70
96
|
\\( +clone -alpha transparent -background none \
|
71
97
|
-fill white -stroke none -strokewidth 0 -draw @#{output_path}/tmp.mvg \\) \
|
72
98
|
-compose DstIn -composite \
|
73
|
-
-gravity South -chop
|
99
|
+
-gravity South -chop 0x1 #{output_path}/tmp.png
|
74
100
|
"""
|
75
|
-
command[
|
76
|
-
convert #{output_path}/tmp.png
|
77
|
-
|
78
|
-
|
79
|
-
-
|
101
|
+
command[4] = """
|
102
|
+
convert #{output_path}/tmp.png #{output_path}/coverage-badge.png
|
103
|
+
"""
|
104
|
+
command[5] = """
|
105
|
+
convert #{output_path}/coverage-badge.png #{output_path}/tmp.png -background none -gravity center -append #{output_path}/coverage-badge.png
|
80
106
|
"""
|
81
107
|
begin
|
82
|
-
command.
|
108
|
+
command.each_with_index do |cmd, i|
|
109
|
+
next i if i == 4 unless group == false
|
110
|
+
next i if i == 5 if group == false
|
83
111
|
output = `#{cmd}`
|
84
112
|
check_status(output)
|
85
113
|
end
|
@@ -89,70 +117,33 @@ class SimpleCov::Formatter::BadgeFormatter
|
|
89
117
|
end
|
90
118
|
end
|
91
119
|
|
92
|
-
def
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
-gravity West -background white -splice 1x0 -background black -splice 1x0 \
|
110
|
-
-trim +repage -gravity West -chop 1x0 -gravity East \
|
111
|
-
-background '#{strength_background(strength, @@group_strength_foreground)}' -splice 2x0 \
|
112
|
-
-alpha set -bordercolor none -border 3 \
|
113
|
-
-gravity North -chop 0x3 -gravity South -chop 0x3 \
|
114
|
-
-strokewidth 2 -format 'stroke white line 1,1 %[fx:w],3' \\) \
|
115
|
-
-background none +append #{output_path}/tmp.png
|
116
|
-
"""
|
117
|
-
command[2] = """
|
118
|
-
convert #{output_path}/tmp.png \\( +clone -alpha extract \
|
119
|
-
\\( -size 5x2 xc:black -draw 'fill white circle 8,8 8,0' -write mpr:arc +delete \\) \
|
120
|
-
\\( mpr:arc -flip \\) -gravity southwest -composite \
|
121
|
-
\\( mpr:arc -rotate 180 \\) -gravity southeast -composite \\) \
|
122
|
-
-alpha off -compose CopyOpacity -composite \
|
123
|
-
#{output_path}/tmp.png
|
124
|
-
"""
|
125
|
-
command[3] = """
|
126
|
-
convert #{output_path}/coverage-badge.png #{output_path}/tmp.png -gravity West -background none -append #{output_path}/coverage-badge.png
|
127
|
-
"""
|
128
|
-
begin
|
129
|
-
command.each_with_index do |cmd, y|
|
130
|
-
next cmd if y == 2 #and i != result.groups.count
|
131
|
-
output = `#{cmd}`
|
132
|
-
check_status(output)
|
133
|
-
end
|
134
|
-
ensure
|
135
|
-
system("rm #{output_path}/tmp.png")
|
136
|
-
end
|
137
|
-
end
|
138
|
-
if @@timestamp
|
139
|
-
timestamp_cmd = """
|
140
|
-
convert #{output_path}/coverage-badge.png -alpha set -bordercolor none -border 3 \
|
141
|
-
-gravity North -chop 0x3 \
|
142
|
-
-gravity East -chop 3x0 \
|
143
|
-
-gravity West -chop 3x0 \\( -background none -font 'Helvetica' label:'Generated #{Time.current.strftime('%m-%d-%y %H:%M UTC')}' \\) -background none -gravity center -append #{output_path}/coverage-badge.png
|
144
|
-
"""
|
145
|
-
output = `#{timestamp_cmd}`
|
146
|
-
check_status(output)
|
120
|
+
def generate_timestamp
|
121
|
+
timestamp_cmd = """
|
122
|
+
convert #{output_path}/coverage-badge.png -alpha set -bordercolor none -border 3 \
|
123
|
+
-gravity North -chop 0x3 \
|
124
|
+
-gravity East -chop 3x0 \
|
125
|
+
-gravity West -chop 3x0 \\( -background none -font 'Helvetica' label:'Generated #{Time.current.strftime('%m-%d-%y %H:%M UTC')}' \\) -background none -gravity center -append #{output_path}/coverage-badge.png
|
126
|
+
"""
|
127
|
+
output = `#{timestamp_cmd}`
|
128
|
+
check_status(output)
|
129
|
+
end
|
130
|
+
|
131
|
+
# getter method for config variables - abstracts group or main badge from generator
|
132
|
+
def get_config(name, group)
|
133
|
+
if group
|
134
|
+
eval("@@group_#{name}")
|
135
|
+
else
|
136
|
+
eval("@@#{name}")
|
147
137
|
end
|
148
138
|
end
|
149
|
-
|
139
|
+
|
150
140
|
# checks if imagemagick is installed and working
|
151
141
|
def check_imagemagick
|
152
142
|
output = `convert`
|
153
143
|
raise ImageMagickError, "ImageMagick doesn't appear to be installed." unless $?.to_i == 0
|
154
144
|
end
|
155
145
|
|
146
|
+
# Checks exit status after running a command with backtick
|
156
147
|
def check_status(output)
|
157
148
|
raise ImageMagickError, "ImageMagick exited with an error. It said:\n #{output}" unless $?.to_i == 0
|
158
149
|
end
|
@@ -165,11 +156,37 @@ class SimpleCov::Formatter::BadgeFormatter
|
|
165
156
|
SimpleCov.coverage_path
|
166
157
|
end
|
167
158
|
|
159
|
+
def title_background(cov, strength, foreground, use)
|
160
|
+
if !use
|
161
|
+
'silver'
|
162
|
+
elsif foreground
|
163
|
+
'transparent'
|
164
|
+
elsif cov > 90 and strength > 1
|
165
|
+
@@green
|
166
|
+
elsif cov > 80 and strength >= 1
|
167
|
+
@@yellow
|
168
|
+
else
|
169
|
+
@@red
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
173
|
+
def title_foreground(cov, strength, foreground, use)
|
174
|
+
if !foreground or !use
|
175
|
+
'white'
|
176
|
+
elsif cov > 90 and strength > 1
|
177
|
+
@@green
|
178
|
+
elsif cov > 80 and strength >= 1
|
179
|
+
@@yellow
|
180
|
+
else
|
181
|
+
@@red
|
182
|
+
end
|
183
|
+
end
|
184
|
+
|
168
185
|
def strength_background(strength, foreground)
|
169
186
|
if foreground
|
170
187
|
'transparent'
|
171
188
|
else
|
172
|
-
strength_color(strength
|
189
|
+
strength_color(strength)
|
173
190
|
end
|
174
191
|
end
|
175
192
|
|
@@ -177,7 +194,7 @@ class SimpleCov::Formatter::BadgeFormatter
|
|
177
194
|
unless foreground
|
178
195
|
'white'
|
179
196
|
else
|
180
|
-
strength_color(strength
|
197
|
+
strength_color(strength)
|
181
198
|
end
|
182
199
|
end
|
183
200
|
|
@@ -191,17 +208,13 @@ class SimpleCov::Formatter::BadgeFormatter
|
|
191
208
|
end
|
192
209
|
end
|
193
210
|
|
194
|
-
def strength_color(covered_strength
|
195
|
-
if
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
@@yellow
|
200
|
-
else
|
201
|
-
@@red
|
202
|
-
end
|
211
|
+
def strength_color(covered_strength)
|
212
|
+
if covered_strength > 1
|
213
|
+
@@green
|
214
|
+
elsif covered_strength == 1
|
215
|
+
@@yellow
|
203
216
|
else
|
204
|
-
|
217
|
+
@@red
|
205
218
|
end
|
206
219
|
end
|
207
220
|
end
|
@@ -30,9 +30,11 @@ describe SimpleCov::Formatter::BadgeFormatter do
|
|
30
30
|
@obj.stub(:check_imagemagick).and_return(0)
|
31
31
|
@obj.stub(:generate_group_badges).and_return(0)
|
32
32
|
@obj.stub(:coverage_color).and_return('green')
|
33
|
-
@obj.stub(:strength_color).and_return(
|
34
|
-
@obj.stub(:strength_foreground).and_return('
|
35
|
-
@obj.stub(:strength_background).and_return(
|
33
|
+
@obj.stub(:strength_color).and_return(@obj.class.green)
|
34
|
+
@obj.stub(:strength_foreground).and_return('white')
|
35
|
+
@obj.stub(:strength_background).and_return(@obj.class.green)
|
36
|
+
@obj.stub(:title_foreground).and_return('white')
|
37
|
+
@obj.stub(:title_background).and_return(@obj.class.green)
|
36
38
|
@obj.stub(:output_path).and_return('.')
|
37
39
|
result = double('Result')
|
38
40
|
result.stub_chain('source_files.covered_percent').and_return(50)
|
@@ -44,30 +46,51 @@ describe SimpleCov::Formatter::BadgeFormatter do
|
|
44
46
|
end
|
45
47
|
|
46
48
|
it 'should generate group badges' do
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
49
|
+
SimpleCov::Formatter::BadgeFormatter.generate_groups = true
|
50
|
+
result = double('Result')
|
51
|
+
result.stub(:command_name) {'test'}
|
52
|
+
files = double("files")
|
53
|
+
files.stub('covered_percent').and_return(50)
|
54
|
+
files.stub('covered_strength').and_return(90)
|
55
|
+
groups = {'group1' => files, 'group2' => files}
|
56
|
+
result.stub_chain('groups').and_return(groups)
|
57
|
+
@obj.stub(:check_imagemagick).and_return(0)
|
58
|
+
@obj.stub(:generate_header_badge).and_return(0)
|
59
|
+
@obj.stub(:coverage_color).and_return('green')
|
60
|
+
@obj.stub(:strength_color).and_return('green')
|
61
|
+
@obj.stub(:strength_foreground).and_return('white')
|
62
|
+
@obj.stub(:strength_background).and_return(@obj.class.green)
|
63
|
+
@obj.stub(:title_foreground).and_return('white')
|
64
|
+
@obj.stub(:title_background).and_return(@obj.class.green)
|
65
|
+
@obj.stub(:output_path).and_return('.')
|
66
|
+
expect{ @obj.format(result) }.to change{File.size('coverage-badge.png')}
|
67
|
+
$?.success?.should eq(true)
|
68
|
+
end
|
65
69
|
|
66
70
|
describe 'generation helpers' do
|
67
71
|
# Calling all these private methods here is a little ugly; but it seemed like the
|
68
72
|
# right thing in this case - testing these through public methods (format) just
|
69
73
|
# isn't possible
|
70
|
-
|
74
|
+
describe 'title_background' do
|
75
|
+
it 'returns transparent if foreground and lowest color if not' do
|
76
|
+
@obj.instance_eval{title_background(60, 1, true, true)}.should eq('transparent')
|
77
|
+
@obj.instance_eval{title_background(91,1.1, false, true)}.should eq(@obj.class.green)
|
78
|
+
@obj.instance_eval{title_background(91,1, false, true)}.should eq(@obj.class.yellow)
|
79
|
+
@obj.instance_eval{title_background(65,1, false, true)}.should eq(@obj.class.red)
|
80
|
+
@obj.instance_eval{title_background(90,1, false, false)}.should eq('silver')
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
describe 'title_foreground' do
|
85
|
+
it 'returns white unless foreground and lowest color otherwise' do
|
86
|
+
@obj.instance_eval{title_foreground(60,2,false, true)}.should eq('white')
|
87
|
+
@obj.instance_eval{title_foreground(91,2,true, true)}.should eq(@obj.class.green)
|
88
|
+
@obj.instance_eval{title_foreground(85,2,true, true)}.should eq(@obj.class.yellow)
|
89
|
+
@obj.instance_eval{title_foreground(85,0.5,true, true)}.should eq(@obj.class.red)
|
90
|
+
@obj.instance_eval{title_foreground(90,1, false, false)}.should eq('white')
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
71
94
|
describe 'strength_background' do
|
72
95
|
it 'returns transparent if foreground and strength_color if not' do
|
73
96
|
@obj.instance_eval{strength_background(60, true)}.should eq('transparent')
|
@@ -94,10 +117,9 @@ describe SimpleCov::Formatter::BadgeFormatter do
|
|
94
117
|
|
95
118
|
describe 'strength_color' do
|
96
119
|
it 'returns the correct colors' do
|
97
|
-
@obj.instance_eval{strength_color(1.1
|
98
|
-
@obj.instance_eval{strength_color(1
|
99
|
-
@obj.instance_eval{strength_color(0.9
|
100
|
-
@obj.instance_eval{strength_color(0.9, false)}.should eq('silver')
|
120
|
+
@obj.instance_eval{strength_color(1.1)}.should eq(@obj.class.green)
|
121
|
+
@obj.instance_eval{strength_color(1)}.should eq(@obj.class.yellow)
|
122
|
+
@obj.instance_eval{strength_color(0.9)}.should eq(@obj.class.red)
|
101
123
|
end
|
102
124
|
end
|
103
125
|
end
|