slather 2.4.8 → 2.7.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -1
  3. data/.travis.yml +4 -2
  4. data/CHANGELOG.md +100 -0
  5. data/README.md +26 -3
  6. data/assets/slather.css +2 -1
  7. data/lib/slather/command/coverage_command.rb +9 -1
  8. data/lib/slather/coverage_file.rb +14 -9
  9. data/lib/slather/coverage_service/coveralls.rb +129 -5
  10. data/lib/slather/coverage_service/html_output.rb +62 -6
  11. data/lib/slather/coverage_service/sonarqube_xml_output.rb +61 -0
  12. data/lib/slather/profdata_coverage_file.rb +42 -2
  13. data/lib/slather/project.rb +41 -7
  14. data/lib/slather/version.rb +1 -1
  15. data/lib/slather.rb +1 -0
  16. data/slather.gemspec +5 -5
  17. data/spec/fixtures/FixtureFramework/FixtureFramework.h +19 -0
  18. data/spec/fixtures/FixtureFramework/FlashExperiment.swift +7 -0
  19. data/spec/fixtures/FixtureFramework/Info.plist +24 -0
  20. data/spec/fixtures/FixtureFrameworkTests/FixtureFrameworkTests.swift +34 -0
  21. data/spec/fixtures/FixtureFrameworkTests/FlashExperimentTests.swift +9 -0
  22. data/spec/fixtures/FixtureFrameworkTests/Info.plist +22 -0
  23. data/spec/fixtures/cobertura.xml +157 -37
  24. data/spec/fixtures/fixtures.xcodeproj/project.pbxproj +222 -0
  25. data/spec/fixtures/fixtures.xcodeproj/xcshareddata/xcschemes/fixtures.xcscheme +21 -5
  26. data/spec/fixtures/fixtures.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  27. data/spec/fixtures/sonarqube-generic-coverage.xml +93 -0
  28. data/spec/slather/coverage_service/cobertura_xml_spec.rb +1 -1
  29. data/spec/slather/coverage_service/coveralls_spec.rb +20 -0
  30. data/spec/slather/coverage_service/html_output_spec.rb +2 -2
  31. data/spec/slather/coverage_service/json_spec.rb +1 -1
  32. data/spec/slather/coverage_service/llvm_cov_spec.rb +1 -1
  33. data/spec/slather/coverage_service/sonarqube_xml_spec.rb +46 -0
  34. data/spec/slather/profdata_coverage_spec.rb +16 -0
  35. data/spec/slather/project_spec.rb +12 -8
  36. data/spec/spec_helper.rb +1 -0
  37. metadata +38 -25
@@ -35,6 +35,8 @@
35
35
  8C9A2046195965F10013B6B3 /* libfixtures.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 8C9A202D195965F10013B6B3 /* libfixtures.a */; };
36
36
  8C9A204C195965F10013B6B3 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 8C9A204A195965F10013B6B3 /* InfoPlist.strings */; };
37
37
  8C9A204E195965F10013B6B3 /* fixturesTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C9A204D195965F10013B6B3 /* fixturesTests.m */; };
38
+ B1E6981225F96B680086A3E2 /* FixtureFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = B1E6980425F96B670086A3E2 /* FixtureFramework.h */; settings = {ATTRIBUTES = (Public, ); }; };
39
+ B1E6982025F96B930086A3E2 /* FlashExperiment.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1E6981F25F96B930086A3E2 /* FlashExperiment.swift */; };
38
40
  /* End PBXBuildFile section */
39
41
 
40
42
  /* Begin PBXContainerItemProxy section */
@@ -52,6 +54,20 @@
52
54
  remoteGlobalIDString = 8C9A202C195965F10013B6B3;
53
55
  remoteInfo = fixtures;
54
56
  };
57
+ B1E6982F25F96F490086A3E2 /* PBXContainerItemProxy */ = {
58
+ isa = PBXContainerItemProxy;
59
+ containerPortal = 8C9A2025195965F00013B6B3 /* Project object */;
60
+ proxyType = 1;
61
+ remoteGlobalIDString = B1E6980125F96B670086A3E2;
62
+ remoteInfo = FixtureFramework;
63
+ };
64
+ B1E6983725F970320086A3E2 /* PBXContainerItemProxy */ = {
65
+ isa = PBXContainerItemProxy;
66
+ containerPortal = 8C9A2025195965F00013B6B3 /* Project object */;
67
+ proxyType = 1;
68
+ remoteGlobalIDString = B1E6980125F96B670086A3E2;
69
+ remoteInfo = FixtureFramework;
70
+ };
55
71
  /* End PBXContainerItemProxy section */
