content: ' @ignore
  function RBS_ReportCodeCoverage() as void
      if m.global._rbs_ccn = invalid then
          ? "There was no rooibos code coverage component - not generating coverage report"
          return
      end if
      ? ""
      ? "...Generating code coverage report"
      ? ""
      m.global._rbs_ccn.save = true
      cc = m.global._rbs_ccn
      hitFiles = []
      missFiles = []
      allLinesCount = 0
      allLinesHit = 0
      for each key in cc.expectedMap
          filename = cc.filePathMap[key]
          expectedCount = cc.expectedMap[key].count()
          allLinesCount += expectedCount
          if expectedCount > 0 then
              if cc.resolvedMap[key] <> invalid then
                  resolvedCount = cc.resolvedMap[key].count()
                  allLinesHit += resolvedCount
                  resolvedPercent = (resolvedCount / expectedCount) * 100
                  hitFiles.push({ percent: resolvedPercent, text: filename + ": " + str(resolvedPercent).trim() + "% (" + strI(resolvedCount).trim() + "/" + strI(expectedCount).trim() + ")" })
              else
                  missFiles.push(filename + ": MISS!")
              end if
          end if
      end for
      allLinesPercent = (allLinesHit / allLinesCount) * 100
      ? ""
      ? ""
      ? "+++++++++++++++++++++++++++++++++++++++++++"
      ? "Code Coverage Report"
      ? "+++++++++++++++++++++++++++++++++++++++++++"
      ? ""
      ? "Total Coverage: " ; str(allLinesPercent).trim() ; "% (" ; strI(allLinesHit).trim() ; "/" + strI(allLinesCount).trim() ; ")"
      ? "Files: " ; cc.resolvedMap.count(); "/" ; cc.expectedMap.count()
      ? ""
      ? "HIT FILES"
      ? "---------"
      hitFiles.SortBy("percent")
      for i = 0 to hitFiles.count() - 1
          ? hitFiles[i].text
      end for
      ? ""
      ? "MISSED FILES"
      ? "------------"
      for i = 0 to missFiles.count() - 1
          ? missFiles[i]
      end for
  end function
  