diff --git a/Source/HTMLCoverageReport.pas b/Source/HTMLCoverageReport.pas
index 36298a3..c54fc65 100644
--- a/Source/HTMLCoverageReport.pas
+++ b/Source/HTMLCoverageReport.pas
@@ -72,6 +72,7 @@ THTMLCoverageReport = class(TInterfacedObject, IReport)
function PrettyPercentage(nbItems, nbTotal : Integer) : String;
+ function HtmlEncode(const AStr: string) : String;
public
constructor Create(const ACoverageConfiguration: ICoverageConfiguration);
@@ -90,9 +91,24 @@ implementation
uses
System.SysUtils,
+ {$IF CompilerVersion >= 28.0}
System.NetEncoding,
+ {$ENDIF}
JclFileUtils;
+function THTMLCoverageReport.HtmlEncode(const AStr: string) : String;
+begin
+ {$IF CompilerVersion >= 28.0}
+ Result := TNetEncoding.HTML.Encode(AStr);
+ {$ELSE}
+ Result := StringReplace(AStr, '&', '&', [rfReplaceAll]);
+ Result := StringReplace(Result, '<', '<', [rfReplaceAll]);
+ Result := StringReplace(Result, '>', '>', [rfReplaceAll]);
+ Result := StringReplace(Result, '"', '"', [rfReplaceAll]);
+ Result := StringReplace(Result, '''', ''', [rfReplaceAll]);
+ {$ENDIF}
+end;
+
procedure THTMLCoverageReport.Generate(
const ACoverage: ICoverageStats;
const AModuleInfoList: TModuleList;
@@ -472,7 +488,7 @@ procedure THTMLCoverageReport.AddTableFooter(
AOutputFile.WriteLine(
'
'
+ ''
- + '| ' + TNetEncoding.HTML.Encode(AHeading)
+ + ' | ' + HtmlEncode(AHeading)
+ ' | ' + IntToStr(coveredLineCount)
+ ' | ' + IntToStr(lineCount - coveredLineCount)
+ ' | ' + IntToStr(lineCount)
@@ -487,11 +503,11 @@ procedure THTMLCoverageReport.AddTableHeader(
const AOutputFile: TTextWriter);
begin
AOutputFile.WriteLine(
- ' ' + TNetEncoding.HTML.Encode(ATableHeading) + ' '
+ '' + HtmlEncode(ATableHeading) + ' '
+ ''
+ ''
+ ''
- + '| ' + TNetEncoding.HTML.Encode(AColumnHeading)
+ + ' | ' + HtmlEncode(AColumnHeading)
+ ' | Number of lines'
+ ' | Percent(s) covered'
+ ' | '
@@ -607,7 +623,7 @@ procedure THTMLCoverageReport.GenerateCoverageTable(
while AInputFile.Peek <> -1 do
begin
InputLine := AInputFile.ReadLine;
- InputLine := TNetEncoding.HTML.Encode(TrimRight(InputLine));
+ InputLine := HtmlEncode(TrimRight(InputLine));
LineCoverage := ACoverageModule.CoverageLine[LineCoverageIter];
if (LineCount = LineCoverage.LineNumber) then
begin
@@ -628,7 +644,7 @@ procedure THTMLCoverageReport.GenerateCoverageTable(
AOutputFile.WriteLine(
''
);
diff --git a/Test/CoverageConfigurationTest.pas b/Test/CoverageConfigurationTest.pas
index 1a0a3f3..6b92a0c 100644
--- a/Test/CoverageConfigurationTest.pas
+++ b/Test/CoverageConfigurationTest.pas
@@ -1518,13 +1518,13 @@ procedure TCoverageConfigurationTest.TestMixIncludeExcludeSourceMask;
LCmdParams : array of string;
LCoverageConfiguration : ICoverageConfiguration;
I : Integer;
+ LINCLUDE_EXCLUDE_FILES_PREFIX: string;
begin
- const cINCLUDE_EXCLUDE_FILES_PREFIX = cINCLUDE_FILES_PREFIX + cEXCLUDE_FILES_PREFIX;
-
+ LINCLUDE_EXCLUDE_FILES_PREFIX := cINCLUDE_FILES_PREFIX + cEXCLUDE_FILES_PREFIX;
LNumOfFiles := Random(20) + 10;
SetLength(LCmdParams, LNumOfFiles + 5);
LCmdParams[0] := '-esm';
- LCmdParams[1] := cINCLUDE_EXCLUDE_FILES_PREFIX + '*';
+ LCmdParams[1] := LINCLUDE_EXCLUDE_FILES_PREFIX + '*';
LCmdParams[2] := '-ism';
LCmdParams[3] := cINCLUDE_FILES_PREFIX + '*';
LCmdParams[4] := '-u';
@@ -1549,7 +1549,7 @@ procedure TCoverageConfigurationTest.TestMixIncludeExcludeSourceMask;
LCoverageConfiguration.ParseCommandLine;
for I := 0 to Pred(LTotalUnitList.Count) do
if ((LeftStr(LTotalUnitList[I], Length(cINCLUDE_FILES_PREFIX)) = cINCLUDE_FILES_PREFIX)
- and not (LeftStr(LTotalUnitList[I], Length(cINCLUDE_EXCLUDE_FILES_PREFIX)) = cINCLUDE_EXCLUDE_FILES_PREFIX)) then
+ and not (LeftStr(LTotalUnitList[I], Length(LINCLUDE_EXCLUDE_FILES_PREFIX)) = LINCLUDE_EXCLUDE_FILES_PREFIX)) then
CheckNotEquals(-1, LCoverageConfiguration.Units.IndexOf(LTotalUnitList[I]), 'Missing included unit')
else
CheckEquals(-1, LCoverageConfiguration.Units.IndexOf(LTotalUnitList[I]), 'Unit should have been excluded');
|