fpc/packages/fcl-report/test/tcreportdom.pp

2101 lines
50 KiB
ObjectPascal

{
This file is part of the Free Pascal run time library.
Copyright (c) 1999-2022 by Michael van Canneyt and other members of the
Free Pascal development team
test report dom
See the file COPYING.FPC, included in this distribution,
for details about the copyright.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
**********************************************************************}
unit tcreportdom;
{$mode objfpc}{$H+}
{.$define writexml}
interface
uses
Classes, SysUtils,
{$IFDEF fptest}
TestFramework,
{$ELSE}
fpcunit, testutils, testregistry,
{$ENDIF}
DOM, fpcanvas,
fpreport, fpreportdom, xmlwrite;
type
TReportDOMTester = class(TTestCase)
Private
FDoc : TXMLDocument;
FRoot : TDOMElement;
procedure AssertAttribute(const AName, AValue: DomString);
procedure AssertValueElement(const AName, AValue: DomString);
procedure FillBytes(S: TStream; AMax: Byte);
Procedure AssertNoAttribute(Const AName : DomString);
protected
FRD : TFPReportDOM;
procedure SetUp; override;
procedure TearDown; override;
end;
TTestReportDOM = class(TReportDOMTester)
Public
procedure DoPop;
procedure TestStream(DoReset: Boolean);
published
procedure TestCreate;
Procedure TestAdd;
Procedure TestPush;
Procedure TestFind1;
Procedure TestFind2;
procedure TestPop1;
procedure TestPop2;
procedure TestPop3;
Procedure TestStreamToHex;
Procedure TestStreamToHex2;
procedure TestStreamEquals1;
procedure TestStreamEquals2;
procedure TestStreamEquals3;
procedure TestStreamEquals4;
procedure TestHexToStream;
Procedure TestWriteInteger1;
procedure TestWriteInteger2;
Procedure TestWriteString1;
procedure TestWriteString2;
Procedure TestWriteString3;
procedure TestWriteString4;
Procedure TestWriteWideString1;
procedure TestWriteWideString2;
Procedure TestWriteWideString3;
procedure TestWriteWideString4;
Procedure TestWriteBoolean1;
procedure TestWriteBoolean2;
Procedure TestWriteBoolean3;
procedure TestWriteBoolean4;
Procedure TestWriteFloat1;
procedure TestWriteFloat2;
Procedure TestWriteFloat3;
procedure TestWriteFloat4;
procedure TestWriteFloat5;
procedure TestWriteFloat6;
Procedure TestWriteDateTime1;
Procedure TestWriteDateTime2;
procedure TestWriteDateTime3;
procedure TestWriteDateTime4;
procedure TestWriteDateTime5;
procedure TestWriteDateTime6;
Procedure TestWriteStream1;
procedure TestWriteStream2;
Procedure TestWriteIntegerDiff1;
procedure TestWriteIntegerDiff2;
Procedure TestWriteStringDiff1;
procedure TestWriteStringDiff2;
Procedure TestWriteWideStringDiff1;
procedure TestWriteWideStringDiff2;
Procedure TestWriteBooleanDiff1;
procedure TestWriteBooleanDiff2;
Procedure TestWriteFloatDiff1;
procedure TestWriteFloatDiff2;
Procedure TestWriteDateTimeDiff1;
Procedure TestWriteDateTimeDiff2;
procedure TestWriteDateTimeDiff3;
procedure TestWriteDateTimeDiff4;
Procedure TestWriteStreamDiff1;
Procedure TestWriteStreamDiff2;
Procedure TestWriteStreamDiff3;
Procedure TestReadInteger1;
procedure TestReadInteger2;
procedure TestReadInteger3;
procedure TestReadInteger4;
procedure TestReadInteger5;
procedure TestReadInteger6;
Procedure TestReadString1;
procedure TestReadString2;
Procedure TestReadString3;
procedure TestReadString4;
Procedure TestReadWideString1;
procedure TestReadWideString2;
Procedure TestReadWideString3;
procedure TestReadWideString4;
Procedure TestReadDateTime1;
Procedure TestReadDateTime2;
procedure TestReadDateTime3;
procedure TestReadDateTime4;
procedure TestReadDateTime5;
procedure TestReadDateTime6;
procedure TestReadDateTime7;
procedure TestReadDateTime8;
procedure TestReadDateTime9;
procedure TestReadDateTime10;
Procedure TestReadBoolean1;
procedure TestReadBoolean2;
Procedure TestReadBoolean3;
procedure TestReadBoolean4;
procedure TestReadBoolean5;
procedure TestReadBoolean6;
procedure TestReadBoolean7;
procedure TestReadBoolean8;
Procedure TestReadFloat1;
procedure TestReadFloat2;
Procedure TestReadFloat3;
procedure TestReadFloat4;
procedure TestReadFloat5;
procedure TestReadFloat6;
procedure TestReadFloat7;
procedure TestReadStream1;
procedure TestReadStream2;
procedure TestReadStream3;
procedure TestReadStream4;
procedure TestReadStream5;
procedure TestReadStream6;
end;
TTestReportFrameDom = Class(TReportDOMTester)
private
FF,F2 : TFPReportFrame;
procedure FillFF;
protected
procedure Setup; override;
procedure TearDown; override;
published
procedure TestWrite;
procedure TestWriteDiff;
procedure TestRead;
end;
TTestReportLayoutDom = Class(TReportDOMTester)
private
FL,F2 : TFPReportLayout;
procedure FillFL;
protected
procedure Setup; override;
procedure TearDown; override;
published
procedure TestWrite;
procedure TestWriteDiff;
procedure TestRead;
end;
TTestReportElementDOM = Class(TReportDOMTester)
private
FE,F2 : TFPReportElement;
procedure FillFE;
protected
procedure Setup; override;
procedure TearDown; override;
published
procedure TestWrite1;
procedure TestWriteDiff1;
procedure TestWriteDiff2;
procedure TestWriteDiff3;
procedure TestRead1;
procedure TestRead2;
end;
implementation
{ ---------------------------------------------------------------------
General routines
---------------------------------------------------------------------}
procedure TReportDOMTester.SetUp;
begin
FDoc:=TXMLDocument.Create;
FRoot:=FDoc.CreateElement('XMLReport');
FDoc.AppendChild(FRoot);
FRD:=TFPReportDOM.Create(FDoc,Nil);
end;
{$ifdef writexml}
Var
WC : Integer;
{$endif}
procedure TReportDOMTester.TearDown;
begin
{$ifdef writexml}
Inc(wc);
WriteXML(FDoc,'xml-'+inttostr(wc)+'.xml');
{$endif}
FreeAndNil(FRD);
FreeAndNil(FDoc);
end;
procedure TReportDOMTester.FillBytes(S : TStream; AMax : Byte);
Var
B : Byte;
begin
For B:=0 to AMax do
S.WriteBuffer(B,SizeOf(B));
end;
procedure TReportDOMTester.AssertAttribute(Const AName, AValue : DomString);
Var
S: String;
begin
S:='Attribute '+AName+' exists';
AssertEquals(S,True,FRD.CurrentElement.HasAttribute(AName));
S:='Attribute '+AName+' has correct value';
AssertEquals(S,AValue,FRD.CurrentElement[AName]);
end;
procedure TReportDOMTester.AssertValueElement(Const AName, AValue : DomString);
Var
S: String;
N : TDomNode;
begin
S:='Element with name '+AName+' exists';
N:=FRD.CurrentElement.FindNode(AName);
AssertNotNull(S,N);
S:='Element with name '+AName+' is TDOMElement';
AssertEquals(S,TDomElement,N.ClassType);
N:=N.FirstChild;
S:='Value element under element with name '+AName+' exists';
AssertNotNull(S,N);
AssertEquals('Value node is of type text',TEXT_NODE,N.NodeType);
AssertEquals('Value node has correct content',AValue,N.NodeValue);
end;
procedure TReportDOMTester.AssertNoAttribute(const AName: DomString);
Var
S : String;
begin
S:='No attribute of name '+AName;
AssertEquals(S,False, FRD.CurrentElement.hasAttribute(AName));
end;
{ ---------------------------------------------------------------------
Actual test routines
---------------------------------------------------------------------}
procedure TTestReportDOM.TestCreate;
begin
AssertSame('XML Document property is set',FDoc,FRD.Document);
AssertSame('Root element is set ',FRoot,FRD.RootNode);
AssertSame('Current element is set ',FRoot,FRD.CurrentElement);
end;
procedure TTestReportDOM.TestAdd;
Var
E1,E2 : TDomElement;
begin
E1:=FRD.CurrentElement;
E2:=FRD.NewDOMElement('MyElement');
AssertNotNull('NewDOMElement returns result',E2);
AssertSame('NewDomElement is child of current element',E2,E1.FindNode('MyElement'));
AssertEquals('New node element created with correct name','MyElement',E2.NodeName);
AssertSame('New node element is current element',E2,FRD.CurrentElement);
end;
procedure TTestReportDOM.TestPush;
Var
E1,E2 : TDomElement;
begin
E1:=FRD.NewDOMElement('element1');
AssertSame('Current element equals created',E1,FRD.CurrentElement);
E2:=FRD.PushElement('element2');
AssertSame('Current element equals first created',E1,E2);
AssertEquals('New node pushed with correct name','element2',FRD.CurrentElement.NodeName);
end;
procedure TTestReportDOM.TestFind1;
Var
E1,E2,E3 : TDomElement;
begin
E1:=FRD.NewDOMElement('element1');
E2:=FRD.NewDomElement('element2');
FRD.CurrentElement:=E1;
E3:=FRD.FindChild('element2');
AssertSame('Found element',E2,E3);
end;
procedure TTestReportDOM.TestFind2;
Var
E1,E2,E3 : TDomElement;
begin
E1:=FRD.NewDOMElement('element1');
E2:=FRD.NewDomElement('element2');
FRD.CurrentElement:=E1;
E3:=FRD.FindChild('element3');
AssertNull('NonExisting element is null',E3);
end;
procedure TTestReportDOM.TestPop1;
Var
E1,E2,E3 : TDomElement;
begin
E1:=FRD.NewDOMElement('element1');
AssertSame('Current element equals created',E1,FRD.CurrentElement);
E2:=FRD.PushElement('element2');
AssertSame('Current element equals first created',E1,E2);
E3:=FRD.CurrentElement;
AssertEquals('New node pushed with correct name','element2',E3.NodeName);
AssertSame('Pop returns current element',E3,FRD.PopElement);
AssertSame('Current element after pop is correct',E1,FRD.CurrentElement);
end;
procedure TTestReportDOM.DoPop;
begin
FRD.PopElement;
end;
procedure TTestReportDOM.TestPop2;
begin
AssertException('Pop on empty stack raise exception',EReportDom,@DoPop);
end;
procedure TTestReportDOM.TestPop3;
begin
FRD.NewDOMElement('element1');
FRD.PushElement('element2');
FRD.PopElement;
AssertException('Pop on empty stack raise exception',EReportDom,@DoPop);
end;
procedure TTestReportDOM.TestStream(DoReset : Boolean);
Var
S : TMemoryStream;
B : Byte;
T,H : String;
begin
S:=TMemoryStream.Create;
try
FillBytes(S,255);
S.Position:=0;
T:=FRD.StreamToHex(S);
AssertEquals('Stream position is zero',0,S.Position);
AssertEquals('Correct number of bytes returned by streamtohex',512,Length(T));
For B:=0 to 255 do
begin
H:=Copy(T,1,2);
Delete(T,1,2);
AssertEquals(Format('Correct value at position %d',[b]),H,HexStr(B,2));
end;
Finally
S.Free;
end;
end;
procedure TTestReportDOM.TestStreamToHex;
begin
TestStream(True);
end;
procedure TTestReportDOM.TestStreamToHex2;
begin
TestStream(False);
end;
procedure TTestReportDOM.TestHexToStream;
Var
S : TMemoryStream;
SS : TStringStream;
H : String;
begin
S:=TMemoryStream.Create;
try
FillBytes(S,255);
H:=FRD.StreamToHex(S);
SS:=FRD.HexToStringStream(H);
try
AssertEquals('Size of stream is OK',256,SS.Size);
AssertEquals('HexToStringStream OK',True,FRD.StreamsEqual(S,SS));
finally
SS.Free;
end;
finally
S.Free;
end;
end;
procedure TTestReportDOM.TestStreamEquals1;
Var
S : TMemoryStream;
begin
S:=TMemoryStream.Create;
try
AssertEquals('Same stream always equal',True,FRD.StreamsEqual(S,S));
finally
S.Free;
end;
end;
procedure TTestReportDOM.TestStreamEquals2;
Var
S1,S2 : TMemoryStream;
begin
S1:=TMemoryStream.Create;
try
FillBytes(S1,255);
S2:=TMemoryStream.Create;
try
FillBytes(S2,255);
AssertEquals('Same content always equal',True,FRD.StreamsEqual(S1,S2));
finally
S2.Free;
end;
finally
S1.Free;
end;
end;
procedure TTestReportDOM.TestStreamEquals3;
Var
S1,S2 : TMemoryStream;
begin
S1:=TMemoryStream.Create;
try
FillBytes(S1,255);
S2:=TMemoryStream.Create;
try
FillBytes(S2,254);
AssertEquals('Different sizes makes not equal',False,FRD.StreamsEqual(S1,S2));
finally
S2.Free;
end;
finally
S1.Free;
end;
end;
procedure TTestReportDOM.TestStreamEquals4;
Var
S1,S2 : TMemoryStream;
B : Byte;
begin
S1:=TMemoryStream.Create;
try
FillBytes(S1,255);
AssertEquals(0,S1.Seek(0,soFromBeginning));
B:=10;
S1.WriteBuffer(B,1);
B:=12;
S1.Position:=0;
S1.ReadBuffer(B,1);
AssertEquals(10,B);
AssertEquals(256,S1.Size);
S2:=TMemoryStream.Create;
try
FillBytes(S2,255);
AssertEquals('Different streams makes not equal',False,FRD.StreamsEqual(S1,S2));
finally
S2.Free;
end;
finally
S1.Free;
end;
end;
procedure TTestReportDOM.TestWriteInteger1;
Var
E : TDOMElement;
begin
E:=FRD.NewDOMElement('MyElement');
FRD.WriteInteger('Int',1,psAttr);
AssertSame('Current element not changed',E,FRD.CurrentElement);
AssertAttribute('Int','1');
end;
procedure TTestReportDOM.TestWriteInteger2;
Var
E : TDOMElement;
begin
E:=FRD.NewDOMElement('MyElement');
FRD.WriteInteger('Int',1,psElement);
AssertSame('Current element not changed',E,FRD.CurrentElement);
AssertValueElement('Int','1');
end;
procedure TTestReportDOM.TestWriteString1;
Var
E : TDOMElement;
begin
E:=FRD.NewDOMElement('MyElement');
FRD.WriteString('Str','Aloha',psAttr);
AssertSame('Current element not changed',E,FRD.CurrentElement);
AssertAttribute('Str','Aloha');
end;
procedure TTestReportDOM.TestWriteString2;
Var
E : TDOMElement;
begin
E:=FRD.NewDOMElement('MyElement');
FRD.WriteString('Str','Aloha',psElement);
AssertSame('Current element not changed',E,FRD.CurrentElement);
AssertValueElement('Str','Aloha');
end;
procedure TTestReportDOM.TestWriteString3;
Var
E : TDOMElement;
begin
E:=FRD.NewDOMElement('MyElement');
FRD.WriteString('Str','',psAttr);
AssertSame('Current element not changed',E,FRD.CurrentElement);
AssertAttribute('Str','');
end;
procedure TTestReportDOM.TestWriteString4;
Var
E : TDOMElement;
begin
E:=FRD.NewDOMElement('MyElement');
FRD.WriteString('Str','',psElement);
AssertSame('Current element not changed',E,FRD.CurrentElement);
AssertValueElement('Str','');
end;
procedure TTestReportDOM.TestWriteWideString1;
Var
E : TDOMElement;
W : WideString;
begin
E:=FRD.NewDOMElement('MyElement');
W:='Wide Aloha';
FRD.WriteWideString('WideStr',W,psAttr);
AssertSame('Current element not changed',E,FRD.CurrentElement);
AssertAttribute('WideStr',W);
end;
procedure TTestReportDOM.TestWriteWideString2;
Var
E : TDOMElement;
W : WideString;
begin
E:=FRD.NewDOMElement('MyElement');
W:='Wide Aloha';
FRD.WriteWideString('WideStr',W,psElement);
AssertSame('Current element not changed',E,FRD.CurrentElement);
AssertValueElement('WideStr',W);
end;
procedure TTestReportDOM.TestWriteWideString3;
Var
E : TDOMElement;
W : WideString;
begin
E:=FRD.NewDOMElement('MyElement');
W:='';
FRD.WriteWideString('WideStr',W,psAttr);
AssertSame('Current element not changed',E,FRD.CurrentElement);
AssertAttribute('WideStr','');
end;
procedure TTestReportDOM.TestWriteWideString4;
Var
E : TDOMElement;
W : WideString;
begin
E:=FRD.NewDOMElement('MyElement');
W:='';
FRD.WriteWideString('WideStr',W,psElement);
AssertSame('Current element not changed',E,FRD.CurrentElement);
AssertValueElement('WideStr',W);
end;
procedure TTestReportDOM.TestWriteBoolean1;
Var
E : TDOMElement;
begin
E:=FRD.NewDOMElement('MyElement');
FRD.WriteBoolean('Bool',True,psAttr);
AssertSame('Current element not changed',E,FRD.CurrentElement);
AssertAttribute('Bool','1');
end;
procedure TTestReportDOM.TestWriteBoolean2;
Var
E : TDOMElement;
begin
E:=FRD.NewDOMElement('MyElement');
FRD.WriteBoolean('Bool',False,psAttr);
AssertSame('Current element not changed',E,FRD.CurrentElement);
AssertAttribute('Bool','0');
end;
procedure TTestReportDOM.TestWriteBoolean3;
Var
E : TDOMElement;
begin
E:=FRD.NewDOMElement('MyElement');
FRD.WriteBoolean('Bool',True,psElement);
AssertSame('Current element not changed',E,FRD.CurrentElement);
AssertValueElement('Bool','1');
end;
procedure TTestReportDOM.TestWriteBoolean4;
Var
E : TDOMElement;
begin
E:=FRD.NewDOMElement('MyElement');
FRD.WriteBoolean('Bool',False,psElement);
AssertSame('Current element not changed',E,FRD.CurrentElement);
AssertValueElement('Bool','0');
end;
procedure TTestReportDOM.TestWriteFloat1;
Var
E : TDOMElement;
begin
E:=FRD.NewDOMElement('MyElement');
FRD.WriteFloat('Float',1.23,psAttr);
AssertSame('Current element not changed',E,FRD.CurrentElement);
AssertAttribute('Float','1.230000000E+0000');
end;
procedure TTestReportDOM.TestWriteFloat2;
Var
E : TDOMElement;
begin
E:=FRD.NewDOMElement('MyElement');
FRD.WriteFloat('Float',1.23,psElement);
AssertSame('Current element not changed',E,FRD.CurrentElement);
AssertValueElement('Float','1.230000000E+0000');
end;
procedure TTestReportDOM.TestWriteFloat3;
Var
E : TDOMElement;
begin
E:=FRD.NewDOMElement('MyElement');
FRD.WriteFloat('Float',-1.23,psAttr);
AssertSame('Current element not changed',E,FRD.CurrentElement);
AssertAttribute('Float','-1.230000000E+0000');
end;
procedure TTestReportDOM.TestWriteFloat4;
Var
E : TDOMElement;
begin
E:=FRD.NewDOMElement('MyElement');
FRD.WriteFloat('Float',-1.23,psElement);
AssertSame('Current element not changed',E,FRD.CurrentElement);
AssertValueElement('Float','-1.230000000E+0000');
end;
procedure TTestReportDOM.TestWriteFloat5;
Var
E : TDOMElement;
x : extended;
begin
E:=FRD.NewDOMElement('MyElement');
X:=0.000000000;
FRD.WriteFloat('Float',x,psAttr);
AssertSame('Current element not changed',E,FRD.CurrentElement);
AssertAttribute('Float','0.000000000E+0000');
end;
procedure TTestReportDOM.TestWriteFloat6;
Var
E : TDOMElement;
x : extended;
begin
E:=FRD.NewDOMElement('MyElement');
X:=0.000000000;
FRD.WriteFloat('Float',x,psElement);
AssertSame('Current element not changed',E,FRD.CurrentElement);
AssertValueElement('Float','0.000000000E+0000');
end;
procedure TTestReportDOM.TestWriteDateTime1;
Var
E : TDOMElement;
D : TDateTime;
begin
E:=FRD.NewDOMElement('MyElement');
D:=EncodeDate(2008,9,18);
FRD.WriteDateTime('Date',D,psAttr);
AssertSame('Current element not changed',E,FRD.CurrentElement);
AssertAttribute('Date','20080918');
end;
procedure TTestReportDOM.TestWriteDateTime2;
Var
E : TDOMElement;
D : TDateTime;
begin
E:=FRD.NewDOMElement('MyElement');
D:=EncodeDate(2008,9,18);
FRD.WriteDateTime('Date',D,psElement);
AssertSame('Current element not changed',E,FRD.CurrentElement);
AssertValueElement('Date','20080918');
end;
procedure TTestReportDOM.TestWriteDateTime3;
Var
E : TDOMElement;
D : TDateTime;
begin
E:=FRD.NewDOMElement('MyElement');
D:=EncodeDate(2008,9,18)+EncodeTime(11,03,55,123);
FRD.WriteDateTime('Date',D,psAttr);
AssertSame('Current element not changed',E,FRD.CurrentElement);
AssertAttribute('Date','20080918110355123');
end;
procedure TTestReportDOM.TestWriteDateTime4;
Var
E : TDOMElement;
D : TDateTime;
begin
E:=FRD.NewDOMElement('MyElement');
D:=EncodeDate(2008,9,18)+EncodeTime(11,03,55,123);
FRD.WriteDateTime('Date',D,psElement);
AssertSame('Current element not changed',E,FRD.CurrentElement);
AssertValueElement('Date','20080918110355123');
end;
procedure TTestReportDOM.TestWriteDateTime5;
Var
E : TDOMElement;
D : TDateTime;
begin
E:=FRD.NewDOMElement('MyElement');
D:=EncodeTime(11,03,55,123);
FRD.WriteDateTime('Date',D,psAttr);
AssertSame('Current element not changed',E,FRD.CurrentElement);
AssertAttribute('Date','00000000110355123');
end;
procedure TTestReportDOM.TestWriteDateTime6;
Var
E : TDOMElement;
D : TDateTime;
begin
E:=FRD.NewDOMElement('MyElement');
D:=EncodeTime(11,03,55,123);
FRD.WriteDateTime('Date',D,psElement);
AssertSame('Current element not changed',E,FRD.CurrentElement);
AssertValueElement('Date','00000000110355123');
end;
procedure TTestReportDOM.TestWriteStream1;
Var
E : TDOMElement;
S : TMemoryStream;
begin
E:=FRD.NewDOMElement('MyElement');
S:=TMemoryStream.Create;
try
FillBytes(S,15);
FRD.WriteStream('Stream',S,psAttr);
AssertSame('Current element not changed',E,FRD.CurrentElement);
AssertAttribute('Stream','000102030405060708090A0B0C0D0E0F');
finally
FreeAndNil(S);
end;
end;
procedure TTestReportDOM.TestWriteStream2;
Var
E : TDOMElement;
S : TMemoryStream;
begin
E:=FRD.NewDOMElement('MyElement');
S:=TMemoryStream.Create;
try
FillBytes(S,15);
FRD.WriteStream('Stream',S,psElement);
AssertSame('Current element not changed',E,FRD.CurrentElement);
AssertValueElement('Stream','000102030405060708090A0B0C0D0E0F');
finally
FreeAndNil(S);
end;
end;
procedure TTestReportDOM.TestWriteIntegerDiff1;
Var
E : TDOMElement;
begin
E:=FRD.NewDOMElement('MyElement');
FRD.WriteIntegerDiff('Int',1,0,psAttr);
AssertSame('Current element not changed',E,FRD.CurrentElement);
AssertAttribute('Int','1');
end;
procedure TTestReportDOM.TestWriteIntegerDiff2;
Var
E : TDOMElement;
begin
E:=FRD.NewDOMElement('MyElement');
FRD.WriteIntegerDiff('Int',1,1,psAttr);
AssertSame('Current element not changed',E,FRD.CurrentElement);
AssertNoAttribute('Int');
end;
procedure TTestReportDOM.TestWriteStringDiff1;
Var
E : TDOMElement;
begin
E:=FRD.NewDOMElement('MyElement');
FRD.WriteStringDiff('Str','Aloha','mopa',psAttr);
AssertSame('Current element not changed',E,FRD.CurrentElement);
AssertAttribute('Str','Aloha');
end;
procedure TTestReportDOM.TestWriteStringDiff2;
Var
E : TDOMElement;
begin
E:=FRD.NewDOMElement('MyElement');
FRD.WriteStringDiff('Str','Aloha','Aloha',psAttr);
AssertSame('Current element not changed',E,FRD.CurrentElement);
AssertNoAttribute('Str');
end;
procedure TTestReportDOM.TestWriteWideStringDiff1;
Var
E : TDOMElement;
W : WideString;
begin
E:=FRD.NewDOMElement('MyElement');
W:='Wide Aloha';
FRD.WriteWideStringDiff('WideStr',W,W,psAttr);
AssertSame('Current element not changed',E,FRD.CurrentElement);
AssertNoAttribute('WideStr');
end;
procedure TTestReportDOM.TestWriteWideStringDiff2;
Var
E : TDOMElement;
W : WideString;
begin
E:=FRD.NewDOMElement('MyElement');
W:='Wide Aloha';
FRD.WriteWideStringDiff('WideStr',W,W+' me',psAttr);
AssertSame('Current element not changed',E,FRD.CurrentElement);
AssertAttribute('WideStr',W);
end;
procedure TTestReportDOM.TestWriteBooleanDiff1;
Var
E : TDOMElement;
begin
E:=FRD.NewDOMElement('MyElement');
FRD.WriteBooleanDiff('Bool',True,False,psAttr);
AssertSame('Current element not changed',E,FRD.CurrentElement);
AssertAttribute('Bool','1');
end;
procedure TTestReportDOM.TestWriteBooleanDiff2;
Var
E : TDOMElement;
begin
E:=FRD.NewDOMElement('MyElement');
FRD.WriteBooleanDiff('Bool',True,True,psAttr);
AssertSame('Current element not changed',E,FRD.CurrentElement);
AssertNoAttribute('Bool');
end;
procedure TTestReportDOM.TestWriteFloatDiff1;
Var
E : TDOMElement;
begin
E:=FRD.NewDOMElement('MyElement');
FRD.WriteFloatDiff('Float',1.23,1.24,psAttr);
AssertSame('Current element not changed',E,FRD.CurrentElement);
AssertAttribute('Float','1.230000000E+0000');
end;
procedure TTestReportDOM.TestWriteFloatDiff2;
Var
E : TDOMElement;
begin
E:=FRD.NewDOMElement('MyElement');
FRD.WriteFloatDiff('Float',1.23,1.23,psAttr);
AssertSame('Current element not changed',E,FRD.CurrentElement);
AssertNoAttribute('Float');
end;
procedure TTestReportDOM.TestWriteDateTimeDiff1;
Var
E : TDOMElement;
D : TDateTime;
begin
E:=FRD.NewDOMElement('MyElement');
D:=EncodeDate(2008,9,18);
FRD.WriteDateTimeDiff('Date',D,D+1,psAttr);
AssertSame('Current element not changed',E,FRD.CurrentElement);
AssertAttribute('Date','20080918');
end;
procedure TTestReportDOM.TestWriteDateTimeDiff2;
Var
E : TDOMElement;
D : TDateTime;
begin
E:=FRD.NewDOMElement('MyElement');
D:=EncodeDate(2008,9,18);
FRD.WriteDateTimeDiff('Date',D,D,psAttr);
AssertSame('Current element not changed',E,FRD.CurrentElement);
AssertNoAttribute('Date');
end;
procedure TTestReportDOM.TestWriteDateTimeDiff3;
Var
E : TDOMElement;
D : TDateTime;
begin
E:=FRD.NewDOMElement('MyElement');
D:=EncodeDate(2008,9,18)+EncodeTime(0,0,0,1);
FRD.WriteDateTimeDiff('Date',D,D,psAttr);
AssertSame('Current element not changed',E,FRD.CurrentElement);
AssertNoAttribute('Date');
end;
procedure TTestReportDOM.TestWriteDateTimeDiff4;
Var
E : TDOMElement;
D : TDateTime;
begin
E:=FRD.NewDOMElement('MyElement');
D:=EncodeDate(2008,9,18);
FRD.WriteDateTimeDiff('Date',D,D+EncodeTime(0,0,0,1),psAttr);
AssertSame('Current element not changed',E,FRD.CurrentElement);
AssertAttribute('Date','20080918');
end;
procedure TTestReportDOM.TestWriteStreamDiff1;
Var
E : TDOMElement;
S : TMemoryStream;
begin
E:=FRD.NewDOMElement('MyElement');
S:=TMemoryStream.Create;
try
FillBytes(S,15);
FRD.WriteStreamDiff('Stream',S,S,psAttr);
AssertSame('Current element not changed',E,FRD.CurrentElement);
AssertNoAttribute('Stream');
finally
FreeAndNil(S);
end;
end;
procedure TTestReportDOM.TestWriteStreamDiff2;
Var
E : TDOMElement;
S,T : TMemoryStream;
begin
E:=FRD.NewDOMElement('MyElement');
S:=TMemoryStream.Create;
try
FillBytes(S,15);
T:=TMemoryStream.Create;
try
FillBytes(T,15);
FRD.WriteStreamDiff('Stream',S,T,psAttr);
AssertSame('Current element not changed',E,FRD.CurrentElement);
AssertNoAttribute('Stream');
finally
FreeAndNil(T);
end;
finally
FreeAndNil(S);
end;
end;
procedure TTestReportDOM.TestWriteStreamDiff3;
Var
E : TDOMElement;
S,T : TMemoryStream;
begin
E:=FRD.NewDOMElement('MyElement');
S:=TMemoryStream.Create;
try
FillBytes(S,15);
T:=TMemoryStream.Create;
try
FillBytes(T,16);
FRD.WriteStreamDiff('Stream',S,T,psAttr);
AssertSame('Current element not changed',E,FRD.CurrentElement);
AssertAttribute('Stream','000102030405060708090A0B0C0D0E0F');
finally
FreeAndNil(T);
end;
finally
FreeAndNil(S);
end;
end;
procedure TTestReportDOM.TestReadInteger1;
Var
E : TDOMElement;
begin
E:=FRD.NewDOMElement('MyElement');
FRD.WriteInteger('Int',1,psAttr);
AssertSame('Current element not changed',E,FRD.CurrentElement);
AssertEquals('Reading integer property',1,FRD.ReadInteger('Int',-1,psAttr));
AssertSame('Current element not changed',E,FRD.CurrentElement);
end;
procedure TTestReportDOM.TestReadInteger2;
Var
E : TDOMElement;
begin
E:=FRD.NewDOMElement('MyElement');
FRD.WriteInteger('Int',1,psAttr);
AssertSame('Current element not changed',E,FRD.CurrentElement);
AssertEquals('Reading integer property with wrong storagetype',-1,FRD.ReadInteger('Int',-1,psElement));
AssertSame('Current element not changed',E,FRD.CurrentElement);
end;
procedure TTestReportDOM.TestReadInteger3;
Var
E : TDOMElement;
begin
E:=FRD.NewDOMElement('MyElement');
AssertEquals('Reading non-existent integer property (attr)',-1,FRD.ReadInteger('Int',-1,psAttr));
end;
procedure TTestReportDOM.TestReadInteger4;
Var
E : TDOMElement;
begin
E:=FRD.NewDOMElement('MyElement');
AssertEquals('Reading non-existent integer property (element)',-1,FRD.ReadInteger('Int',-1,psElement));
end;
procedure TTestReportDOM.TestReadInteger5;
Var
E : TDOMElement;
begin
E:=FRD.NewDOMElement('MyElement');
FRD.WriteString('Int','Aloha',psAttr);
AssertEquals('Reading wrongly typed integer property (attr)',-1,FRD.ReadInteger('Int',-1,psAttr));
end;
procedure TTestReportDOM.TestReadInteger6;
Var
E : TDOMElement;
begin
E:=FRD.NewDOMElement('MyElement');
FRD.WriteString('Int','Aloha',psElement);
AssertEquals('Reading wrongly typed integer property (element)',-1,FRD.ReadInteger('Int',-1,psElement));
end;
procedure TTestReportDOM.TestReadString1;
Var
E : TDOMElement;
begin
E:=FRD.NewDOMElement('MyElement');
FRD.WriteString('Str','Aloha',psAttr);
AssertSame('Current element not changed',E,FRD.CurrentElement);
AssertEquals('Reading string property (attr) ','Aloha',FRD.ReadString('Str','(none)',psattr));
AssertSame('Current element not changed',E,FRD.CurrentElement);
end;
procedure TTestReportDOM.TestReadString2;
Var
E : TDOMElement;
begin
E:=FRD.NewDOMElement('MyElement');
FRD.WriteString('Str','Aloha',psElement);
AssertSame('Current element not changed',E,FRD.CurrentElement);
AssertEquals('Reading string property (element)','Aloha',FRD.ReadString('Str','(none)',psElement));
AssertSame('Current element not changed',E,FRD.CurrentElement);
end;
procedure TTestReportDOM.TestReadString3;
Var
E : TDOMElement;
begin
E:=FRD.NewDOMElement('MyElement');
AssertEquals('Reading non-existent string property (attr)','(none)',FRD.ReadString('Str','(none)',psAttr));
end;
procedure TTestReportDOM.TestReadString4;
Var
E : TDOMElement;
begin
E:=FRD.NewDOMElement('MyElement');
AssertEquals('Reading non-existent string property (element)','(none)',FRD.ReadString('Str','(none)',psElement));
end;
procedure TTestReportDOM.TestReadWideString1;
Var
E : TDOMElement;
W : WideString;
begin
E:=FRD.NewDOMElement('MyElement');
W:='Wide Aloha';
FRD.WriteWideString('WideStr',W,psAttr);
AssertSame('Current element not changed',E,FRD.CurrentElement);
AssertEquals('Reading wide string property (attr) ',W,FRD.ReadWideString('WideStr','(none)',psattr));
AssertSame('Current element not changed',E,FRD.CurrentElement);
end;
procedure TTestReportDOM.TestReadWideString2;
Var
E : TDOMElement;
W : WideString;
begin
E:=FRD.NewDOMElement('MyElement');
W:='Wide Aloha';
FRD.WriteWideString('WideStr',W,psElement);
AssertSame('Current element not changed',E,FRD.CurrentElement);
AssertEquals('Reading wide string property (element) ',W,FRD.ReadWideString('WideStr','(none)',psElement));
AssertSame('Current element not changed',E,FRD.CurrentElement);
end;
procedure TTestReportDOM.TestReadWideString3;
Var
E : TDOMElement;
W : WideString;
begin
E:=FRD.NewDOMElement('MyElement');
W:='Wide Aloha';
AssertEquals('Reading non-existing wide string property (attr) ',W,FRD.ReadWideString('WideStr',W,psattr));
AssertSame('Current element not changed',E,FRD.CurrentElement);
end;
procedure TTestReportDOM.TestReadWideString4;
Var
E : TDOMElement;
W : WideString;
begin
E:=FRD.NewDOMElement('MyElement');
W:='Wide Aloha';
AssertEquals('Reading non-existing wide string property (element) ',W,FRD.ReadWideString('WideStr',W,psElement));
AssertSame('Current element not changed',E,FRD.CurrentElement);
end;
procedure TTestReportDOM.TestReadDateTime1;
Var
E : TDOMElement;
D : TDateTime;
begin
E:=FRD.NewDOMElement('MyElement');
D:=EncodeDate(2008,9,18);
FRD.WriteDateTime('Date',D,psAttr);
AssertSame('Current element not changed',E,FRD.CurrentElement);
AssertEquals('Reading date property (Attr)',D,FRD.ReadDateTime('Date',D-1,psAttr));
AssertSame('Current element not changed',E,FRD.CurrentElement);
end;
procedure TTestReportDOM.TestReadDateTime2;
Var
E : TDOMElement;
D : TDateTime;
begin
E:=FRD.NewDOMElement('MyElement');
D:=EncodeDate(2008,9,18);
FRD.WriteDateTime('Date',D,psElement);
AssertSame('Current element not changed',E,FRD.CurrentElement);
AssertEquals('Reading date property (Attr)',D,FRD.ReadDateTime('Date',D-1,psElement));
AssertSame('Current element not changed',E,FRD.CurrentElement);
end;
procedure TTestReportDOM.TestReadDateTime3;
Var
E : TDOMElement;
D : TDateTime;
begin
E:=FRD.NewDOMElement('MyElement');
D:=EncodeDate(2008,9,18)+EncodeTime(11,03,55,123);
FRD.WriteDateTime('Date',D,psAttr);
AssertSame('Current element not changed',E,FRD.CurrentElement);
AssertEquals('Reading date/time property (Attr)',D,FRD.ReadDateTime('Date',D-1,psAttr));
AssertSame('Current element not changed',E,FRD.CurrentElement);
end;
procedure TTestReportDOM.TestReadDateTime4;
Var
E : TDOMElement;
D : TDateTime;
begin
E:=FRD.NewDOMElement('MyElement');
D:=EncodeDate(2008,9,18)+EncodeTime(11,03,55,123);
FRD.WriteDateTime('Date',D,psElement);
AssertSame('Current element not changed',E,FRD.CurrentElement);
AssertEquals('Reading date/time property (element)',D,FRD.ReadDateTime('Date',D-1,psElement));
AssertSame('Current element not changed',E,FRD.CurrentElement);
end;
procedure TTestReportDOM.TestReadDateTime5;
Var
E : TDOMElement;
D : TDateTime;
begin
E:=FRD.NewDOMElement('MyElement');
D:=EncodeTime(11,03,55,123);
AssertEquals('Reading non-existent time property (element)',D,FRD.ReadDateTime('Date',D,psElement));
AssertSame('Current element not changed',E,FRD.CurrentElement);
end;
procedure TTestReportDOM.TestReadDateTime6;
Var
E : TDOMElement;
D : TDateTime;
begin
E:=FRD.NewDOMElement('MyElement');
D:=EncodeTime(11,03,55,123);
AssertEquals('Reading non-existent time property (element)',D,FRD.ReadDateTime('Date',D,psAttr));
AssertSame('Current element not changed',E,FRD.CurrentElement);
end;
procedure TTestReportDOM.TestReadDateTime7;
Var
E : TDOMElement;
D : TDateTime;
begin
E:=FRD.NewDOMElement('MyElement');
D:=EncodeDate(2008,9,18);
FRD.WriteString('Date','20080918',psAttr);
AssertEquals('Reading date-only property (element)',D,FRD.ReadDateTime('Date',D-1,psAttr));
AssertSame('Current element not changed',E,FRD.CurrentElement);
end;
procedure TTestReportDOM.TestReadDateTime8;
Var
E : TDOMElement;
D : TDateTime;
begin
E:=FRD.NewDOMElement('MyElement');
D:=EncodeDate(2008,9,18);
FRD.WriteString('Date','20080918aaa',psAttr);
AssertEquals('Reading wrong time/date-ok property (element)',D-1,FRD.ReadDateTime('Date',D-1,psAttr));
AssertSame('Current element not changed',E,FRD.CurrentElement);
end;
procedure TTestReportDOM.TestReadDateTime9;
Var
E : TDOMElement;
D : TDateTime;
begin
E:=FRD.NewDOMElement('MyElement');
D:=EncodeDate(2008,9,18)+EncodeTime(11,03,55,0);
FRD.WriteString('Date','20080918110355',psAttr);
AssertEquals('Reading wrong time (no millisec)/date property (element)',DateTimeToStr(D),DateTimeToStr(FRD.ReadDateTime('Date',D-1,psAttr)));
AssertSame('Current element not changed',E,FRD.CurrentElement);
end;
procedure TTestReportDOM.TestReadDateTime10;
Var
E : TDOMElement;
D : TDateTime;
begin
E:=FRD.NewDOMElement('MyElement');
D:=EncodeDate(2008,9,18)+EncodeTime(11,03,55,0);
FRD.WriteString('Date','200809',psAttr);
AssertEquals('Reading wrong date property (element)',D-1,FRD.ReadDateTime('Date',D-1,psAttr));
AssertSame('Current element not changed',E,FRD.CurrentElement);
end;
procedure TTestReportDOM.TestReadBoolean1;
Var
E : TDOMElement;
begin
E:=FRD.NewDOMElement('MyElement');
FRD.WriteBoolean('Bool',True,psAttr);
AssertSame('Current element not changed',E,FRD.CurrentElement);
AssertEquals('Reading true boolean property (attr)',True,FRD.ReadBoolean('Bool',False,psAttr));
AssertSame('Current element not changed',E,FRD.CurrentElement);
end;
procedure TTestReportDOM.TestReadBoolean2;
Var
E : TDOMElement;
begin
E:=FRD.NewDOMElement('MyElement');
FRD.WriteBoolean('Bool',False,psAttr);
AssertSame('Current element not changed',E,FRD.CurrentElement);
AssertEquals('Reading true boolean property (attr)',False,FRD.ReadBoolean('Bool',True,psAttr));
AssertSame('Current element not changed',E,FRD.CurrentElement);
end;
procedure TTestReportDOM.TestReadBoolean3;
Var
E : TDOMElement;
begin
E:=FRD.NewDOMElement('MyElement');
FRD.WriteBoolean('Bool',True,psElement);
AssertSame('Current element not changed',E,FRD.CurrentElement);
AssertEquals('Reading true boolean property (element)',True,FRD.ReadBoolean('Bool',False,psElement));
AssertSame('Current element not changed',E,FRD.CurrentElement);
end;
procedure TTestReportDOM.TestReadBoolean4;
Var
E : TDOMElement;
begin
E:=FRD.NewDOMElement('MyElement');
FRD.WriteBoolean('Bool',False,psElement);
AssertSame('Current element not changed',E,FRD.CurrentElement);
AssertEquals('Reading true boolean property (element)',False,FRD.ReadBoolean('Bool',True,psElement));
AssertSame('Current element not changed',E,FRD.CurrentElement);
end;
procedure TTestReportDOM.TestReadBoolean5;
Var
E : TDOMElement;
begin
E:=FRD.NewDOMElement('MyElement');
FRD.WriteString('Bool','Aloha',psAttr);
AssertSame('Current element not changed',E,FRD.CurrentElement);
AssertEquals('Reading invalid boolean property',True,FRD.ReadBoolean('Bool',True,psElement));
AssertSame('Current element not changed',E,FRD.CurrentElement);
end;
procedure TTestReportDOM.TestReadBoolean6;
Var
E : TDOMElement;
begin
E:=FRD.NewDOMElement('MyElement');
FRD.WriteString('Bool','Aloha',psAttr);
AssertSame('Current element not changed',E,FRD.CurrentElement);
AssertEquals('Reading invalid boolean property',False,FRD.ReadBoolean('Bool',False,psAttr));
AssertSame('Current element not changed',E,FRD.CurrentElement);
end;
procedure TTestReportDOM.TestReadBoolean7;
Var
E : TDOMElement;
begin
E:=FRD.NewDOMElement('MyElement');
AssertEquals('Reading non-existent boolean property',True,FRD.ReadBoolean('Bool',True,psAttr));
AssertSame('Current element not changed',E,FRD.CurrentElement);
end;
procedure TTestReportDOM.TestReadBoolean8;
Var
E : TDOMElement;
begin
E:=FRD.NewDOMElement('MyElement');
AssertEquals('Reading non-existent boolean property (element)',True,FRD.ReadBoolean('Bool',True,psElement));
AssertSame('Current element not changed',E,FRD.CurrentElement);
end;
procedure TTestReportDOM.TestReadFloat1;
Var
E : TDOMElement;
begin
E:=FRD.NewDOMElement('MyElement');
FRD.WriteFloat('Float',1.23,psAttr);
AssertSame('Current element not changed',E,FRD.CurrentElement);
AssertEquals('Reading float property (attr)',1.23,FRD.ReadFloat('Float',2.34,psAttr),0.001);
AssertSame('Current element not changed',E,FRD.CurrentElement);
end;
procedure TTestReportDOM.TestReadFloat2;
Var
E : TDOMElement;
begin
E:=FRD.NewDOMElement('MyElement');
FRD.WriteFloat('Float',1.23,psElement);
AssertSame('Current element not changed',E,FRD.CurrentElement);
AssertEquals('Reading float property (attr)',1.23,FRD.ReadFloat('Float',2.34,psElement),0.001);
AssertSame('Current element not changed',E,FRD.CurrentElement);
end;
procedure TTestReportDOM.TestReadFloat3;
Var
E : TDOMElement;
begin
E:=FRD.NewDOMElement('MyElement');
FRD.WriteString('Float','1.23a',psElement);
AssertSame('Current element not changed',E,FRD.CurrentElement);
AssertEquals('Reading wrong float property (element)',2.34,FRD.ReadFloat('Float',2.34,psElement),0.001);
AssertSame('Current element not changed',E,FRD.CurrentElement);
end;
procedure TTestReportDOM.TestReadFloat4;
Var
E : TDOMElement;
begin
E:=FRD.NewDOMElement('MyElement');
FRD.WriteString('Float','1.23a',psAttr);
AssertSame('Current element not changed',E,FRD.CurrentElement);
AssertEquals('Reading wrong float property (attr)',2.34,FRD.ReadFloat('Float',2.34,psAttr),0.001);
AssertSame('Current element not changed',E,FRD.CurrentElement);
end;
procedure TTestReportDOM.TestReadFloat5;
Var
E : TDOMElement;
begin
E:=FRD.NewDOMElement('MyElement');
AssertEquals('Reading nonexistent float property (attr)',2.34,FRD.ReadFloat('Float',2.34,psAttr),0.001);
AssertSame('Current element not changed',E,FRD.CurrentElement);
end;
procedure TTestReportDOM.TestReadFloat6;
Var
E : TDOMElement;
begin
E:=FRD.NewDOMElement('MyElement');
AssertEquals('Reading nonexistent float property (element)',2.34,FRD.ReadFloat('Float',2.34,psElement),0.001);
AssertSame('Current element not changed',E,FRD.CurrentElement);
end;
procedure TTestReportDOM.TestReadFloat7;
Var
E : TDOMElement;
begin
E:=FRD.NewDOMElement('MyElement');
FRD.WriteString('Float','1',psAttr);
AssertSame('Current element not changed',E,FRD.CurrentElement);
AssertEquals('Reading integer-formatted float property (attr)',1,FRD.ReadFloat('Float',2.34,psAttr),0.001);
AssertSame('Current element not changed',E,FRD.CurrentElement);
end;
procedure TTestReportDOM.TestReadStream1;
Var
E : TDOMElement;
S,T : TMemoryStream;
begin
E:=FRD.NewDOMElement('MyElement');
S:=TMemoryStream.Create;
try
FillBytes(S,15);
FRD.WriteStream('Stream',S,psAttr);
AssertSame('Current element not changed',E,FRD.CurrentElement);
T:=TMemoryStream.Create;
try
AssertEquals('Reading stream data (attr)',True,FRD.ReadStream('Stream',T,psAttr));
AssertEquals('Read stream equals written stream',True,FRD.StreamsEqual(S,T));
finally
T.Free;
end;
finally
FreeAndNil(S);
end;
end;
procedure TTestReportDOM.TestReadStream2;
Var
E : TDOMElement;
S,T : TMemoryStream;
begin
E:=FRD.NewDOMElement('MyElement');
S:=TMemoryStream.Create;
try
FillBytes(S,15);
FRD.WriteStream('Stream',S,psElement);
AssertSame('Current element not changed',E,FRD.CurrentElement);
T:=TMemoryStream.Create;
try
AssertEquals('Reading stream data (element)',True,FRD.ReadStream('Stream',T,psElement));
AssertEquals('Read stream equals written stream',True,FRD.StreamsEqual(S,T));
finally
T.Free;
end;
finally
FreeAndNil(S);
end;
end;
procedure TTestReportDOM.TestReadStream3;
Var
E : TDOMElement;
S,T : TMemoryStream;
begin
E:=FRD.NewDOMElement('MyElement');
FRD.WriteString('Stream','',psElement);
AssertSame('Current element not changed',E,FRD.CurrentElement);
T:=TMemoryStream.Create;
try
AssertEquals('Reading stream data (element)',False,FRD.ReadStream('Stream',T,psElement));
AssertEquals('Read stream is empty',0,T.Size);
finally
T.Free;
end;
end;
procedure TTestReportDOM.TestReadStream4;
Var
E : TDOMElement;
S,T : TMemoryStream;
begin
E:=FRD.NewDOMElement('MyElement');
FRD.WriteString('Stream','',psAttr);
AssertSame('Current element not changed',E,FRD.CurrentElement);
T:=TMemoryStream.Create;
try
AssertEquals('Reading stream data (attr)',False,FRD.ReadStream('Stream',T,psAttr));
AssertEquals('Read stream is empty',0,T.Size);
finally
T.Free;
end;
end;
procedure TTestReportDOM.TestReadStream5;
Var
E : TDOMElement;
S,T : TMemoryStream;
begin
E:=FRD.NewDOMElement('MyElement');
AssertSame('Current element not changed',E,FRD.CurrentElement);
T:=TMemoryStream.Create;
try
AssertEquals('Reading non-existent stream data (attr)',False,FRD.ReadStream('Stream',T,psAttr));
AssertEquals('Read stream is empty',0,T.Size);
finally
T.Free;
end;
end;
procedure TTestReportDOM.TestReadStream6;
Var
E : TDOMElement;
S,T : TMemoryStream;
begin
E:=FRD.NewDOMElement('MyElement');
AssertSame('Current element not changed',E,FRD.CurrentElement);
T:=TMemoryStream.Create;
try
AssertEquals('Reading non-existent stream data (element)',False,FRD.ReadStream('Stream',T,psElement));
AssertEquals('Read stream is empty',0,T.Size);
finally
T.Free;
end;
end;
{ TTestReportFrameDom }
procedure TTestReportFrameDom.Setup;
begin
inherited Setup;
FF:=TFPReportframe.Create(Nil);
F2:=TFPReportframe.Create(Nil);
FRD.NewDOMElement('Shape');
end;
procedure TTestReportFrameDom.TearDown;
begin
FreeAndNil(FF);
FreeAndNil(F2);
inherited TearDown;
end;
Procedure FillFrame(FF : TFPReportFrame);
begin
FF.Width:=2;
FF.Pen:=psDot;
FF.Shape:=fsRoundedRect;
FF.Color:=23;
FF.Lines:=[flTop,flBottom];
end;
procedure TTestReportFrameDom.FillFF;
begin
FillFrame(FF);
end;
procedure TTestReportFrameDom.TestWrite;
begin
FillFF;
FF.WriteXML(FRD,Nil);
AssertEquals('Width saved',2,FRD.ReadInteger('W',1));
AssertEquals('Pen saved',ord(psDot),FRD.ReadInteger('W',1));
AssertEquals('Color saved',ord(23),FRD.ReadInteger('C',1));
AssertEquals('Shape saved',ord(fsRoundedRect),FRD.ReadInteger('S',0));
AssertEquals('Lines saved',Integer([flTop,flBottom]),FRD.ReadInteger('L',0));
end;
procedure TTestReportFrameDom.TestWriteDiff;
begin
FillFF;
FF.WriteXML(FRD,F2);
AssertEquals('Width saved',2,FRD.ReadInteger('W',1));
AssertEquals('Pen saved',ord(psDot),FRD.ReadInteger('W',1));
AssertEquals('Color saved',ord(23),FRD.ReadInteger('C',1));
AssertEquals('Shape saved',ord(fsRoundedRect),FRD.ReadInteger('S',0));
AssertEquals('Lines saved',Integer([flTop,flBottom]),FRD.ReadInteger('L',0));
end;
procedure TTestReportFrameDom.TestRead;
begin
FillFF;
FF.WriteXML(FRD,Nil);
F2.ReadXML(FRD);
AssertEquals('Width loaded',FF.Width,F2.Width);
AssertEquals('Pen loaded',Ord(FF.Pen),Ord(F2.Pen));
AssertEquals('Color loaded',Ord(FF.Color),Ord(F2.Color));
AssertEquals('Shape loaded',Ord(FF.Shape),Ord(F2.Shape));
AssertEquals('Lines loaded',Integer(FF.Lines),Integer(F2.Lines));
end;
{ TTestReportLayoutDom }
Procedure FillLayout(FL : TFPReportLayout);
begin
FL.Top:=1.2;
FL.Left:=3.4;
FL.Width:=5.6;
FL.Height:=7.8;
end;
procedure TTestReportLayoutDom.FillFL;
begin
FillLayout(FL);
end;
procedure TTestReportLayoutDom.Setup;
begin
inherited Setup;
FL:=TFPReportLayout.Create(Nil);
F2:=TFPReportLayout.Create(Nil);
FRD.NewDOMElement('layout');
end;
procedure TTestReportLayoutDom.TearDown;
begin
FreeAndNil(Fl);
FreeAndNil(F2);
inherited TearDown;
end;
procedure TTestReportLayoutDom.TestWrite;
begin
FillFL;
FL.WriteXML(FRD,Nil);
AssertEquals('Top saved',1.2,FRD.ReadFloat('t',0.0));
AssertEquals('Left saved',3.4,FRD.ReadFloat('l',0.0));
AssertEquals('Width saved',5.6,FRD.ReadFloat('w',0.0));
AssertEquals('Height saved',7.8,FRD.ReadFloat('h',0.0));
end;
procedure TTestReportLayoutDom.TestWriteDiff;
begin
FillFL;
FL.WriteXML(FRD,F2);
AssertEquals('Top saved',1.2,FRD.ReadFloat('t',0.0));
AssertEquals('Left saved',3.4,FRD.ReadFloat('l',0.0));
AssertEquals('Width saved',5.6,FRD.ReadFloat('w',0.0));
AssertEquals('Height saved',7.8,FRD.ReadFloat('h',0.0));
end;
procedure TTestReportLayoutDom.TestRead;
begin
FillFL;
FL.WriteXML(FRD,Nil);
F2.ReadXML(FRD);
AssertEquals('Top saved',FL.Top,F2.Top);
AssertEquals('Left saved',FL.Left,F2.Left);
AssertEquals('Width saved',FL.Width,F2.Width);
AssertEquals('Height saved',FL.Height,F2.Height);
end;
{ TTestReportElementDOM }
procedure TTestReportElementDOM.FillFE;
begin
FillLayout(FE.Layout);
FillFrame(FE.Frame);
end;
procedure TTestReportElementDOM.Setup;
begin
inherited Setup;
FE:=TFPReportElement.Create(Nil);
F2:=TFPReportElement.Create(Nil);
FRD.NewDomElement('element');
end;
procedure TTestReportElementDOM.TearDown;
begin
FreeAndNil(F2);
FreeAndNil(FE);
inherited TearDown;
end;
procedure TTestReportElementDOM.TestWrite1;
Var
E : TDomElement;
begin
FillFE;
E:=FRD.CurrentElement;
FE.WriteXML(FRD);
AssertSame('Current element not changed',E,FRD.CurrentElement);
E:=FRD.FindChild('Layout');
AssertNotNull('Layout was saved',E);
FRD.PushElement(E);
try
AssertEquals('Top saved',1.2,FRD.ReadFloat('t',0.0));
AssertEquals('Left saved',3.4,FRD.ReadFloat('l',0.0));
AssertEquals('Width saved',5.6,FRD.ReadFloat('w',0.0));
AssertEquals('Height saved',7.8,FRD.ReadFloat('h',0.0));
finally
FRD.PopElement;
end;
E:=FRD.FindChild('Frame');
AssertNotNull('Frame was saved',E);
FRD.PushElement(E);
try
AssertEquals('Width saved',2,FRD.ReadInteger('W',1));
AssertEquals('Pen saved',ord(psDot),FRD.ReadInteger('W',1));
AssertEquals('Color saved',ord(23),FRD.ReadInteger('C',1));
AssertEquals('Shape saved',ord(fsRoundedRect),FRD.ReadInteger('S',0));
AssertEquals('Lines saved',Integer([flTop,flBottom]),FRD.ReadInteger('L',0));
finally
FRD.PopElement;
end;
end;
procedure TTestReportElementDOM.TestWriteDiff1;
Var
E : TDomElement;
begin
FillFE;
E:=FRD.CurrentElement;
FE.WriteXML(FRD,F2);
AssertSame('Current element not changed',E,FRD.CurrentElement);
E:=FRD.FindChild('Layout');
AssertNotNull('Layout was saved',E);
FRD.PushElement(E);
try
AssertEquals('Top saved',1.2,FRD.ReadFloat('t',0.0));
AssertEquals('Left saved',3.4,FRD.ReadFloat('l',0.0));
AssertEquals('Width saved',5.6,FRD.ReadFloat('w',0.0));
AssertEquals('Height saved',7.8,FRD.ReadFloat('h',0.0));
finally
FRD.PopElement;
end;
E:=FRD.FindChild('Frame');
AssertNotNull('Frame was saved',E);
FRD.PushElement(E);
try
AssertEquals('Width saved',2,FRD.ReadInteger('W',1));
AssertEquals('Pen saved',ord(psDot),FRD.ReadInteger('W',1));
AssertEquals('Color saved',ord(23),FRD.ReadInteger('C',1));
AssertEquals('Shape saved',ord(fsRoundedRect),FRD.ReadInteger('S',0));
AssertEquals('Lines saved',Integer([flTop,flBottom]),FRD.ReadInteger('L',0));
finally
FRD.PopElement;
end;
end;
procedure TTestReportElementDOM.TestWriteDiff2;
Var
E : TDomElement;
begin
FillFE;
E:=FRD.CurrentElement;
F2.Layout.Assign(FE.Layout);
FE.WriteXML(FRD,F2);
AssertSame('Current element not changed',E,FRD.CurrentElement);
E:=FRD.FindChild('Layout');
AssertNotNull('Layout was saved',E);
FRD.PushElement(E);
try
AssertEquals('Top saved',1.2,FRD.ReadFloat('t',0.0));
AssertEquals('Left saved',3.4,FRD.ReadFloat('l',0.0));
AssertEquals('Width saved',5.6,FRD.ReadFloat('w',0.0));
AssertEquals('Height saved',7.8,FRD.ReadFloat('h',0.0));
finally
FRD.PopElement;
end;
E:=FRD.FindChild('Frame');
AssertNotNull('Frame was saved',E);
FRD.PushElement(E);
try
AssertEquals('Width saved',2,FRD.ReadInteger('W',1));
AssertEquals('Pen saved',ord(psDot),FRD.ReadInteger('W',1));
AssertEquals('Color saved',ord(23),FRD.ReadInteger('C',1));
AssertEquals('Shape saved',ord(fsRoundedRect),FRD.ReadInteger('S',0));
AssertEquals('Lines saved',Integer([flTop,flBottom]),FRD.ReadInteger('L',0));
finally
FRD.PopElement;
end;
end;
procedure TTestReportElementDOM.TestWriteDiff3;
Var
E : TDomElement;
begin
FillFE;
E:=FRD.CurrentElement;
F2.Frame.Assign(FE.Frame);
FE.WriteXML(FRD,F2);
AssertSame('Current element not changed',E,FRD.CurrentElement);
E:=FRD.FindChild('Layout');
AssertNotNull('Layout was saved',E);
E:=FRD.FindChild('Frame');
AssertNull('Frame was not saved',E);
end;
procedure TTestReportElementDOM.TestRead1;
Var
E : TDomElement;
begin
FillFE;
E:=FRD.CurrentElement;
FE.WriteXML(FRD,Nil);
F2.ReadXML(FRD);
AssertEquals('Layout was read',True,FE.Layout.Equals(F2.Layout));
AssertEquals('Frame was read',True,FE.Frame.Equals(F2.Frame));
end;
procedure TTestReportElementDOM.TestRead2;
Var
E : TDomElement;
begin
FillFE;
E:=FRD.CurrentElement;
F2.Frame.Assign(FE.Frame);
// Only layout is written
FE.WriteXML(FRD,F2);
FreeAndNil(F2);
F2:=TFPReportElement.Create(Nil);
F2.ReadXML(FRD);
AssertEquals('Layout was read',True,FE.Layout.Equals(F2.Layout));
AssertEquals('Frame was not read',False,FE.Frame.Equals(F2.Frame));
end;
initialization
RegisterTests({$IFDEF fptest} 'ReportDOM', {$ENDIF}
[TTestReportDOM{$IFDEF fptest}.Suite{$ENDIF},
TTestReportFrameDom{$IFDEF fptest}.Suite{$ENDIF},
TTestReportLayoutDom{$IFDEF fptest}.Suite{$ENDIF},
TTestReportElementDOM{$IFDEF fptest}.Suite{$ENDIF}
]);
end.