56
72
 
57
73
  /* Begin PBXFileReference section */
@@ -86,6 +102,13 @@
86
102
  8C9A2049195965F10013B6B3 /* fixturesTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "fixturesTests-Info.plist"; sourceTree = "<group>"; };
87
103
  8C9A204B195965F10013B6B3 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
88
104
  8C9A204D195965F10013B6B3 /* fixturesTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = fixturesTests.m; sourceTree = "<group>"; };
105
+ B1E6980225F96B670086A3E2 /* FixtureFramework.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FixtureFramework.framework; sourceTree = BUILT_PRODUCTS_DIR; };
106
+ B1E6980425F96B670086A3E2 /* FixtureFramework.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FixtureFramework.h; sourceTree = "<group>"; };
107
+ B1E6980525F96B670086A3E2 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
108
+ B1E6980F25F96B680086A3E2 /* FixtureFrameworkTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FixtureFrameworkTests.swift; sourceTree = "<group>"; };
109
+ B1E6981125F96B680086A3E2 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
110
+ B1E6981F25F96B930086A3E2 /* FlashExperiment.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FlashExperiment.swift; sourceTree = "<group>"; };
111
+ B1E6982725F96BD30086A3E2 /* FlashExperimentTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FlashExperimentTests.swift; sourceTree = "<group>"; };
89
112
  /* End PBXFileReference section */
90
113
 
91
114
  /* Begin PBXFrameworksBuildPhase section */
@@ -124,6 +147,13 @@
124
147
  );
125
148
  runOnlyForDeploymentPostprocessing = 0;
126
149
  };
150
+ B1E697FF25F96B670086A3E2 /* Frameworks */ = {
151
+ isa = PBXFrameworksBuildPhase;
152
+ buildActionMask = 2147483647;
153
+ files = (
154
+ );
155
+ runOnlyForDeploymentPostprocessing = 0;
156
+ };
127
157
  /* End PBXFrameworksBuildPhase section */
128
158
 
129
159
  /* Begin PBXGroup section */
@@ -155,6 +185,8 @@
155
185
  8C9A2036195965F10013B6B3 /* fixtures */,
156
186
  3773307A1CC42A58005EAF65 /* fixturesTwo */,
157
187
  8C9A2047195965F10013B6B3 /* fixturesTests */,
188
+ B1E6980325F96B670086A3E2 /* FixtureFramework */,
189
+ B1E6980E25F96B670086A3E2 /* FixtureFrameworkTests */,
158
190
  8C9A202F195965F10013B6B3 /* Frameworks */,
159
191
  8C9A202E195965F10013B6B3 /* Products */,
160
192
  );
@@ -167,6 +199,7 @@
167
199
  8C9A2040195965F10013B6B3 /* fixturesTests.xctest */,
168
200
  377330791CC42A58005EAF65 /* libfixturesTwo.dylib */,
169
201
  85AE690C1E45F0F900DA2D47 /* fixturesTestsSecond.xctest */,
202
+ B1E6980225F96B670086A3E2 /* FixtureFramework.framework */,
170
203
  );
171
204
  name = Products;
172
205
  sourceTree = "<group>";
@@ -236,6 +269,26 @@
236
269
  path = "Supporting Files";
237
270
  sourceTree = "<group>";
238
271
  };
272
+ B1E6980325F96B670086A3E2 /* FixtureFramework */ = {
273
+ isa = PBXGroup;
274
+ children = (
275
+ B1E6980425F96B670086A3E2 /* FixtureFramework.h */,
276
+ B1E6980525F96B670086A3E2 /* Info.plist */,
277
+ B1E6981F25F96B930086A3E2 /* FlashExperiment.swift */,
278
+ );
279
+ path = FixtureFramework;
280
+ sourceTree = "<group>";
281
+ };
282
+ B1E6980E25F96B670086A3E2 /* FixtureFrameworkTests */ = {
283
+ isa = PBXGroup;
284
+ children = (
285
+ B1E6980F25F96B680086A3E2 /* FixtureFrameworkTests.swift */,
286
+ B1E6981125F96B680086A3E2 /* Info.plist */,
287
+ B1E6982725F96BD30086A3E2 /* FlashExperimentTests.swift */,
288
+ );
289
+ path = FixtureFrameworkTests;
290
+ sourceTree = "<group>";
291
+ };
239
292
  /* End PBXGroup section */
240
293
 
241
294
  /* Begin PBXHeadersBuildPhase section */
@@ -260,6 +313,14 @@
260
313
  );
