CMake/Source/CTest/cmCTestTestMeasurementXMLParser.cxx
Zack Galbreath 5489ce74b3 ctest: support <CTestMeasurement> for runtime measurements
Teach CTest to parse output for <CTestMeasurement> in addition to
<DartMeasurement> for measurements defined at runtime.

Use a new class (cmCTestTestMeasurementXMLParser) derived from cmXMLParser
to parse the data and attributes these XML elements. This is an improvement
over our previous approach of using a series of regular expressions.

As part of this commit we also rename some member variables and methods
to make their purpose more clear.

DartStuff                        -> AllTestMeasurementsRegex
DartStuff1                       -> SingleTestMeasurementRegex
DartString                       -> TestMeasurementsOutput
GenerateDartOutput()             -> GenerateCTestXML()
GenerateRegressionImages()       -> RecordCustomTestMeasurements()
cmCTestRunTest::DartProcessing() -> ParseOutputForMeasurements()
2021-07-01 15:16:23 -04:00

27 lines
861 B
C++

/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
file Copyright.txt or https://cmake.org/licensing for details. */
#include "cmCTestTestMeasurementXMLParser.h"
#include <cstring>
void cmCTestTestMeasurementXMLParser::StartElement(const std::string& name,
const char** attributes)
{
this->CharacterData.clear();
this->ElementName = name;
for (const char** attr = attributes; *attr; attr += 2) {
if (strcmp(attr[0], "name") == 0) {
this->MeasurementName = attr[1];
} else if (strcmp(attr[0], "type") == 0) {
this->MeasurementType = attr[1];
}
}
}
void cmCTestTestMeasurementXMLParser::CharacterDataHandler(const char* data,
int length)
{
this->CharacterData.append(data, length);
}