|
@@ -24,6 +24,7 @@ uses
|
|
|
DOM, XMLWrite;
|
|
|
|
|
|
const
|
|
|
+ MAX_XML_CHARS = 1000;
|
|
|
LOG_SHORT = 'log';
|
|
|
LOG_LONG = 'longlog';
|
|
|
|
|
@@ -66,11 +67,13 @@ var
|
|
|
skipped: LongInt;
|
|
|
success: LongInt;
|
|
|
tmpLine: String;
|
|
|
+ Line: string;
|
|
|
|
|
|
startIdx: LongInt;
|
|
|
tmpString: String;
|
|
|
className: String;
|
|
|
caseName: String;
|
|
|
+ i: Integer;
|
|
|
begin
|
|
|
logShort:=TStringList.Create;
|
|
|
logLong:=TStringList.Create;
|
|
@@ -102,8 +105,9 @@ begin
|
|
|
rootNode:=junitXML.CreateElement('testsuite');
|
|
|
junitXML.AppendChild(rootNode);
|
|
|
|
|
|
- for tmpLine in logShort do
|
|
|
+ for Line in logShort do
|
|
|
begin
|
|
|
+ tmpline := Line;
|
|
|
// this is pretty fubar in the logfile, to break the format
|
|
|
// lets fix it up...
|
|
|
if AnsiEndsText(IE_FUBAR, tmpLine) then
|
|
@@ -118,8 +122,8 @@ begin
|
|
|
|
|
|
// create testcase node
|
|
|
caseNode:=junitXML.CreateElement('testcase');
|
|
|
- TDOMElement(caseNode).SetAttribute('classname',className);
|
|
|
- TDOMElement(caseNode).SetAttribute('name',caseName);
|
|
|
+ TDOMElement(caseNode).SetAttribute('classname',WideString(className));
|
|
|
+ TDOMElement(caseNode).SetAttribute('name',WideString(caseName));
|
|
|
rootNode.AppendChild(caseNode);
|
|
|
|
|
|
if AnsiStartsText(PATTERN_FAILED, tmpLine) then
|
|
@@ -138,7 +142,7 @@ begin
|
|
|
tmpNode:=junitXML.CreateElement('failure');
|
|
|
end;
|
|
|
|
|
|
- TDOMElement(tmpNode).SetAttribute('message',tmpString);
|
|
|
+ TDOMElement(tmpNode).SetAttribute('message',WideString(tmpString));
|
|
|
startIdx:=getIndexInList(logLong, className, caseName);
|
|
|
tmpString:='';
|
|
|
while startIdx > 0 do
|
|
@@ -149,7 +153,14 @@ begin
|
|
|
AnsiStartsText('>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>', logLong[startIdx]) then break;
|
|
|
end;
|
|
|
if tmpString <> '' then
|
|
|
- tmpNode.AppendChild(junitXML.CreateTextNode(tmpString+#10));
|
|
|
+ begin
|
|
|
+ if Length(tmpString) > MAX_XML_CHARS then
|
|
|
+ tmpString := '--- ' + IntToStr(Length(tmpstring) - MAX_XML_CHARS) + 'bytes cut away --- '+ #10 + Copy(tmpString, Length(tmpstring) - MAX_XML_CHARS, MAX_XML_CHARS);
|
|
|
+ for i := 1 to Length(tmpString) do
|
|
|
+ if tmpString[i] in [#0..#9,#11..#31] then
|
|
|
+ tmpString[i] := ' ';
|
|
|
+ tmpNode.AppendChild(junitXML.CreateTextNode(WideString(tmpString+#10)));
|
|
|
+ end;
|
|
|
caseNode.AppendChild(tmpNode);
|
|
|
continue;
|
|
|
end;
|
|
@@ -169,9 +180,9 @@ begin
|
|
|
end;
|
|
|
|
|
|
// set required elements in the root node
|
|
|
- TDOMElement(rootNode).SetAttribute('errors',IntToStr(error));
|
|
|
- TDOMElement(rootNode).SetAttribute('failures',IntToStr(failed));
|
|
|
- TDOMElement(rootNode).SetAttribute('tests',IntToStr(logShort.Count));
|
|
|
+ TDOMElement(rootNode).SetAttribute('errors',WideString(IntToStr(error)));
|
|
|
+ TDOMElement(rootNode).SetAttribute('failures',WideString(IntToStr(failed)));
|
|
|
+ TDOMElement(rootNode).SetAttribute('tests',WideString(IntToStr(logShort.Count)));
|
|
|
TDOMElement(rootNode).SetAttribute('name','Compiler.Testsuite');
|
|
|
TDOMElement(rootNode).SetAttribute('package','FPC');
|
|
|
|