261
314
  runOnlyForDeploymentPostprocessing = 0;
262
315
  };
316
+ B1E697FD25F96B670086A3E2 /* Headers */ = {
317
+ isa = PBXHeadersBuildPhase;
318
+ buildActionMask = 2147483647;
319
+ files = (
320
+ B1E6981225F96B680086A3E2 /* FixtureFramework.h in Headers */,
321
+ );
322
+ runOnlyForDeploymentPostprocessing = 0;
323
+ };
263
324
  /* End PBXHeadersBuildPhase section */
264
325
 
265
326
  /* Begin PBXNativeTarget section */
@@ -309,6 +370,7 @@
309
370
  buildRules = (
310
371
  );
311
372
  dependencies = (
373
+ B1E6983025F96F490086A3E2 /* PBXTargetDependency */,
312
374
  );
313
375
  name = fixtures;
314
376
  productName = fixtures;
@@ -326,6 +388,7 @@
326
388
  buildRules = (
327
389
  );
328
390
  dependencies = (
391
+ B1E6983825F970320086A3E2 /* PBXTargetDependency */,
329
392
  8C9A2045195965F10013B6B3 /* PBXTargetDependency */,
330
393
  );
331
394
  name = fixturesTests;
@@ -333,18 +396,42 @@
333
396
  productReference = 8C9A2040195965F10013B6B3 /* fixturesTests.xctest */;
334
397
  productType = "com.apple.product-type.bundle.unit-test";
335
398
  };
399
+ B1E6980125F96B670086A3E2 /* FixtureFramework */ = {
400
+ isa = PBXNativeTarget;
401
+ buildConfigurationList = B1E6981725F96B680086A3E2 /* Build configuration list for PBXNativeTarget "FixtureFramework" */;
402
+ buildPhases = (
403
+ B1E697FD25F96B670086A3E2 /* Headers */,
404
+ B1E697FE25F96B670086A3E2 /* Sources */,
405
+ B1E697FF25F96B670086A3E2 /* Frameworks */,
406
+ B1E6980025F96B670086A3E2 /* Resources */,
407
+ );
408
+ buildRules = (
409
+ );
410
+ dependencies = (
411
+ );
412
+ name = FixtureFramework;
413
+ productName = FixtureFramework;
414
+ productReference = B1E6980225F96B670086A3E2 /* FixtureFramework.framework */;
415
+ productType = "com.apple.product-type.framework";
416
+ };
336
417
  /* End PBXNativeTarget section */
337
418
 
338
419
  /* Begin PBXProject section */
339
420
  8C9A2025195965F00013B6B3 /* Project object */ = {
340
421
  isa = PBXProject;
341
422
  attributes = {
423
+ LastSwiftUpdateCheck = 1240;
342
424
  LastUpgradeCheck = 0510;
343
425
  ORGANIZATIONNAME = marklarr;
344
426
  TargetAttributes = {
345
427
  377330781CC42A58005EAF65 = {
346
428
  CreatedOnToolsVersion = 7.3;
347
429
  };
430
+ B1E6980125F96B670086A3E2 = {
431
+ CreatedOnToolsVersion = 12.4;
432
+ LastSwiftMigration = 1240;
433
+ ProvisioningStyle = Automatic;
434
+ };
348
435
  };
349
436
  };
350
437
  buildConfigurationList = 8C9A2028195965F00013B6B3 /* Build configuration list for PBXProject "fixtures" */;
@@ -352,6 +439,7 @@
352
439
  developmentRegion = English;
353
440
  hasScannedForEncodings = 0;
354
441
  knownRegions = (
442
+ English,
355
443
  en,
356
444
  );
357
445
  mainGroup = 8C9A2024195965F00013B6B3;
@@ -363,6 +451,7 @@
363
451
  377330781CC42A58005EAF65 /* fixturesTwo */,
364
452
  8C9A203F195965F10013B6B3 /* fixturesTests */,
365
453
  85AE68FC1E45F0F900DA2D47 /* fixturesTestsSecond */,
454
+ B1E6980125F96B670086A3E2 /* FixtureFramework */,
366
455
  );
367
456
  };
368
457
  /* End PBXProject section */
@@ -384,6 +473,13 @@
384
473
  );
385
474
  runOnlyForDeploymentPostprocessing = 0;
386
475
  };
476
+ B1E6980025F96B670086A3E2 /* Resources */ = {
477
+ isa = PBXResourcesBuildPhase;
478
+ buildActionMask = 2147483647;
479
+ files = (
480
+ );
481
+ runOnlyForDeploymentPostprocessing = 0;
482
+ };
387
483
  /* End PBXResourcesBuildPhase section */
