slather 2.4.8 → 2.7.5

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.
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) {