slather 1.4.0 → 1.5.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 +21 -1
- data/bin/slather +3 -0
- data/lib/slather.rb +1 -0
- data/lib/slather/coverage_file.rb +84 -8
- data/lib/slather/coverage_service/cobertura_xml_output.rb +167 -0
- data/lib/slather/coverage_service/gutter_json_output.rb +1 -1
- data/lib/slather/coveralls_coverage_file.rb +1 -1
- data/lib/slather/project.rb +3 -1
- data/lib/slather/version.rb +1 -1
- data/slather.gemspec +1 -0
- data/spec/fixtures/cobertura.xml +128 -0
- data/spec/fixtures/fixtures.xcodeproj/project.pbxproj +464 -905
- data/spec/fixtures/fixtures/more_files/Branches.h +15 -0
- data/spec/fixtures/fixtures/more_files/Branches.m +45 -0
- data/spec/fixtures/fixturesTests/BranchesTests.m +38 -0
- data/spec/fixtures/gutter.json +1 -1
- data/spec/slather/coverage_file_spec.rb +158 -30
- data/spec/slather/coverage_service/cobertura_xml_spec.rb +38 -0
- data/spec/slather/coverage_service/coveralls_spec.rb +2 -2
- data/spec/slather/coverage_service/simple_output_spec.rb +3 -1
- data/spec/spec_helper.rb +1 -0
- metadata +27 -2
@@ -0,0 +1,15 @@
|
|
1
|
+
//
|
2
|
+
// Branches.h
|
3
|
+
// fixtures
|
4
|
+
//
|
5
|
+
// Created by Julian Krumow on 11.10.14.
|
6
|
+
// Copyright (c) 2014 marklarr. All rights reserved.
|
7
|
+
//
|
8
|
+
|
9
|
+
#import <Foundation/Foundation.h>
|
10
|
+
|
11
|
+
@interface Branches : NSObject
|
12
|
+
|
13
|
+
- (void)branches:(BOOL)goIf skipBranches:(BOOL)skipBranches;
|
14
|
+
|
15
|
+
@end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
//
|
2
|
+
// Branches.m
|
3
|
+
// fixtures
|
4
|
+
//
|
5
|
+
// Created by Julian Krumow on 11.10.14.
|
6
|
+
// Copyright (c) 2014 marklarr. All rights reserved.
|
7
|
+
//
|
8
|
+
|
9
|
+
#import "Branches.h"
|
10
|
+
|
11
|
+
@implementation Branches
|
12
|
+
|
13
|
+
- (void)branches:(BOOL)goIf skipBranches:(BOOL)skipBranches
|
14
|
+
{
|
15
|
+
if (goIf) {
|
16
|
+
NSLog(@"foo.");
|
17
|
+
|
18
|
+
if (!skipBranches) {
|
19
|
+
NSLog(@"not skipped.");
|
20
|
+
}
|
21
|
+
} else {
|
22
|
+
NSLog(@"bar.");
|
23
|
+
}
|
24
|
+
|
25
|
+
int i = 5;
|
26
|
+
if (i == 5) {
|
27
|
+
return;
|
28
|
+
}
|
29
|
+
switch (i) {
|
30
|
+
case 0:
|
31
|
+
NSLog(@"0");
|
32
|
+
break;
|
33
|
+
|
34
|
+
case 1:
|
35
|
+
NSLog(@"1");
|
36
|
+
break;
|
37
|
+
case 5:
|
38
|
+
NSLog(@"5");
|
39
|
+
break;
|
40
|
+
default:
|
41
|
+
break;
|
42
|
+
}
|
43
|
+
}
|
44
|
+
|
45
|
+
@end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
//
|
2
|
+
// BranchesTests.m
|
3
|
+
// fixtures
|
4
|
+
//
|
5
|
+
// Created by Julian Krumow on 11.10.14.
|
6
|
+
// Copyright (c) 2014 marklarr. All rights reserved.
|
7
|
+
//
|
8
|
+
|
9
|
+
#import <XCTest/XCTest.h>
|
10
|
+
#import "Branches.h"
|
11
|
+
|
12
|
+
@interface BranchesTests : XCTestCase
|
13
|
+
|
14
|
+
@end
|
15
|
+
|
16
|
+
@implementation BranchesTests
|
17
|
+
|
18
|
+
- (void)setUp {
|
19
|
+
[super setUp];
|
20
|
+
// Put setup code here. This method is called before the invocation of each test method in the class.
|
21
|
+
}
|
22
|
+
|
23
|
+
- (void)tearDown {
|
24
|
+
// Put teardown code here. This method is called after the invocation of each test method in the class.
|
25
|
+
[super tearDown];
|
26
|
+
}
|
27
|
+
|
28
|
+
- (void)testBranchesNoBranches {
|
29
|
+
Branches *branches = [[Branches alloc] init];
|
30
|
+
[branches branches:NO skipBranches:NO];
|
31
|
+
}
|
32
|
+
|
33
|
+
- (void)testBranchesFirstBranchAndSkip {
|
34
|
+
Branches *branches = [[Branches alloc] init];
|
35
|
+
[branches branches:YES skipBranches:YES];
|
36
|
+
}
|
37
|
+
|
38
|
+
@end
|
data/spec/fixtures/gutter.json
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"meta":{"timestamp":"2014-09-19 11:21:36.112110"},"symbols_by_file":{"spec/fixtures/fixtures/fixtures.m":[{"line":1,"long_text":"","short_text":"-"},{"line":2,"long_text":"","short_text":"-"},{"line":3,"long_text":"","short_text":"-"},{"line":4,"long_text":"","short_text":"-"},{"line":5,"long_text":"","short_text":"-"},{"line":6,"long_text":"","short_text":"-"},{"line":7,"long_text":"","short_text":"-"},{"line":8,"long_text":"","short_text":"-"},{"line":9,"long_text":"","short_text":"-"},{"line":10,"long_text":"","short_text":"-"},{"line":11,"long_text":"","short_text":"-"},{"line":12,"long_text":"","short_text":"-"},{"line":13,"long_text":"","short_text":"-"},{"line":14,"long_text":"","short_text":"-"},{"line":15,"long_text":"","short_text":"1","background_color":"0x35CC4B"},{"line":16,"long_text":"","short_text":"1","background_color":"0x35CC4B"},{"line":17,"long_text":"","short_text":"-"},{"line":18,"long_text":"","short_text":"-"},{"line":19,"long_text":"","short_text":"-"},{"line":20,"long_text":"","short_text":"#####","background_color":"0xFC635E"},{"line":21,"long_text":"","short_text":"#####","background_color":"0xFC635E"},{"line":22,"long_text":"","short_text":"-"},{"line":23,"long_text":"","short_text":"-"}],"spec/fixtures/fixtures/more_files/peekaview.m":[{"line":1,"long_text":"","short_text":"-"},{"line":2,"long_text":"","short_text":"-"},{"line":3,"long_text":"","short_text":"-"},{"line":4,"long_text":"","short_text":"-"},{"line":5,"long_text":"","short_text":"-"},{"line":6,"long_text":"","short_text":"-"},{"line":7,"long_text":"","short_text":"-"},{"line":8,"long_text":"","short_text":"-"},{"line":9,"long_text":"","short_text":"-"},{"line":10,"long_text":"","short_text":"-"},{"line":11,"long_text":"","short_text":"-"},{"line":12,"long_text":"","short_text":"-"},{"line":13,"long_text":"","short_text":"#####","background_color":"0xFC635E"},{"line":14,"long_text":"","short_text":"-"},{"line":15,"long_text":"","short_text":"#####","background_color":"0xFC635E"},{"line":16,"long_text":"","short_text":"#####","background_color":"0xFC635E"},{"line":17,"long_text":"","short_text":"-"},{"line":18,"long_text":"","short_text":"#####","background_color":"0xFC635E"},{"line":19,"long_text":"","short_text":"#####","background_color":"0xFC635E"},{"line":20,"long_text":"","short_text":"#####","background_color":"0xFC635E"},{"line":21,"long_text":"","short_text":"-"},{"line":22,"long_text":"","short_text":"-"},{"line":23,"long_text":"","short_text":"-"},{"line":24,"long_text":"","short_text":"-"},{"line":25,"long_text":"","short_text":"-"},{"line":26,"long_text":"","short_text":"-"},{"line":27,"long_text":"","short_text":"-"},{"line":28,"long_text":"","short_text":"-"},{"line":29,"long_text":"","short_text":"-"},{"line":30,"long_text":"","short_text":"-"},{"line":31,"long_text":"","short_text":"-"}],"spec/fixtures/fixturesTests/fixturesTests.m":[{"line":1,"long_text":"","short_text":"-"},{"line":2,"long_text":"","short_text":"-"},{"line":3,"long_text":"","short_text":"-"},{"line":4,"long_text":"","short_text":"-"},{"line":5,"long_text":"","short_text":"-"},{"line":6,"long_text":"","short_text":"-"},{"line":7,"long_text":"","short_text":"-"},{"line":8,"long_text":"","short_text":"-"},{"line":9,"long_text":"","short_text":"-"},{"line":10,"long_text":"","short_text":"-"},{"line":11,"long_text":"","short_text":"-"},{"line":12,"long_text":"","short_text":"-"},{"line":13,"long_text":"","short_text":"-"},{"line":14,"long_text":"","short_text":"-"},{"line":15,"long_text":"","short_text":"-"},{"line":16,"long_text":"","short_text":"-"},{"line":17,"long_text":"","short_text":"-"},{"line":18,"long_text":"","short_text":"-"},{"line":19,"long_text":"","short_text":"-"},{"line":20,"long_text":"","short_text":"1","background_color":"0x35CC4B"},{"line":21,"long_text":"","short_text":"-"},{"line":22,"long_text":"","short_text":"1","background_color":"0x35CC4B"},{"line":23,"long_text":"","short_text":"-"},{"line":24,"long_text":"","short_text":"-"},{"line":25,"long_text":"","short_text":"-"},{"line":26,"long_text":"","short_text":"-"},{"line":27,"long_text":"","short_text":"1","background_color":"0x35CC4B"},{"line":28,"long_text":"","short_text":"1","background_color":"0x35CC4B"},{"line":29,"long_text":"","short_text":"-"},{"line":30,"long_text":"","short_text":"-"},{"line":31,"long_text":"","short_text":"-"},{"line":32,"long_text":"","short_text":"1","background_color":"0x35CC4B"},{"line":33,"long_text":"","short_text":"1","background_color":"0x35CC4B"},{"line":34,"long_text":"","short_text":"1","background_color":"0x35CC4B"},{"line":35,"long_text":"","short_text":"-"},{"line":36,"long_text":"","short_text":"-"}],"spec/fixtures/fixturesTests/peekaviewTests.m":[{"line":1,"long_text":"","short_text":"-"},{"line":2,"long_text":"","short_text":"-"},{"line":3,"long_text":"","short_text":"-"},{"line":4,"long_text":"","short_text":"-"},{"line":5,"long_text":"","short_text":"-"},{"line":6,"long_text":"","short_text":"-"},{"line":7,"long_text":"","short_text":"-"},{"line":8,"long_text":"","short_text":"-"},{"line":9,"long_text":"","short_text":"-"},{"line":10,"long_text":"","short_text":"-"},{"line":11,"long_text":"","short_text":"-"},{"line":12,"long_text":"","short_text":"-"},{"line":13,"long_text":"","short_text":"-"},{"line":14,"long_text":"","short_text":"-"},{"line":15,"long_text":"","short_text":"-"},{"line":16,"long_text":"","short_text":"-"},{"line":17,"long_text":"","short_text":"-"},{"line":18,"long_text":"","short_text":"-"},{"line":19,"long_text":"","short_text":"1","background_color":"0x35CC4B"},{"line":20,"long_text":"","short_text":"-"},{"line":21,"long_text":"","short_text":"1","background_color":"0x35CC4B"},{"line":22,"long_text":"","short_text":"-"},{"line":23,"long_text":"","short_text":"-"},{"line":24,"long_text":"","short_text":"-"},{"line":25,"long_text":"","short_text":"-"},{"line":26,"long_text":"","short_text":"1","background_color":"0x35CC4B"},{"line":27,"long_text":"","short_text":"1","background_color":"0x35CC4B"},{"line":28,"long_text":"","short_text":"-"},{"line":29,"long_text":"","short_text":"-"},{"line":30,"long_text":"","short_text":"-"},{"line":31,"long_text":"","short_text":"2","background_color":"0x35CC4B"},{"line":32,"long_text":"","short_text":"1","background_color":"0x35CC4B"},{"line":33,"long_text":"","short_text":"-"},{"line":34,"long_text":"","short_text":"-"}]}}
|
1
|
+
{"meta":{"timestamp":"2014-10-12 15:21:21.865519"},"symbols_by_file":{"spec/fixtures/fixtures/more_files/Branches.m":[{"line":1,"long_text":"","short_text":"-"},{"line":2,"long_text":"","short_text":"-"},{"line":3,"long_text":"","short_text":"-"},{"line":4,"long_text":"","short_text":"-"},{"line":5,"long_text":"","short_text":"-"},{"line":6,"long_text":"","short_text":"-"},{"line":7,"long_text":"","short_text":"-"},{"line":8,"long_text":"","short_text":"-"},{"line":9,"long_text":"","short_text":"-"},{"line":10,"long_text":"","short_text":"-"},{"line":11,"long_text":"","short_text":"-"},{"line":12,"long_text":"","short_text":"-"},{"line":13,"long_text":"","short_text":"2","background_color":"0x35CC4B"},{"line":14,"long_text":"","short_text":"-"},{"line":15,"long_text":"","short_text":"2","background_color":"0x35CC4B"},{"line":16,"long_text":"","short_text":"1","background_color":"0x35CC4B"},{"line":17,"long_text":"","short_text":"-"},{"line":18,"long_text":"","short_text":"1","background_color":"0x35CC4B"},{"line":19,"long_text":"","short_text":"#####","background_color":"0xFC635E"},{"line":20,"long_text":"","short_text":"#####","background_color":"0xFC635E"},{"line":21,"long_text":"","short_text":"1","background_color":"0x35CC4B"},{"line":22,"long_text":"","short_text":"1","background_color":"0x35CC4B"},{"line":23,"long_text":"","short_text":"-"},{"line":24,"long_text":"","short_text":"-"},{"line":25,"long_text":"","short_text":"2","background_color":"0x35CC4B"},{"line":26,"long_text":"","short_text":"2","background_color":"0x35CC4B"},{"line":27,"long_text":"","short_text":"2","background_color":"0x35CC4B"},{"line":28,"long_text":"","short_text":"-"},{"line":29,"long_text":"","short_text":"#####","background_color":"0xFC635E"},{"line":30,"long_text":"","short_text":"-"},{"line":31,"long_text":"","short_text":"#####","background_color":"0xFC635E"},{"line":32,"long_text":"","short_text":"#####","background_color":"0xFC635E"},{"line":33,"long_text":"","short_text":"-"},{"line":34,"long_text":"","short_text":"-"},{"line":35,"long_text":"","short_text":"#####","background_color":"0xFC635E"},{"line":36,"long_text":"","short_text":"#####","background_color":"0xFC635E"},{"line":37,"long_text":"","short_text":"-"},{"line":38,"long_text":"","short_text":"#####","background_color":"0xFC635E"},{"line":39,"long_text":"","short_text":"#####","background_color":"0xFC635E"},{"line":40,"long_text":"","short_text":"-"},{"line":41,"long_text":"","short_text":"#####","background_color":"0xFC635E"},{"line":42,"long_text":"","short_text":"-"},{"line":43,"long_text":"","short_text":"2","background_color":"0x35CC4B"},{"line":44,"long_text":"","short_text":"-"},{"line":45,"long_text":"","short_text":"-"}],"spec/fixtures/fixtures/fixtures.m":[{"line":1,"long_text":"","short_text":"-"},{"line":2,"long_text":"","short_text":"-"},{"line":3,"long_text":"","short_text":"-"},{"line":4,"long_text":"","short_text":"-"},{"line":5,"long_text":"","short_text":"-"},{"line":6,"long_text":"","short_text":"-"},{"line":7,"long_text":"","short_text":"-"},{"line":8,"long_text":"","short_text":"-"},{"line":9,"long_text":"","short_text":"-"},{"line":10,"long_text":"","short_text":"-"},{"line":11,"long_text":"","short_text":"-"},{"line":12,"long_text":"","short_text":"-"},{"line":13,"long_text":"","short_text":"-"},{"line":14,"long_text":"","short_text":"-"},{"line":15,"long_text":"","short_text":"1","background_color":"0x35CC4B"},{"line":16,"long_text":"","short_text":"1","background_color":"0x35CC4B"},{"line":17,"long_text":"","short_text":"-"},{"line":18,"long_text":"","short_text":"-"},{"line":19,"long_text":"","short_text":"-"},{"line":20,"long_text":"","short_text":"#####","background_color":"0xFC635E"},{"line":21,"long_text":"","short_text":"#####","background_color":"0xFC635E"},{"line":22,"long_text":"","short_text":"-"},{"line":23,"long_text":"","short_text":"-"}],"spec/fixtures/fixtures/more_files/peekaview.m":[{"line":1,"long_text":"","short_text":"-"},{"line":2,"long_text":"","short_text":"-"},{"line":3,"long_text":"","short_text":"-"},{"line":4,"long_text":"","short_text":"-"},{"line":5,"long_text":"","short_text":"-"},{"line":6,"long_text":"","short_text":"-"},{"line":7,"long_text":"","short_text":"-"},{"line":8,"long_text":"","short_text":"-"},{"line":9,"long_text":"","short_text":"-"},{"line":10,"long_text":"","short_text":"-"},{"line":11,"long_text":"","short_text":"-"},{"line":12,"long_text":"","short_text":"-"},{"line":13,"long_text":"","short_text":"#####","background_color":"0xFC635E"},{"line":14,"long_text":"","short_text":"-"},{"line":15,"long_text":"","short_text":"#####","background_color":"0xFC635E"},{"line":16,"long_text":"","short_text":"#####","background_color":"0xFC635E"},{"line":17,"long_text":"","short_text":"-"},{"line":18,"long_text":"","short_text":"#####","background_color":"0xFC635E"},{"line":19,"long_text":"","short_text":"#####","background_color":"0xFC635E"},{"line":20,"long_text":"","short_text":"#####","background_color":"0xFC635E"},{"line":21,"long_text":"","short_text":"-"},{"line":22,"long_text":"","short_text":"-"},{"line":23,"long_text":"","short_text":"-"},{"line":24,"long_text":"","short_text":"-"},{"line":25,"long_text":"","short_text":"-"},{"line":26,"long_text":"","short_text":"-"},{"line":27,"long_text":"","short_text":"-"},{"line":28,"long_text":"","short_text":"-"},{"line":29,"long_text":"","short_text":"-"},{"line":30,"long_text":"","short_text":"-"},{"line":31,"long_text":"","short_text":"-"}],"spec/fixtures/fixturesTests/BranchesTests.m":[{"line":1,"long_text":"","short_text":"-"},{"line":2,"long_text":"","short_text":"-"},{"line":3,"long_text":"","short_text":"-"},{"line":4,"long_text":"","short_text":"-"},{"line":5,"long_text":"","short_text":"-"},{"line":6,"long_text":"","short_text":"-"},{"line":7,"long_text":"","short_text":"-"},{"line":8,"long_text":"","short_text":"-"},{"line":9,"long_text":"","short_text":"-"},{"line":10,"long_text":"","short_text":"-"},{"line":11,"long_text":"","short_text":"-"},{"line":12,"long_text":"","short_text":"-"},{"line":13,"long_text":"","short_text":"-"},{"line":14,"long_text":"","short_text":"-"},{"line":15,"long_text":"","short_text":"-"},{"line":16,"long_text":"","short_text":"-"},{"line":17,"long_text":"","short_text":"-"},{"line":18,"long_text":"","short_text":"-"},{"line":19,"long_text":"","short_text":"2","background_color":"0x35CC4B"},{"line":20,"long_text":"","short_text":"-"},{"line":21,"long_text":"","short_text":"2","background_color":"0x35CC4B"},{"line":22,"long_text":"","short_text":"-"},{"line":23,"long_text":"","short_text":"-"},{"line":24,"long_text":"","short_text":"-"},{"line":25,"long_text":"","short_text":"2","background_color":"0x35CC4B"},{"line":26,"long_text":"","short_text":"2","background_color":"0x35CC4B"},{"line":27,"long_text":"","short_text":"-"},{"line":28,"long_text":"","short_text":"-"},{"line":29,"long_text":"","short_text":"1","background_color":"0x35CC4B"},{"line":30,"long_text":"","short_text":"1","background_color":"0x35CC4B"},{"line":31,"long_text":"","short_text":"1","background_color":"0x35CC4B"},{"line":32,"long_text":"","short_text":"-"},{"line":33,"long_text":"","short_text":"-"},{"line":34,"long_text":"","short_text":"1","background_color":"0x35CC4B"},{"line":35,"long_text":"","short_text":"1","background_color":"0x35CC4B"},{"line":36,"long_text":"","short_text":"1","background_color":"0x35CC4B"},{"line":37,"long_text":"","short_text":"-"},{"line":38,"long_text":"","short_text":"-"}],"spec/fixtures/fixturesTests/fixturesTests.m":[{"line":1,"long_text":"","short_text":"-"},{"line":2,"long_text":"","short_text":"-"},{"line":3,"long_text":"","short_text":"-"},{"line":4,"long_text":"","short_text":"-"},{"line":5,"long_text":"","short_text":"-"},{"line":6,"long_text":"","short_text":"-"},{"line":7,"long_text":"","short_text":"-"},{"line":8,"long_text":"","short_text":"-"},{"line":9,"long_text":"","short_text":"-"},{"line":10,"long_text":"","short_text":"-"},{"line":11,"long_text":"","short_text":"-"},{"line":12,"long_text":"","short_text":"-"},{"line":13,"long_text":"","short_text":"-"},{"line":14,"long_text":"","short_text":"-"},{"line":15,"long_text":"","short_text":"-"},{"line":16,"long_text":"","short_text":"-"},{"line":17,"long_text":"","short_text":"-"},{"line":18,"long_text":"","short_text":"-"},{"line":19,"long_text":"","short_text":"-"},{"line":20,"long_text":"","short_text":"1","background_color":"0x35CC4B"},{"line":21,"long_text":"","short_text":"-"},{"line":22,"long_text":"","short_text":"1","background_color":"0x35CC4B"},{"line":23,"long_text":"","short_text":"-"},{"line":24,"long_text":"","short_text":"-"},{"line":25,"long_text":"","short_text":"-"},{"line":26,"long_text":"","short_text":"-"},{"line":27,"long_text":"","short_text":"1","background_color":"0x35CC4B"},{"line":28,"long_text":"","short_text":"1","background_color":"0x35CC4B"},{"line":29,"long_text":"","short_text":"-"},{"line":30,"long_text":"","short_text":"-"},{"line":31,"long_text":"","short_text":"-"},{"line":32,"long_text":"","short_text":"1","background_color":"0x35CC4B"},{"line":33,"long_text":"","short_text":"1","background_color":"0x35CC4B"},{"line":34,"long_text":"","short_text":"1","background_color":"0x35CC4B"},{"line":35,"long_text":"","short_text":"-"},{"line":36,"long_text":"","short_text":"-"}],"spec/fixtures/fixturesTests/peekaviewTests.m":[{"line":1,"long_text":"","short_text":"-"},{"line":2,"long_text":"","short_text":"-"},{"line":3,"long_text":"","short_text":"-"},{"line":4,"long_text":"","short_text":"-"},{"line":5,"long_text":"","short_text":"-"},{"line":6,"long_text":"","short_text":"-"},{"line":7,"long_text":"","short_text":"-"},{"line":8,"long_text":"","short_text":"-"},{"line":9,"long_text":"","short_text":"-"},{"line":10,"long_text":"","short_text":"-"},{"line":11,"long_text":"","short_text":"-"},{"line":12,"long_text":"","short_text":"-"},{"line":13,"long_text":"","short_text":"-"},{"line":14,"long_text":"","short_text":"-"},{"line":15,"long_text":"","short_text":"-"},{"line":16,"long_text":"","short_text":"-"},{"line":17,"long_text":"","short_text":"-"},{"line":18,"long_text":"","short_text":"-"},{"line":19,"long_text":"","short_text":"1","background_color":"0x35CC4B"},{"line":20,"long_text":"","short_text":"-"},{"line":21,"long_text":"","short_text":"1","background_color":"0x35CC4B"},{"line":22,"long_text":"","short_text":"-"},{"line":23,"long_text":"","short_text":"-"},{"line":24,"long_text":"","short_text":"-"},{"line":25,"long_text":"","short_text":"-"},{"line":26,"long_text":"","short_text":"1","background_color":"0x35CC4B"},{"line":27,"long_text":"","short_text":"1","background_color":"0x35CC4B"},{"line":28,"long_text":"","short_text":"-"},{"line":29,"long_text":"","short_text":"-"},{"line":30,"long_text":"","short_text":"-"},{"line":31,"long_text":"","short_text":"2","background_color":"0x35CC4B"},{"line":32,"long_text":"","short_text":"1","background_color":"0x35CC4B"},{"line":33,"long_text":"","short_text":"-"},{"line":34,"long_text":"","short_text":"-"}]}}
|
@@ -77,65 +77,193 @@ describe Slather::CoverageFile do
|
|
77
77
|
OBJC
|
78
78
|
expect(coverage_file.source_data).to eq(expected)
|
79
79
|
end
|
80
|
+
end
|
81
|
+
|
82
|
+
describe "source_file_basename" do
|
83
|
+
it "returns the base name of the source file" do
|
84
|
+
expect(coverage_file.source_file_basename).to eq("fixtures")
|
85
|
+
end
|
86
|
+
end
|
80
87
|
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
end
|
88
|
+
describe "source_file_pathname_relative_to_repo_root" do
|
89
|
+
it "should return a pathname to the source_file, relative to the root of the repo" do
|
90
|
+
expect(coverage_file.source_file_pathname_relative_to_repo_root).to eq(Pathname("spec/fixtures/fixtures/fixtures.m"))
|
85
91
|
end
|
92
|
+
end
|
86
93
|
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
94
|
+
describe "#ignored" do
|
95
|
+
it "should return true if the source_file_pathname globs against anything in the project.ignore_list" do
|
96
|
+
coverage_file.project.ignore_list = ["*spec*", "*test*"]
|
97
|
+
expect(coverage_file.ignored?).to be_truthy
|
98
|
+
end
|
91
99
|
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
expect(coverage_file.coverage_for_line(" ####: 75: }")).to eq(0)
|
96
|
-
end
|
100
|
+
it "should return false if the source_file_pathname does not glob against anything in the project.ignore_list" do
|
101
|
+
coverage_file.project.ignore_list = ["*test*", "*XCTest*"]
|
102
|
+
expect(coverage_file.ignored?).to be_falsy
|
97
103
|
end
|
104
|
+
end
|
98
105
|
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
106
|
+
describe "gcov_data" do
|
107
|
+
it "should process the gcno file with gcov and return the contents of the file" do
|
108
|
+
expect(coverage_file.gcov_data.include?("1: 15: NSLog(@\"tested\");")).to be_truthy
|
109
|
+
end
|
110
|
+
end
|
104
111
|
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
112
|
+
describe "line coverage" do
|
113
|
+
|
114
|
+
let(:line_coverage_file) do
|
115
|
+
fixtures_project.send(:coverage_files).detect { |cf| cf.source_file_pathname.basename.to_s == "fixtures.m" }
|
109
116
|
end
|
110
117
|
|
111
|
-
describe "
|
112
|
-
it "should
|
113
|
-
expect(
|
118
|
+
describe "#coverage_for_line" do
|
119
|
+
it "should return nil if the line is not relevant to coverage" do
|
120
|
+
expect(line_coverage_file.coverage_for_line(" -: 75: }")).to be_nil
|
121
|
+
end
|
122
|
+
|
123
|
+
it "should return the number of times the line was executed if the line is relevant to coverage" do
|
124
|
+
expect(line_coverage_file.coverage_for_line(" 1: 75: }")).to eq(1)
|
125
|
+
expect(line_coverage_file.coverage_for_line(" 15: 75: }")).to eq(15)
|
126
|
+
expect(line_coverage_file.coverage_for_line(" ####: 75: }")).to eq(0)
|
114
127
|
end
|
115
128
|
end
|
116
129
|
|
117
130
|
describe "num_lines_tested" do
|
118
131
|
it "should return the correct number of lines tested" do
|
119
|
-
expect(
|
132
|
+
expect(line_coverage_file.num_lines_tested).to eq(2)
|
120
133
|
end
|
121
134
|
end
|
122
135
|
|
123
136
|
describe "num_lines_testable" do
|
124
137
|
it "should return the correct number of lines that are testable" do
|
125
|
-
expect(
|
138
|
+
expect(line_coverage_file.num_lines_testable).to eq(4)
|
126
139
|
end
|
127
140
|
end
|
128
141
|
|
129
142
|
describe "percentage_lines_tested" do
|
130
143
|
it "should return the correct percentage of lines that are tested" do
|
131
|
-
expect(
|
144
|
+
expect(line_coverage_file.percentage_lines_tested).to eq(50)
|
132
145
|
end
|
133
146
|
|
134
147
|
it "should return 0" do
|
135
|
-
|
136
|
-
expect(
|
148
|
+
line_coverage_file.stub(:num_lines_testable).and_return(0)
|
149
|
+
expect(line_coverage_file.percentage_lines_tested).to eq(0)
|
150
|
+
end
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
154
|
+
describe "branch coverage" do
|
155
|
+
|
156
|
+
let(:branch_coverage_file) do
|
157
|
+
fixtures_project.send(:coverage_files).detect { |cf| cf.source_file_pathname.basename.to_s == "Branches.m" }
|
158
|
+
end
|
159
|
+
|
160
|
+
describe "branch_coverage_data" do
|
161
|
+
it "should return a hash with keys representing the line number of a branch statement" do
|
162
|
+
expect(branch_coverage_file.branch_coverage_data.keys[0]).to eq(15)
|
163
|
+
expect(branch_coverage_file.branch_coverage_data.keys[1]).to eq(18)
|
164
|
+
expect(branch_coverage_file.branch_coverage_data.keys[2]).to eq(26)
|
165
|
+
expect(branch_coverage_file.branch_coverage_data.keys[3]).to eq(29)
|
166
|
+
end
|
167
|
+
|
168
|
+
it "should store an array for each line number which contains the hit count for each branch" do
|
169
|
+
data = branch_coverage_file.branch_coverage_data[15]
|
170
|
+
expect(data.length).to eq(2)
|
171
|
+
expect(data[0]).to eq(1)
|
172
|
+
expect(data[1]).to eq(1)
|
173
|
+
|
174
|
+
data = branch_coverage_file.branch_coverage_data[18]
|
175
|
+
expect(data.length).to eq(2)
|
176
|
+
expect(data[0]).to eq(0)
|
177
|
+
expect(data[1]).to eq(1)
|
178
|
+
|
179
|
+
data = branch_coverage_file.branch_coverage_data[26]
|
180
|
+
expect(data.length).to eq(2)
|
181
|
+
expect(data[0]).to eq(2)
|
182
|
+
expect(data[1]).to eq(0)
|
183
|
+
|
184
|
+
data = branch_coverage_file.branch_coverage_data[29]
|
185
|
+
expect(data.length).to eq(4)
|
186
|
+
expect(data[0]).to eq(0)
|
187
|
+
expect(data[1]).to eq(0)
|
188
|
+
expect(data[2]).to eq(0)
|
189
|
+
expect(data[3]).to eq(0)
|
190
|
+
end
|
191
|
+
end
|
192
|
+
|
193
|
+
describe "branch_coverage_data_for_statement_on_line" do
|
194
|
+
it "return the array with branch hit counts for statement at a given line number" do
|
195
|
+
data = branch_coverage_file.branch_coverage_data[15]
|
196
|
+
expect(data.length).to eq(2)
|
197
|
+
expect(data[0]).to eq(1)
|
198
|
+
expect(data[1]).to eq(1)
|
199
|
+
|
200
|
+
data = branch_coverage_file.branch_coverage_data[18]
|
201
|
+
expect(data.length).to eq(2)
|
202
|
+
expect(data[0]).to eq(0)
|
203
|
+
expect(data[1]).to eq(1)
|
204
|
+
|
205
|
+
data = branch_coverage_file.branch_coverage_data[26]
|
206
|
+
expect(data.length).to eq(2)
|
207
|
+
expect(data[0]).to eq(2)
|
208
|
+
expect(data[1]).to eq(0)
|
209
|
+
|
210
|
+
data = branch_coverage_file.branch_coverage_data[29]
|
211
|
+
expect(data.length).to eq(4)
|
212
|
+
expect(data[0]).to eq(0)
|
213
|
+
expect(data[1]).to eq(0)
|
214
|
+
expect(data[2]).to eq(0)
|
215
|
+
expect(data[3]).to eq(0)
|
216
|
+
end
|
217
|
+
end
|
218
|
+
|
219
|
+
describe "num_branch_hits_for_statement_on_line" do
|
220
|
+
it "returns the number of branches executed below the statement at a given line number" do
|
221
|
+
expect(branch_coverage_file.num_branch_hits_for_statement_on_line(15)).to eq(2)
|
222
|
+
expect(branch_coverage_file.num_branch_hits_for_statement_on_line(18)).to eq(1)
|
223
|
+
expect(branch_coverage_file.num_branch_hits_for_statement_on_line(26)).to eq(1)
|
224
|
+
expect(branch_coverage_file.num_branch_hits_for_statement_on_line(29)).to eq(0)
|
225
|
+
end
|
226
|
+
end
|
227
|
+
|
228
|
+
describe "rate_branch_coverage_for_statement_on_line" do
|
229
|
+
it "returns the ratio between number of executed and number of total branches at a given line number" do
|
230
|
+
expect(branch_coverage_file.rate_branch_coverage_for_statement_on_line(15)).to eq(1.0)
|
231
|
+
expect(branch_coverage_file.rate_branch_coverage_for_statement_on_line(18)).to eq(0.5)
|
232
|
+
expect(branch_coverage_file.rate_branch_coverage_for_statement_on_line(26)).to eq(0.5)
|
233
|
+
expect(branch_coverage_file.rate_branch_coverage_for_statement_on_line(29)).to eq(0.0)
|
234
|
+
end
|
235
|
+
|
236
|
+
it "return 0.0 for a line without branch data" do
|
237
|
+
expect(branch_coverage_file.rate_branch_coverage_for_statement_on_line(1)).to eq(0.0)
|
238
|
+
end
|
239
|
+
end
|
240
|
+
|
241
|
+
describe "percentage_branch_coverage_for_statement_on_line" do
|
242
|
+
it "returns the average hit percentage of all branches below the statement at a given line number" do
|
243
|
+
expect(branch_coverage_file.percentage_branch_coverage_for_statement_on_line(15)).to eq(100)
|
244
|
+
expect(branch_coverage_file.percentage_branch_coverage_for_statement_on_line(18)).to eq(50)
|
245
|
+
expect(branch_coverage_file.percentage_branch_coverage_for_statement_on_line(26)).to eq(50)
|
246
|
+
expect(branch_coverage_file.percentage_branch_coverage_for_statement_on_line(29)).to eq(0)
|
247
|
+
end
|
248
|
+
end
|
249
|
+
|
250
|
+
describe "num_branches_testable" do
|
251
|
+
it "returns the number of testable branches inside the class" do
|
252
|
+
expect(branch_coverage_file.num_branches_testable).to eq(10)
|
253
|
+
end
|
254
|
+
end
|
255
|
+
|
256
|
+
describe "num_branches_tested" do
|
257
|
+
it "returns the number of tested branches inside the class" do
|
258
|
+
expect(branch_coverage_file.num_branches_tested).to eq(4)
|
137
259
|
end
|
138
260
|
end
|
139
261
|
|
262
|
+
describe "rate_branches_tested" do
|
263
|
+
it "returns the ratio between tested and testable branches inside the class" do
|
264
|
+
expect(branch_coverage_file.rate_branches_tested).to eq(0.4)
|
265
|
+
end
|
266
|
+
end
|
140
267
|
end
|
268
|
+
|
141
269
|
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '..', '..', 'spec_helper')
|
2
|
+
require 'json'
|
3
|
+
|
4
|
+
describe Slather::CoverageService::CoberturaXmlOutput do
|
5
|
+
|
6
|
+
let(:fixtures_project) do
|
7
|
+
proj = Slather::Project.open(FIXTURES_PROJECT_PATH)
|
8
|
+
proj.extend(Slather::CoverageService::CoberturaXmlOutput)
|
9
|
+
end
|
10
|
+
|
11
|
+
describe '#coverage_file_class' do
|
12
|
+
it "should return CoverageFile" do
|
13
|
+
expect(fixtures_project.send(:coverage_file_class)).to eq(Slather::CoverageFile)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
describe '#post' do
|
18
|
+
it "should create an XML report spanning all coverage files" do
|
19
|
+
fixtures_project.post
|
20
|
+
|
21
|
+
file = File.open(FIXTURES_XML_PATH)
|
22
|
+
fixture_xml_doc = Nokogiri::XML(file)
|
23
|
+
file.close
|
24
|
+
|
25
|
+
file = File.open('cobertura.xml')
|
26
|
+
current_xml_doc = Nokogiri::XML(file)
|
27
|
+
file.close
|
28
|
+
current_xml_doc.root['timestamp'] = ''
|
29
|
+
current_xml_doc.root['version'] = ''
|
30
|
+
source_node = current_xml_doc.at_css "source"
|
31
|
+
source_node.content = ''
|
32
|
+
|
33
|
+
expect(current_xml_doc.to_xml).to eq(fixture_xml_doc.to_xml)
|
34
|
+
|
35
|
+
File.unlink('cobertura.xml')
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -27,7 +27,7 @@ describe Slather::CoverageService::Coveralls do
|
|
27
27
|
|
28
28
|
it "should return valid json for coveralls coverage data" do
|
29
29
|
fixtures_project.stub(:travis_job_id).and_return("9182")
|
30
|
-
expect(fixtures_project.send(:coveralls_coverage_data)).to eq("{\"service_job_id\":\"9182\",\"service_name\":\"travis-ci\",\"source_files\":[{\"name\":\"spec/fixtures/fixtures/fixtures.m\",\"source\":\"//\\n// fixtures.m\\n// fixtures\\n//\\n// Created by Mark Larsen on 6/24/14.\\n// Copyright (c) 2014 marklarr. All rights reserved.\\n//\\n\\n#import \\\"fixtures.h\\\"\\n\\n@implementation fixtures\\n\\n- (void)testedMethod\\n{\\n NSLog(@\\\"tested\\\");\\n}\\n\\n- (void)untestedMethod\\n{\\n NSLog(@\\\"untested\\\");\\n}\\n\\n@end\\n\",\"coverage\":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,1,1,null,null,null,0,0,null,null]},{\"name\":\"spec/fixtures/fixtures/more_files/peekaview.m\",\"source\":\"//\\n// peekaview.m\\n// fixtures\\n//\\n// Created by Mark Larsen on 6/25/14.\\n// Copyright (c) 2014 marklarr. All rights reserved.\\n//\\n\\n#import \\\"peekaview.h\\\"\\n\\n@implementation peekaview\\n\\n- (id)initWithFrame:(CGRect)frame\\n{\\n self = [super initWithFrame:frame];\\n if (self) {\\n // Initialization code\\n }\\n return self;\\n}\\n\\n/*\\n// Only override drawRect: if you perform custom drawing.\\n// An empty implementation adversely affects performance during animation.\\n- (void)drawRect:(CGRect)rect\\n{\\n // Drawing code\\n}\\n*/\\n\\n@end\\n\",\"coverage\":[null,null,null,null,null,null,null,null,null,null,null,null,0,null,0,0,null,0,0,0,null,null,null,null,null,null,null,null,null,null,null]},{\"name\":\"spec/fixtures/fixturesTests/fixturesTests.m\",\"source\":\"//\\n// fixturesTests.m\\n// fixturesTests\\n//\\n// Created by Mark Larsen on 6/24/14.\\n// Copyright (c) 2014 marklarr. All rights reserved.\\n//\\n\\n#import <XCTest/XCTest.h>\\n#import \\\"fixtures.h\\\"\\n\\n@interface fixturesTests : XCTestCase\\n\\n@end\\n\\n@implementation fixturesTests\\n\\n- (void)setUp\\n{\\n [super setUp];\\n // Put setup code here. This method is called before the invocation of each test method in the class.\\n}\\n\\n- (void)tearDown\\n{\\n // Put teardown code here. This method is called after the invocation of each test method in the class.\\n [super tearDown];\\n}\\n\\n- (void)testExample\\n{\\n fixtures *f = [[fixtures alloc] init];\\n [f testedMethod];\\n}\\n\\n@end\\n\",\"coverage\":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1,null,1,null,null,null,null,1,1,null,null,null,1,1,1,null,null]},{\"name\":\"spec/fixtures/fixturesTests/peekaviewTests.m\",\"source\":\"//\\n// peekaviewTests.m\\n// fixtures\\n//\\n// Created by Mark Larsen on 6/25/14.\\n// Copyright (c) 2014 marklarr. All rights reserved.\\n//\\n\\n#import <XCTest/XCTest.h>\\n\\n@interface peekaviewTests : XCTestCase\\n\\n@end\\n\\n@implementation peekaviewTests\\n\\n- (void)setUp\\n{\\n [super setUp];\\n // Put setup code here. This method is called before the invocation of each test method in the class.\\n}\\n\\n- (void)tearDown\\n{\\n // Put teardown code here. This method is called after the invocation of each test method in the class.\\n [super tearDown];\\n}\\n\\n- (void)testExample\\n{\\n XCTAssert(YES, @\\\"woot\\\");\\n}\\n\\n@end\\n\",\"coverage\":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1,null,1,null,null,null,null,1,1,null,null,null,2,1,null,null]}]}")
|
30
|
+
expect(fixtures_project.send(:coveralls_coverage_data)).to eq("{\"service_job_id\":\"9182\",\"service_name\":\"travis-ci\",\"source_files\":[{\"name\":\"spec/fixtures/fixtures/more_files/Branches.m\",\"source\":\"//\\n// Branches.m\\n// fixtures\\n//\\n// Created by Julian Krumow on 11.10.14.\\n// Copyright (c) 2014 marklarr. All rights reserved.\\n//\\n\\n#import \\\"Branches.h\\\"\\n\\n@implementation Branches\\n\\n- (void)branches:(BOOL)goIf skipBranches:(BOOL)skipBranches\\n{\\n if (goIf) {\\n NSLog(@\\\"foo.\\\");\\n \\n if (!skipBranches) {\\n NSLog(@\\\"not skipped.\\\");\\n }\\n } else {\\n NSLog(@\\\"bar.\\\");\\n }\\n \\n int i = 5;\\n if (i == 5) {\\n return;\\n }\\n switch (i) {\\n case 0:\\n NSLog(@\\\"0\\\");\\n break;\\n \\n case 1:\\n NSLog(@\\\"1\\\");\\n break;\\n case 5:\\n NSLog(@\\\"5\\\");\\n break;\\n default:\\n break;\\n }\\n}\\n\\n@end\\n\",\"coverage\":[null,null,null,null,null,null,null,null,null,null,null,null,2,null,2,1,null,1,0,0,1,1,null,null,2,2,2,null,0,null,0,0,null,null,0,0,null,0,0,null,0,null,2,null,null]},{\"name\":\"spec/fixtures/fixtures/fixtures.m\",\"source\":\"//\\n// fixtures.m\\n// fixtures\\n//\\n// Created by Mark Larsen on 6/24/14.\\n// Copyright (c) 2014 marklarr. All rights reserved.\\n//\\n\\n#import \\\"fixtures.h\\\"\\n\\n@implementation fixtures\\n\\n- (void)testedMethod\\n{\\n NSLog(@\\\"tested\\\");\\n}\\n\\n- (void)untestedMethod\\n{\\n NSLog(@\\\"untested\\\");\\n}\\n\\n@end\\n\",\"coverage\":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,1,1,null,null,null,0,0,null,null]},{\"name\":\"spec/fixtures/fixtures/more_files/peekaview.m\",\"source\":\"//\\n// peekaview.m\\n// fixtures\\n//\\n// Created by Mark Larsen on 6/25/14.\\n// Copyright (c) 2014 marklarr. All rights reserved.\\n//\\n\\n#import \\\"peekaview.h\\\"\\n\\n@implementation peekaview\\n\\n- (id)initWithFrame:(CGRect)frame\\n{\\n self = [super initWithFrame:frame];\\n if (self) {\\n // Initialization code\\n }\\n return self;\\n}\\n\\n/*\\n// Only override drawRect: if you perform custom drawing.\\n// An empty implementation adversely affects performance during animation.\\n- (void)drawRect:(CGRect)rect\\n{\\n // Drawing code\\n}\\n*/\\n\\n@end\\n\",\"coverage\":[null,null,null,null,null,null,null,null,null,null,null,null,0,null,0,0,null,0,0,0,null,null,null,null,null,null,null,null,null,null,null]},{\"name\":\"spec/fixtures/fixturesTests/BranchesTests.m\",\"source\":\"//\\n// BranchesTests.m\\n// fixtures\\n//\\n// Created by Julian Krumow on 11.10.14.\\n// Copyright (c) 2014 marklarr. All rights reserved.\\n//\\n\\n#import <XCTest/XCTest.h>\\n#import \\\"Branches.h\\\"\\n\\n@interface BranchesTests : XCTestCase\\n\\n@end\\n\\n@implementation BranchesTests\\n\\n- (void)setUp {\\n [super setUp];\\n // Put setup code here. This method is called before the invocation of each test method in the class.\\n}\\n\\n- (void)tearDown {\\n // Put teardown code here. This method is called after the invocation of each test method in the class.\\n [super tearDown];\\n}\\n\\n- (void)testBranchesNoBranches {\\n Branches *branches = [[Branches alloc] init];\\n [branches branches:NO skipBranches:NO];\\n}\\n\\n- (void)testBranchesFirstBranchAndSkip {\\n Branches *branches = [[Branches alloc] init];\\n [branches branches:YES skipBranches:YES];\\n}\\n\\n@end\\n\",\"coverage\":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,2,null,2,null,null,null,2,2,null,null,1,1,1,null,null,1,1,1,null,null]},{\"name\":\"spec/fixtures/fixturesTests/fixturesTests.m\",\"source\":\"//\\n// fixturesTests.m\\n// fixturesTests\\n//\\n// Created by Mark Larsen on 6/24/14.\\n// Copyright (c) 2014 marklarr. All rights reserved.\\n//\\n\\n#import <XCTest/XCTest.h>\\n#import \\\"fixtures.h\\\"\\n\\n@interface fixturesTests : XCTestCase\\n\\n@end\\n\\n@implementation fixturesTests\\n\\n- (void)setUp\\n{\\n [super setUp];\\n // Put setup code here. This method is called before the invocation of each test method in the class.\\n}\\n\\n- (void)tearDown\\n{\\n // Put teardown code here. This method is called after the invocation of each test method in the class.\\n [super tearDown];\\n}\\n\\n- (void)testExample\\n{\\n fixtures *f = [[fixtures alloc] init];\\n [f testedMethod];\\n}\\n\\n@end\\n\",\"coverage\":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1,null,1,null,null,null,null,1,1,null,null,null,1,1,1,null,null]},{\"name\":\"spec/fixtures/fixturesTests/peekaviewTests.m\",\"source\":\"//\\n// peekaviewTests.m\\n// fixtures\\n//\\n// Created by Mark Larsen on 6/25/14.\\n// Copyright (c) 2014 marklarr. All rights reserved.\\n//\\n\\n#import <XCTest/XCTest.h>\\n\\n@interface peekaviewTests : XCTestCase\\n\\n@end\\n\\n@implementation peekaviewTests\\n\\n- (void)setUp\\n{\\n [super setUp];\\n // Put setup code here. This method is called before the invocation of each test method in the class.\\n}\\n\\n- (void)tearDown\\n{\\n // Put teardown code here. This method is called after the invocation of each test method in the class.\\n [super tearDown];\\n}\\n\\n- (void)testExample\\n{\\n XCTAssert(YES, @\\\"woot\\\");\\n}\\n\\n@end\\n\",\"coverage\":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1,null,1,null,null,null,null,1,1,null,null,null,2,1,null,null]}]}")
|
31
31
|
end
|
32
32
|
|
33
33
|
it "should raise an error if there is no TRAVIS_JOB_ID" do
|
@@ -47,7 +47,7 @@ describe Slather::CoverageService::Coveralls do
|
|
47
47
|
fixtures_project.stub(:travis_job_id).and_return("9182")
|
48
48
|
expect(fixtures_project).to receive(:`) do |cmd|
|
49
49
|
expect(cmd).to eq("curl -s --form json_file=@coveralls_json_file https://coveralls.io/api/v1/jobs")
|
50
|
-
expect(File.open('coveralls_json_file', 'r').read).to eq("{\"service_job_id\":\"9182\",\"service_name\":\"travis-ci\",\"source_files\":[{\"name\":\"spec/fixtures/fixtures/fixtures.m\",\"source\":\"//\\n// fixtures.m\\n// fixtures\\n//\\n// Created by Mark Larsen on 6/24/14.\\n// Copyright (c) 2014 marklarr. All rights reserved.\\n//\\n\\n#import \\\"fixtures.h\\\"\\n\\n@implementation fixtures\\n\\n- (void)testedMethod\\n{\\n NSLog(@\\\"tested\\\");\\n}\\n\\n- (void)untestedMethod\\n{\\n NSLog(@\\\"untested\\\");\\n}\\n\\n@end\\n\",\"coverage\":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,1,1,null,null,null,0,0,null,null]},{\"name\":\"spec/fixtures/fixtures/more_files/peekaview.m\",\"source\":\"//\\n// peekaview.m\\n// fixtures\\n//\\n// Created by Mark Larsen on 6/25/14.\\n// Copyright (c) 2014 marklarr. All rights reserved.\\n//\\n\\n#import \\\"peekaview.h\\\"\\n\\n@implementation peekaview\\n\\n- (id)initWithFrame:(CGRect)frame\\n{\\n self = [super initWithFrame:frame];\\n if (self) {\\n // Initialization code\\n }\\n return self;\\n}\\n\\n/*\\n// Only override drawRect: if you perform custom drawing.\\n// An empty implementation adversely affects performance during animation.\\n- (void)drawRect:(CGRect)rect\\n{\\n // Drawing code\\n}\\n*/\\n\\n@end\\n\",\"coverage\":[null,null,null,null,null,null,null,null,null,null,null,null,0,null,0,0,null,0,0,0,null,null,null,null,null,null,null,null,null,null,null]},{\"name\":\"spec/fixtures/fixturesTests/fixturesTests.m\",\"source\":\"//\\n// fixturesTests.m\\n// fixturesTests\\n//\\n// Created by Mark Larsen on 6/24/14.\\n// Copyright (c) 2014 marklarr. All rights reserved.\\n//\\n\\n#import <XCTest/XCTest.h>\\n#import \\\"fixtures.h\\\"\\n\\n@interface fixturesTests : XCTestCase\\n\\n@end\\n\\n@implementation fixturesTests\\n\\n- (void)setUp\\n{\\n [super setUp];\\n // Put setup code here. This method is called before the invocation of each test method in the class.\\n}\\n\\n- (void)tearDown\\n{\\n // Put teardown code here. This method is called after the invocation of each test method in the class.\\n [super tearDown];\\n}\\n\\n- (void)testExample\\n{\\n fixtures *f = [[fixtures alloc] init];\\n [f testedMethod];\\n}\\n\\n@end\\n\",\"coverage\":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1,null,1,null,null,null,null,1,1,null,null,null,1,1,1,null,null]},{\"name\":\"spec/fixtures/fixturesTests/peekaviewTests.m\",\"source\":\"//\\n// peekaviewTests.m\\n// fixtures\\n//\\n// Created by Mark Larsen on 6/25/14.\\n// Copyright (c) 2014 marklarr. All rights reserved.\\n//\\n\\n#import <XCTest/XCTest.h>\\n\\n@interface peekaviewTests : XCTestCase\\n\\n@end\\n\\n@implementation peekaviewTests\\n\\n- (void)setUp\\n{\\n [super setUp];\\n // Put setup code here. This method is called before the invocation of each test method in the class.\\n}\\n\\n- (void)tearDown\\n{\\n // Put teardown code here. This method is called after the invocation of each test method in the class.\\n [super tearDown];\\n}\\n\\n- (void)testExample\\n{\\n XCTAssert(YES, @\\\"woot\\\");\\n}\\n\\n@end\\n\",\"coverage\":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1,null,1,null,null,null,null,1,1,null,null,null,2,1,null,null]}]}")
|
50
|
+
expect(File.open('coveralls_json_file', 'r').read).to eq("{\"service_job_id\":\"9182\",\"service_name\":\"travis-ci\",\"source_files\":[{\"name\":\"spec/fixtures/fixtures/more_files/Branches.m\",\"source\":\"//\\n// Branches.m\\n// fixtures\\n//\\n// Created by Julian Krumow on 11.10.14.\\n// Copyright (c) 2014 marklarr. All rights reserved.\\n//\\n\\n#import \\\"Branches.h\\\"\\n\\n@implementation Branches\\n\\n- (void)branches:(BOOL)goIf skipBranches:(BOOL)skipBranches\\n{\\n if (goIf) {\\n NSLog(@\\\"foo.\\\");\\n \\n if (!skipBranches) {\\n NSLog(@\\\"not skipped.\\\");\\n }\\n } else {\\n NSLog(@\\\"bar.\\\");\\n }\\n \\n int i = 5;\\n if (i == 5) {\\n return;\\n }\\n switch (i) {\\n case 0:\\n NSLog(@\\\"0\\\");\\n break;\\n \\n case 1:\\n NSLog(@\\\"1\\\");\\n break;\\n case 5:\\n NSLog(@\\\"5\\\");\\n break;\\n default:\\n break;\\n }\\n}\\n\\n@end\\n\",\"coverage\":[null,null,null,null,null,null,null,null,null,null,null,null,2,null,2,1,null,1,0,0,1,1,null,null,2,2,2,null,0,null,0,0,null,null,0,0,null,0,0,null,0,null,2,null,null]},{\"name\":\"spec/fixtures/fixtures/fixtures.m\",\"source\":\"//\\n// fixtures.m\\n// fixtures\\n//\\n// Created by Mark Larsen on 6/24/14.\\n// Copyright (c) 2014 marklarr. All rights reserved.\\n//\\n\\n#import \\\"fixtures.h\\\"\\n\\n@implementation fixtures\\n\\n- (void)testedMethod\\n{\\n NSLog(@\\\"tested\\\");\\n}\\n\\n- (void)untestedMethod\\n{\\n NSLog(@\\\"untested\\\");\\n}\\n\\n@end\\n\",\"coverage\":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,1,1,null,null,null,0,0,null,null]},{\"name\":\"spec/fixtures/fixtures/more_files/peekaview.m\",\"source\":\"//\\n// peekaview.m\\n// fixtures\\n//\\n// Created by Mark Larsen on 6/25/14.\\n// Copyright (c) 2014 marklarr. All rights reserved.\\n//\\n\\n#import \\\"peekaview.h\\\"\\n\\n@implementation peekaview\\n\\n- (id)initWithFrame:(CGRect)frame\\n{\\n self = [super initWithFrame:frame];\\n if (self) {\\n // Initialization code\\n }\\n return self;\\n}\\n\\n/*\\n// Only override drawRect: if you perform custom drawing.\\n// An empty implementation adversely affects performance during animation.\\n- (void)drawRect:(CGRect)rect\\n{\\n // Drawing code\\n}\\n*/\\n\\n@end\\n\",\"coverage\":[null,null,null,null,null,null,null,null,null,null,null,null,0,null,0,0,null,0,0,0,null,null,null,null,null,null,null,null,null,null,null]},{\"name\":\"spec/fixtures/fixturesTests/BranchesTests.m\",\"source\":\"//\\n// BranchesTests.m\\n// fixtures\\n//\\n// Created by Julian Krumow on 11.10.14.\\n// Copyright (c) 2014 marklarr. All rights reserved.\\n//\\n\\n#import <XCTest/XCTest.h>\\n#import \\\"Branches.h\\\"\\n\\n@interface BranchesTests : XCTestCase\\n\\n@end\\n\\n@implementation BranchesTests\\n\\n- (void)setUp {\\n [super setUp];\\n // Put setup code here. This method is called before the invocation of each test method in the class.\\n}\\n\\n- (void)tearDown {\\n // Put teardown code here. This method is called after the invocation of each test method in the class.\\n [super tearDown];\\n}\\n\\n- (void)testBranchesNoBranches {\\n Branches *branches = [[Branches alloc] init];\\n [branches branches:NO skipBranches:NO];\\n}\\n\\n- (void)testBranchesFirstBranchAndSkip {\\n Branches *branches = [[Branches alloc] init];\\n [branches branches:YES skipBranches:YES];\\n}\\n\\n@end\\n\",\"coverage\":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,2,null,2,null,null,null,2,2,null,null,1,1,1,null,null,1,1,1,null,null]},{\"name\":\"spec/fixtures/fixturesTests/fixturesTests.m\",\"source\":\"//\\n// fixturesTests.m\\n// fixturesTests\\n//\\n// Created by Mark Larsen on 6/24/14.\\n// Copyright (c) 2014 marklarr. All rights reserved.\\n//\\n\\n#import <XCTest/XCTest.h>\\n#import \\\"fixtures.h\\\"\\n\\n@interface fixturesTests : XCTestCase\\n\\n@end\\n\\n@implementation fixturesTests\\n\\n- (void)setUp\\n{\\n [super setUp];\\n // Put setup code here. This method is called before the invocation of each test method in the class.\\n}\\n\\n- (void)tearDown\\n{\\n // Put teardown code here. This method is called after the invocation of each test method in the class.\\n [super tearDown];\\n}\\n\\n- (void)testExample\\n{\\n fixtures *f = [[fixtures alloc] init];\\n [f testedMethod];\\n}\\n\\n@end\\n\",\"coverage\":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1,null,1,null,null,null,null,1,1,null,null,null,1,1,1,null,null]},{\"name\":\"spec/fixtures/fixturesTests/peekaviewTests.m\",\"source\":\"//\\n// peekaviewTests.m\\n// fixtures\\n//\\n// Created by Mark Larsen on 6/25/14.\\n// Copyright (c) 2014 marklarr. All rights reserved.\\n//\\n\\n#import <XCTest/XCTest.h>\\n\\n@interface peekaviewTests : XCTestCase\\n\\n@end\\n\\n@implementation peekaviewTests\\n\\n- (void)setUp\\n{\\n [super setUp];\\n // Put setup code here. This method is called before the invocation of each test method in the class.\\n}\\n\\n- (void)tearDown\\n{\\n // Put teardown code here. This method is called after the invocation of each test method in the class.\\n [super tearDown];\\n}\\n\\n- (void)testExample\\n{\\n XCTAssert(YES, @\\\"woot\\\");\\n}\\n\\n@end\\n\",\"coverage\":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1,null,1,null,null,null,null,1,1,null,null,null,2,1,null,null]}]}")
|
51
51
|
end.once
|
52
52
|
fixtures_project.post
|
53
53
|
end
|
@@ -17,9 +17,11 @@ describe Slather::CoverageService::SimpleOutput do
|
|
17
17
|
it "should print out the coverage for each file, and then total coverage" do
|
18
18
|
expect(fixtures_project).to receive(:puts).with("spec/fixtures/fixtures/fixtures.m: 2 of 4 lines (50.00%)")
|
19
19
|
expect(fixtures_project).to receive(:puts).with("spec/fixtures/fixtures/more_files/peekaview.m: 0 of 6 lines (0.00%)")
|
20
|
+
expect(fixtures_project).to receive(:puts).with("spec/fixtures/fixtures/more_files/Branches.m: 10 of 20 lines (50.00%)")
|
20
21
|
expect(fixtures_project).to receive(:puts).with("spec/fixtures/fixturesTests/fixturesTests.m: 7 of 7 lines (100.00%)")
|
21
22
|
expect(fixtures_project).to receive(:puts).with("spec/fixtures/fixturesTests/peekaviewTests.m: 6 of 6 lines (100.00%)")
|
22
|
-
expect(fixtures_project).to receive(:puts).with("
|
23
|
+
expect(fixtures_project).to receive(:puts).with("spec/fixtures/fixturesTests/BranchesTests.m: 10 of 10 lines (100.00%)")
|
24
|
+
expect(fixtures_project).to receive(:puts).with("Test Coverage: 66.04%")
|
23
25
|
fixtures_project.post
|
24
26
|
end
|
25
27
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -7,6 +7,7 @@ require 'coveralls'
|
|
7
7
|
|
8
8
|
Coveralls.wear!
|
9
9
|
|
10
|
+
FIXTURES_XML_PATH = File.join(File.dirname(__FILE__), 'fixtures/cobertura.xml')
|
10
11
|
FIXTURES_JSON_PATH = File.join(File.dirname(__FILE__), 'fixtures/gutter.json')
|
11
12
|
FIXTURES_PROJECT_PATH = File.join(File.dirname(__FILE__), 'fixtures/fixtures.xcodeproj')
|
12
13
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: slather
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mark Larsen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-10-
|
11
|
+
date: 2014-10-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -122,6 +122,20 @@ dependencies:
|
|
122
122
|
- - "~>"
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: 0.19.2
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: nokogiri
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: 1.6.3
|
132
|
+
type: :runtime
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: 1.6.3
|
125
139
|
description:
|
126
140
|
email:
|
127
141
|
- mark@venmo.com
|
@@ -142,6 +156,7 @@ files:
|
|
142
156
|
- lib/cocoapods_plugin.rb
|
143
157
|
- lib/slather.rb
|
144
158
|
- lib/slather/coverage_file.rb
|
159
|
+
- lib/slather/coverage_service/cobertura_xml_output.rb
|
145
160
|
- lib/slather/coverage_service/coveralls.rb
|
146
161
|
- lib/slather/coverage_service/gutter_json_output.rb
|
147
162
|
- lib/slather/coverage_service/simple_output.rb
|
@@ -149,14 +164,18 @@ files:
|
|
149
164
|
- lib/slather/project.rb
|
150
165
|
- lib/slather/version.rb
|
151
166
|
- slather.gemspec
|
167
|
+
- spec/fixtures/cobertura.xml
|
152
168
|
- spec/fixtures/fixtures.xcodeproj/project.pbxproj
|
153
169
|
- spec/fixtures/fixtures.xcodeproj/project.xcworkspace/contents.xcworkspacedata
|
154
170
|
- spec/fixtures/fixtures.xcodeproj/xcshareddata/xcschemes/fixtures.xcscheme
|
155
171
|
- spec/fixtures/fixtures/Supporting Files/fixtures-Prefix.pch
|
156
172
|
- spec/fixtures/fixtures/fixtures.h
|
157
173
|
- spec/fixtures/fixtures/fixtures.m
|
174
|
+
- spec/fixtures/fixtures/more_files/Branches.h
|
175
|
+
- spec/fixtures/fixtures/more_files/Branches.m
|
158
176
|
- spec/fixtures/fixtures/more_files/peekaview.h
|
159
177
|
- spec/fixtures/fixtures/more_files/peekaview.m
|
178
|
+
- spec/fixtures/fixturesTests/BranchesTests.m
|
160
179
|
- spec/fixtures/fixturesTests/Supporting Files/en.lproj/InfoPlist.strings
|
161
180
|
- spec/fixtures/fixturesTests/Supporting Files/fixturesTests-Info.plist
|
162
181
|
- spec/fixtures/fixturesTests/fixturesTests.m
|
@@ -164,6 +183,7 @@ files:
|
|
164
183
|
- spec/fixtures/gutter.json
|
165
184
|
- spec/slather/cocoapods_plugin_spec.rb
|
166
185
|
- spec/slather/coverage_file_spec.rb
|
186
|
+
- spec/slather/coverage_service/cobertura_xml_spec.rb
|
167
187
|
- spec/slather/coverage_service/coveralls_spec.rb
|
168
188
|
- spec/slather/coverage_service/gutter_json_spec.rb
|
169
189
|
- spec/slather/coverage_service/simple_output_spec.rb
|
@@ -195,14 +215,18 @@ signing_key:
|
|
195
215
|
specification_version: 4
|
196
216
|
summary: Test coverage reports for Xcode projects
|
197
217
|
test_files:
|
218
|
+
- spec/fixtures/cobertura.xml
|
198
219
|
- spec/fixtures/fixtures.xcodeproj/project.pbxproj
|
199
220
|
- spec/fixtures/fixtures.xcodeproj/project.xcworkspace/contents.xcworkspacedata
|
200
221
|
- spec/fixtures/fixtures.xcodeproj/xcshareddata/xcschemes/fixtures.xcscheme
|
201
222
|
- spec/fixtures/fixtures/Supporting Files/fixtures-Prefix.pch
|
202
223
|
- spec/fixtures/fixtures/fixtures.h
|
203
224
|
- spec/fixtures/fixtures/fixtures.m
|
225
|
+
- spec/fixtures/fixtures/more_files/Branches.h
|
226
|
+
- spec/fixtures/fixtures/more_files/Branches.m
|
204
227
|
- spec/fixtures/fixtures/more_files/peekaview.h
|
205
228
|
- spec/fixtures/fixtures/more_files/peekaview.m
|
229
|
+
- spec/fixtures/fixturesTests/BranchesTests.m
|
206
230
|
- spec/fixtures/fixturesTests/Supporting Files/en.lproj/InfoPlist.strings
|
207
231
|
- spec/fixtures/fixturesTests/Supporting Files/fixturesTests-Info.plist
|
208
232
|
- spec/fixtures/fixturesTests/fixturesTests.m
|
@@ -210,6 +234,7 @@ test_files:
|
|
210
234
|
- spec/fixtures/gutter.json
|
211
235
|
- spec/slather/cocoapods_plugin_spec.rb
|
212
236
|
- spec/slather/coverage_file_spec.rb
|
237
|
+
- spec/slather/coverage_service/cobertura_xml_spec.rb
|
213
238
|
- spec/slather/coverage_service/coveralls_spec.rb
|
214
239
|
- spec/slather/coverage_service/gutter_json_spec.rb
|
215
240
|
- spec/slather/coverage_service/simple_output_spec.rb
|