388
484
 
389
485
  /* Begin PBXSourcesBuildPhase section */
@@ -427,6 +523,14 @@
427
523
  );
428
524
  runOnlyForDeploymentPostprocessing = 0;
429
525
  };
526
+ B1E697FE25F96B670086A3E2 /* Sources */ = {
527
+ isa = PBXSourcesBuildPhase;
528
+ buildActionMask = 2147483647;
529
+ files = (
530
+ B1E6982025F96B930086A3E2 /* FlashExperiment.swift in Sources */,
531
+ );
532
+ runOnlyForDeploymentPostprocessing = 0;
533
+ };
430
534
  /* End PBXSourcesBuildPhase section */
431
535
 
432
536
  /* Begin PBXTargetDependency section */
@@ -440,6 +544,16 @@
440
544
  target = 8C9A202C195965F10013B6B3 /* fixtures */;
441
545
  targetProxy = 8C9A2044195965F10013B6B3 /* PBXContainerItemProxy */;
442
546
  };
547
+ B1E6983025F96F490086A3E2 /* PBXTargetDependency */ = {
548
+ isa = PBXTargetDependency;
549
+ target = B1E6980125F96B670086A3E2 /* FixtureFramework */;
550
+ targetProxy = B1E6982F25F96F490086A3E2 /* PBXContainerItemProxy */;
551
+ };
552
+ B1E6983825F970320086A3E2 /* PBXTargetDependency */ = {
553
+ isa = PBXTargetDependency;
554
+ target = B1E6980125F96B670086A3E2 /* FixtureFramework */;
555
+ targetProxy = B1E6983725F970320086A3E2 /* PBXContainerItemProxy */;
556
+ };
443
557
  /* End PBXTargetDependency section */
444
558
 
445
559
  /* Begin PBXVariantGroup section */
@@ -653,6 +767,105 @@
653
767
  };
654
768
  name = Release;
655
769
  };
770
+ B1E6981325F96B680086A3E2 /* Debug */ = {
771
+ isa = XCBuildConfiguration;
772
+ buildSettings = {
773
+ CLANG_ANALYZER_NONNULL = YES;
774
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
775
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
776
+ CLANG_ENABLE_MODULES = YES;
777
+ CLANG_ENABLE_OBJC_WEAK = YES;
778
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
779
+ CLANG_WARN_COMMA = YES;
780
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
781
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
782
+ CLANG_WARN_INFINITE_RECURSION = YES;
783
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
784
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
785
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
786
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
787
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
788
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
789
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
790
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
791
+ CLANG_WARN_UNREACHABLE_CODE = YES;
792
+ CODE_SIGN_STYLE = Automatic;
793
+ COMBINE_HIDPI_IMAGES = YES;
794
+ CURRENT_PROJECT_VERSION = 1;
795
+ DEFINES_MODULE = YES;
796
+ DYLIB_COMPATIBILITY_VERSION = 1;
797
+ DYLIB_CURRENT_VERSION = 1;
798
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
799
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
800
+ ENABLE_TESTABILITY = YES;
801
+ GCC_C_LANGUAGE_STANDARD = gnu11;
802
+ GCC_NO_COMMON_BLOCKS = YES;
803
+ INFOPLIST_FILE = FixtureFramework/Info.plist;
804
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
805
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks";
806
+ MACOSX_DEPLOYMENT_TARGET = 11.1;
807
+ MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
808
+ MTL_FAST_MATH = YES;
809
+ PRODUCT_BUNDLE_IDENTIFIER = com.onato.FixtureFramework;
810
+ PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
811
+ SKIP_INSTALL = YES;
812
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
813
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
814
+ SWIFT_VERSION = 5.0;
815
+ VERSIONING_SYSTEM = "apple-generic";
816
+ VERSION_INFO_PREFIX = "";
817
+ };
818
+ name = Debug;
819
+ };
820
+ B1E6981425F96B680086A3E2 /* Release */ = {
821
+ isa = XCBuildConfiguration;
822
+ buildSettings = {
823
+ CLANG_ANALYZER_NONNULL = YES;
824
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
825
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
826
+ CLANG_ENABLE_MODULES = YES;
827
+ CLANG_ENABLE_OBJC_WEAK = YES;
828
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
829
+ CLANG_WARN_COMMA = YES;
830
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
831
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
832
+ CLANG_WARN_INFINITE_RECURSION = YES;
833
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
834
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
835
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
836
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
837
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
838
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
839
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
840
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
841
+ CLANG_WARN_UNREACHABLE_CODE = YES;
842
+ CODE_SIGN_STYLE = Automatic;
843
+ COMBINE_HIDPI_IMAGES = YES;
844
+ COPY_PHASE_STRIP = NO;
845
+ CURRENT_PROJECT_VERSION = 1;
846
+ DEFINES_MODULE = YES;
847
+ DYLIB_COMPATIBILITY_VERSION = 1;
848
+ DYLIB_CURRENT_VERSION = 1;
849
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
850
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
851
+ GCC_C_LANGUAGE_STANDARD = gnu11;
852
+ GCC_NO_COMMON_BLOCKS = YES;
853
+ INFOPLIST_FILE = FixtureFramework/Info.plist;
854
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
855
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks";
856
+ MACOSX_DEPLOYMENT_TARGET = 11.1;
857
+ MTL_ENABLE_DEBUG_INFO = NO;
858
+ MTL_FAST_MATH = YES;
859
+ PRODUCT_BUNDLE_IDENTIFIER = com.onato.FixtureFramework;
860
+ PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
861
+ SKIP_INSTALL = YES;
862
+ SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
863
+ SWIFT_VERSION = 5.0;
864
+ VERSIONING_SYSTEM = "apple-generic";
865
+ VERSION_INFO_PREFIX = "";
866
+ };
867
+ name = Release;
868
+ };
656
869
  /* End XCBuildConfiguration section */
