unit tchtmlparser;
{$mode objfpc}{$H+}
interface
uses
Classes,
SysUtils,
fpcunit,
testregistry,
fpReportHTMLParser;
type
TTestHTMLParser = class(TTestCase)
private
FParser: THTMLParser;
FTags: TStringList;
FText: TStringList;
procedure InitParser(const AText: string);
procedure CaptureTagsFound(NoCaseTag, ActualTag: string);
procedure CaptureTextFound(Text: string);
protected
procedure SetUp; override;
procedure TearDown; override;
public
published
procedure TestOneTagPair;
procedure TestNoTags;
procedure TestTagAndRemainingText;
procedure TestRegularTextAndTag;
procedure TestTagNoText;
procedure TestGetTagName;
procedure TestGetNameValPair;
procedure TestGetValFromNameVal;
procedure TestGetVal;
end;
implementation
{ TTestHTMLParser }
procedure TTestHTMLParser.InitParser(const AText: string);
begin
FParser := THTMLParser.Create(AText);
FParser.OnFoundTag := @CaptureTagsFound;
FParser.OnFoundText := @CaptureTextFound;
FParser.Exec;
end;
procedure TTestHTMLParser.CaptureTagsFound(NoCaseTag, ActualTag: string);
begin
FTags.Add(NoCaseTag);
end;
procedure TTestHTMLParser.CaptureTextFound(Text: string);
begin
FText.Add(Text);
end;
procedure TTestHTMLParser.SetUp;
begin
inherited SetUp;
FParser := nil;
FTags := TStringList.Create;
FText := TStringList.Create;
end;
procedure TTestHTMLParser.TearDown;
begin
FParser.Free;
FTags.Free;
FText.Free;
inherited TearDown;
end;
procedure TTestHTMLParser.TestOneTagPair;
begin
InitParser('italics');
AssertEquals('Failed on 1', FTags[0], '');
AssertEquals('Failed on 2', FTags[1], '');
AssertEquals('Failed on 3', FText[0], 'italics');
end;
procedure TTestHTMLParser.TestNoTags;
begin
InitParser('italics');
AssertEquals('Failed on 1', FTags.Text, '');
AssertEquals('Failed on 2', FText[0], 'italics');
end;
procedure TTestHTMLParser.TestTagAndRemainingText;
begin
InitParser('italics regular text');
AssertEquals('Failed on 1', FTags[0], '');
AssertEquals('Failed on 2', FTags[1], '');
AssertEquals('Failed on 3', FText[0], 'italics');
AssertEquals('Failed on 4', FText[1], ' regular text');
end;
procedure TTestHTMLParser.TestRegularTextAndTag;
begin
InitParser('regular text italics');
AssertEquals('Failed on 1', FTags[0], '');
AssertEquals('Failed on 2', FTags[1], '');
AssertEquals('Failed on 3', FText[0], 'regular text ');
AssertEquals('Failed on 4', FText[1], 'italics');
end;
procedure TTestHTMLParser.TestTagNoText;
begin
InitParser('');
AssertEquals('Failed on 1', FTags[0], '');
AssertEquals('Failed on 2', FTags[1], '');
AssertEquals('Failed on 3', FText.Text, '');
end;
procedure TTestHTMLParser.TestGetTagName;
begin
AssertEquals('failed on 1', 'I', FParser.GetTagName(''));
AssertTrue('failed on 2 - case preserved', FParser.GetTagName('') <> 'i');
AssertEquals('failed on 3', '/I', FParser.GetTagName(''));
AssertEquals('failed on 4', 'i', FParser.GetTagName(''));
AssertEquals('failed on 5', 'a', FParser.GetTagName(''));
AssertEquals('failed on 6', 'a', FParser.GetTagName(''));
AssertEquals('failed on 7 - multi character tag', 'table', FParser.GetTagName(''));
end;
procedure TTestHTMLParser.TestGetNameValPair;
begin
AssertEquals('failed on 1', '', FParser.GetNameValPair('', ''));
AssertEquals('failed on 2', '', FParser.GetNameValPair('', 'href'));
AssertEquals('failed on 3', '', FParser.GetNameValPair('', ''));
AssertEquals('failed on 4', 'href="#hello"', FParser.GetNameValPair('', 'href'));
AssertEquals('failed on 5', 'href="http://www.freepascal.org"', FParser.GetNameValPair('', 'href'));
AssertEquals('failed on 6', 'cellpadding=5', FParser.GetNameValPair('', 'cellpadding'));
AssertEquals('failed on 7', 'cellspacing=10', FParser.GetNameValPair('', 'cellspacing'));
AssertEquals('failed on 8', 'class="main"', FParser.GetNameValPair('', 'class'));
end;
procedure TTestHTMLParser.TestGetValFromNameVal;
begin
AssertEquals('failed on 1', '#hello', FParser.GetValFromNameVal('href="#hello"'));
AssertEquals('failed on 2', 'http://www.freepascal.org', FParser.GetValFromNameVal('href="http://www.freepascal.org"'));
AssertEquals('failed on 3', '5', FParser.GetValFromNameVal('cellpadding=5'));
AssertEquals('failed on 4', 'black', FParser.GetValFromNameVal('bgcolor=black'));
AssertEquals('failed on 5', 'main', FParser.GetValFromNameVal('class="main"'));
AssertEquals('failed on 6', 'http://www.freepascal.org/docs/docs.php?num=10', FParser.GetValFromNameVal('href="http://www.freepascal.org/docs/docs.php?num=10"'));
end;
procedure TTestHTMLParser.TestGetVal;
begin
AssertEquals('failed on 1', '', FParser.GetVal('', ''));
AssertEquals('failed on 2', '', FParser.GetVal('', 'href'));
AssertEquals('failed on 3', '', FParser.GetVal('', ''));
AssertEquals('failed on 4', '#hello', FParser.GetVal('', 'href'));
AssertEquals('failed on 5', 'http://www.freepascal.org', FParser.GetVal('', 'href'));
AssertEquals('failed on 6', '5', FParser.GetVal('', 'cellpadding'));
AssertEquals('failed on 7', '10', FParser.GetVal('', 'cellspacing'));
AssertEquals('failed on 8', 'main', FParser.GetVal('', 'class'));
AssertEquals('failed on 9', 'http://www.freepascal.org/docs/docs.php?num=10', FParser.GetVal('', 'href'));
end;
initialization
RegisterTests([TTestHTMLParser]);
end.
end.