tcreportdom.pp 50 KB

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