657
870
 
658
871
  /* Begin XCConfigurationList section */
@@ -701,6 +914,15 @@
701
914
  defaultConfigurationIsVisible = 0;
702
915
  defaultConfigurationName = Release;
703
916
  };
917
+ B1E6981725F96B680086A3E2 /* Build configuration list for PBXNativeTarget "FixtureFramework" */ = {
918
+ isa = XCConfigurationList;
919
+ buildConfigurations = (
920
+ B1E6981325F96B680086A3E2 /* Debug */,
921
+ B1E6981425F96B680086A3E2 /* Release */,
922
+ );
923
+ defaultConfigurationIsVisible = 0;
924
+ defaultConfigurationName = Release;
925
+ };
704
926
  /* End XCConfigurationList section */
705
927
  };
706
928
  rootObject = 8C9A2025195965F00013B6B3 /* Project object */;
@@ -26,7 +26,18 @@
26
26
  buildConfiguration = "Debug"
27
27
  selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
28
28
  selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
29
- shouldUseLaunchSchemeArgsEnv = "YES">
29
+ shouldUseLaunchSchemeArgsEnv = "YES"
30
+ codeCoverageEnabled = "YES"
31
+ onlyGenerateCoverageForSpecifiedTargets = "YES">
32
+ <CodeCoverageTargets>
33
+ <BuildableReference
34
+ BuildableIdentifier = "primary"
35
+ BlueprintIdentifier = "B1E6980125F96B670086A3E2"
36
+ BuildableName = "FixtureFramework.framework"
37
+ BlueprintName = "FixtureFramework"
38
+ ReferencedContainer = "container:fixtures.xcodeproj">
39
+ </BuildableReference>
40
+ </CodeCoverageTargets>
30
41
  <Testables>
31
42
  <TestableReference
32
43
  skipped = "NO">
@@ -39,8 +50,6 @@
39
50
  </BuildableReference>
40
51
  </TestableReference>
41
52
  </Testables>
42
- <AdditionalOptions>
43
- </AdditionalOptions>
44
53
  </TestAction>
45
54
  <LaunchAction
46
55
  buildConfiguration = "Debug"
@@ -61,8 +70,6 @@
61
70
  ReferencedContainer = "container:fixtures.xcodeproj">
62
71
  </BuildableReference>
63
72
  </MacroExpansion>
64
- <AdditionalOptions>
65
- </AdditionalOptions>
66
73
  </LaunchAction>
67
74
  <ProfileAction
68
75
  buildConfiguration = "Release"
@@ -70,6 +77,15 @@
70
77
  savedToolIdentifier = ""
71
78
  useCustomWorkingDirectory = "NO"
72
79
  debugDocumentVersioning = "YES">
80
+ <MacroExpansion>
81
+ <BuildableReference
82
+ BuildableIdentifier = "primary"
83
+ BlueprintIdentifier = "8C9A202C195965F10013B6B3"
84
+ BuildableName = "libfixtures.a"
85
+ BlueprintName = "fixtures"
86
+ ReferencedContainer = "container:fixtures.xcodeproj">
87
+ </BuildableReference>
88
+ </MacroExpansion>
73
89
  </ProfileAction>
