fastlane-plugin-xcodetestcoverage 1.0.2 → 1.1.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
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: e23696404cf27741d5c3fa1476463c0592c3841d19b511c6af84297a60327cce
         | 
| 4 | 
            +
              data.tar.gz: 1a89337d4669faac257af5e0336149bdbe6755c4390ac4b4841777eb7d909f2d
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: d7e83365dff6854378304635c136328c23f19e72e7112e1a74ff62a37abc4525bb98b62504b683b4f8f4dac22a21f754b0b445b929b3bfccbd00b0c77ce6fc1c
         | 
| 7 | 
            +
              data.tar.gz: 3110536aee3831265ac50ef3be6f003119dd6f955f937514737ba010b283a0106894b592732dae2d2a2100ec6d2c699f775632c46465fc9067952b16d1a99752
         | 
    
        data/README.md
    CHANGED
    
    | @@ -15,13 +15,14 @@ fastlane add_plugin xcodetestcoverage | |
| 15 15 | 
             
            Plugin for getting test data from Xcode
         | 
| 16 16 |  | 
| 17 17 | 
             
            It has to be run after tests.
         | 
| 18 | 
            -
            Returns hash contains keys: coverage, coveredLines, executableLines:
         | 
| 18 | 
            +
            Returns hash contains keys: name, coverage, coveredLines, executableLines:
         | 
| 19 19 |  | 
| 20 20 | 
             
            ```bash
         | 
| 21 21 | 
             
            run_tests()
         | 
| 22 22 | 
             
            result = xcodetestcoverage()
         | 
| 23 | 
            -
            puts(result[" | 
| 24 | 
            -
            puts(result[" | 
| 23 | 
            +
            puts(result["name"]) #current test target name
         | 
| 24 | 
            +
            puts(result["coverage"]) #current coverage percentage
         | 
| 25 | 
            +
            puts(result["coveredLines"]) 
         | 
| 25 26 | 
             
            puts(result["executableLines"])	
         | 
| 26 27 | 
             
            ```
         | 
| 27 28 |  | 
| @@ -38,6 +39,10 @@ type: Proc | |
| 38 39 |  | 
| 39 40 | 
             
            coverageExceptionCallback - Optional coverage exception callback argument" optional: true, type: Proc
         | 
| 40 41 |  | 
| 42 | 
            +
            testTargetName - searches test target to display coverage percentages, if it is empty the results contains the target with the highest percentage value, optional: true, type: String
         | 
| 43 | 
            +
             | 
| 44 | 
            +
            xcresultPath - alternative path to xcresult, optional: true, type: String
         | 
| 45 | 
            +
             | 
| 41 46 | 
             
            ## Example
         | 
| 42 47 |  | 
| 43 48 | 
             
            Check out the [example `Fastfile`](fastlane/Fastfile) to see how to use this plugin. Try it by cloning the repo, running `fastlane install_plugins` and `bundle exec fastlane tests`.
         | 
| @@ -62,7 +67,13 @@ xcodetestcoverage(minimumCoveragePercentage: 45.0, | |
| 62 67 | 
             
            		  }
         | 
| 63 68 | 
             
            )
         | 
| 64 69 | 
             
            ```
         | 
| 65 | 
            -
             | 
| 70 | 
            +
            You can use alternative path to xcresult. In this case, running a test via fastlane (with the command scan or run_tests) before xcodetestcoverage is optional.
         | 
| 71 | 
            +
            ```bash
         | 
| 72 | 
            +
             reportPath = "test.xcresult"
         | 
| 73 | 
            +
             xcodetestcoverage(minimumCoveragePercentage: 30.0,
         | 
| 74 | 
            +
             		   enableDataFailedException: true,
         | 
| 75 | 
            +
                               xcresultPath: reportPath)
         | 
