2
0

Test_Reader.dpr 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655
  1. (* _ _
  2. * | |__ _ __ ___ ___ | | __
  3. * | '_ \| '__/ _ \ / _ \| |/ /
  4. * | |_) | | | (_) | (_) | <
  5. * |_.__/|_| \___/ \___/|_|\_\
  6. *
  7. * Microframework which helps to develop web Pascal applications.
  8. *
  9. * Copyright (c) 2012-2020 Silvio Clecio <[email protected]>
  10. *
  11. * Brook framework is free software; you can redistribute it and/or
  12. * modify it under the terms of the GNU Lesser General Public
  13. * License as published by the Free Software Foundation; either
  14. * version 2.1 of the License, or (at your option) any later version.
  15. *
  16. * Brook framework is distributed in the hope that it will be useful,
  17. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  18. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  19. * Lesser General Public License for more details.
  20. *
  21. * You should have received a copy of the GNU Lesser General Public
  22. * License along with Brook framework; if not, write to the Free Software
  23. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  24. *)
  25. program Test_Reader;
  26. {$I Tests.inc}
  27. {$IF DEFINED(FPC) AND DEFINED(MSWINDOWS)}
  28. {$CODEPAGE UTF8}
  29. {$ENDIF}
  30. uses
  31. RTLConsts,
  32. SysUtils,
  33. Classes,
  34. BrookReader,
  35. Test;
  36. const
  37. AI_19_CRLF = 'ABÇ'#13#10'dÉf'#13#10'GHÏ'#13#10'123'#13#10'456'#13#10'789';
  38. AI_19_FILE = 'TextFile.txt';
  39. type
  40. TMyStreamReader = class(TBrookStreamReader)
  41. end;
  42. { General }
  43. procedure Test_Encoding(AReader: TBrookTextReader);
  44. var
  45. VBytes: TBytes;
  46. begin
  47. Assert(Assigned(AReader.Encoding));
  48. VBytes := AReader.Encoding.GetBytes(AI_19_CRLF);
  49. Assert(AReader.Encoding.GetString(VBytes) = AI_19_CRLF);
  50. AReader.Encoding := nil;
  51. Assert(not Assigned(AReader.Encoding));
  52. AReader.Encoding := TEncoding.UTF8;
  53. Assert(Assigned(AReader.Encoding));
  54. Assert(AReader.Encoding.GetString(VBytes) = AI_19_CRLF);
  55. end;
  56. procedure Test_Reset(AReader: TBrookTextReader);
  57. begin
  58. Assert(UnicodeString(AReader.Read) = 'ABÇ');
  59. Assert(UnicodeString(AReader.Read) = 'dÉf');
  60. Assert(UnicodeString(AReader.Read) = 'GHÏ');
  61. AReader.Reset;
  62. Assert(UnicodeString(AReader.Read) = 'ABÇ');
  63. Assert(UnicodeString(AReader.Read) = 'dÉf');
  64. Assert(UnicodeString(AReader.Read) = 'GHÏ');
  65. end;
  66. procedure Test_IsEOF(AReader: TBrookTextReader);
  67. begin
  68. AReader.Reset;
  69. Assert(not AReader.EOF);
  70. AReader.ReadBytes;
  71. AReader.ReadBytes;
  72. AReader.ReadBytes;
  73. AReader.ReadBytes;
  74. AReader.ReadBytes;
  75. AReader.ReadBytes;
  76. Assert(AReader.EOF);
  77. AReader.Reset;
  78. Assert(not AReader.EOF);
  79. AReader.Read;
  80. AReader.Read;
  81. AReader.Read;
  82. AReader.Read;
  83. AReader.Read;
  84. AReader.Read;
  85. Assert(AReader.EOF);
  86. end;
  87. procedure Test_Close(AReader: TBrookTextReader);
  88. begin
  89. AReader.Reset;
  90. AReader.Close;
  91. Assert(AReader.IsEOF);
  92. end;
  93. procedure Test_Read(AReader: TBrookTextReader);
  94. var
  95. S: string;
  96. begin
  97. Assert(UnicodeString(AReader.Read) = 'ABÇ');
  98. Assert(UnicodeString(AReader.Read) = 'dÉf');
  99. Assert(UnicodeString(AReader.Read) = 'GHÏ');
  100. Assert(AReader.Read = '123');
  101. Assert(AReader.Read = '456');
  102. Assert(AReader.Read = '789');
  103. Assert(AReader.EOF);
  104. AReader.Reset;
  105. AReader.Read(S);
  106. Assert('ABÇ' = UnicodeString(S));
  107. AReader.Read(S);
  108. Assert('dÉf' = UnicodeString(S));
  109. AReader.Read(S);
  110. Assert('GHÏ' = UnicodeString(S));
  111. AReader.Read(S);
  112. Assert('123' = S);
  113. AReader.Read(S);
  114. Assert('456' = S);
  115. AReader.Read(S);
  116. Assert('789' = S);
  117. Assert(AReader.EOF);
  118. end;
  119. procedure Test_ReadBytes(AReader: TBrookTextReader);
  120. var
  121. B: TBytes;
  122. begin
  123. AReader.ReadBytes(B);
  124. Assert(TEncoding.UTF8.GetString(B) = 'ABÇ');
  125. AReader.ReadBytes(B);
  126. Assert(TEncoding.UTF8.GetString(B) = 'dÉf');
  127. AReader.ReadBytes(B);
  128. Assert(TEncoding.UTF8.GetString(B) = 'GHÏ');
  129. AReader.ReadBytes(B);
  130. Assert(string(TEncoding.UTF8.GetString(B)) = '123');
  131. AReader.ReadBytes(B);
  132. Assert(string(TEncoding.UTF8.GetString(B)) = '456');
  133. AReader.ReadBytes(B);
  134. Assert(string(TEncoding.UTF8.GetString(B)) = '789');
  135. Assert(AReader.EOF);
  136. AReader.Reset;
  137. Assert(TEncoding.UTF8.GetString(AReader.ReadBytes) = 'ABÇ');
  138. Assert(TEncoding.UTF8.GetString(AReader.ReadBytes) = 'dÉf');
  139. Assert(TEncoding.UTF8.GetString(AReader.ReadBytes) = 'GHÏ');
  140. Assert(string(TEncoding.UTF8.GetString(AReader.ReadBytes)) = '123');
  141. Assert(string(TEncoding.UTF8.GetString(AReader.ReadBytes)) = '456');
  142. Assert(string(TEncoding.UTF8.GetString(AReader.ReadBytes)) = '789');
  143. Assert(AReader.EOF);
  144. end;
  145. procedure Test_Create(AReader: TBrookTextReader);
  146. begin
  147. Assert(Assigned(AReader.Encoding));
  148. Assert(AReader.Encoding.ClassType = TUTF8Encoding);
  149. Assert(not AReader.IsEOF);
  150. Assert(TEncoding.UTF8.GetByteCount(AI_19_CRLF) = 31);
  151. end;
  152. { TTestTStreamReader }
  153. procedure DoStreamReaderCreateNilStream1;
  154. begin
  155. TMyStreamReader.Create(nil, nil, 0, False);
  156. end;
  157. procedure DoStreamReaderCreateNilStream2;
  158. begin
  159. TMyStreamReader.Create(nil, nil);
  160. end;
  161. procedure DoStreamReaderCreateNilStream3;
  162. begin
  163. TMyStreamReader.Create(nil);
  164. end;
  165. procedure Test_StreamReaderCreate;
  166. var
  167. VStream: TStream;
  168. VReader: TMyStreamReader;
  169. begin
  170. VReader := TMyStreamReader.Create(nil, TBytesStream.Create, 0, True);
  171. try
  172. Assert(not Assigned(VReader.Encoding));
  173. finally
  174. VReader.Free;
  175. end;
  176. VReader := TMyStreamReader.Create(TEncoding.UTF8, TBytesStream.Create, 0, True);
  177. try
  178. Assert(Assigned(VReader.Encoding));
  179. Assert(Assigned(VReader.Stream));
  180. Assert(VReader.Stream.ClassType = TBytesStream);
  181. Assert(VReader.OwnsStream);
  182. finally
  183. VReader.Free;
  184. end;
  185. VReader := TMyStreamReader.Create(nil, TBytesStream.Create, 512, True);
  186. try
  187. Assert(not Assigned(VReader.Encoding));
  188. finally
  189. VReader.Free;
  190. end;
  191. VReader := TMyStreamReader.Create(TEncoding.UTF8, TBytesStream.Create, 512, True);
  192. try
  193. Assert(High(VReader.Buffer) = 511);
  194. finally
  195. VReader.Free;
  196. end;
  197. VStream := TBytesStream.Create;
  198. VReader := TMyStreamReader.Create(nil, VStream);
  199. try
  200. Assert(not Assigned(VReader.Encoding));
  201. finally
  202. VStream.Free;
  203. VReader.Free;
  204. end;
  205. VStream := TBytesStream.Create;
  206. VReader := TMyStreamReader.Create(TEncoding.UTF8, VStream);
  207. try
  208. Assert(VReader.Encoding.ClassType = TUTF8Encoding);
  209. Assert(not VReader.OwnsStream);
  210. finally
  211. VStream.Free;
  212. VReader.Free;
  213. end;
  214. VStream := TBytesStream.Create;
  215. VReader := TMyStreamReader.Create(VStream);
  216. try
  217. Assert(not VReader.OwnsStream);
  218. Assert(Assigned(VReader.Stream));
  219. Assert(VReader.Encoding = TEncoding.UTF8);
  220. finally
  221. VStream.Free;
  222. VReader.Free;
  223. end;
  224. AssertExcept(DoStreamReaderCreateNilStream1, EArgumentNilException,
  225. Format(SParamIsNil, ['AStream']));
  226. AssertExcept(DoStreamReaderCreateNilStream2, EArgumentNilException,
  227. Format(SParamIsNil, ['AStream']));
  228. AssertExcept(DoStreamReaderCreateNilStream3, EArgumentNilException,
  229. Format(SParamIsNil, ['AStream']));
  230. end;
  231. procedure Test_StreamReaderReset;
  232. var
  233. VBytes: TBytes;
  234. VStream: TStream;
  235. VReader: TBrookTextReader;
  236. begin
  237. VStream := TBytesStream.Create;
  238. VReader := TBrookStreamReader.Create(VStream);
  239. try
  240. VBytes := TEncoding.UTF8.GetBytes(AI_19_CRLF);
  241. VStream.Write(VBytes[0], TEncoding.UTF8.GetByteCount(AI_19_CRLF));
  242. VStream.Seek(0, TSeekOrigin.soBeginning);
  243. Test_Reset(VReader);
  244. finally
  245. VStream.Free;
  246. VReader.Free;
  247. end;
  248. end;
  249. procedure Test_StreamReaderClose;
  250. var
  251. VStream: TStream;
  252. VReader: TBrookTextReader;
  253. begin
  254. VStream := TBytesStream.Create;
  255. VReader := TBrookStreamReader.Create(nil, VStream, 0, True);
  256. try
  257. Assert(Assigned(VStream));
  258. VReader.Close;
  259. Assert(VReader.IsEOF);
  260. VStream := nil;
  261. Assert(not Assigned(VStream));
  262. finally
  263. VReader.Free;
  264. end;
  265. end;
  266. procedure Test_StreamReaderIsEOF;
  267. var
  268. VStream: TStream;
  269. VReader: TBrookTextReader;
  270. begin
  271. VStream := TStringStream.Create(AI_19_CRLF, TEncoding.UTF8);
  272. VReader := TBrookStreamReader.Create(VStream);
  273. try
  274. Test_IsEOF(VReader);
  275. finally
  276. VStream.Free;
  277. VReader.Free;
  278. end;
  279. end;
  280. procedure Test_StreamReaderReadBytes;
  281. var
  282. VStream: TStream;
  283. VReader: TBrookTextReader;
  284. begin
  285. VStream := TStringStream.Create(AI_19_CRLF, TEncoding.UTF8);
  286. VReader := TBrookStreamReader.Create(VStream);
  287. try
  288. Test_ReadBytes(VReader);
  289. finally
  290. VStream.Free;
  291. VReader.Free;
  292. end;
  293. end;
  294. procedure Test_StreamReaderRead;
  295. var
  296. VStream: TStream;
  297. VReader: TBrookTextReader;
  298. begin
  299. VStream := TStringStream.Create(AI_19_CRLF, TEncoding.UTF8);
  300. VReader := TBrookStreamReader.Create(VStream);
  301. try
  302. Test_Read(VReader);
  303. finally
  304. VStream.Free;
  305. VReader.Free;
  306. end;
  307. end;
  308. procedure Test_StreamReaderEncoding;
  309. var
  310. VReader: TBrookTextReader;
  311. begin
  312. VReader := TBrookStreamReader.Create(TEncoding.UTF8,
  313. TBytesStream.Create, 0, True);
  314. try
  315. Test_Encoding(VReader);
  316. finally
  317. VReader.Free;
  318. end;
  319. end;
  320. procedure Test_StreamReaderStream;
  321. var
  322. VStream: TStream;
  323. VReader: TBrookStreamReader;
  324. begin
  325. VStream := TBytesStream.Create;
  326. VReader := TBrookStreamReader.Create(VStream);
  327. try
  328. Assert(Assigned(VReader.Stream));
  329. Assert(VReader.Stream.ClassType = TBytesStream);
  330. finally
  331. VStream.Free;
  332. VReader.Free;
  333. end;
  334. end;
  335. procedure Test_StreamReaderOwnsStream;
  336. var
  337. VStream: TStream;
  338. VReader: TBrookTextReader;
  339. begin
  340. VStream := TBytesStream.Create;
  341. VReader := TBrookStreamReader.Create(nil, VStream, 0, True);
  342. VReader.Free;
  343. VStream := nil;
  344. Assert(not Assigned(VStream));
  345. VStream := TBytesStream.Create;
  346. VReader := TBrookStreamReader.Create(nil, VStream);
  347. try
  348. Assert(Assigned(VStream));
  349. finally
  350. VStream.Free;
  351. VReader.Free;
  352. end;
  353. end;
  354. { TTestTStringReader }
  355. procedure Test_StringReaderCreate;
  356. var
  357. VReader: TBrookTextReader;
  358. begin
  359. VReader := TBrookStringReader.Create(TEncoding.UTF8, AI_19_CRLF, 1024);
  360. try
  361. Test_Create(VReader);
  362. finally
  363. VReader.Free;
  364. end;
  365. VReader := TBrookStringReader.Create(nil, AI_19_CRLF, 1024);
  366. try
  367. Assert(not Assigned(VReader.Encoding));
  368. finally
  369. VReader.Free;
  370. end;
  371. VReader := TBrookStringReader.Create(TEncoding.UTF8, AI_19_CRLF);
  372. try
  373. Test_Create(VReader);
  374. finally
  375. VReader.Free;
  376. end;
  377. VReader := TBrookStringReader.Create(nil, AI_19_CRLF);
  378. try
  379. Assert(not Assigned(VReader.Encoding));
  380. finally
  381. VReader.Free;
  382. end;
  383. VReader := TBrookStringReader.Create(AI_19_CRLF);
  384. try
  385. Assert(VReader.Encoding = TEncoding.UTF8);
  386. finally
  387. VReader.Free;
  388. end;
  389. end;
  390. procedure Test_StringReaderReset;
  391. var
  392. VReader: TBrookTextReader;
  393. begin
  394. VReader := TBrookStringReader.Create(AI_19_CRLF);
  395. try
  396. Test_Reset(VReader);
  397. finally
  398. VReader.Free;
  399. end;
  400. end;
  401. procedure Test_StringReaderClose;
  402. var
  403. VReader: TBrookTextReader;
  404. begin
  405. VReader := TBrookStringReader.Create(nil, AI_19_CRLF);
  406. try
  407. Test_Close(VReader);
  408. finally
  409. VReader.Free;
  410. end;
  411. end;
  412. procedure Test_StringReaderIsEOF;
  413. var
  414. VReader: TBrookTextReader;
  415. begin
  416. VReader := TBrookStringReader.Create(AI_19_CRLF);
  417. try
  418. Test_IsEOF(VReader);
  419. finally
  420. VReader.Free;
  421. end;
  422. end;
  423. procedure Test_StringReaderReadBytes;
  424. var
  425. VReader: TBrookTextReader;
  426. begin
  427. VReader := TBrookStringReader.Create(AI_19_CRLF);
  428. try
  429. Test_ReadBytes(VReader);
  430. finally
  431. VReader.Free;
  432. end;
  433. end;
  434. procedure Test_StringReaderRead;
  435. var
  436. VReader: TBrookTextReader;
  437. begin
  438. VReader := TBrookStringReader.Create(AI_19_CRLF);
  439. try
  440. Test_Read(VReader);
  441. finally
  442. VReader.Free;
  443. end;
  444. end;
  445. procedure Test_StringReaderEncoding;
  446. var
  447. VReader: TBrookTextReader;
  448. begin
  449. VReader := TBrookStringReader.Create(AI_19_CRLF);
  450. try
  451. Test_Encoding(VReader);
  452. finally
  453. VReader.Free;
  454. end;
  455. end;
  456. { TTestTFileReader }
  457. procedure Test_FileReaderCreate;
  458. var
  459. VReader: TBrookTextReader;
  460. begin
  461. VReader := TBrookFileReader.Create(TEncoding.UTF8, AI_19_FILE,
  462. fmOpenRead, 438, 1024);
  463. try
  464. Test_Create(VReader);
  465. finally
  466. VReader.Free;
  467. end;
  468. VReader := TBrookFileReader.Create(nil, AI_19_FILE, fmOpenRead, 438, 1024);
  469. try
  470. Assert(not Assigned(VReader.Encoding));
  471. finally
  472. VReader.Free;
  473. end;
  474. VReader := TBrookFileReader.Create(TEncoding.UTF8, AI_19_FILE, fmOpenRead, 1024);
  475. try
  476. Test_Create(VReader);
  477. finally
  478. VReader.Free;
  479. end;
  480. VReader := TBrookFileReader.Create(nil, AI_19_FILE, fmOpenRead, 1024);
  481. try
  482. Assert(not Assigned(VReader.Encoding));
  483. finally
  484. VReader.Free;
  485. end;
  486. VReader := TBrookFileReader.Create(TEncoding.UTF8, AI_19_FILE, 1024);
  487. try
  488. Test_Create(VReader);
  489. finally
  490. VReader.Free;
  491. end;
  492. VReader := TBrookFileReader.Create(nil, AI_19_FILE, 1024);
  493. try
  494. Assert(not Assigned(VReader.Encoding));
  495. finally
  496. VReader.Free;
  497. end;
  498. VReader := TBrookFileReader.Create(TEncoding.UTF8, AI_19_FILE);
  499. try
  500. Test_Create(VReader);
  501. finally
  502. VReader.Free;
  503. end;
  504. VReader := TBrookFileReader.Create(nil, AI_19_FILE);
  505. try
  506. Assert(not Assigned(VReader.Encoding));
  507. finally
  508. VReader.Free;
  509. end;
  510. VReader := TBrookFileReader.Create(AI_19_FILE);
  511. try
  512. Assert(VReader.Encoding = TEncoding.UTF8);
  513. finally
  514. VReader.Free;
  515. end;
  516. end;
  517. procedure Test_FileReaderReset;
  518. var
  519. VReader: TBrookTextReader;
  520. begin
  521. VReader := TBrookFileReader.Create(AI_19_FILE);
  522. try
  523. Test_Reset(VReader);
  524. finally
  525. VReader.Free;
  526. end;
  527. end;
  528. procedure Test_FileReaderClose;
  529. var
  530. VReader: TBrookTextReader;
  531. begin
  532. VReader := TBrookFileReader.Create(nil, AI_19_FILE);
  533. try
  534. Test_Close(VReader);
  535. finally
  536. VReader.Free;
  537. end;
  538. end;
  539. procedure Test_FileReaderIsEOF;
  540. var
  541. VReader: TBrookTextReader;
  542. begin
  543. VReader := TBrookFileReader.Create(AI_19_FILE);
  544. try
  545. Test_IsEOF(VReader);
  546. finally
  547. VReader.Free;
  548. end;
  549. end;
  550. procedure Test_FileReaderReadBytes;
  551. var
  552. VReader: TBrookTextReader;
  553. begin
  554. VReader := TBrookFileReader.Create(nil, AI_19_FILE);
  555. try
  556. Test_ReadBytes(VReader);
  557. finally
  558. VReader.Free;
  559. end;
  560. end;
  561. procedure Test_FileReaderRead;
  562. var
  563. VReader: TBrookTextReader;
  564. begin
  565. VReader := TBrookFileReader.Create(AI_19_FILE);
  566. try
  567. Test_Read(VReader);
  568. finally
  569. VReader.Free;
  570. end;
  571. end;
  572. procedure Test_TextReaderEncoding;
  573. var
  574. VReader: TBrookTextReader;
  575. begin
  576. VReader := TBrookFileReader.Create(AI_19_FILE);
  577. try
  578. Test_Encoding(VReader);
  579. finally
  580. VReader.Free;
  581. end;
  582. end;
  583. begin
  584. {$IF (NOT DEFINED(FPC)) AND DEFINED(DEBUG)}
  585. ReportMemoryLeaksOnShutdown := True;
  586. {$ENDIF}
  587. Test_StreamReaderCreate;
  588. Test_StreamReaderReset;
  589. Test_StreamReaderClose;
  590. Test_StreamReaderIsEOF;
  591. Test_StreamReaderReadBytes;
  592. Test_StreamReaderRead;
  593. Test_StreamReaderEncoding;
  594. Test_StreamReaderStream;
  595. Test_StreamReaderOwnsStream;
  596. Test_StringReaderCreate;
  597. Test_StringReaderReset;
  598. Test_StringReaderClose;
  599. Test_StringReaderIsEOF;
  600. Test_StringReaderReadBytes;
  601. Test_StringReaderRead;
  602. Test_StringReaderEncoding;
  603. Test_FileReaderCreate;
  604. Test_FileReaderReset;
  605. Test_FileReaderClose;
  606. Test_FileReaderIsEOF;
  607. Test_FileReaderReadBytes;
  608. Test_FileReaderRead;
  609. Test_TextReaderEncoding;
  610. end.