74
90
  <AnalyzeAction
75
91
  buildConfiguration = "Debug">
@@ -0,0 +1,8 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+ <plist version="1.0">
4
+ <dict>
5
+ <key>IDEDidComputeMac32BitWarning</key>
6
+ <true/>
7
+ </dict>
8
+ </plist>
@@ -0,0 +1,93 @@
1
+ <?xml version="1.0"?>
2
+ <coverage version="1">
3
+ <file path="spec/fixtures/fixtures/fixtures.m">
4
+ <lineToCover lineNumber="14" covered="true"/>
5
+ <lineToCover lineNumber="15" covered="true"/>
6
+ <lineToCover lineNumber="16" covered="true"/>
7
+ <lineToCover lineNumber="19" covered="false"/>
8
+ <lineToCover lineNumber="20" covered="false"/>
9
+ <lineToCover lineNumber="21" covered="false"/>
10
+ </file>
11
+ <file path="spec/fixtures/fixtures/more_files/Branches.m">
12
+ <lineToCover lineNumber="14" covered="true"/>
13
+ <lineToCover lineNumber="15" covered="true"/>
14
+ <lineToCover lineNumber="16" covered="true"/>
15
+ <lineToCover lineNumber="17" covered="true"/>
16
+ <lineToCover lineNumber="18" covered="true"/>
17
+ <lineToCover lineNumber="19" covered="false"/>
18
+ <lineToCover lineNumber="20" covered="false"/>
19
+ <lineToCover lineNumber="21" covered="true"/>
20
+ <lineToCover lineNumber="22" covered="true"/>
21
+ <lineToCover lineNumber="23" covered="true"/>
22
+ <lineToCover lineNumber="24" covered="true"/>
23
+ <lineToCover lineNumber="25" covered="true"/>
24
+ <lineToCover lineNumber="26" covered="true"/>
25
+ <lineToCover lineNumber="27" covered="true"/>
26
+ <lineToCover lineNumber="28" covered="true"/>
27
+ <lineToCover lineNumber="29" covered="false"/>
28
+ <lineToCover lineNumber="30" covered="false"/>
29
+ <lineToCover lineNumber="31" covered="false"/>
30
+ <lineToCover lineNumber="32" covered="false"/>
31
+ <lineToCover lineNumber="33" covered="false"/>
32
+ <lineToCover lineNumber="34" covered="false"/>
33
+ <lineToCover lineNumber="35" covered="false"/>
34
+ <lineToCover lineNumber="36" covered="false"/>
35
+ <lineToCover lineNumber="37" covered="false"/>
36
+ <lineToCover lineNumber="38" covered="false"/>
37
+ <lineToCover lineNumber="39" covered="false"/>
38
+ <lineToCover lineNumber="40" covered="false"/>
39
+ <lineToCover lineNumber="41" covered="false"/>
40
+ <lineToCover lineNumber="42" covered="false"/>
41
+ <lineToCover lineNumber="43" covered="false"/>
42
+ </file>
43
+ <file path="spec/fixtures/fixturesTests/BranchesTests.m">
44
+ <lineToCover lineNumber="18" covered="true"/>
45
+ <lineToCover lineNumber="19" covered="true"/>
46
+ <lineToCover lineNumber="20" covered="true"/>
47
+ <lineToCover lineNumber="21" covered="true"/>
48
+ <lineToCover lineNumber="23" covered="true"/>
49
+ <lineToCover lineNumber="24" covered="true"/>
50
+ <lineToCover lineNumber="25" covered="true"/>
51
+ <lineToCover lineNumber="26" covered="true"/>
52
+ <lineToCover lineNumber="28" covered="true"/>
53
+ <lineToCover lineNumber="29" covered="true"/>
54
+ <lineToCover lineNumber="30" covered="true"/>
55
+ <lineToCover lineNumber="31" covered="true"/>
56
+ <lineToCover lineNumber="33" covered="true"/>
57
+ <lineToCover lineNumber="34" covered="true"/>
58
+ <lineToCover lineNumber="35" covered="true"/>
59
+ <lineToCover lineNumber="36" covered="true"/>
60
+ </file>
61
+ <file path="spec/fixtures/fixturesTests/fixturesTests.m">
62
+ <lineToCover lineNumber="20" covered="true"/>
63
+ <lineToCover lineNumber="21" covered="true"/>
64
+ <lineToCover lineNumber="22" covered="true"/>
65
+ <lineToCover lineNumber="23" covered="true"/>
66
+ <lineToCover lineNumber="26" covered="true"/>
67
+ <lineToCover lineNumber="27" covered="true"/>
68
+ <lineToCover lineNumber="28" covered="true"/>
69
+ <lineToCover lineNumber="29" covered="true"/>
70
+ <lineToCover lineNumber="32" covered="true"/>
71
+ <lineToCover lineNumber="33" covered="true"/>
72
+ <lineToCover lineNumber="34" covered="true"/>
73
+ <lineToCover lineNumber="35" covered="true"/>
74
+ <lineToCover lineNumber="38" covered="true"/>
75
+ <lineToCover lineNumber="39" covered="true"/>
76
+ <lineToCover lineNumber="40" covered="true"/>
77
+ <lineToCover lineNumber="41" covered="true"/>
78
+ <lineToCover lineNumber="42" covered="true"/>
79
+ </file>
80
+ <file path="spec/fixtures/fixturesTests/peekaviewTests&#x1F4A3;.m">
81
+ <lineToCover lineNumber="18" covered="true"/>
82
+ <lineToCover lineNumber="19" covered="true"/>
83
+ <lineToCover lineNumber="20" covered="true"/>
84
+ <lineToCover lineNumber="21" covered="true"/>
85
+ <lineToCover lineNumber="24" covered="true"/>
86
+ <lineToCover lineNumber="25" covered="true"/>
87
+ <lineToCover lineNumber="26" covered="true"/>
88
+ <lineToCover lineNumber="27" covered="true"/>
89
+ <lineToCover lineNumber="30" covered="true"/>
90
+ <lineToCover lineNumber="31" covered="true"/>
91
+ <lineToCover lineNumber="32" covered="true"/>
92
+ </file>
93
+ </coverage>
@@ -45,7 +45,7 @@ describe Slather::CoverageService::CoberturaXmlOutput do
45
45
  fixtures_project.post