| 76 | 
            +
            ```
         | 
| 66 77 |  | 
| 67 78 | 
             
            ## Issues and Feedback
         | 
| 68 79 |  | 
| @@ -8,30 +8,56 @@ module Fastlane | |
| 8 8 | 
             
                    enableDataFailedException = params[:enableDataFailedException]
         | 
| 9 9 | 
             
            	      minimumCoveragePercentage = params[:minimumCoveragePercentage]
         | 
| 10 10 | 
             
                    enableDefaultCoverageException = params[:enableDefaultCoverageException]
         | 
| 11 | 
            -
                     | 
| 12 | 
            -
                     | 
| 13 | 
            -
                     | 
| 11 | 
            +
                    targetName = params[:testTargetName]
         | 
| 12 | 
            +
                    filePath = params[:xcresultPath]
         | 
| 13 | 
            +
                    foundElement = nil     
         | 
| 14 14 |  | 
| 15 | 
            -
                    filePath  | 
| 15 | 
            +
                    if !filePath 
         | 
| 16 | 
            +
                      filePath = lane_context[SharedValues::SCAN_GENERATED_XCRESULT_PATH]
         | 
| 17 | 
            +
                    end
         | 
| 16 18 |  | 
| 17 19 | 
             
                    if filePath && File.exists?(filePath)
         | 
| 18 20 | 
             
                      jsonResult = sh "xcrun xccov view --only-targets --report '#{filePath}' --json"
         | 
| 19 | 
            -
             | 
| 20 | 
            -
             | 
| 21 | 
            -
             | 
| 21 | 
            +
             | 
| 22 | 
            +
                      #regex, reason: json parse does not work correctly
         | 
| 23 | 
            +
                      if resultMatch = jsonResult.match('(\[.*lineCoverage.*\])')
         | 
| 24 | 
            +
                        jsonArray = resultMatch.captures[0]
         | 
| 22 25 | 
             
                      end
         | 
| 23 26 |  | 
| 24 | 
            -
                       | 
| 25 | 
            -
             | 
| 26 | 
            -
             | 
| 27 | 
            +
                      elements = Array.new()    
         | 
| 28 | 
            +
                      element = ""
         | 
| 29 | 
            +
                      for pos in 0...jsonArray.length
         | 
| 30 | 
            +
                        if jsonArray[pos].chr == "}"
         | 
| 31 | 
            +
                          elements.push Helper::XcodetestcoverageHelper.buildElement(element: element)
         | 
| 32 | 
            +
                          element = ""
         | 
| 33 | 
            +
                        else         
         | 
| 34 | 
            +
                          element = element + jsonArray[pos].chr
         | 
| 35 | 
            +
                        end
         | 
| 27 36 | 
             
                      end
         | 
| 28 37 |  | 
| 29 | 
            -
                      if  | 
| 30 | 
            -
                         | 
| 31 | 
            -
             | 
| 38 | 
            +
                      if elements.length > 0 
         | 
| 39 | 
            +
                        for index in 0...elements.length              
         | 
| 40 | 
            +
                          if targetName && elements[index]["name"] && elements[index]["name"] == targetName
         | 
| 41 | 
            +
                            foundElement = elements[index]              
         | 
| 42 | 
            +
                          break
         | 
| 43 | 
            +
                          end
         | 
| 44 | 
            +
                          
         | 
| 45 | 
            +
                          if !foundElement || (elements[index]["coverage"] && elements[index]["coverage"] > foundElement["coverage"])
         | 
| 46 | 
            +
                            foundElement = elements[index]                
         | 
| 47 | 
            +
                          end
         | 
| 48 | 
            +
                        end
         | 
| 49 | 
            +
                      else 
         | 
| 50 | 
            +
                        foundElement = Helper::XcodetestcoverageHelper.buildElement(element: jsonResult)
         | 
| 32 51 | 
             
                      end
         | 
| 33 52 | 
             
                    end
         | 
| 34 | 
            -
             | 
| 53 | 
            +
             | 
| 54 | 
            +
                    lineCoverage = foundElement["coverage"]
         | 
| 55 | 
            +
               
         | 
| 56 | 
            +
                    UI.message("Xcodetestcoverage: name: #{foundElement["name"]}")
         | 
| 57 | 
            +
                    UI.message("Xcodetestcoverage: coverage: #{lineCoverage}")
         | 
| 58 | 
            +
                    UI.message("Xcodetestcoverage: coveredLines: #{foundElement["coveredLines"]}")
         | 
| 59 | 
            +
                    UI.message("Xcodetestcoverage: executableLines: #{foundElement["executableLines"]}")
         | 
| 60 | 
            +
             | 
| 35 61 | 
             
                    if !lineCoverage
         | 
| 36 62 | 
             
                      params[:dataFailedExceptionCallback].call() if params[:dataFailedExceptionCallback]
         | 
| 37 63 | 
             
                      UI.user_error!("Xcodetestcoverage: Test data reading error!") if enableDataFailedException
         | 
| @@ -43,11 +69,7 @@ module Fastlane | |
| 43 69 | 
             
                      UI.user_error!("Xcodetestcoverage: Coverage percentage is less than #{minimumCoveragePercentage} (minimumCoveragePercentage)") if enableDefaultCoverageException
         | 
| 44 70 | 
             
                    end
         | 
| 45 71 |  | 
| 46 | 
            -
                    return  | 
| 47 | 
            -
                      "coverage" => lineCoverage,
         | 
| 48 | 
            -
                      "coveredLines" => coveredLines,
         | 
| 49 | 
            -
                      "executableLines" => executableLines,
         | 
| 50 | 
            -
                    }
         | 
| 72 | 
            +
                    return foundElement
         | 
| 51 73 | 
             
                  end
         | 
| 52 74 |  | 
| 53 75 | 
             
                  def self.description
         | 
| @@ -101,7 +123,21 @@ module Fastlane | |
| 101 123 | 
             
            	        key: :coverageExceptionCallback,
         | 
| 102 124 | 
             
            	        description: "Optional coverage exception callback argument",
         | 
| 103 125 | 
             
            	        optional: true,
         | 
| 104 | 
            -
            	        type: Proc)
         | 
| 126 | 
            +
            	        type: Proc),
         | 
| 127 | 
            +
                    
         | 
| 128 | 
            +
                    FastlaneCore::ConfigItem.new(
         | 
| 129 | 
            +
                      key: :testTargetName,
         | 
| 130 | 
            +
                      env_name: "XCODETESTCOVERAGE_TEST_TARGET_NAME",
         | 
| 131 | 
            +
                      description: "Alternative path to xcresult",
         | 
| 132 | 
            +
                      type: String,
         | 
| 133 | 
            +
                      optional: true),
         | 
| 134 | 
            +
             | 
| 135 | 
            +
                    FastlaneCore::ConfigItem.new(
         | 
| 136 | 
            +
                      key: :xcresultPath,
         | 
| 137 | 
            +
                      env_name: "XCODETESTCOVERAGE_XCRESULTPATH",
         | 
| 138 | 
            +
                      description: "Alternative path to xcresult",
         | 
| 139 | 
            +
                      type: String,
         | 
| 140 | 
            +
                      optional: true)
         | 
| 105 141 | 
             
                    ]
         | 
| 106 142 | 
             
                  end
         | 
| 107 143 |  | 
| @@ -5,11 +5,36 @@ module Fastlane | |
| 5 5 |  | 
| 6 6 | 
             
              module Helper
         | 
| 7 7 | 
             
                class XcodetestcoverageHelper
         | 
| 8 | 
            -
             | 
| 9 | 
            -
             | 
| 10 | 
            -
             | 
| 11 | 
            -
             | 
| 12 | 
            -
                     | 
| 8 | 
            +
                def self.buildElement(element:)
         | 
| 9 | 
            +
                    name = nil
         | 
| 10 | 
            +
                    lineCoverage = nil
         | 
| 11 | 
            +
                    coveredLines = nil
         | 
| 12 | 
            +
                    executableLines = nil
         | 
| 13 | 
            +
                          
         | 
| 14 | 
            +
                    if nameMatch = element.match('"name":"(.*?)"')
         | 
| 15 | 
            +
                      name = nameMatch.captures[0]    
         | 
| 16 | 
            +
                    end
         | 
| 17 | 
            +
                  
         | 
| 18 | 
            +
                    if lineCoverageFloatMatch = element.match('lineCoverage":(\d+.\d+)')
         | 
| 19 | 
            +
                      lineCoverage = lineCoverageFloatMatch.captures[0].to_f * 100
         | 
| 20 | 
            +
                    else 
         | 
| 21 | 
            +
                      if lineCoverageIntMatch = element.match('lineCoverage":(\d+)')
         | 
| 22 | 
            +
                        lineCoverage = lineCoverageIntMatch.captures[0].to_f * 100
         | 
| 23 | 
            +
                      end
         | 
| 24 | 
            +
                    end
         | 
| 25 | 
            +
                    
         | 
| 26 | 
            +
                    if coveredLinesMatch = element.match('coveredLines":(\d+)')
         | 
| 27 | 
            +
                      coveredLines = coveredLinesMatch.captures[0].to_i
         | 
| 28 | 
            +
                    end
         | 
| 29 | 
            +
                  
         | 
| 30 | 
            +
                    if executableLineMatch = element.match('executableLines":(\d+)')
         | 
| 31 | 
            +
                      executableLines = executableLineMatch.captures[0].to_i
         | 
| 32 | 
            +
                    end
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                    return   {"name" => name,
         | 
| 35 | 
            +
                              "coverage" => lineCoverage,
         | 
| 36 | 
            +
                              "coveredLines" => coveredLines,
         | 
| 37 | 
            +
                              "executableLines" => executableLines}
         | 
| 13 38 | 
             
                  end
         | 
| 14 39 | 
             
                end
         | 
| 15 40 | 
             
              end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: fastlane-plugin-xcodetestcoverage
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 1.0 | 
| 4 | 
            +
              version: 1.1.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Yury Savitsky
         | 
| 8 8 | 
             
            autorequire:
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2023-02- | 
| 11 | 
            +
            date: 2023-02-21 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: bundler
         |