123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- #include "cmStandardIncludes.h"
- #include "cmSystemTools.h"
- #include "cmXMLParser.h"
- #include "cmParsePythonCoverage.h"
- #include <cmsys/Directory.hxx>
- #include <cmsys/FStream.hxx>
- //----------------------------------------------------------------------------
- class cmParsePythonCoverage::XMLParser: public cmXMLParser
- {
- public:
- XMLParser(cmCTest* ctest, cmCTestCoverageHandlerContainer& cont)
- : CTest(ctest), Coverage(cont)
- {
- }
- virtual ~XMLParser()
- {
- }
- protected:
- virtual void StartElement(const char* name, const char** atts)
- {
- if(strcmp(name, "class") == 0)
- {
- int tagCount = 0;
- while(true)
- {
- if(strcmp(atts[tagCount], "filename") == 0)
- {
- cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, "Reading file: "
- << atts[tagCount+1] << std::endl);
- this->CurFileName = this->Coverage.SourceDir + "/" +
- atts[tagCount+1];
- FileLinesType& curFileLines =
- this->Coverage.TotalCoverage[this->CurFileName];
- cmsys::ifstream fin(this->CurFileName.c_str());
- if(!fin)
- {
- cmCTestLog(this->CTest, ERROR_MESSAGE,
- "Python Coverage: Error opening " << this->CurFileName
- << std::endl);
- this->Coverage.Error++;
- break;
- }
- std::string line;
- curFileLines.push_back(-1);
- while(cmSystemTools::GetLineFromStream(fin, line))
- {
- curFileLines.push_back(-1);
- }
- break;
- }
- ++tagCount;
- }
- }
- else if(strcmp(name, "line") == 0)
- {
- int tagCount = 0;
- int curNumber = -1;
- int curHits = -1;
- while(true)
- {
- if(strcmp(atts[tagCount], "hits") == 0)
- {
- curHits = atoi(atts[tagCount+1]);
- }
- else if(strcmp(atts[tagCount], "number") == 0)
- {
- curNumber = atoi(atts[tagCount+1]);
- }
- if(curHits > -1 && curNumber > -1)
- {
- FileLinesType& curFileLines =
- this->Coverage.TotalCoverage[this->CurFileName];
- curFileLines[curNumber] = curHits;
- break;
- }
- ++tagCount;
- }
- }
- }
- virtual void EndElement(const char*) {}
- private:
- typedef cmCTestCoverageHandlerContainer::SingleFileCoverageVector
- FileLinesType;
- cmCTest* CTest;
- cmCTestCoverageHandlerContainer& Coverage;
- std::string CurFileName;
- };
- cmParsePythonCoverage::cmParsePythonCoverage(
- cmCTestCoverageHandlerContainer& cont,
- cmCTest* ctest)
- :Coverage(cont), CTest(ctest)
- {
- }
- bool cmParsePythonCoverage::ReadCoverageXML(const char* xmlFile)
- {
- cmParsePythonCoverage::XMLParser parser(this->CTest, this->Coverage);
- parser.ParseFile(xmlFile);
- return true;
- }
|