46
46
 
47
47
  filepath = "#{fixtures_project.output_directory}/cobertura.xml"
48
- expect(File.exists?(filepath)).to be_truthy
48
+ expect(File.exist?(filepath)).to be_truthy
49
49
 
50
50
  FileUtils.rm_rf(fixtures_project.output_directory)
51
51
  end
@@ -151,6 +151,26 @@ describe Slather::CoverageService::Coveralls do
151
151
  ENV['GIT_BRANCH'] = git_branch
152
152
  end
153
153
  end
154
+
155
+ context "coverage_service is :github" do
156
+ before(:each) { fixtures_project.ci_service = :github }
157
+
158
+ it "should return valid json for coveralls coverage data" do
159
+ allow(fixtures_project).to receive(:github_job_id).and_return("9182")
160
+ allow(fixtures_project).to receive(:coverage_access_token).and_return("abc123")
161
+ allow(fixtures_project).to receive(:github_pull_request).and_return("1")
162
+ allow(fixtures_project).to receive(:github_build_url).and_return("https://github.com/Bruce/Wayne/actions/runs/1")
163
+ allow(fixtures_project).to receive(:github_git_info).and_return({ :head => { :id => "ababa123", :author_name => "bwayne", :message => "hello" }, :branch => "master" })
164
+ expect(fixtures_project.send(:coveralls_coverage_data)).to be_json_eql("{\"service_job_id\":\"9182\",\"service_name\":\"github\",\"repo_name\":\"\",\"repo_token\":\"abc123\",\"service_pull_request\":\"1\",\"service_build_url\":\"https://github.com/Bruce/Wayne/actions/runs/1\",\"git\":{\"head\":{\"id\":\"ababa123\",\"author_name\":\"bwayne\",\"message\":\"hello\"},\"branch\":\"master\"}}").excluding("source_files")
165
+ expect(fixtures_project.send(:coveralls_coverage_data)).to be_json_eql(fixtures_project.coverage_files.map(&:as_json).to_json).at_path("source_files")
166
+ end
167
+
168
+ it "should raise an error if there is no GITHUB_RUN_ID" do
169
+ allow(fixtures_project).to receive(:github_job_id).and_return(nil)
170
+ expect { fixtures_project.send(:coveralls_coverage_data) }.to raise_error(StandardError)
171
+ end
172
+ end
173
+
154
174
  end
155
175
 
156
176
  describe '#coveralls_coverage_data' do
@@ -185,8 +185,8 @@ describe Slather::CoverageService::HtmlOutput do
185
185
  end
186
186
 
187
187
  allow(fixtures_project).to receive(:input_format).and_return("profdata")
