123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- #include "cmParseBlanketJSCoverage.h"
- #include "cmCTest.h"
- #include "cmCTestCoverageHandler.h"
- #include "cmSystemTools.h"
- #include "cmsys/FStream.hxx"
- #include <stdio.h>
- #include <stdlib.h>
- class cmParseBlanketJSCoverage::JSONParser
- {
- public:
- typedef cmCTestCoverageHandlerContainer::SingleFileCoverageVector
- FileLinesType;
- JSONParser(cmCTestCoverageHandlerContainer& cont)
- : Coverage(cont)
- {
- }
- virtual ~JSONParser() {}
- std::string getValue(std::string const& line, int type)
- {
- size_t begIndex;
- size_t endIndex;
- endIndex = line.rfind(',');
- begIndex = line.find_first_of(':');
- if (type == 0) {
-
-
- std::string foundFileName =
- line.substr(begIndex + 3, endIndex - (begIndex + 4));
- return foundFileName;
- }
- return line.substr(begIndex);
- }
- bool ParseFile(std::string const& file)
- {
- FileLinesType localCoverageVector;
- std::string filename;
- bool foundFile = false;
- bool inSource = false;
- std::string covResult;
- std::string line;
- cmsys::ifstream in(file.c_str());
- if (!in) {
- return false;
- }
- while (cmSystemTools::GetLineFromStream(in, line)) {
- if (line.find("filename") != std::string::npos) {
- if (foundFile) {
-
- FileLinesType& CoverageVector =
- this->Coverage.TotalCoverage[filename];
- CoverageVector = localCoverageVector;
- localCoverageVector.clear();
- }
- foundFile = true;
- inSource = false;
- filename = getValue(line, 0);
- } else if ((line.find("coverage") != std::string::npos) && foundFile &&
- inSource) {
-
- std::string result = getValue(line, 1);
- result = result.substr(2);
- if (result == "\"\"") {
-
-
- localCoverageVector.push_back(-1);
- } else {
-
- localCoverageVector.push_back(atoi(result.c_str()));
- }
- } else if (line.find("source") != std::string::npos) {
- inSource = true;
- }
- }
-
- FileLinesType& CoverageVector = this->Coverage.TotalCoverage[filename];
- CoverageVector = localCoverageVector;
- localCoverageVector.clear();
- return true;
- }
- private:
- cmCTestCoverageHandlerContainer& Coverage;
- };
- cmParseBlanketJSCoverage::cmParseBlanketJSCoverage(
- cmCTestCoverageHandlerContainer& cont, cmCTest* ctest)
- : Coverage(cont)
- , CTest(ctest)
- {
- }
- bool cmParseBlanketJSCoverage::LoadCoverageData(std::vector<std::string> files)
- {
- cmCTestOptionalLog(this->CTest, HANDLER_VERBOSE_OUTPUT,
- "Found " << files.size() << " Files" << std::endl,
- this->Coverage.Quiet);
- for (std::string const& file : files) {
- cmCTestOptionalLog(this->CTest, HANDLER_VERBOSE_OUTPUT,
- "Reading JSON File " << file << std::endl,
- this->Coverage.Quiet);
- if (!this->ReadJSONFile(file)) {
- return false;
- }
- }
- return true;
- }
- bool cmParseBlanketJSCoverage::ReadJSONFile(std::string const& file)
- {
- cmParseBlanketJSCoverage::JSONParser parser(this->Coverage);
- cmCTestOptionalLog(this->CTest, HANDLER_VERBOSE_OUTPUT,
- "Parsing " << file << std::endl, this->Coverage.Quiet);
- parser.ParseFile(file);
- return true;
- }
|