tcreportdom.pp 50 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100
  1. {
  2. This file is part of the Free Pascal run time library.
  3. Copyright (c) 1999-2022 by Michael van Canneyt and other members of the
  4. Free Pascal development team
  5. test report dom
  6. See the file COPYING.FPC, included in this distribution,
  7. for details about the copyright.
  8. This program is distributed in the hope that it will be useful,
  9. but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  11. **********************************************************************}
  12. unit tcreportdom;
  13. {$mode objfpc}{$H+}
  14. {.$define writexml}
  15. interface
  16. uses
  17. Classes, SysUtils,
  18. {$IFDEF fptest}
  19. TestFramework,
  20. {$ELSE}
  21. fpcunit, testutils, testregistry,
  22. {$ENDIF}
  23. DOM, fpcanvas,
  24. fpreport, fpreportdom, xmlwrite;
  25. type
  26. TReportDOMTester = class(TTestCase)
  27. Private
  28. FDoc : TXMLDocument;
  29. FRoot : TDOMElement;
  30. procedure AssertAttribute(const AName, AValue: DomString);
  31. procedure AssertValueElement(const AName, AValue: DomString);
  32. procedure FillBytes(S: TStream; AMax: Byte);
  33. Procedure AssertNoAttribute(Const AName : DomString);
  34. protected
  35. FRD : TFPReportDOM;
  36. procedure SetUp; override;
  37. procedure TearDown; override;
  38. end;
  39. TTestReportDOM = class(TReportDOMTester)
  40. Public
  41. procedure DoPop;
  42. procedure TestStream(DoReset: Boolean);
  43. published
  44. procedure TestCreate;
  45. Procedure TestAdd;
  46. Procedure TestPush;
  47. Procedure TestFind1;
  48. Procedure TestFind2;
  49. procedure TestPop1;
  50. procedure TestPop2;
  51. procedure TestPop3;
  52. Procedure TestStreamToHex;
  53. Procedure TestStreamToHex2;
  54. procedure TestStreamEquals1;
  55. procedure TestStreamEquals2;
  56. procedure TestStreamEquals3;
  57. procedure TestStreamEquals4;
  58. procedure TestHexToStream;
  59. Procedure TestWriteInteger1;
  60. procedure TestWriteInteger2;
  61. Procedure TestWriteString1;
  62. procedure TestWriteString2;
  63. Procedure TestWriteString3;
  64. procedure TestWriteString4;
  65. Procedure TestWriteWideString1;
  66. procedure TestWriteWideString2;
  67. Procedure TestWriteWideString3;
  68. procedure TestWriteWideString4;
  69. Procedure TestWriteBoolean1;
  70. procedure TestWriteBoolean2;
  71. Procedure TestWriteBoolean3;
  72. procedure TestWriteBoolean4;
  73. Procedure TestWriteFloat1;
  74. procedure TestWriteFloat2;
  75. Procedure TestWriteFloat3;
  76. procedure TestWriteFloat4;
  77. procedure TestWriteFloat5;
  78. procedure TestWriteFloat6;
  79. Procedure TestWriteDateTime1;
  80. Procedure TestWriteDateTime2;
  81. procedure TestWriteDateTime3;
  82. procedure TestWriteDateTime4;
  83. procedure TestWriteDateTime5;
  84. procedure TestWriteDateTime6;
  85. Procedure TestWriteStream1;
  86. procedure TestWriteStream2;
  87. Procedure TestWriteIntegerDiff1;
  88. procedure TestWriteIntegerDiff2;
  89. Procedure TestWriteStringDiff1;
  90. procedure TestWriteStringDiff2;
  91. Procedure TestWriteWideStringDiff1;
  92. procedure TestWriteWideStringDiff2;
  93. Procedure TestWriteBooleanDiff1;
  94. procedure TestWriteBooleanDiff2;
  95. Procedure TestWriteFloatDiff1;
  96. procedure TestWriteFloatDiff2;
  97. Procedure TestWriteDateTimeDiff1;
  98. Procedure TestWriteDateTimeDiff2;
  99. procedure TestWriteDateTimeDiff3;
  100. procedure TestWriteDateTimeDiff4;
  101. Procedure TestWriteStreamDiff1;
  102. Procedure TestWriteStreamDiff2;
  103. Procedure TestWriteStreamDiff3;
  104. Procedure TestReadInteger1;
  105. procedure TestReadInteger2;
  106. procedure TestReadInteger3;
  107. procedure TestReadInteger4;
  108. procedure TestReadInteger5;
  109. procedure TestReadInteger6;
  110. Procedure TestReadString1;
  111. procedure TestReadString2;
  112. Procedure TestReadString3;
  113. procedure TestReadString4;
  114. Procedure TestReadWideString1;
  115. procedure TestReadWideString2;
  116. Procedure TestReadWideString3;
  117. procedure TestReadWideString4;
  118. Procedure TestReadDateTime1;
  119. Procedure TestReadDateTime2;
  120. procedure TestReadDateTime3;
  121. procedure TestReadDateTime4;
  122. procedure TestReadDateTime5;
  123. procedure TestReadDateTime6;
  124. procedure TestReadDateTime7;
  125. procedure TestReadDateTime8;
  126. procedure TestReadDateTime9;
  127. procedure TestReadDateTime10;
  128. Procedure TestReadBoolean1;
  129. procedure TestReadBoolean2;
  130. Procedure TestReadBoolean3;
  131. procedure TestReadBoolean4;
  132. procedure TestReadBoolean5;
  133. procedure TestReadBoolean6;
  134. procedure TestReadBoolean7;
  135. procedure TestReadBoolean8;
  136. Procedure TestReadFloat1;
  137. procedure TestReadFloat2;
  138. Procedure TestReadFloat3;
  139. procedure TestReadFloat4;
  140. procedure TestReadFloat5;
  141. procedure TestReadFloat6;
  142. procedure TestReadFloat7;
  143. procedure TestReadStream1;
  144. procedure TestReadStream2;
  145. procedure TestReadStream3;
  146. procedure TestReadStream4;
  147. procedure TestReadStream5;
  148. procedure TestReadStream6;
  149. end;
  150. TTestReportFrameDom = Class(TReportDOMTester)
  151. private
  152. FF,F2 : TFPReportFrame;
  153. procedure FillFF;
  154. protected
  155. procedure Setup; override;
  156. procedure TearDown; override;
  157. published
  158. procedure TestWrite;
  159. procedure TestWriteDiff;
  160. procedure TestRead;
  161. end;
  162. TTestReportLayoutDom = Class(TReportDOMTester)
  163. private
  164. FL,F2 : TFPReportLayout;
  165. procedure FillFL;
  166. protected
  167. procedure Setup; override;
  168. procedure TearDown; override;
  169. published
  170. procedure TestWrite;
  171. procedure TestWriteDiff;
  172. procedure TestRead;
  173. end;
  174. TTestReportElementDOM = Class(TReportDOMTester)
  175. private
  176. FE,F2 : TFPReportElement;
  177. procedure FillFE;
  178. protected
  179. procedure Setup; override;
  180. procedure TearDown; override;
  181. published
  182. procedure TestWrite1;
  183. procedure TestWriteDiff1;
  184. procedure TestWriteDiff2;
  185. procedure TestWriteDiff3;
  186. procedure TestRead1;
  187. procedure TestRead2;
  188. end;
  189. implementation
  190. { ---------------------------------------------------------------------
  191. General routines
  192. ---------------------------------------------------------------------}
  193. procedure TReportDOMTester.SetUp;
  194. begin
  195. FDoc:=TXMLDocument.Create;
  196. FRoot:=FDoc.CreateElement('XMLReport');
  197. FDoc.AppendChild(FRoot);
  198. FRD:=TFPReportDOM.Create(FDoc,Nil);
  199. end;
  200. {$ifdef writexml}
  201. Var
  202. WC : Integer;
  203. {$endif}
  204. procedure TReportDOMTester.TearDown;
  205. begin
  206. {$ifdef writexml}
  207. Inc(wc);
  208. WriteXML(FDoc,'xml-'+inttostr(wc)+'.xml');
  209. {$endif}
  210. FreeAndNil(FRD);
  211. FreeAndNil(FDoc);
  212. end;
  213. procedure TReportDOMTester.FillBytes(S : TStream; AMax : Byte);
  214. Var
  215. B : Byte;
  216. begin
  217. For B:=0 to AMax do
  218. S.WriteBuffer(B,SizeOf(B));
  219. end;
  220. procedure TReportDOMTester.AssertAttribute(Const AName, AValue : DomString);
  221. Var
  222. S: String;
  223. begin
  224. S:='Attribute '+AName+' exists';
  225. AssertEquals(S,True,FRD.CurrentElement.HasAttribute(AName));
  226. S:='Attribute '+AName+' has correct value';
  227. AssertEquals(S,AValue,FRD.CurrentElement[AName]);
  228. end;
  229. procedure TReportDOMTester.AssertValueElement(Const AName, AValue : DomString);
  230. Var
  231. S: String;
  232. N : TDomNode;
  233. begin
  234. S:='Element with name '+AName+' exists';
  235. N:=FRD.CurrentElement.FindNode(AName);
  236. AssertNotNull(S,N);
  237. S:='Element with name '+AName+' is TDOMElement';
  238. AssertEquals(S,TDomElement,N.ClassType);
  239. N:=N.FirstChild;
  240. S:='Value element under element with name '+AName+' exists';
  241. AssertNotNull(S,N);
  242. AssertEquals('Value node is of type text',TEXT_NODE,N.NodeType);
  243. AssertEquals('Value node has correct content',AValue,N.NodeValue);
  244. end;
  245. procedure TReportDOMTester.AssertNoAttribute(const AName: DomString);
  246. Var
  247. S : String;
  248. begin
  249. S:='No attribute of name '+AName;
  250. AssertEquals(S,False, FRD.CurrentElement.hasAttribute(AName));
  251. end;
  252. { ---------------------------------------------------------------------
  253. Actual test routines
  254. ---------------------------------------------------------------------}
  255. procedure TTestReportDOM.TestCreate;
  256. begin
  257. AssertSame('XML Document property is set',FDoc,FRD.Document);
  258. AssertSame('Root element is set ',FRoot,FRD.RootNode);
  259. AssertSame('Current element is set ',FRoot,FRD.CurrentElement);
  260. end;
  261. procedure TTestReportDOM.TestAdd;
  262. Var
  263. E1,E2 : TDomElement;
  264. begin
  265. E1:=FRD.CurrentElement;
  266. E2:=FRD.NewDOMElement('MyElement');
  267. AssertNotNull('NewDOMElement returns result',E2);
  268. AssertSame('NewDomElement is child of current element',E2,E1.FindNode('MyElement'));
  269. AssertEquals('New node element created with correct name','MyElement',E2.NodeName);
  270. AssertSame('New node element is current element',E2,FRD.CurrentElement);
  271. end;
  272. procedure TTestReportDOM.TestPush;
  273. Var
  274. E1,E2 : TDomElement;
  275. begin
  276. E1:=FRD.NewDOMElement('element1');
  277. AssertSame('Current element equals created',E1,FRD.CurrentElement);
  278. E2:=FRD.PushElement('element2');
  279. AssertSame('Current element equals first created',E1,E2);
  280. AssertEquals('New node pushed with correct name','element2',FRD.CurrentElement.NodeName);
  281. end;
  282. procedure TTestReportDOM.TestFind1;
  283. Var
  284. E1,E2,E3 : TDomElement;
  285. begin
  286. E1:=FRD.NewDOMElement('element1');
  287. E2:=FRD.NewDomElement('element2');
  288. FRD.CurrentElement:=E1;
  289. E3:=FRD.FindChild('element2');
  290. AssertSame('Found element',E2,E3);
  291. end;
  292. procedure TTestReportDOM.TestFind2;
  293. Var
  294. E1,E2,E3 : TDomElement;
  295. begin
  296. E1:=FRD.NewDOMElement('element1');
  297. E2:=FRD.NewDomElement('element2');
  298. FRD.CurrentElement:=E1;
  299. E3:=FRD.FindChild('element3');
  300. AssertNull('NonExisting element is null',E3);
  301. end;
  302. procedure TTestReportDOM.TestPop1;
  303. Var
  304. E1,E2,E3 : TDomElement;
  305. begin
  306. E1:=FRD.NewDOMElement('element1');
  307. AssertSame('Current element equals created',E1,FRD.CurrentElement);
  308. E2:=FRD.PushElement('element2');
  309. AssertSame('Current element equals first created',E1,E2);
  310. E3:=FRD.CurrentElement;
  311. AssertEquals('New node pushed with correct name','element2',E3.NodeName);
  312. AssertSame('Pop returns current element',E3,FRD.PopElement);
  313. AssertSame('Current element after pop is correct',E1,FRD.CurrentElement);
  314. end;
  315. procedure TTestReportDOM.DoPop;
  316. begin
  317. FRD.PopElement;
  318. end;
  319. procedure TTestReportDOM.TestPop2;
  320. begin
  321. AssertException('Pop on empty stack raise exception',EReportDom,@DoPop);
  322. end;
  323. procedure TTestReportDOM.TestPop3;
  324. begin
  325. FRD.NewDOMElement('element1');
  326. FRD.PushElement('element2');
  327. FRD.PopElement;
  328. AssertException('Pop on empty stack raise exception',EReportDom,@DoPop);
  329. end;
  330. procedure TTestReportDOM.TestStream(DoReset : Boolean);
  331. Var
  332. S : TMemoryStream;
  333. B : Byte;
  334. T,H : String;
  335. begin
  336. S:=TMemoryStream.Create;
  337. try
  338. FillBytes(S,255);
  339. S.Position:=0;
  340. T:=FRD.StreamToHex(S);
  341. AssertEquals('Stream position is zero',0,S.Position);
  342. AssertEquals('Correct number of bytes returned by streamtohex',512,Length(T));
  343. For B:=0 to 255 do
  344. begin
  345. H:=Copy(T,1,2);
  346. Delete(T,1,2);
  347. AssertEquals(Format('Correct value at position %d',[b]),H,HexStr(B,2));
  348. end;
  349. Finally
  350. S.Free;
  351. end;
  352. end;
  353. procedure TTestReportDOM.TestStreamToHex;
  354. begin
  355. TestStream(True);
  356. end;
  357. procedure TTestReportDOM.TestStreamToHex2;
  358. begin
  359. TestStream(False);
  360. end;
  361. procedure TTestReportDOM.TestHexToStream;
  362. Var
  363. S : TMemoryStream;
  364. SS : TStringStream;
  365. H : String;
  366. begin
  367. S:=TMemoryStream.Create;
  368. try
  369. FillBytes(S,255);
  370. H:=FRD.StreamToHex(S);
  371. SS:=FRD.HexToStringStream(H);
  372. try
  373. AssertEquals('Size of stream is OK',256,SS.Size);
  374. AssertEquals('HexToStringStream OK',True,FRD.StreamsEqual(S,SS));
  375. finally
  376. SS.Free;
  377. end;
  378. finally
  379. S.Free;
  380. end;
  381. end;
  382. procedure TTestReportDOM.TestStreamEquals1;
  383. Var
  384. S : TMemoryStream;
  385. begin
  386. S:=TMemoryStream.Create;
  387. try
  388. AssertEquals('Same stream always equal',True,FRD.StreamsEqual(S,S));
  389. finally
  390. S.Free;
  391. end;
  392. end;
  393. procedure TTestReportDOM.TestStreamEquals2;
  394. Var
  395. S1,S2 : TMemoryStream;
  396. begin
  397. S1:=TMemoryStream.Create;
  398. try
  399. FillBytes(S1,255);
  400. S2:=TMemoryStream.Create;
  401. try
  402. FillBytes(S2,255);
  403. AssertEquals('Same content always equal',True,FRD.StreamsEqual(S1,S2));
  404. finally
  405. S2.Free;
  406. end;
  407. finally
  408. S1.Free;
  409. end;
  410. end;
  411. procedure TTestReportDOM.TestStreamEquals3;
  412. Var
  413. S1,S2 : TMemoryStream;
  414. begin
  415. S1:=TMemoryStream.Create;
  416. try
  417. FillBytes(S1,255);
  418. S2:=TMemoryStream.Create;
  419. try
  420. FillBytes(S2,254);
  421. AssertEquals('Different sizes makes not equal',False,FRD.StreamsEqual(S1,S2));
  422. finally
  423. S2.Free;
  424. end;
  425. finally
  426. S1.Free;
  427. end;
  428. end;
  429. procedure TTestReportDOM.TestStreamEquals4;
  430. Var
  431. S1,S2 : TMemoryStream;
  432. B : Byte;
  433. begin
  434. S1:=TMemoryStream.Create;
  435. try
  436. FillBytes(S1,255);
  437. AssertEquals(0,S1.Seek(0,soFromBeginning));
  438. B:=10;
  439. S1.WriteBuffer(B,1);
  440. B:=12;
  441. S1.Position:=0;
  442. S1.ReadBuffer(B,1);
  443. AssertEquals(10,B);
  444. AssertEquals(256,S1.Size);
  445. S2:=TMemoryStream.Create;
  446. try
  447. FillBytes(S2,255);
  448. AssertEquals('Different streams makes not equal',False,FRD.StreamsEqual(S1,S2));
  449. finally
  450. S2.Free;
  451. end;
  452. finally
  453. S1.Free;
  454. end;
  455. end;
  456. procedure TTestReportDOM.TestWriteInteger1;
  457. Var
  458. E : TDOMElement;
  459. begin
  460. E:=FRD.NewDOMElement('MyElement');
  461. FRD.WriteInteger('Int',1,psAttr);
  462. AssertSame('Current element not changed',E,FRD.CurrentElement);
  463. AssertAttribute('Int','1');
  464. end;
  465. procedure TTestReportDOM.TestWriteInteger2;
  466. Var
  467. E : TDOMElement;
  468. begin
  469. E:=FRD.NewDOMElement('MyElement');
  470. FRD.WriteInteger('Int',1,psElement);
  471. AssertSame('Current element not changed',E,FRD.CurrentElement);
  472. AssertValueElement('Int','1');
  473. end;
  474. procedure TTestReportDOM.TestWriteString1;
  475. Var
  476. E : TDOMElement;
  477. begin
  478. E:=FRD.NewDOMElement('MyElement');
  479. FRD.WriteString('Str','Aloha',psAttr);
  480. AssertSame('Current element not changed',E,FRD.CurrentElement);
  481. AssertAttribute('Str','Aloha');
  482. end;
  483. procedure TTestReportDOM.TestWriteString2;
  484. Var
  485. E : TDOMElement;
  486. begin
  487. E:=FRD.NewDOMElement('MyElement');
  488. FRD.WriteString('Str','Aloha',psElement);
  489. AssertSame('Current element not changed',E,FRD.CurrentElement);
  490. AssertValueElement('Str','Aloha');
  491. end;
  492. procedure TTestReportDOM.TestWriteString3;
  493. Var
  494. E : TDOMElement;
  495. begin
  496. E:=FRD.NewDOMElement('MyElement');
  497. FRD.WriteString('Str','',psAttr);
  498. AssertSame('Current element not changed',E,FRD.CurrentElement);
  499. AssertAttribute('Str','');
  500. end;
  501. procedure TTestReportDOM.TestWriteString4;
  502. Var
  503. E : TDOMElement;
  504. begin
  505. E:=FRD.NewDOMElement('MyElement');
  506. FRD.WriteString('Str','',psElement);
  507. AssertSame('Current element not changed',E,FRD.CurrentElement);
  508. AssertValueElement('Str','');
  509. end;
  510. procedure TTestReportDOM.TestWriteWideString1;
  511. Var
  512. E : TDOMElement;
  513. W : WideString;
  514. begin
  515. E:=FRD.NewDOMElement('MyElement');
  516. W:='Wide Aloha';
  517. FRD.WriteWideString('WideStr',W,psAttr);
  518. AssertSame('Current element not changed',E,FRD.CurrentElement);
  519. AssertAttribute('WideStr',W);
  520. end;
  521. procedure TTestReportDOM.TestWriteWideString2;
  522. Var
  523. E : TDOMElement;
  524. W : WideString;
  525. begin
  526. E:=FRD.NewDOMElement('MyElement');
  527. W:='Wide Aloha';
  528. FRD.WriteWideString('WideStr',W,psElement);
  529. AssertSame('Current element not changed',E,FRD.CurrentElement);
  530. AssertValueElement('WideStr',W);
  531. end;
  532. procedure TTestReportDOM.TestWriteWideString3;
  533. Var
  534. E : TDOMElement;
  535. W : WideString;
  536. begin
  537. E:=FRD.NewDOMElement('MyElement');
  538. W:='';
  539. FRD.WriteWideString('WideStr',W,psAttr);
  540. AssertSame('Current element not changed',E,FRD.CurrentElement);
  541. AssertAttribute('WideStr','');
  542. end;
  543. procedure TTestReportDOM.TestWriteWideString4;
  544. Var
  545. E : TDOMElement;
  546. W : WideString;
  547. begin
  548. E:=FRD.NewDOMElement('MyElement');
  549. W:='';
  550. FRD.WriteWideString('WideStr',W,psElement);
  551. AssertSame('Current element not changed',E,FRD.CurrentElement);
  552. AssertValueElement('WideStr',W);
  553. end;
  554. procedure TTestReportDOM.TestWriteBoolean1;
  555. Var
  556. E : TDOMElement;
  557. begin
  558. E:=FRD.NewDOMElement('MyElement');
  559. FRD.WriteBoolean('Bool',True,psAttr);
  560. AssertSame('Current element not changed',E,FRD.CurrentElement);
  561. AssertAttribute('Bool','1');
  562. end;
  563. procedure TTestReportDOM.TestWriteBoolean2;
  564. Var
  565. E : TDOMElement;
  566. begin
  567. E:=FRD.NewDOMElement('MyElement');
  568. FRD.WriteBoolean('Bool',False,psAttr);
  569. AssertSame('Current element not changed',E,FRD.CurrentElement);
  570. AssertAttribute('Bool','0');
  571. end;
  572. procedure TTestReportDOM.TestWriteBoolean3;
  573. Var
  574. E : TDOMElement;
  575. begin
  576. E:=FRD.NewDOMElement('MyElement');
  577. FRD.WriteBoolean('Bool',True,psElement);
  578. AssertSame('Current element not changed',E,FRD.CurrentElement);
  579. AssertValueElement('Bool','1');
  580. end;
  581. procedure TTestReportDOM.TestWriteBoolean4;
  582. Var
  583. E : TDOMElement;
  584. begin
  585. E:=FRD.NewDOMElement('MyElement');
  586. FRD.WriteBoolean('Bool',False,psElement);
  587. AssertSame('Current element not changed',E,FRD.CurrentElement);
  588. AssertValueElement('Bool','0');
  589. end;
  590. procedure TTestReportDOM.TestWriteFloat1;
  591. Var
  592. E : TDOMElement;
  593. begin
  594. E:=FRD.NewDOMElement('MyElement');
  595. FRD.WriteFloat('Float',1.23,psAttr);
  596. AssertSame('Current element not changed',E,FRD.CurrentElement);
  597. AssertAttribute('Float','1.230000000E+0000');
  598. end;
  599. procedure TTestReportDOM.TestWriteFloat2;
  600. Var
  601. E : TDOMElement;
  602. begin
  603. E:=FRD.NewDOMElement('MyElement');
  604. FRD.WriteFloat('Float',1.23,psElement);
  605. AssertSame('Current element not changed',E,FRD.CurrentElement);
  606. AssertValueElement('Float','1.230000000E+0000');
  607. end;
  608. procedure TTestReportDOM.TestWriteFloat3;
  609. Var
  610. E : TDOMElement;
  611. begin
  612. E:=FRD.NewDOMElement('MyElement');
  613. FRD.WriteFloat('Float',-1.23,psAttr);
  614. AssertSame('Current element not changed',E,FRD.CurrentElement);
  615. AssertAttribute('Float','-1.230000000E+0000');
  616. end;
  617. procedure TTestReportDOM.TestWriteFloat4;
  618. Var
  619. E : TDOMElement;
  620. begin
  621. E:=FRD.NewDOMElement('MyElement');
  622. FRD.WriteFloat('Float',-1.23,psElement);
  623. AssertSame('Current element not changed',E,FRD.CurrentElement);
  624. AssertValueElement('Float','-1.230000000E+0000');
  625. end;
  626. procedure TTestReportDOM.TestWriteFloat5;
  627. Var
  628. E : TDOMElement;
  629. x : extended;
  630. begin
  631. E:=FRD.NewDOMElement('MyElement');
  632. X:=0.000000000;
  633. FRD.WriteFloat('Float',x,psAttr);
  634. AssertSame('Current element not changed',E,FRD.CurrentElement);
  635. AssertAttribute('Float','0.000000000E+0000');
  636. end;
  637. procedure TTestReportDOM.TestWriteFloat6;
  638. Var
  639. E : TDOMElement;
  640. x : extended;
  641. begin
  642. E:=FRD.NewDOMElement('MyElement');
  643. X:=0.000000000;
  644. FRD.WriteFloat('Float',x,psElement);
  645. AssertSame('Current element not changed',E,FRD.CurrentElement);
  646. AssertValueElement('Float','0.000000000E+0000');
  647. end;
  648. procedure TTestReportDOM.TestWriteDateTime1;
  649. Var
  650. E : TDOMElement;
  651. D : TDateTime;
  652. begin
  653. E:=FRD.NewDOMElement('MyElement');
  654. D:=EncodeDate(2008,9,18);
  655. FRD.WriteDateTime('Date',D,psAttr);
  656. AssertSame('Current element not changed',E,FRD.CurrentElement);
  657. AssertAttribute('Date','20080918');
  658. end;
  659. procedure TTestReportDOM.TestWriteDateTime2;
  660. Var
  661. E : TDOMElement;
  662. D : TDateTime;
  663. begin
  664. E:=FRD.NewDOMElement('MyElement');
  665. D:=EncodeDate(2008,9,18);
  666. FRD.WriteDateTime('Date',D,psElement);
  667. AssertSame('Current element not changed',E,FRD.CurrentElement);
  668. AssertValueElement('Date','20080918');
  669. end;
  670. procedure TTestReportDOM.TestWriteDateTime3;
  671. Var
  672. E : TDOMElement;
  673. D : TDateTime;
  674. begin
  675. E:=FRD.NewDOMElement('MyElement');
  676. D:=EncodeDate(2008,9,18)+EncodeTime(11,03,55,123);
  677. FRD.WriteDateTime('Date',D,psAttr);
  678. AssertSame('Current element not changed',E,FRD.CurrentElement);
  679. AssertAttribute('Date','20080918110355123');
  680. end;
  681. procedure TTestReportDOM.TestWriteDateTime4;
  682. Var
  683. E : TDOMElement;
  684. D : TDateTime;
  685. begin
  686. E:=FRD.NewDOMElement('MyElement');
  687. D:=EncodeDate(2008,9,18)+EncodeTime(11,03,55,123);
  688. FRD.WriteDateTime('Date',D,psElement);
  689. AssertSame('Current element not changed',E,FRD.CurrentElement);
  690. AssertValueElement('Date','20080918110355123');
  691. end;
  692. procedure TTestReportDOM.TestWriteDateTime5;
  693. Var
  694. E : TDOMElement;
  695. D : TDateTime;
  696. begin
  697. E:=FRD.NewDOMElement('MyElement');
  698. D:=EncodeTime(11,03,55,123);
  699. FRD.WriteDateTime('Date',D,psAttr);
  700. AssertSame('Current element not changed',E,FRD.CurrentElement);
  701. AssertAttribute('Date','00000000110355123');
  702. end;
  703. procedure TTestReportDOM.TestWriteDateTime6;
  704. Var
  705. E : TDOMElement;
  706. D : TDateTime;
  707. begin
  708. E:=FRD.NewDOMElement('MyElement');
  709. D:=EncodeTime(11,03,55,123);
  710. FRD.WriteDateTime('Date',D,psElement);
  711. AssertSame('Current element not changed',E,FRD.CurrentElement);
  712. AssertValueElement('Date','00000000110355123');
  713. end;
  714. procedure TTestReportDOM.TestWriteStream1;
  715. Var
  716. E : TDOMElement;
  717. S : TMemoryStream;
  718. begin
  719. E:=FRD.NewDOMElement('MyElement');
  720. S:=TMemoryStream.Create;
  721. try
  722. FillBytes(S,15);
  723. FRD.WriteStream('Stream',S,psAttr);
  724. AssertSame('Current element not changed',E,FRD.CurrentElement);
  725. AssertAttribute('Stream','000102030405060708090A0B0C0D0E0F');
  726. finally
  727. FreeAndNil(S);
  728. end;
  729. end;
  730. procedure TTestReportDOM.TestWriteStream2;
  731. Var
  732. E : TDOMElement;
  733. S : TMemoryStream;
  734. begin
  735. E:=FRD.NewDOMElement('MyElement');
  736. S:=TMemoryStream.Create;
  737. try
  738. FillBytes(S,15);
  739. FRD.WriteStream('Stream',S,psElement);
  740. AssertSame('Current element not changed',E,FRD.CurrentElement);
  741. AssertValueElement('Stream','000102030405060708090A0B0C0D0E0F');
  742. finally
  743. FreeAndNil(S);
  744. end;
  745. end;
  746. procedure TTestReportDOM.TestWriteIntegerDiff1;
  747. Var
  748. E : TDOMElement;
  749. begin
  750. E:=FRD.NewDOMElement('MyElement');
  751. FRD.WriteIntegerDiff('Int',1,0,psAttr);
  752. AssertSame('Current element not changed',E,FRD.CurrentElement);
  753. AssertAttribute('Int','1');
  754. end;
  755. procedure TTestReportDOM.TestWriteIntegerDiff2;
  756. Var
  757. E : TDOMElement;
  758. begin
  759. E:=FRD.NewDOMElement('MyElement');
  760. FRD.WriteIntegerDiff('Int',1,1,psAttr);
  761. AssertSame('Current element not changed',E,FRD.CurrentElement);
  762. AssertNoAttribute('Int');
  763. end;
  764. procedure TTestReportDOM.TestWriteStringDiff1;
  765. Var
  766. E : TDOMElement;
  767. begin
  768. E:=FRD.NewDOMElement('MyElement');
  769. FRD.WriteStringDiff('Str','Aloha','mopa',psAttr);
  770. AssertSame('Current element not changed',E,FRD.CurrentElement);
  771. AssertAttribute('Str','Aloha');
  772. end;
  773. procedure TTestReportDOM.TestWriteStringDiff2;
  774. Var
  775. E : TDOMElement;
  776. begin
  777. E:=FRD.NewDOMElement('MyElement');
  778. FRD.WriteStringDiff('Str','Aloha','Aloha',psAttr);
  779. AssertSame('Current element not changed',E,FRD.CurrentElement);
  780. AssertNoAttribute('Str');
  781. end;
  782. procedure TTestReportDOM.TestWriteWideStringDiff1;
  783. Var
  784. E : TDOMElement;
  785. W : WideString;
  786. begin
  787. E:=FRD.NewDOMElement('MyElement');
  788. W:='Wide Aloha';
  789. FRD.WriteWideStringDiff('WideStr',W,W,psAttr);
  790. AssertSame('Current element not changed',E,FRD.CurrentElement);
  791. AssertNoAttribute('WideStr');
  792. end;
  793. procedure TTestReportDOM.TestWriteWideStringDiff2;
  794. Var
  795. E : TDOMElement;
  796. W : WideString;
  797. begin
  798. E:=FRD.NewDOMElement('MyElement');
  799. W:='Wide Aloha';
  800. FRD.WriteWideStringDiff('WideStr',W,W+' me',psAttr);
  801. AssertSame('Current element not changed',E,FRD.CurrentElement);
  802. AssertAttribute('WideStr',W);
  803. end;
  804. procedure TTestReportDOM.TestWriteBooleanDiff1;
  805. Var
  806. E : TDOMElement;
  807. begin
  808. E:=FRD.NewDOMElement('MyElement');
  809. FRD.WriteBooleanDiff('Bool',True,False,psAttr);
  810. AssertSame('Current element not changed',E,FRD.CurrentElement);
  811. AssertAttribute('Bool','1');
  812. end;
  813. procedure TTestReportDOM.TestWriteBooleanDiff2;
  814. Var
  815. E : TDOMElement;
  816. begin
  817. E:=FRD.NewDOMElement('MyElement');
  818. FRD.WriteBooleanDiff('Bool',True,True,psAttr);
  819. AssertSame('Current element not changed',E,FRD.CurrentElement);
  820. AssertNoAttribute('Bool');
  821. end;
  822. procedure TTestReportDOM.TestWriteFloatDiff1;
  823. Var
  824. E : TDOMElement;
  825. begin
  826. E:=FRD.NewDOMElement('MyElement');
  827. FRD.WriteFloatDiff('Float',1.23,1.24,psAttr);
  828. AssertSame('Current element not changed',E,FRD.CurrentElement);
  829. AssertAttribute('Float','1.230000000E+0000');
  830. end;
  831. procedure TTestReportDOM.TestWriteFloatDiff2;
  832. Var
  833. E : TDOMElement;
  834. begin
  835. E:=FRD.NewDOMElement('MyElement');
  836. FRD.WriteFloatDiff('Float',1.23,1.23,psAttr);
  837. AssertSame('Current element not changed',E,FRD.CurrentElement);
  838. AssertNoAttribute('Float');
  839. end;
  840. procedure TTestReportDOM.TestWriteDateTimeDiff1;
  841. Var
  842. E : TDOMElement;
  843. D : TDateTime;
  844. begin
  845. E:=FRD.NewDOMElement('MyElement');
  846. D:=EncodeDate(2008,9,18);
  847. FRD.WriteDateTimeDiff('Date',D,D+1,psAttr);
  848. AssertSame('Current element not changed',E,FRD.CurrentElement);
  849. AssertAttribute('Date','20080918');
  850. end;
  851. procedure TTestReportDOM.TestWriteDateTimeDiff2;
  852. Var
  853. E : TDOMElement;
  854. D : TDateTime;
  855. begin
  856. E:=FRD.NewDOMElement('MyElement');
  857. D:=EncodeDate(2008,9,18);
  858. FRD.WriteDateTimeDiff('Date',D,D,psAttr);
  859. AssertSame('Current element not changed',E,FRD.CurrentElement);
  860. AssertNoAttribute('Date');
  861. end;
  862. procedure TTestReportDOM.TestWriteDateTimeDiff3;
  863. Var
  864. E : TDOMElement;
  865. D : TDateTime;
  866. begin
  867. E:=FRD.NewDOMElement('MyElement');
  868. D:=EncodeDate(2008,9,18)+EncodeTime(0,0,0,1);
  869. FRD.WriteDateTimeDiff('Date',D,D,psAttr);
  870. AssertSame('Current element not changed',E,FRD.CurrentElement);
  871. AssertNoAttribute('Date');
  872. end;
  873. procedure TTestReportDOM.TestWriteDateTimeDiff4;
  874. Var
  875. E : TDOMElement;
  876. D : TDateTime;
  877. begin
  878. E:=FRD.NewDOMElement('MyElement');
  879. D:=EncodeDate(2008,9,18);
  880. FRD.WriteDateTimeDiff('Date',D,D+EncodeTime(0,0,0,1),psAttr);
  881. AssertSame('Current element not changed',E,FRD.CurrentElement);
  882. AssertAttribute('Date','20080918');
  883. end;
  884. procedure TTestReportDOM.TestWriteStreamDiff1;
  885. Var
  886. E : TDOMElement;
  887. S : TMemoryStream;
  888. begin
  889. E:=FRD.NewDOMElement('MyElement');
  890. S:=TMemoryStream.Create;
  891. try
  892. FillBytes(S,15);
  893. FRD.WriteStreamDiff('Stream',S,S,psAttr);
  894. AssertSame('Current element not changed',E,FRD.CurrentElement);
  895. AssertNoAttribute('Stream');
  896. finally
  897. FreeAndNil(S);
  898. end;
  899. end;
  900. procedure TTestReportDOM.TestWriteStreamDiff2;
  901. Var
  902. E : TDOMElement;
  903. S,T : TMemoryStream;
  904. begin
  905. E:=FRD.NewDOMElement('MyElement');
  906. S:=TMemoryStream.Create;
  907. try
  908. FillBytes(S,15);
  909. T:=TMemoryStream.Create;
  910. try
  911. FillBytes(T,15);
  912. FRD.WriteStreamDiff('Stream',S,T,psAttr);
  913. AssertSame('Current element not changed',E,FRD.CurrentElement);
  914. AssertNoAttribute('Stream');
  915. finally
  916. FreeAndNil(T);
  917. end;
  918. finally
  919. FreeAndNil(S);
  920. end;
  921. end;
  922. procedure TTestReportDOM.TestWriteStreamDiff3;
  923. Var
  924. E : TDOMElement;
  925. S,T : TMemoryStream;
  926. begin
  927. E:=FRD.NewDOMElement('MyElement');
  928. S:=TMemoryStream.Create;
  929. try
  930. FillBytes(S,15);
  931. T:=TMemoryStream.Create;
  932. try
  933. FillBytes(T,16);
  934. FRD.WriteStreamDiff('Stream',S,T,psAttr);
  935. AssertSame('Current element not changed',E,FRD.CurrentElement);
  936. AssertAttribute('Stream','000102030405060708090A0B0C0D0E0F');
  937. finally
  938. FreeAndNil(T);
  939. end;
  940. finally
  941. FreeAndNil(S);
  942. end;
  943. end;
  944. procedure TTestReportDOM.TestReadInteger1;
  945. Var
  946. E : TDOMElement;
  947. begin
  948. E:=FRD.NewDOMElement('MyElement');
  949. FRD.WriteInteger('Int',1,psAttr);
  950. AssertSame('Current element not changed',E,FRD.CurrentElement);
  951. AssertEquals('Reading integer property',1,FRD.ReadInteger('Int',-1,psAttr));
  952. AssertSame('Current element not changed',E,FRD.CurrentElement);
  953. end;
  954. procedure TTestReportDOM.TestReadInteger2;
  955. Var
  956. E : TDOMElement;
  957. begin
  958. E:=FRD.NewDOMElement('MyElement');
  959. FRD.WriteInteger('Int',1,psAttr);
  960. AssertSame('Current element not changed',E,FRD.CurrentElement);
  961. AssertEquals('Reading integer property with wrong storagetype',-1,FRD.ReadInteger('Int',-1,psElement));
  962. AssertSame('Current element not changed',E,FRD.CurrentElement);
  963. end;
  964. procedure TTestReportDOM.TestReadInteger3;
  965. Var
  966. E : TDOMElement;
  967. begin
  968. E:=FRD.NewDOMElement('MyElement');
  969. AssertEquals('Reading non-existent integer property (attr)',-1,FRD.ReadInteger('Int',-1,psAttr));
  970. end;
  971. procedure TTestReportDOM.TestReadInteger4;
  972. Var
  973. E : TDOMElement;
  974. begin
  975. E:=FRD.NewDOMElement('MyElement');
  976. AssertEquals('Reading non-existent integer property (element)',-1,FRD.ReadInteger('Int',-1,psElement));
  977. end;
  978. procedure TTestReportDOM.TestReadInteger5;
  979. Var
  980. E : TDOMElement;
  981. begin
  982. E:=FRD.NewDOMElement('MyElement');
  983. FRD.WriteString('Int','Aloha',psAttr);
  984. AssertEquals('Reading wrongly typed integer property (attr)',-1,FRD.ReadInteger('Int',-1,psAttr));
  985. end;
  986. procedure TTestReportDOM.TestReadInteger6;
  987. Var
  988. E : TDOMElement;
  989. begin
  990. E:=FRD.NewDOMElement('MyElement');
  991. FRD.WriteString('Int','Aloha',psElement);
  992. AssertEquals('Reading wrongly typed integer property (element)',-1,FRD.ReadInteger('Int',-1,psElement));
  993. end;
  994. procedure TTestReportDOM.TestReadString1;
  995. Var
  996. E : TDOMElement;
  997. begin
  998. E:=FRD.NewDOMElement('MyElement');
  999. FRD.WriteString('Str','Aloha',psAttr);
  1000. AssertSame('Current element not changed',E,FRD.CurrentElement);
  1001. AssertEquals('Reading string property (attr) ','Aloha',FRD.ReadString('Str','(none)',psattr));
  1002. AssertSame('Current element not changed',E,FRD.CurrentElement);
  1003. end;
  1004. procedure TTestReportDOM.TestReadString2;
  1005. Var
  1006. E : TDOMElement;
  1007. begin
  1008. E:=FRD.NewDOMElement('MyElement');
  1009. FRD.WriteString('Str','Aloha',psElement);
  1010. AssertSame('Current element not changed',E,FRD.CurrentElement);
  1011. AssertEquals('Reading string property (element)','Aloha',FRD.ReadString('Str','(none)',psElement));
  1012. AssertSame('Current element not changed',E,FRD.CurrentElement);
  1013. end;
  1014. procedure TTestReportDOM.TestReadString3;
  1015. Var
  1016. E : TDOMElement;
  1017. begin
  1018. E:=FRD.NewDOMElement('MyElement');
  1019. AssertEquals('Reading non-existent string property (attr)','(none)',FRD.ReadString('Str','(none)',psAttr));
  1020. end;
  1021. procedure TTestReportDOM.TestReadString4;
  1022. Var
  1023. E : TDOMElement;
  1024. begin
  1025. E:=FRD.NewDOMElement('MyElement');
  1026. AssertEquals('Reading non-existent string property (element)','(none)',FRD.ReadString('Str','(none)',psElement));
  1027. end;
  1028. procedure TTestReportDOM.TestReadWideString1;
  1029. Var
  1030. E : TDOMElement;
  1031. W : WideString;
  1032. begin
  1033. E:=FRD.NewDOMElement('MyElement');
  1034. W:='Wide Aloha';
  1035. FRD.WriteWideString('WideStr',W,psAttr);
  1036. AssertSame('Current element not changed',E,FRD.CurrentElement);
  1037. AssertEquals('Reading wide string property (attr) ',W,FRD.ReadWideString('WideStr','(none)',psattr));
  1038. AssertSame('Current element not changed',E,FRD.CurrentElement);
  1039. end;
  1040. procedure TTestReportDOM.TestReadWideString2;
  1041. Var
  1042. E : TDOMElement;
  1043. W : WideString;
  1044. begin
  1045. E:=FRD.NewDOMElement('MyElement');
  1046. W:='Wide Aloha';
  1047. FRD.WriteWideString('WideStr',W,psElement);
  1048. AssertSame('Current element not changed',E,FRD.CurrentElement);
  1049. AssertEquals('Reading wide string property (element) ',W,FRD.ReadWideString('WideStr','(none)',psElement));
  1050. AssertSame('Current element not changed',E,FRD.CurrentElement);
  1051. end;
  1052. procedure TTestReportDOM.TestReadWideString3;
  1053. Var
  1054. E : TDOMElement;
  1055. W : WideString;
  1056. begin
  1057. E:=FRD.NewDOMElement('MyElement');
  1058. W:='Wide Aloha';
  1059. AssertEquals('Reading non-existing wide string property (attr) ',W,FRD.ReadWideString('WideStr',W,psattr));
  1060. AssertSame('Current element not changed',E,FRD.CurrentElement);
  1061. end;
  1062. procedure TTestReportDOM.TestReadWideString4;
  1063. Var
  1064. E : TDOMElement;
  1065. W : WideString;
  1066. begin
  1067. E:=FRD.NewDOMElement('MyElement');
  1068. W:='Wide Aloha';
  1069. AssertEquals('Reading non-existing wide string property (element) ',W,FRD.ReadWideString('WideStr',W,psElement));
  1070. AssertSame('Current element not changed',E,FRD.CurrentElement);
  1071. end;
  1072. procedure TTestReportDOM.TestReadDateTime1;
  1073. Var
  1074. E : TDOMElement;
  1075. D : TDateTime;
  1076. begin
  1077. E:=FRD.NewDOMElement('MyElement');
  1078. D:=EncodeDate(2008,9,18);
  1079. FRD.WriteDateTime('Date',D,psAttr);
  1080. AssertSame('Current element not changed',E,FRD.CurrentElement);
  1081. AssertEquals('Reading date property (Attr)',D,FRD.ReadDateTime('Date',D-1,psAttr));
  1082. AssertSame('Current element not changed',E,FRD.CurrentElement);
  1083. end;
  1084. procedure TTestReportDOM.TestReadDateTime2;
  1085. Var
  1086. E : TDOMElement;
  1087. D : TDateTime;
  1088. begin
  1089. E:=FRD.NewDOMElement('MyElement');
  1090. D:=EncodeDate(2008,9,18);
  1091. FRD.WriteDateTime('Date',D,psElement);
  1092. AssertSame('Current element not changed',E,FRD.CurrentElement);
  1093. AssertEquals('Reading date property (Attr)',D,FRD.ReadDateTime('Date',D-1,psElement));
  1094. AssertSame('Current element not changed',E,FRD.CurrentElement);
  1095. end;
  1096. procedure TTestReportDOM.TestReadDateTime3;
  1097. Var
  1098. E : TDOMElement;
  1099. D : TDateTime;
  1100. begin
  1101. E:=FRD.NewDOMElement('MyElement');
  1102. D:=EncodeDate(2008,9,18)+EncodeTime(11,03,55,123);
  1103. FRD.WriteDateTime('Date',D,psAttr);
  1104. AssertSame('Current element not changed',E,FRD.CurrentElement);
  1105. AssertEquals('Reading date/time property (Attr)',D,FRD.ReadDateTime('Date',D-1,psAttr));
  1106. AssertSame('Current element not changed',E,FRD.CurrentElement);
  1107. end;
  1108. procedure TTestReportDOM.TestReadDateTime4;
  1109. Var
  1110. E : TDOMElement;
  1111. D : TDateTime;
  1112. begin
  1113. E:=FRD.NewDOMElement('MyElement');
  1114. D:=EncodeDate(2008,9,18)+EncodeTime(11,03,55,123);
  1115. FRD.WriteDateTime('Date',D,psElement);
  1116. AssertSame('Current element not changed',E,FRD.CurrentElement);
  1117. AssertEquals('Reading date/time property (element)',D,FRD.ReadDateTime('Date',D-1,psElement));
  1118. AssertSame('Current element not changed',E,FRD.CurrentElement);
  1119. end;
  1120. procedure TTestReportDOM.TestReadDateTime5;
  1121. Var
  1122. E : TDOMElement;
  1123. D : TDateTime;
  1124. begin
  1125. E:=FRD.NewDOMElement('MyElement');
  1126. D:=EncodeTime(11,03,55,123);
  1127. AssertEquals('Reading non-existent time property (element)',D,FRD.ReadDateTime('Date',D,psElement));
  1128. AssertSame('Current element not changed',E,FRD.CurrentElement);
  1129. end;
  1130. procedure TTestReportDOM.TestReadDateTime6;
  1131. Var
  1132. E : TDOMElement;
  1133. D : TDateTime;
  1134. begin
  1135. E:=FRD.NewDOMElement('MyElement');
  1136. D:=EncodeTime(11,03,55,123);
  1137. AssertEquals('Reading non-existent time property (element)',D,FRD.ReadDateTime('Date',D,psAttr));
  1138. AssertSame('Current element not changed',E,FRD.CurrentElement);
  1139. end;
  1140. procedure TTestReportDOM.TestReadDateTime7;
  1141. Var
  1142. E : TDOMElement;
  1143. D : TDateTime;
  1144. begin
  1145. E:=FRD.NewDOMElement('MyElement');
  1146. D:=EncodeDate(2008,9,18);
  1147. FRD.WriteString('Date','20080918',psAttr);
  1148. AssertEquals('Reading date-only property (element)',D,FRD.ReadDateTime('Date',D-1,psAttr));
  1149. AssertSame('Current element not changed',E,FRD.CurrentElement);
  1150. end;
  1151. procedure TTestReportDOM.TestReadDateTime8;
  1152. Var
  1153. E : TDOMElement;
  1154. D : TDateTime;
  1155. begin
  1156. E:=FRD.NewDOMElement('MyElement');
  1157. D:=EncodeDate(2008,9,18);
  1158. FRD.WriteString('Date','20080918aaa',psAttr);
  1159. AssertEquals('Reading wrong time/date-ok property (element)',D-1,FRD.ReadDateTime('Date',D-1,psAttr));
  1160. AssertSame('Current element not changed',E,FRD.CurrentElement);
  1161. end;
  1162. procedure TTestReportDOM.TestReadDateTime9;
  1163. Var
  1164. E : TDOMElement;
  1165. D : TDateTime;
  1166. begin
  1167. E:=FRD.NewDOMElement('MyElement');
  1168. D:=EncodeDate(2008,9,18)+EncodeTime(11,03,55,0);
  1169. FRD.WriteString('Date','20080918110355',psAttr);
  1170. AssertEquals('Reading wrong time (no millisec)/date property (element)',DateTimeToStr(D),DateTimeToStr(FRD.ReadDateTime('Date',D-1,psAttr)));
  1171. AssertSame('Current element not changed',E,FRD.CurrentElement);
  1172. end;
  1173. procedure TTestReportDOM.TestReadDateTime10;
  1174. Var
  1175. E : TDOMElement;
  1176. D : TDateTime;
  1177. begin
  1178. E:=FRD.NewDOMElement('MyElement');
  1179. D:=EncodeDate(2008,9,18)+EncodeTime(11,03,55,0);
  1180. FRD.WriteString('Date','200809',psAttr);
  1181. AssertEquals('Reading wrong date property (element)',D-1,FRD.ReadDateTime('Date',D-1,psAttr));
  1182. AssertSame('Current element not changed',E,FRD.CurrentElement);
  1183. end;
  1184. procedure TTestReportDOM.TestReadBoolean1;
  1185. Var
  1186. E : TDOMElement;
  1187. begin
  1188. E:=FRD.NewDOMElement('MyElement');
  1189. FRD.WriteBoolean('Bool',True,psAttr);
  1190. AssertSame('Current element not changed',E,FRD.CurrentElement);
  1191. AssertEquals('Reading true boolean property (attr)',True,FRD.ReadBoolean('Bool',False,psAttr));
  1192. AssertSame('Current element not changed',E,FRD.CurrentElement);
  1193. end;
  1194. procedure TTestReportDOM.TestReadBoolean2;
  1195. Var
  1196. E : TDOMElement;
  1197. begin
  1198. E:=FRD.NewDOMElement('MyElement');
  1199. FRD.WriteBoolean('Bool',False,psAttr);
  1200. AssertSame('Current element not changed',E,FRD.CurrentElement);
  1201. AssertEquals('Reading true boolean property (attr)',False,FRD.ReadBoolean('Bool',True,psAttr));
  1202. AssertSame('Current element not changed',E,FRD.CurrentElement);
  1203. end;
  1204. procedure TTestReportDOM.TestReadBoolean3;
  1205. Var
  1206. E : TDOMElement;
  1207. begin
  1208. E:=FRD.NewDOMElement('MyElement');
  1209. FRD.WriteBoolean('Bool',True,psElement);
  1210. AssertSame('Current element not changed',E,FRD.CurrentElement);
  1211. AssertEquals('Reading true boolean property (element)',True,FRD.ReadBoolean('Bool',False,psElement));
  1212. AssertSame('Current element not changed',E,FRD.CurrentElement);
  1213. end;
  1214. procedure TTestReportDOM.TestReadBoolean4;
  1215. Var
  1216. E : TDOMElement;
  1217. begin
  1218. E:=FRD.NewDOMElement('MyElement');
  1219. FRD.WriteBoolean('Bool',False,psElement);
  1220. AssertSame('Current element not changed',E,FRD.CurrentElement);
  1221. AssertEquals('Reading true boolean property (element)',False,FRD.ReadBoolean('Bool',True,psElement));
  1222. AssertSame('Current element not changed',E,FRD.CurrentElement);
  1223. end;
  1224. procedure TTestReportDOM.TestReadBoolean5;
  1225. Var
  1226. E : TDOMElement;
  1227. begin
  1228. E:=FRD.NewDOMElement('MyElement');
  1229. FRD.WriteString('Bool','Aloha',psAttr);
  1230. AssertSame('Current element not changed',E,FRD.CurrentElement);
  1231. AssertEquals('Reading invalid boolean property',True,FRD.ReadBoolean('Bool',True,psElement));
  1232. AssertSame('Current element not changed',E,FRD.CurrentElement);
  1233. end;
  1234. procedure TTestReportDOM.TestReadBoolean6;
  1235. Var
  1236. E : TDOMElement;
  1237. begin
  1238. E:=FRD.NewDOMElement('MyElement');
  1239. FRD.WriteString('Bool','Aloha',psAttr);
  1240. AssertSame('Current element not changed',E,FRD.CurrentElement);
  1241. AssertEquals('Reading invalid boolean property',False,FRD.ReadBoolean('Bool',False,psAttr));
  1242. AssertSame('Current element not changed',E,FRD.CurrentElement);
  1243. end;
  1244. procedure TTestReportDOM.TestReadBoolean7;
  1245. Var
  1246. E : TDOMElement;
  1247. begin
  1248. E:=FRD.NewDOMElement('MyElement');
  1249. AssertEquals('Reading non-existent boolean property',True,FRD.ReadBoolean('Bool',True,psAttr));
  1250. AssertSame('Current element not changed',E,FRD.CurrentElement);
  1251. end;
  1252. procedure TTestReportDOM.TestReadBoolean8;
  1253. Var
  1254. E : TDOMElement;
  1255. begin
  1256. E:=FRD.NewDOMElement('MyElement');
  1257. AssertEquals('Reading non-existent boolean property (element)',True,FRD.ReadBoolean('Bool',True,psElement));
  1258. AssertSame('Current element not changed',E,FRD.CurrentElement);
  1259. end;
  1260. procedure TTestReportDOM.TestReadFloat1;
  1261. Var
  1262. E : TDOMElement;
  1263. begin
  1264. E:=FRD.NewDOMElement('MyElement');
  1265. FRD.WriteFloat('Float',1.23,psAttr);
  1266. AssertSame('Current element not changed',E,FRD.CurrentElement);
  1267. AssertEquals('Reading float property (attr)',1.23,FRD.ReadFloat('Float',2.34,psAttr),0.001);
  1268. AssertSame('Current element not changed',E,FRD.CurrentElement);
  1269. end;
  1270. procedure TTestReportDOM.TestReadFloat2;
  1271. Var
  1272. E : TDOMElement;
  1273. begin
  1274. E:=FRD.NewDOMElement('MyElement');
  1275. FRD.WriteFloat('Float',1.23,psElement);
  1276. AssertSame('Current element not changed',E,FRD.CurrentElement);
  1277. AssertEquals('Reading float property (attr)',1.23,FRD.ReadFloat('Float',2.34,psElement),0.001);
  1278. AssertSame('Current element not changed',E,FRD.CurrentElement);
  1279. end;
  1280. procedure TTestReportDOM.TestReadFloat3;
  1281. Var
  1282. E : TDOMElement;
  1283. begin
  1284. E:=FRD.NewDOMElement('MyElement');
  1285. FRD.WriteString('Float','1.23a',psElement);
  1286. AssertSame('Current element not changed',E,FRD.CurrentElement);
  1287. AssertEquals('Reading wrong float property (element)',2.34,FRD.ReadFloat('Float',2.34,psElement),0.001);
  1288. AssertSame('Current element not changed',E,FRD.CurrentElement);
  1289. end;
  1290. procedure TTestReportDOM.TestReadFloat4;
  1291. Var
  1292. E : TDOMElement;
  1293. begin
  1294. E:=FRD.NewDOMElement('MyElement');
  1295. FRD.WriteString('Float','1.23a',psAttr);
  1296. AssertSame('Current element not changed',E,FRD.CurrentElement);
  1297. AssertEquals('Reading wrong float property (attr)',2.34,FRD.ReadFloat('Float',2.34,psAttr),0.001);
  1298. AssertSame('Current element not changed',E,FRD.CurrentElement);
  1299. end;
  1300. procedure TTestReportDOM.TestReadFloat5;
  1301. Var
  1302. E : TDOMElement;
  1303. begin
  1304. E:=FRD.NewDOMElement('MyElement');
  1305. AssertEquals('Reading nonexistent float property (attr)',2.34,FRD.ReadFloat('Float',2.34,psAttr),0.001);
  1306. AssertSame('Current element not changed',E,FRD.CurrentElement);
  1307. end;
  1308. procedure TTestReportDOM.TestReadFloat6;
  1309. Var
  1310. E : TDOMElement;
  1311. begin
  1312. E:=FRD.NewDOMElement('MyElement');
  1313. AssertEquals('Reading nonexistent float property (element)',2.34,FRD.ReadFloat('Float',2.34,psElement),0.001);
  1314. AssertSame('Current element not changed',E,FRD.CurrentElement);
  1315. end;
  1316. procedure TTestReportDOM.TestReadFloat7;
  1317. Var
  1318. E : TDOMElement;
  1319. begin
  1320. E:=FRD.NewDOMElement('MyElement');
  1321. FRD.WriteString('Float','1',psAttr);
  1322. AssertSame('Current element not changed',E,FRD.CurrentElement);
  1323. AssertEquals('Reading integer-formatted float property (attr)',1,FRD.ReadFloat('Float',2.34,psAttr),0.001);
  1324. AssertSame('Current element not changed',E,FRD.CurrentElement);
  1325. end;
  1326. procedure TTestReportDOM.TestReadStream1;
  1327. Var
  1328. E : TDOMElement;
  1329. S,T : TMemoryStream;
  1330. begin
  1331. E:=FRD.NewDOMElement('MyElement');
  1332. S:=TMemoryStream.Create;
  1333. try
  1334. FillBytes(S,15);
  1335. FRD.WriteStream('Stream',S,psAttr);
  1336. AssertSame('Current element not changed',E,FRD.CurrentElement);
  1337. T:=TMemoryStream.Create;
  1338. try
  1339. AssertEquals('Reading stream data (attr)',True,FRD.ReadStream('Stream',T,psAttr));
  1340. AssertEquals('Read stream equals written stream',True,FRD.StreamsEqual(S,T));
  1341. finally
  1342. T.Free;
  1343. end;
  1344. finally
  1345. FreeAndNil(S);
  1346. end;
  1347. end;
  1348. procedure TTestReportDOM.TestReadStream2;
  1349. Var
  1350. E : TDOMElement;
  1351. S,T : TMemoryStream;
  1352. begin
  1353. E:=FRD.NewDOMElement('MyElement');
  1354. S:=TMemoryStream.Create;
  1355. try
  1356. FillBytes(S,15);
  1357. FRD.WriteStream('Stream',S,psElement);
  1358. AssertSame('Current element not changed',E,FRD.CurrentElement);
  1359. T:=TMemoryStream.Create;
  1360. try
  1361. AssertEquals('Reading stream data (element)',True,FRD.ReadStream('Stream',T,psElement));
  1362. AssertEquals('Read stream equals written stream',True,FRD.StreamsEqual(S,T));
  1363. finally
  1364. T.Free;
  1365. end;
  1366. finally
  1367. FreeAndNil(S);
  1368. end;
  1369. end;
  1370. procedure TTestReportDOM.TestReadStream3;
  1371. Var
  1372. E : TDOMElement;
  1373. S,T : TMemoryStream;
  1374. begin
  1375. E:=FRD.NewDOMElement('MyElement');
  1376. FRD.WriteString('Stream','',psElement);
  1377. AssertSame('Current element not changed',E,FRD.CurrentElement);
  1378. T:=TMemoryStream.Create;
  1379. try
  1380. AssertEquals('Reading stream data (element)',False,FRD.ReadStream('Stream',T,psElement));
  1381. AssertEquals('Read stream is empty',0,T.Size);
  1382. finally
  1383. T.Free;
  1384. end;
  1385. end;
  1386. procedure TTestReportDOM.TestReadStream4;
  1387. Var
  1388. E : TDOMElement;
  1389. S,T : TMemoryStream;
  1390. begin
  1391. E:=FRD.NewDOMElement('MyElement');
  1392. FRD.WriteString('Stream','',psAttr);
  1393. AssertSame('Current element not changed',E,FRD.CurrentElement);
  1394. T:=TMemoryStream.Create;
  1395. try
  1396. AssertEquals('Reading stream data (attr)',False,FRD.ReadStream('Stream',T,psAttr));
  1397. AssertEquals('Read stream is empty',0,T.Size);
  1398. finally
  1399. T.Free;
  1400. end;
  1401. end;
  1402. procedure TTestReportDOM.TestReadStream5;
  1403. Var
  1404. E : TDOMElement;
  1405. S,T : TMemoryStream;
  1406. begin
  1407. E:=FRD.NewDOMElement('MyElement');
  1408. AssertSame('Current element not changed',E,FRD.CurrentElement);
  1409. T:=TMemoryStream.Create;
  1410. try
  1411. AssertEquals('Reading non-existent stream data (attr)',False,FRD.ReadStream('Stream',T,psAttr));
  1412. AssertEquals('Read stream is empty',0,T.Size);
  1413. finally
  1414. T.Free;
  1415. end;
  1416. end;
  1417. procedure TTestReportDOM.TestReadStream6;
  1418. Var
  1419. E : TDOMElement;
  1420. S,T : TMemoryStream;
  1421. begin
  1422. E:=FRD.NewDOMElement('MyElement');
  1423. AssertSame('Current element not changed',E,FRD.CurrentElement);
  1424. T:=TMemoryStream.Create;
  1425. try
  1426. AssertEquals('Reading non-existent stream data (element)',False,FRD.ReadStream('Stream',T,psElement));
  1427. AssertEquals('Read stream is empty',0,T.Size);
  1428. finally
  1429. T.Free;
  1430. end;
  1431. end;
  1432. { TTestReportFrameDom }
  1433. procedure TTestReportFrameDom.Setup;
  1434. begin
  1435. inherited Setup;
  1436. FF:=TFPReportframe.Create(Nil);
  1437. F2:=TFPReportframe.Create(Nil);
  1438. FRD.NewDOMElement('Shape');
  1439. end;
  1440. procedure TTestReportFrameDom.TearDown;
  1441. begin
  1442. FreeAndNil(FF);
  1443. FreeAndNil(F2);
  1444. inherited TearDown;
  1445. end;
  1446. Procedure FillFrame(FF : TFPReportFrame);
  1447. begin
  1448. FF.Width:=2;
  1449. FF.Pen:=psDot;
  1450. FF.Shape:=fsRoundedRect;
  1451. FF.Color:=23;
  1452. FF.Lines:=[flTop,flBottom];
  1453. end;
  1454. procedure TTestReportFrameDom.FillFF;
  1455. begin
  1456. FillFrame(FF);
  1457. end;
  1458. procedure TTestReportFrameDom.TestWrite;
  1459. begin
  1460. FillFF;
  1461. FF.WriteXML(FRD,Nil);
  1462. AssertEquals('Width saved',2,FRD.ReadInteger('W',1));
  1463. AssertEquals('Pen saved',ord(psDot),FRD.ReadInteger('W',1));
  1464. AssertEquals('Color saved',ord(23),FRD.ReadInteger('C',1));
  1465. AssertEquals('Shape saved',ord(fsRoundedRect),FRD.ReadInteger('S',0));
  1466. AssertEquals('Lines saved',Integer([flTop,flBottom]),FRD.ReadInteger('L',0));
  1467. end;
  1468. procedure TTestReportFrameDom.TestWriteDiff;
  1469. begin
  1470. FillFF;
  1471. FF.WriteXML(FRD,F2);
  1472. AssertEquals('Width saved',2,FRD.ReadInteger('W',1));
  1473. AssertEquals('Pen saved',ord(psDot),FRD.ReadInteger('W',1));
  1474. AssertEquals('Color saved',ord(23),FRD.ReadInteger('C',1));
  1475. AssertEquals('Shape saved',ord(fsRoundedRect),FRD.ReadInteger('S',0));
  1476. AssertEquals('Lines saved',Integer([flTop,flBottom]),FRD.ReadInteger('L',0));
  1477. end;
  1478. procedure TTestReportFrameDom.TestRead;
  1479. begin
  1480. FillFF;
  1481. FF.WriteXML(FRD,Nil);
  1482. F2.ReadXML(FRD);
  1483. AssertEquals('Width loaded',FF.Width,F2.Width);
  1484. AssertEquals('Pen loaded',Ord(FF.Pen),Ord(F2.Pen));
  1485. AssertEquals('Color loaded',Ord(FF.Color),Ord(F2.Color));
  1486. AssertEquals('Shape loaded',Ord(FF.Shape),Ord(F2.Shape));
  1487. AssertEquals('Lines loaded',Integer(FF.Lines),Integer(F2.Lines));
  1488. end;
  1489. { TTestReportLayoutDom }
  1490. Procedure FillLayout(FL : TFPReportLayout);
  1491. begin
  1492. FL.Top:=1.2;
  1493. FL.Left:=3.4;
  1494. FL.Width:=5.6;
  1495. FL.Height:=7.8;
  1496. end;
  1497. procedure TTestReportLayoutDom.FillFL;
  1498. begin
  1499. FillLayout(FL);
  1500. end;
  1501. procedure TTestReportLayoutDom.Setup;
  1502. begin
  1503. inherited Setup;
  1504. FL:=TFPReportLayout.Create(Nil);
  1505. F2:=TFPReportLayout.Create(Nil);
  1506. FRD.NewDOMElement('layout');
  1507. end;
  1508. procedure TTestReportLayoutDom.TearDown;
  1509. begin
  1510. FreeAndNil(Fl);
  1511. FreeAndNil(F2);
  1512. inherited TearDown;
  1513. end;
  1514. procedure TTestReportLayoutDom.TestWrite;
  1515. begin
  1516. FillFL;
  1517. FL.WriteXML(FRD,Nil);
  1518. AssertEquals('Top saved',1.2,FRD.ReadFloat('t',0.0));
  1519. AssertEquals('Left saved',3.4,FRD.ReadFloat('l',0.0));
  1520. AssertEquals('Width saved',5.6,FRD.ReadFloat('w',0.0));
  1521. AssertEquals('Height saved',7.8,FRD.ReadFloat('h',0.0));
  1522. end;
  1523. procedure TTestReportLayoutDom.TestWriteDiff;
  1524. begin
  1525. FillFL;
  1526. FL.WriteXML(FRD,F2);
  1527. AssertEquals('Top saved',1.2,FRD.ReadFloat('t',0.0));
  1528. AssertEquals('Left saved',3.4,FRD.ReadFloat('l',0.0));
  1529. AssertEquals('Width saved',5.6,FRD.ReadFloat('w',0.0));
  1530. AssertEquals('Height saved',7.8,FRD.ReadFloat('h',0.0));
  1531. end;
  1532. procedure TTestReportLayoutDom.TestRead;
  1533. begin
  1534. FillFL;
  1535. FL.WriteXML(FRD,Nil);
  1536. F2.ReadXML(FRD);
  1537. AssertEquals('Top saved',FL.Top,F2.Top);
  1538. AssertEquals('Left saved',FL.Left,F2.Left);
  1539. AssertEquals('Width saved',FL.Width,F2.Width);
  1540. AssertEquals('Height saved',FL.Height,F2.Height);
  1541. end;
  1542. { TTestReportElementDOM }
  1543. procedure TTestReportElementDOM.FillFE;
  1544. begin
  1545. FillLayout(FE.Layout);
  1546. FillFrame(FE.Frame);
  1547. end;
  1548. procedure TTestReportElementDOM.Setup;
  1549. begin
  1550. inherited Setup;
  1551. FE:=TFPReportElement.Create(Nil);
  1552. F2:=TFPReportElement.Create(Nil);
  1553. FRD.NewDomElement('element');
  1554. end;
  1555. procedure TTestReportElementDOM.TearDown;
  1556. begin
  1557. FreeAndNil(F2);
  1558. FreeAndNil(FE);
  1559. inherited TearDown;
  1560. end;
  1561. procedure TTestReportElementDOM.TestWrite1;
  1562. Var
  1563. E : TDomElement;
  1564. begin
  1565. FillFE;
  1566. E:=FRD.CurrentElement;
  1567. FE.WriteXML(FRD);
  1568. AssertSame('Current element not changed',E,FRD.CurrentElement);
  1569. E:=FRD.FindChild('Layout');
  1570. AssertNotNull('Layout was saved',E);
  1571. FRD.PushElement(E);
  1572. try
  1573. AssertEquals('Top saved',1.2,FRD.ReadFloat('t',0.0));
  1574. AssertEquals('Left saved',3.4,FRD.ReadFloat('l',0.0));
  1575. AssertEquals('Width saved',5.6,FRD.ReadFloat('w',0.0));
  1576. AssertEquals('Height saved',7.8,FRD.ReadFloat('h',0.0));
  1577. finally
  1578. FRD.PopElement;
  1579. end;
  1580. E:=FRD.FindChild('Frame');
  1581. AssertNotNull('Frame was saved',E);
  1582. FRD.PushElement(E);
  1583. try
  1584. AssertEquals('Width saved',2,FRD.ReadInteger('W',1));
  1585. AssertEquals('Pen saved',ord(psDot),FRD.ReadInteger('W',1));
  1586. AssertEquals('Color saved',ord(23),FRD.ReadInteger('C',1));
  1587. AssertEquals('Shape saved',ord(fsRoundedRect),FRD.ReadInteger('S',0));
  1588. AssertEquals('Lines saved',Integer([flTop,flBottom]),FRD.ReadInteger('L',0));
  1589. finally
  1590. FRD.PopElement;
  1591. end;
  1592. end;
  1593. procedure TTestReportElementDOM.TestWriteDiff1;
  1594. Var
  1595. E : TDomElement;
  1596. begin
  1597. FillFE;
  1598. E:=FRD.CurrentElement;
  1599. FE.WriteXML(FRD,F2);
  1600. AssertSame('Current element not changed',E,FRD.CurrentElement);
  1601. E:=FRD.FindChild('Layout');
  1602. AssertNotNull('Layout was saved',E);
  1603. FRD.PushElement(E);
  1604. try
  1605. AssertEquals('Top saved',1.2,FRD.ReadFloat('t',0.0));
  1606. AssertEquals('Left saved',3.4,FRD.ReadFloat('l',0.0));
  1607. AssertEquals('Width saved',5.6,FRD.ReadFloat('w',0.0));
  1608. AssertEquals('Height saved',7.8,FRD.ReadFloat('h',0.0));
  1609. finally
  1610. FRD.PopElement;
  1611. end;
  1612. E:=FRD.FindChild('Frame');
  1613. AssertNotNull('Frame was saved',E);
  1614. FRD.PushElement(E);
  1615. try
  1616. AssertEquals('Width saved',2,FRD.ReadInteger('W',1));
  1617. AssertEquals('Pen saved',ord(psDot),FRD.ReadInteger('W',1));
  1618. AssertEquals('Color saved',ord(23),FRD.ReadInteger('C',1));
  1619. AssertEquals('Shape saved',ord(fsRoundedRect),FRD.ReadInteger('S',0));
  1620. AssertEquals('Lines saved',Integer([flTop,flBottom]),FRD.ReadInteger('L',0));
  1621. finally
  1622. FRD.PopElement;
  1623. end;
  1624. end;
  1625. procedure TTestReportElementDOM.TestWriteDiff2;
  1626. Var
  1627. E : TDomElement;
  1628. begin
  1629. FillFE;
  1630. E:=FRD.CurrentElement;
  1631. F2.Layout.Assign(FE.Layout);
  1632. FE.WriteXML(FRD,F2);
  1633. AssertSame('Current element not changed',E,FRD.CurrentElement);
  1634. E:=FRD.FindChild('Layout');
  1635. AssertNotNull('Layout was saved',E);
  1636. FRD.PushElement(E);
  1637. try
  1638. AssertEquals('Top saved',1.2,FRD.ReadFloat('t',0.0));
  1639. AssertEquals('Left saved',3.4,FRD.ReadFloat('l',0.0));
  1640. AssertEquals('Width saved',5.6,FRD.ReadFloat('w',0.0));
  1641. AssertEquals('Height saved',7.8,FRD.ReadFloat('h',0.0));
  1642. finally
  1643. FRD.PopElement;
  1644. end;
  1645. E:=FRD.FindChild('Frame');
  1646. AssertNotNull('Frame was saved',E);
  1647. FRD.PushElement(E);
  1648. try
  1649. AssertEquals('Width saved',2,FRD.ReadInteger('W',1));
  1650. AssertEquals('Pen saved',ord(psDot),FRD.ReadInteger('W',1));
  1651. AssertEquals('Color saved',ord(23),FRD.ReadInteger('C',1));
  1652. AssertEquals('Shape saved',ord(fsRoundedRect),FRD.ReadInteger('S',0));
  1653. AssertEquals('Lines saved',Integer([flTop,flBottom]),FRD.ReadInteger('L',0));
  1654. finally
  1655. FRD.PopElement;
  1656. end;
  1657. end;
  1658. procedure TTestReportElementDOM.TestWriteDiff3;
  1659. Var
  1660. E : TDomElement;
  1661. begin
  1662. FillFE;
  1663. E:=FRD.CurrentElement;
  1664. F2.Frame.Assign(FE.Frame);
  1665. FE.WriteXML(FRD,F2);
  1666. AssertSame('Current element not changed',E,FRD.CurrentElement);
  1667. E:=FRD.FindChild('Layout');
  1668. AssertNotNull('Layout was saved',E);
  1669. E:=FRD.FindChild('Frame');
  1670. AssertNull('Frame was not saved',E);
  1671. end;
  1672. procedure TTestReportElementDOM.TestRead1;
  1673. Var
  1674. E : TDomElement;
  1675. begin
  1676. FillFE;
  1677. E:=FRD.CurrentElement;
  1678. FE.WriteXML(FRD,Nil);
  1679. F2.ReadXML(FRD);
  1680. AssertEquals('Layout was read',True,FE.Layout.Equals(F2.Layout));
  1681. AssertEquals('Frame was read',True,FE.Frame.Equals(F2.Frame));
  1682. end;
  1683. procedure TTestReportElementDOM.TestRead2;
  1684. Var
  1685. E : TDomElement;
  1686. begin
  1687. FillFE;
  1688. E:=FRD.CurrentElement;
  1689. F2.Frame.Assign(FE.Frame);
  1690. // Only layout is written
  1691. FE.WriteXML(FRD,F2);
  1692. FreeAndNil(F2);
  1693. F2:=TFPReportElement.Create(Nil);
  1694. F2.ReadXML(FRD);
  1695. AssertEquals('Layout was read',True,FE.Layout.Equals(F2.Layout));
  1696. AssertEquals('Frame was not read',False,FE.Frame.Equals(F2.Frame));
  1697. end;
  1698. initialization
  1699. RegisterTests({$IFDEF fptest} 'ReportDOM', {$ENDIF}
  1700. [TTestReportDOM{$IFDEF fptest}.Suite{$ENDIF},
  1701. TTestReportFrameDom{$IFDEF fptest}.Suite{$ENDIF},
  1702. TTestReportLayoutDom{$IFDEF fptest}.Suite{$ENDIF},
  1703. TTestReportElementDOM{$IFDEF fptest}.Suite{$ENDIF}
  1704. ]);
  1705. end.