188
- allow(fixtures_project).to receive(:profdata_llvm_cov_output).and_return("./spec/fixtures/fixtures/other_fixtures.m:
189
- 1| |//
188
+ allow(fixtures_project).to receive(:pathnames_per_binary).and_return([{"filename" => Pathname.new("./spec/fixtures/fixtures/other_fixtures.m"), "segments" => []}])
189
+ allow(fixtures_project).to receive(:profdata_llvm_cov_output).and_return("1| |//
190
190
  2| |// other_fixtures.m
191
191
  3| |// fixtures
192
192
  4| |//
@@ -35,7 +35,7 @@ describe Slather::CoverageService::JsonOutput do
35
35
  fixtures_project.post
36
36
 
37
37
  filepath = "#{fixtures_project.output_directory}/report.json"
38
- expect(File.exists?(filepath)).to be_truthy
38
+ expect(File.exist?(filepath)).to be_truthy
39
39
 
40
40
  FileUtils.rm_rf(fixtures_project.output_directory)
41
41
  end
@@ -38,7 +38,7 @@ describe Slather::CoverageService::LlvmCovOutput do
38
38
  fixtures_project.post
39
39
 
40
40
  filepath = "#{fixtures_project.output_directory}/report.llcov"
41
- expect(File.exists?(filepath)).to be_truthy
41
+ expect(File.exist?(filepath)).to be_truthy
42
42
 
43
43
  FileUtils.rm_rf(fixtures_project.output_directory)
44
44
  end
@@ -0,0 +1,46 @@
1
+ require File.join(File.dirname(__FILE__), '..', '..', 'spec_helper')
2
+ require 'json'
3
+
4
+ describe Slather::CoverageService::SonarqubeXmlOutput do
5
+
6
+ let(:fixtures_project) do
7
+ proj = Slather::Project.open(FIXTURES_PROJECT_PATH)
8
+ proj.build_directory = TEMP_DERIVED_DATA_PATH
9
+ proj.input_format = "profdata"
10
+ proj.coverage_service = "sonarqube_xml"
11
+ proj.configure
12
+ proj
13
+ end
14
+
15
+ describe '#coverage_file_class' do
16
+ it "should return CoverageFile" do
17
+ expect(fixtures_project.send(:coverage_file_class)).to eq(Slather::ProfdataCoverageFile)
18
+ end
19
+ end
20
+
21
+ describe '#post' do
22
+ it "should create an XML report spanning all coverage files" do
23
+ fixtures_project.post
24
+
25
+ file = File.open(FIXTURES_SONARQUBE_XML_PATH)
26
+ fixture_xml_doc = Nokogiri::XML(file)
27
+ file.close
28
+
29
+ file = File.open('sonarqube-generic-coverage.xml')
30
+ current_xml_doc = Nokogiri::XML(file)
31
+ file.close
32
+
33
+ expect(EquivalentXml.equivalent?(current_xml_doc, fixture_xml_doc)).to be_truthy
34
+ end
35
+
36
+ it "should create an XML report in the given output directory" do
37
+ fixtures_project.output_directory = "./output"
38
+ fixtures_project.post
39
+
40
+ filepath = "#{fixtures_project.output_directory}/sonarqube-generic-coverage.xml"
41
+ expect(File.exist?(filepath)).to be_truthy
42
+
43
+ FileUtils.rm_rf(fixtures_project.output_directory)
44
+ end
45
+ end
46
+ end
@@ -157,6 +157,22 @@ describe Slather::ProfdataCoverageFile do
157
157
  end
158
158
  end
159
159
 
160
+ describe "#branch_coverage_data" do
161
+ it "should have branch data for line 19" do
162
+ # these segments correspond to the only statement on line 19
163
+ profdata_coverage_file.segments = [[19, 9, 0, true, false], [19, 20, 1, true, false]]
164
+ expect(profdata_coverage_file.branch_coverage_data[19]).to eq([0,1])
165
+ end
166
+ it "should have missing region data for line 19" do
167
+ profdata_coverage_file.segments = [[19, 9, 0, true, false], [19, 20, 1, true, false]]
168
+ expect(profdata_coverage_file.branch_region_data[19]).to eq([[8,11]])
169
+ end
170
+ it "should have two missing region data for line 19" do
171
+ profdata_coverage_file.segments = [[19, 9, 0, true, false], [19, 20, 1, true, false], [19, 30, 0, true, false], [19, 40, 1, true, true]]
172
+ expect(profdata_coverage_file.branch_region_data[19]).to eq([[8,11], [29,10]])
173
+ end
174
+ end
175
+
160
176
  describe "#ignored" do
161
177
 
162
178
  before(:each) {