gcovtools 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,299 @@
1
+ require_relative '../spec_helper'
2
+
3
+ describe GCOVTOOLS::Project do
4
+
5
+ describe "#name" do
6
+ it "can be given in the constructor" do
7
+ project = GCOVTOOLS::Project.new "Test"
8
+ expect(project.name).to eq("Test")
9
+ end
10
+
11
+ it "is optional in the constructor" do
12
+ project = GCOVTOOLS::Project.new
13
+ expect(project.name).to eq("")
14
+ end
15
+
16
+ it "can be modified" do
17
+ project = GCOVTOOLS::Project.new "Test"
18
+ project.name = "Test2"
19
+ expect(project.name).to eq("Test2")
20
+ end
21
+
22
+ end
23
+
24
+ describe "#files" do
25
+ it "returns no files if it is empty" do
26
+ project = GCOVTOOLS::Project.new "Test"
27
+ expect(project.files.count).to eq(0)
28
+ end
29
+
30
+ it "returns the files it has been given" do
31
+ project = GCOVTOOLS::Project.new "Test"
32
+ project << GCOVTOOLS::File.new("foobar.cpp")
33
+ project << GCOVTOOLS::File.new("boofar.cpp")
34
+ expect(project.files.count).to eq(2)
35
+ expect(project.files.map(&:name)).to include(a_string_ending_with("foobar.cpp"))
36
+ expect(project.files.map(&:name)).to include(a_string_ending_with("boofar.cpp"))
37
+ end
38
+ end
39
+
40
+ describe ".load_dir" do
41
+ it "loads all files in the given directory" do
42
+ project = GCOVTOOLS::Project.load_dir(File.join(File.dirname(__FILE__),"data"))
43
+ expect(project.files.count).to eq(3)
44
+ expect(project.files.map{|file|file.name}).to include(a_string_ending_with("test2.cpp"))
45
+ expect(project.files.map{|file|file.name}).not_to include(a_string_ending_with("test3.cpp"))
46
+ end
47
+
48
+ it "recursively loads all files in the given directory structure" do
49
+ project = GCOVTOOLS::Project.load_dir(File.join(File.dirname(__FILE__),"data"), :recursive => true)
50
+ expect(project.files.count).to eq(4)
51
+ expect(project.files.map{|file|file.name}).to include(a_string_ending_with("test2.cpp"))
52
+ expect(project.files.map{|file|file.name}).to include( a_string_ending_with("test3.cpp") )
53
+ end
54
+
55
+ end
56
+
57
+ describe "#add_file" do
58
+ it "should add the given file" do
59
+ project = GCOVTOOLS::Project.new
60
+ project.add_file(File.join(File.dirname(__FILE__),"data","test2.cpp.gcov"))
61
+ expect(project.files.count).to eq(1)
62
+ expect(project.files[0].name).to eq( "test2.cpp" )
63
+ end
64
+
65
+ it "should split concatenated gcov files into multiple objects" do
66
+ project = GCOVTOOLS::Project.new
67
+ project.add_file(File.join(File.dirname(__FILE__),"concat","test_cat.cpp.gcov"))
68
+ expect(project.files.count).to eq(2)
69
+ expect(project.files.map(&:name)).to include( "test.cpp" )
70
+ expect(project.files.map(&:name)).to include( "test1.cpp" )
71
+ end
72
+
73
+ it "should filter using given array of expressions" do
74
+ project = GCOVTOOLS::Project.new
75
+ project.add_file(File.join(File.dirname(__FILE__),"data","test2.cpp.gcov"), :exclude => [/test2\.cpp/,/test3\.cpp/])
76
+ expect(project.files.count).to eq(0)
77
+ end
78
+
79
+ it "should filter out concatenated files that match the filter" do
80
+ project = GCOVTOOLS::Project.new
81
+ project.add_file(File.join(File.dirname(__FILE__),"concat","test_cat.cpp.gcov"), :exclude => [/test\.cpp$/])
82
+ expect(project.files.count).to eq(1)
83
+ expect(project.files.map(&:name)).not_to include( a_string_ending_with("test.cpp") )
84
+ expect(project.files.map(&:name)).to include( a_string_ending_with("test1.cpp") )
85
+ end
86
+
87
+ it "should not filter out concatenated files that don't match the filter" do
88
+ project = GCOVTOOLS::Project.new
89
+ project.add_file(File.join(File.dirname(__FILE__),"concat","test_cat.cpp.gcov"), :exclude => [/test_cat\.cpp\.gcov$/])
90
+ expect(project.files.count).to eq(2)
91
+ expect(project.files.map(&:name)).to include( a_string_ending_with("test.cpp") )
92
+ expect(project.files.map(&:name)).to include( a_string_ending_with("test1.cpp") )
93
+ end
94
+
95
+ it "should filter inclusively if told to" do
96
+ project = GCOVTOOLS::Project.new
97
+ project.add_file(File.join(File.dirname(__FILE__),"concat","test_cat.cpp.gcov"), :include => [/test\.cpp$/] )
98
+ expect(project.files.count).to eq(1)
99
+ expect(project.files.map(&:name)).not_to include( a_string_ending_with("test1.cpp") )
100
+ expect(project.files.map(&:name)).to include( a_string_ending_with("test.cpp") )
101
+ end
102
+
103
+ it "should apply all inclusive filters" do
104
+ project = GCOVTOOLS::Project.new
105
+ project.add_file(File.join(File.dirname(__FILE__),"concat","test_cat.cpp.gcov"), :include => [/test\.cpp$/,/test1\.cpp$/] )
106
+ expect(project.files.count).to eq(2)
107
+ expect(project.files.map(&:name)).to include( a_string_ending_with("test1.cpp") )
108
+ expect(project.files.map(&:name)).to include( a_string_ending_with("test.cpp") )
109
+ end
110
+
111
+ it "should apply exclusive filters after inclusive ones" do
112
+ project = GCOVTOOLS::Project.new
113
+ project.add_file(File.join(File.dirname(__FILE__),"concat","test_cat.cpp.gcov"), :include => [/test.*\.cpp$/], :exclude => [/test.cpp/] )
114
+ expect(project.files.count).to eq(1)
115
+ expect(project.files.map(&:name)).to include( a_string_ending_with("test1.cpp") )
116
+ expect(project.files.map(&:name)).not_to include( a_string_ending_with("test.cpp") )
117
+ end
118
+
119
+ it "should merge file stats for identical filenames" do
120
+ project = GCOVTOOLS::Project.new
121
+ project.add_files do
122
+ file = GCOVTOOLS::File.new "myfile.cpp"
123
+ file.add_lines do
124
+ file << GCOVTOOLS::Line.new(0,:none,"Source:myfile.cpp")
125
+ file << GCOVTOOLS::Line.new(1,4,"line 1")
126
+ file << GCOVTOOLS::Line.new(2,23,"line 2")
127
+ file << GCOVTOOLS::Line.new(3,:none,"line 3")
128
+ file << GCOVTOOLS::Line.new(4,:missed,"line 4")
129
+ file << GCOVTOOLS::Line.new(5,:none,"line 5")
130
+ end
131
+
132
+ project << file
133
+
134
+ file = GCOVTOOLS::File.new "myfile.cpp"
135
+ file.add_lines do
136
+ file << GCOVTOOLS::Line.new(0,:none,"Source:myfile.cpp")
137
+ file << GCOVTOOLS::Line.new(1,:missed,"line 1")
138
+ file << GCOVTOOLS::Line.new(2,40,"line 2")
139
+ file << GCOVTOOLS::Line.new(3,:none,"line 3")
140
+ file << GCOVTOOLS::Line.new(4,:none,"line 4")
141
+ end
142
+
143
+ project << file
144
+
145
+ end # add_files
146
+
147
+ expect(project.files.count).to eq(1)
148
+
149
+ end # it
150
+
151
+ end # describe
152
+
153
+ describe "#add_dir" do
154
+ it "adds all files in the given directory" do
155
+ project = GCOVTOOLS::Project.load_dir(File.join(File.dirname(__FILE__),"data","data2"))
156
+ project.add_dir(File.join(File.dirname(__FILE__),"data"))
157
+ expect(project.files.count).to eq(4)
158
+ expect(project.files.map{|file|file.name}).to include( a_string_ending_with("test2.cpp") )
159
+ expect(project.files.map{|file|file.name}).to include( a_string_ending_with("test3.cpp") )
160
+ end
161
+
162
+ it "recursively adds all files in the given directory" do
163
+ project = GCOVTOOLS::Project.new
164
+ project.add_dir(File.join(File.dirname(__FILE__),"data"), :recursive => true)
165
+ expect(project.files.count).to eq(4)
166
+ expect(project.files.map{|file|file.name}).to include( a_string_ending_with("test2.cpp") )
167
+ expect(project.files.map{|file|file.name}).to include( a_string_ending_with("test3.cpp") )
168
+ end
169
+
170
+ it "filters using given singular expression" do
171
+ project = GCOVTOOLS::Project.new
172
+ project.add_dir(File.join(File.dirname(__FILE__),"data"), :recursive => true, :exclude => [/test2\.cpp/])
173
+ expect(project.files.count).to eq(3)
174
+ expect(project.files.map{|file|file.name}).not_to include( a_string_ending_with("test2.cpp") )
175
+ expect(project.files.map{|file|file.name}).to include( a_string_ending_with("test3.cpp") )
176
+ end
177
+
178
+ it "filters using given array of expressions" do
179
+ project = GCOVTOOLS::Project.new
180
+ project.add_dir(File.join(File.dirname(__FILE__),"data"), :recursive => true, :exclude => [/test2\.cpp/,/test3\.cpp/])
181
+ expect(project.files.count).to eq(2)
182
+ expect(project.files.map{|file|file.name}).not_to include( a_string_ending_with("test2.cpp") )
183
+ expect(project.files.map{|file|file.name}).not_to include( a_string_ending_with("test3.cpp") )
184
+ end
185
+
186
+ it "should filter out concatenated files that match the filter" do
187
+ project = GCOVTOOLS::Project.new
188
+ project.add_dir(File.join(File.dirname(__FILE__),"concat"), :recursive => true, :exclude => [/test\.cpp$/])
189
+ expect(project.files.count).to eq(1)
190
+ expect(project.files.map(&:name)).not_to include( a_string_ending_with("test.cpp") )
191
+ expect(project.files.map(&:name)).to include( a_string_ending_with("test1.cpp") )
192
+ end
193
+
194
+ it "should not filter out concatenated files that don't match the filter" do
195
+ project = GCOVTOOLS::Project.new
196
+ project.add_dir(File.join(File.dirname(__FILE__),"concat"), :recursive => true, :exclude => [/test_cat\.cpp/])
197
+ expect(project.files.count).to eq(2)
198
+ expect(project.files.map(&:name)).to include( a_string_ending_with("test.cpp") )
199
+ expect(project.files.map(&:name)).to include( a_string_ending_with("test1.cpp") )
200
+ end
201
+
202
+ it "should filter inclusively if told to" do
203
+ project = GCOVTOOLS::Project.new
204
+ project.add_dir(File.join(File.dirname(__FILE__),"concat"), :recursive => true, :include => [/test\.cpp/])
205
+ expect(project.files.count).to eq(1)
206
+ expect(project.files.map(&:name)).not_to include( a_string_ending_with("test1.cpp") )
207
+ expect(project.files.map(&:name)).to include( a_string_ending_with("test.cpp") )
208
+ end
209
+
210
+ it "should apply all inclusive filters" do
211
+ project = GCOVTOOLS::Project.new
212
+ project.add_dir(File.join(File.dirname(__FILE__),"concat"), :recursive => true, :include => [/test\.cpp$/,/test1\.cpp$/] )
213
+ expect(project.files.count).to eq(2)
214
+ expect(project.files.map(&:name)).to include( a_string_ending_with("test1.cpp") )
215
+ expect(project.files.map(&:name)).to include( a_string_ending_with("test.cpp") )
216
+ end
217
+
218
+ it "should apply exclusive filters after inclusive ones" do
219
+ project = GCOVTOOLS::Project.new
220
+ project.add_dir(File.join(File.dirname(__FILE__),"concat"), :recursive => true, :include => [/test.*\.cpp$/], :exclude => [/test.cpp/] )
221
+ expect(project.files.count).to eq(1)
222
+ expect(project.files.map(&:name)).to include( a_string_ending_with("test1.cpp") )
223
+ expect(project.files.map(&:name)).not_to include( a_string_ending_with("test.cpp") )
224
+ end
225
+
226
+ end
227
+
228
+
229
+ describe "#stats" do
230
+ it "should be computed based on file stats" do
231
+ project = GCOVTOOLS::Project.new
232
+
233
+ project.add_files do
234
+ file = GCOVTOOLS::File.new "myfile.cpp"
235
+ file.add_lines do
236
+ file << GCOVTOOLS::Line.new(1,4,"line 1")
237
+ file << GCOVTOOLS::Line.new(2,23,"line 2")
238
+ file << GCOVTOOLS::Line.new(3,:none,"line 3")
239
+ file << GCOVTOOLS::Line.new(4,:missed,"line 4")
240
+ file << GCOVTOOLS::Line.new(5,:none,"line 5")
241
+ end
242
+
243
+ project << file
244
+
245
+ file = GCOVTOOLS::File.new "myfile2.cpp"
246
+ file.add_lines do
247
+ file << GCOVTOOLS::Line.new(1,:missed,"line 1")
248
+ file << GCOVTOOLS::Line.new(2,40,"line 2")
249
+ file << GCOVTOOLS::Line.new(3,:none,"line 3")
250
+ file << GCOVTOOLS::Line.new(4,:none,"line 4")
251
+ end
252
+
253
+ project << file
254
+
255
+ end
256
+
257
+ expect(project.stats[:lines]).to eq(5)
258
+ expect(project.stats[:total_lines]).to eq(9)
259
+ expect(project.stats[:total_exec]).to eq(67)
260
+ expect(project.stats[:empty_lines]).to eq(4)
261
+ expect(project.stats[:exec_lines]).to eq(3)
262
+ expect(project.stats[:missed_lines]).to eq(2)
263
+ expect(project.stats[:coverage]).to eq(3.0/5)
264
+ expect(project.stats[:hits_per_line]).to eq(67.0/5)
265
+
266
+ end
267
+
268
+ it "should be computed based on file stats" do
269
+ project = GCOVTOOLS::Project.new
270
+
271
+ project.add_files do
272
+ file = GCOVTOOLS::File.new "myfile.cpp"
273
+ file.add_lines do
274
+ file << GCOVTOOLS::Line.new(1,:none,"line 1")
275
+ file << GCOVTOOLS::Line.new(2,:none,"line 2")
276
+ file << GCOVTOOLS::Line.new(3,:none,"line 3")
277
+ file << GCOVTOOLS::Line.new(4,:none,"line 4")
278
+ end
279
+
280
+ project << file
281
+
282
+ file = GCOVTOOLS::File.new "myfile2.cpp"
283
+ file.add_lines do
284
+ file << GCOVTOOLS::Line.new(1,:none,"line 1")
285
+ file << GCOVTOOLS::Line.new(2,:none,"line 2")
286
+ end
287
+
288
+ project << file
289
+
290
+ end
291
+
292
+ expect(project.stats[:lines]).to eq(0)
293
+ expect(project.stats[:coverage]).to eq(1)
294
+ expect(project.stats[:hits_per_line]).to eq(0)
295
+
296
+ end # it
297
+ end # describe #stats
298
+
299
+ end # describe Project
@@ -0,0 +1,14 @@
1
+ # encoding: utf-8
2
+
3
+ # require_relative '../lib/logging'
4
+ # GCOVTOOLS::logger.level = Logger::INFO
5
+
6
+ require 'simplecov'
7
+ SimpleCov.start
8
+
9
+ require_relative '../lib/line'
10
+ require_relative '../lib/file'
11
+ require_relative '../lib/project'
12
+
13
+ $LOAD_PATH << File.expand_path(File.join('..', 'lib'), File.dirname(__FILE__))
14
+
data/src/Makefile ADDED
@@ -0,0 +1,48 @@
1
+ CXX=clang++
2
+ CFLAGS=-I. --coverage
3
+ DEPS = test.h
4
+ OBJ = test.o test1.o test2.o test3.o
5
+ SPECDIR = ../spec/gcov2x
6
+ OUTDIR = $(SPECDIR)/data
7
+ OUTDIR_CAT = $(SPECDIR)/concat
8
+
9
+ all: $(OUTDIR)/test.cpp.gcov $(OUTDIR)/test1.cpp.gcov $(OUTDIR)/test2.cpp.gcov $(OUTDIR)/data2/test3.cpp.gcov $(OUTDIR)/data2/test3.cpp.gcov $(OUTDIR_CAT)/test_cat.cpp.gcov
10
+
11
+ $(OUTDIR)/test.cpp.gcov: test.cpp.gcov $(OUTDIR)
12
+ @cp -fv $< $@
13
+
14
+ $(OUTDIR)/test1.cpp.gcov: test1.cpp.gcov $(OUTDIR)
15
+ @cp -fv $< $@
16
+
17
+ $(OUTDIR)/test2.cpp.gcov: test2.cpp.gcov $(OUTDIR)
18
+ @cp -fv $< $@
19
+
20
+ $(OUTDIR)/data2/test3.cpp.gcov: test3.cpp.gcov $(OUTDIR)/data2
21
+ @cp -fv $< $@
22
+
23
+ $(OUTDIR_CAT)/test_cat.cpp.gcov: test.cpp.gcov test1.cpp.gcov
24
+ @echo "\nCreating $@\n"
25
+ @cat $^ > $@
26
+
27
+ %.cpp.gcov: %.cpp test
28
+ @./test
29
+ @llvm-cov -l -p $<
30
+
31
+ test: $(OBJ)
32
+ $(CXX) $(CFLAGS) -o $@ $^
33
+
34
+ %.o: %.cpp $(DEPS)
35
+ $(CXX) $(CFLAGS) -c -o $@ $<
36
+
37
+ $(OUTDIR):
38
+ mkdir -p $(OUTDIR)
39
+
40
+ $(OUTDIR)/data2:
41
+ mkdir -p $(OUTDIR)/data2
42
+
43
+ $(OUTDIR_CAT):
44
+ mkdir -p $(OUTDIR_CAT)
45
+
46
+ clean:
47
+ @rm -f *.o *.gcda *.gcno *.gcov
48
+ @rm -f test
data/src/test.cpp ADDED
@@ -0,0 +1,9 @@
1
+ #include "test.h"
2
+
3
+ int main( int argc, const char* argv[] )
4
+ {
5
+ reached(2);
6
+ reached2(2);
7
+ reached3(2);
8
+ return 0;
9
+ }
data/src/test.h ADDED
@@ -0,0 +1,7 @@
1
+
2
+ int reached(int);
3
+ int reached2(int);
4
+ int reached3(int);
5
+ int unreached(int);
6
+ int unreached3(int);
7
+ int unreached4(int);
data/src/test1.cpp ADDED
@@ -0,0 +1,16 @@
1
+
2
+ int reached( int i )
3
+ {
4
+ int j = i;
5
+
6
+ if( j == 2 )
7
+ return j;
8
+
9
+ return 3;
10
+ }
11
+
12
+ int unreached( int x )
13
+ {
14
+ int y = x;
15
+ return y+3;
16
+ }
data/src/test2.cpp ADDED
@@ -0,0 +1,17 @@
1
+
2
+ int unreached2( int x )
3
+ {
4
+ int y = x;
5
+ return y+3;
6
+ }
7
+
8
+ int reached2( int i )
9
+ {
10
+ int j = i;
11
+
12
+ if( j == 2 )
13
+ return j;
14
+
15
+ return 3;
16
+ }
17
+
data/src/test3.cpp ADDED
@@ -0,0 +1,17 @@
1
+
2
+ int unreached3( int x )
3
+ {
4
+ int y = x;
5
+ return y+3;
6
+ }
7
+
8
+ int reached3( int i )
9
+ {
10
+ int j = i;
11
+
12
+ if( j == 2 )
13
+ return j;
14
+
15
+ return 3;
16
+ }
17
+
@@ -0,0 +1,3 @@
1
+ require 'rubygems/tasks'
2
+
3
+ Gem::Tasks.new(:sign => {:checksum => true } )
data/tasks/spec.rake ADDED
@@ -0,0 +1,8 @@
1
+ require 'rspec/core/rake_task'
2
+
3
+ RSpec::Core::RakeTask.new(:spec) do |t|
4
+ t.rspec_opts = ["-c", "-f progress", "-r ./spec/spec_helper.rb"]
5
+ t.pattern = 'spec/**/*_spec.rb'
6
+ end
7
+
8
+ task :default => :spec
metadata ADDED
@@ -0,0 +1,193 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: gcovtools
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Mattias Bergbom
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-12-09 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rspec
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rubygems-tasks
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: simplecov
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: terminal-table
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: term-ansicolor
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: thor
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: gyoku
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '1.0'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '1.0'
125
+ description: gcovtools digests .gcov files generated by llvm-cov and translates them
126
+ into various common formats
127
+ email: mattias.bergbom@gmail.com
128
+ executables:
129
+ - gcovtools
130
+ extensions: []
131
+ extra_rdoc_files: []
132
+ files:
133
+ - ".gitignore"
134
+ - ".travis.yml"
135
+ - Gemfile
136
+ - LICENSE
137
+ - README.md
138
+ - Rakefile
139
+ - bin/gcovtools
140
+ - gcovtools.gemspec
141
+ - lib/ansii_formatter.rb
142
+ - lib/file.rb
143
+ - lib/gcovtools.rb
144
+ - lib/html_formatter.rb
145
+ - lib/html_view.html.erb
146
+ - lib/json_formatter.rb
147
+ - lib/line.rb
148
+ - lib/logging.rb
149
+ - lib/project.rb
150
+ - lib/version.rb
151
+ - lib/xml_formatter.rb
152
+ - spec/gcovtools/concat/test_cat.cpp.gcov
153
+ - spec/gcovtools/data/data2/test3.cpp.gcov
154
+ - spec/gcovtools/data/test.cpp.gcov
155
+ - spec/gcovtools/data/test1.cpp.gcov
156
+ - spec/gcovtools/data/test2.cpp.gcov
157
+ - spec/gcovtools/file_spec.rb
158
+ - spec/gcovtools/line_spec.rb
159
+ - spec/gcovtools/project_spec.rb
160
+ - spec/spec_helper.rb
161
+ - src/Makefile
162
+ - src/test.cpp
163
+ - src/test.h
164
+ - src/test1.cpp
165
+ - src/test2.cpp
166
+ - src/test3.cpp
167
+ - tasks/rubygems.rake
168
+ - tasks/spec.rake
169
+ homepage: http://rubygems.org/gems/gcovtools
170
+ licenses:
171
+ - MIT
172
+ metadata: {}
173
+ post_install_message:
174
+ rdoc_options: []
175
+ require_paths:
176
+ - lib
177
+ required_ruby_version: !ruby/object:Gem::Requirement
178
+ requirements:
179
+ - - ">="
180
+ - !ruby/object:Gem::Version
181
+ version: '2.0'
182
+ required_rubygems_version: !ruby/object:Gem::Requirement
183
+ requirements:
184
+ - - ">="
185
+ - !ruby/object:Gem::Version
186
+ version: '0'
187
+ requirements: []
188
+ rubyforge_project:
189
+ rubygems_version: 2.4.2
190
+ signing_key:
191
+ specification_version: 4
192
+ summary: gcov parser and formatter
193
+ test_files: []