tctparser.pp 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911
  1. {$mode objfpc}
  2. {$h+}
  3. unit tctparser;
  4. interface
  5. uses
  6. Classes, SysUtils, fpcunit, testutils, testregistry;
  7. { TTestToString }
  8. TTestToString= class(TTestCase)
  9. private
  10. fStream : TMemoryStream;
  11. fPar : TParser;
  12. protected
  13. procedure SetUp; override;
  14. procedure TearDown; override;
  15. published
  16. procedure Test1;
  17. procedure Test2;
  18. procedure Test3;
  19. procedure Test4;
  20. procedure Test5;
  21. procedure Test6;
  22. procedure Test7;
  23. procedure Test8;
  24. procedure Test9;
  25. procedure Test10;
  26. procedure Test11;
  27. procedure Test12;
  28. procedure Test13;
  29. procedure Test14;
  30. procedure Test15;
  31. procedure Test16;
  32. procedure Test17;
  33. end;
  34. { TTestTokenInt }
  35. TTestTokenInt= class(TTestCase)
  36. private
  37. fStream : TMemoryStream;
  38. fPar : TParser;
  39. protected
  40. procedure SetUp; override;
  41. procedure TearDown; override;
  42. published
  43. procedure Test1;
  44. procedure Test2;
  45. procedure Test3;
  46. end;
  47. { TTestTokenFloat }
  48. TTestTokenFloat= class(TTestCase)
  49. private
  50. fStream : TMemoryStream;
  51. fPar : TParser;
  52. protected
  53. procedure SetUp; override;
  54. procedure TearDown; override;
  55. published
  56. procedure Test1;
  57. procedure Test2;
  58. procedure Test3;
  59. procedure Test4;
  60. procedure Test5;
  61. procedure Test6;
  62. end;
  63. { TTestSymbol }
  64. TTestSymbol= class(TTestCase)
  65. private
  66. fStream : TMemoryStream;
  67. fPar : TParser;
  68. protected
  69. procedure SetUp; override;
  70. procedure TearDown; override;
  71. published
  72. procedure Test1;
  73. procedure Test2;
  74. procedure Test3;
  75. end;
  76. { TTestPositions }
  77. TTestPositions= class(TTestCase)
  78. private
  79. fStream : TMemoryStream;
  80. fPar : TParser;
  81. protected
  82. procedure SetUp; override;
  83. procedure TearDown; override;
  84. published
  85. procedure Test1;
  86. procedure Test2;
  87. end;
  88. { TTestBinary }
  89. TTestBinary= class(TTestCase)
  90. private
  91. fStream : TMemoryStream;
  92. fOutStr : TMemoryStream;
  93. fPar : TParser;
  94. protected
  95. procedure SetUp; override;
  96. procedure TearDown; override;
  97. published
  98. procedure Test1;
  99. procedure Test2;
  100. end;
  101. Implementation
  102. { ---------------------------------------------------------------------
  103. TTestToString
  104. ---------------------------------------------------------------------}
  105. procedure TTestToString.Test1;
  106. const
  107. aStr = '- 10';
  108. begin
  109. fStream.WriteBuffer(aStr[1],length(aStr));
  110. fStream.Position:=0;
  111. fPar:=TParser.Create(fStream);
  112. try
  113. try
  114. fPar.CheckToken('-');
  115. except
  116. on e : EParserError do Fail('CheckToken failed');
  117. end;
  118. AssertEquals('-',fPar.TokenString);
  119. fPar.NextToken;
  120. try
  121. fPar.CheckToken(toInteger);
  122. except
  123. on e : EParserError do Fail('CheckToken failed');
  124. end;
  125. AssertEquals('10',fPar.TokenString);
  126. finally
  127. fPar.Free;
  128. end;
  129. end;
  130. procedure TTestToString.Test2;
  131. const
  132. aStr = '-10';
  133. begin
  134. fStream.WriteBuffer(aStr[1],length(aStr));
  135. fStream.Position:=0;
  136. fPar:=TParser.Create(fStream);
  137. try
  138. try
  139. fPar.CheckToken(toInteger);
  140. except
  141. on e : EParserError do Fail('CheckToken failed');
  142. end;
  143. AssertEquals('-10',fPar.TokenString);
  144. finally
  145. fPar.Free;
  146. end;
  147. end;
  148. procedure TTestToString.Test3;
  149. const
  150. aStr = '$AFz';
  151. begin
  152. fStream.WriteBuffer(aStr[1],length(aStr));
  153. fStream.Position:=0;
  154. fPar:=TParser.Create(fStream);
  155. try
  156. try
  157. fPar.CheckToken(toInteger);
  158. except
  159. on e : EParserError do Fail('CheckToken failed');
  160. end;
  161. AssertEquals('$AF',fPar.TokenString);
  162. fPar.NextToken;
  163. try
  164. fPar.CheckToken(toSymbol);
  165. except
  166. on e : EParserError do Fail('CheckToken failed');
  167. end;
  168. AssertEquals('z',fPar.TokenString);
  169. finally
  170. fPar.Free;
  171. end;
  172. end;
  173. procedure TTestToString.Test4;
  174. const
  175. aStr : string = '$';
  176. begin
  177. fStream.WriteBuffer(aStr[1],length(aStr));
  178. fStream.Position:=0;
  179. try
  180. fPar:=TParser.Create(fStream);
  181. except
  182. on e : EParserError do exit
  183. else
  184. begin
  185. fPar.Free;
  186. Fail('EParserError should be raised');
  187. end;
  188. end;
  189. fPar.Free;
  190. Fail('EParserError should be raised');
  191. end;
  192. procedure TTestToString.Test5;
  193. const
  194. aStr = '1.';
  195. begin
  196. fStream.WriteBuffer(aStr[1],length(aStr));
  197. fStream.Position:=0;
  198. fPar:=TParser.Create(fStream);
  199. try
  200. try
  201. fPar.CheckToken(toFloat);
  202. except
  203. on e : EParserError do Fail('CheckToken failed');
  204. end;
  205. AssertEquals('1.',fPar.TokenString);
  206. finally
  207. fPar.Free;
  208. end;
  209. end;
  210. procedure TTestToString.Test6;
  211. const
  212. aStr = '1.0';
  213. begin
  214. fStream.WriteBuffer(aStr[1],length(aStr));
  215. fStream.Position:=0;
  216. fPar:=TParser.Create(fStream);
  217. try
  218. try
  219. fPar.CheckToken(toFloat);
  220. except
  221. on e : EParserError do Fail('CheckToken failed');
  222. end;
  223. AssertEquals('1.0',fPar.TokenString);
  224. finally
  225. fPar.Free;
  226. end;
  227. end;
  228. procedure TTestToString.Test7;
  229. const
  230. aStr = '1E';
  231. begin
  232. fStream.WriteBuffer(aStr[1],length(aStr));
  233. fStream.Position:=0;
  234. try
  235. fPar:=TParser.Create(fStream);
  236. except
  237. on e : EParserError do exit
  238. else
  239. begin
  240. fPar.Free;
  241. Fail('EParserError should be raised');
  242. end;
  243. end;
  244. fPar.Free;
  245. Fail('EParserError should be raised');
  246. end;
  247. procedure TTestToString.Test8;
  248. const
  249. aStr = '1E+';
  250. begin
  251. fStream.WriteBuffer(aStr[1],length(aStr));
  252. fStream.Position:=0;
  253. try
  254. fPar:=TParser.Create(fStream);
  255. except
  256. on e : EParserError do exit
  257. else
  258. begin
  259. fPar.Free;
  260. Fail('EParserError should be raised');
  261. end;
  262. end;
  263. fPar.Free;
  264. Fail('EParserError should be raised');
  265. end;
  266. procedure TTestToString.Test9;
  267. const
  268. aStr = '1.E+2';
  269. begin
  270. fStream.WriteBuffer(aStr[1],length(aStr));
  271. fStream.Position:=0;
  272. fPar:=TParser.Create(fStream);
  273. try
  274. try
  275. fPar.CheckToken(toFloat);
  276. except
  277. on e : EParserError do Fail('CheckToken failed');
  278. end;
  279. AssertEquals('1.E+2',fPar.TokenString);
  280. finally
  281. fPar.Free;
  282. end;
  283. end;
  284. procedure TTestToString.Test10;
  285. const
  286. aStr = '1.E+2a';
  287. begin
  288. fStream.WriteBuffer(aStr[1],length(aStr));
  289. fStream.Position:=0;
  290. fPar:=TParser.Create(fStream);
  291. try
  292. try
  293. fPar.CheckToken(toFloat);
  294. except
  295. on e : EParserError do Fail('CheckToken failed');
  296. end;
  297. AssertEquals('1.E+2',fPar.TokenString);
  298. fPar.NextToken;
  299. try
  300. fPar.CheckToken(toSymbol);
  301. except
  302. on e : EParserError do Fail('CheckToken failed');
  303. end;
  304. AssertEquals('a',fPar.TokenString);
  305. finally
  306. fPar.Free;
  307. end;
  308. end;
  309. procedure TTestToString.Test11;
  310. const
  311. aStr = '12s';
  312. begin
  313. fStream.WriteBuffer(aStr[1],length(aStr));
  314. fStream.Position:=0;
  315. fPar:=TParser.Create(fStream);
  316. try
  317. try
  318. fPar.CheckToken(toFloat);
  319. except
  320. on e : EParserError do Fail('CheckToken failed');
  321. end;
  322. AssertEquals('12s',fPar.TokenString);
  323. finally
  324. fPar.Free;
  325. end;
  326. end;
  327. procedure TTestToString.Test12;
  328. const
  329. aStr = '''string'''; //'string'
  330. begin
  331. fStream.WriteBuffer(aStr[1],length(aStr));
  332. fStream.Position:=0;
  333. fPar:=TParser.Create(fStream);
  334. try
  335. try
  336. fPar.CheckToken(toString);
  337. except
  338. on e : EParserError do Fail('CheckToken failed');
  339. end;
  340. AssertEquals('string',fPar.TokenString);
  341. finally
  342. fPar.Free;
  343. end;
  344. end;
  345. procedure TTestToString.Test13;
  346. const
  347. aStr = '''can''''t'''; //'can''t'
  348. begin
  349. fStream.WriteBuffer(aStr[1],length(aStr));
  350. fStream.Position:=0;
  351. fPar:=TParser.Create(fStream);
  352. try
  353. try
  354. fPar.CheckToken(toString);
  355. except
  356. on e : EParserError do Fail('CheckToken failed');
  357. end;
  358. AssertEquals('can''t',fPar.TokenString);
  359. finally
  360. fPar.Free;
  361. end;
  362. end;
  363. procedure TTestToString.Test14;
  364. const
  365. aStr = '''c''#97#110''''''''#116#32''open file'''; //'c'#97#110''''#116#32'open file'
  366. begin
  367. fStream.WriteBuffer(aStr[1],length(aStr));
  368. fStream.Position:=0;
  369. fPar:=TParser.Create(fStream);
  370. try
  371. try
  372. fPar.CheckToken(toString);
  373. except
  374. on e : EParserError do Fail('CheckToken failed');
  375. end;
  376. AssertEquals('can''t open file',fPar.TokenString);
  377. finally
  378. fPar.Free;
  379. end;
  380. end;
  381. procedure TTestToString.Test15;
  382. const
  383. aStr = '''perch''#232';
  384. var ws : widestring;
  385. begin
  386. fStream.WriteBuffer(aStr[1],length(aStr));
  387. fStream.Position:=0;
  388. ws:='perch'#232;
  389. fPar:=TParser.Create(fStream);
  390. try
  391. try
  392. fPar.CheckToken(toWString);
  393. except
  394. on e : EParserError do Fail('CheckToken failed');
  395. end;
  396. AssertEquals(ws,fPar.TokenWideString);
  397. finally
  398. fPar.Free;
  399. end;
  400. end;
  401. procedure TTestToString.Test16;
  402. const
  403. aStr = '''unterminated string'#10'blah''';
  404. begin
  405. fStream.WriteBuffer(aStr[1],length(aStr));
  406. fStream.Position:=0;
  407. try
  408. fPar:=TParser.Create(fStream);
  409. except
  410. on e : EParserError do exit
  411. else
  412. begin
  413. fPar.Free;
  414. Fail('EParserError should be raised');
  415. end;
  416. end;
  417. fPar.Free;
  418. Fail('EParserError should be raised');
  419. end;
  420. procedure TTestToString.Test17;
  421. const
  422. aStr = 'first.second.third';
  423. begin
  424. fStream.WriteBuffer(aStr[1],length(aStr));
  425. fStream.Position:=0;
  426. fPar:=TParser.Create(fStream);
  427. try
  428. try
  429. fPar.CheckToken(toSymbol);
  430. except
  431. on e : EParserError do Fail('CheckToken failed');
  432. end;
  433. AssertEquals('first',fPar.TokenString);
  434. fPar.NextToken;
  435. try
  436. fPar.CheckToken('.');
  437. except
  438. on e : EParserError do Fail('CheckToken failed');
  439. end;
  440. AssertEquals('.',fPar.TokenString);
  441. fPar.NextToken;
  442. try
  443. fPar.CheckToken(toSymbol);
  444. except
  445. on e : EParserError do Fail('CheckToken failed');
  446. end;
  447. AssertEquals('second',fPar.TokenString);
  448. fPar.NextToken;
  449. try
  450. fPar.CheckToken('.');
  451. except
  452. on e : EParserError do Fail('CheckToken failed');
  453. end;
  454. AssertEquals('.',fPar.TokenString);
  455. fPar.NextToken;
  456. try
  457. fPar.CheckToken(toSymbol);
  458. except
  459. on e : EParserError do Fail('CheckToken failed');
  460. end;
  461. AssertEquals('third',fPar.TokenString);
  462. finally
  463. fPar.Free;
  464. end;
  465. end;
  466. procedure TTestToString.SetUp;
  467. begin
  468. fStream:=TMemoryStream.Create;
  469. end;
  470. procedure TTestToString.TearDown;
  471. begin
  472. fStream.Free;
  473. end;
  474. { ---------------------------------------------------------------------
  475. TTestTokenInt
  476. ---------------------------------------------------------------------}
  477. procedure TTestTokenInt.Test1;
  478. const
  479. aStr = '10';
  480. begin
  481. fStream.WriteBuffer(aStr[1],length(aStr));
  482. fStream.Position:=0;
  483. fPar:=TParser.Create(fStream);
  484. try
  485. AssertEquals(toInteger,fPar.Token);
  486. AssertEquals(10,fPar.TokenInt);
  487. finally
  488. fPar.Free;
  489. end;
  490. end;
  491. procedure TTestTokenInt.Test2;
  492. const
  493. aStr = '-10';
  494. begin
  495. fStream.WriteBuffer(aStr[1],length(aStr));
  496. fStream.Position:=0;
  497. fPar:=TParser.Create(fStream);
  498. try
  499. AssertEquals(toInteger,fPar.Token);
  500. AssertEquals(-10,fPar.TokenInt);
  501. finally
  502. fPar.Free;
  503. end;
  504. end;
  505. procedure TTestTokenInt.Test3;
  506. const
  507. aStr = '$AF';
  508. begin
  509. fStream.WriteBuffer(aStr[1],length(aStr));
  510. fStream.Position:=0;
  511. fPar:=TParser.Create(fStream);
  512. try
  513. AssertEquals(toInteger,fPar.Token);
  514. AssertEquals($AF,fPar.TokenInt);
  515. finally
  516. fPar.Free;
  517. end;
  518. end;
  519. procedure TTestTokenInt.SetUp;
  520. begin
  521. fStream:=TMemoryStream.Create;
  522. end;
  523. procedure TTestTokenInt.TearDown;
  524. begin
  525. fStream.Free;
  526. end;
  527. { ---------------------------------------------------------------------
  528. TTestTokenFloat
  529. ---------------------------------------------------------------------}
  530. procedure TTestTokenFloat.Test1;
  531. const
  532. aStr = '1.';
  533. begin
  534. fStream.WriteBuffer(aStr[1],length(aStr));
  535. fStream.Position:=0;
  536. fPar:=TParser.Create(fStream);
  537. try
  538. AssertEquals(toFloat,fPar.Token);
  539. AssertEquals(1.0,fPar.TokenFloat);
  540. AssertEquals(#0,fPar.FloatType);
  541. finally
  542. fPar.Free;
  543. end;
  544. end;
  545. procedure TTestTokenFloat.Test2;
  546. const
  547. aStr = '1.0';
  548. begin
  549. fStream.WriteBuffer(aStr[1],length(aStr));
  550. fStream.Position:=0;
  551. fPar:=TParser.Create(fStream);
  552. try
  553. AssertEquals(toFloat,fPar.Token);
  554. AssertEquals(1.0,fPar.TokenFloat);
  555. AssertEquals(#0,fPar.FloatType);
  556. finally
  557. fPar.Free;
  558. end;
  559. end;
  560. procedure TTestTokenFloat.Test3;
  561. const
  562. aStr = '1.E+2';
  563. begin
  564. fStream.WriteBuffer(aStr[1],length(aStr));
  565. fStream.Position:=0;
  566. fPar:=TParser.Create(fStream);
  567. try
  568. AssertEquals(toFloat,fPar.Token);
  569. AssertEquals(100.0,fPar.TokenFloat);
  570. AssertEquals(#0,fPar.FloatType);
  571. finally
  572. fPar.Free;
  573. end;
  574. end;
  575. procedure TTestTokenFloat.Test4;
  576. const
  577. aStr = '12s';
  578. begin
  579. fStream.WriteBuffer(aStr[1],length(aStr));
  580. fStream.Position:=0;
  581. fPar:=TParser.Create(fStream);
  582. try
  583. AssertEquals(toFloat,fPar.Token);
  584. AssertEquals(12.0,fPar.TokenFloat);
  585. AssertEquals('s',fPar.FloatType);
  586. finally
  587. fPar.Free;
  588. end;
  589. end;
  590. procedure TTestTokenFloat.Test5;
  591. const
  592. aStr = '12d';
  593. begin
  594. fStream.WriteBuffer(aStr[1],length(aStr));
  595. fStream.Position:=0;
  596. fPar:=TParser.Create(fStream);
  597. try
  598. AssertEquals(toFloat,fPar.Token);
  599. AssertEquals(12.0,fPar.TokenFloat);
  600. AssertEquals('d',fPar.FloatType);
  601. finally
  602. fPar.Free;
  603. end;
  604. end;
  605. procedure TTestTokenFloat.Test6;
  606. const
  607. aStr = '12c';
  608. begin
  609. fStream.WriteBuffer(aStr[1],length(aStr));
  610. fStream.Position:=0;
  611. fPar:=TParser.Create(fStream);
  612. try
  613. AssertEquals(toFloat,fPar.Token);
  614. AssertEquals(12.0,fPar.TokenFloat);
  615. AssertEquals('c',fPar.FloatType);
  616. finally
  617. fPar.Free;
  618. end;
  619. end;
  620. procedure TTestTokenFloat.SetUp;
  621. begin
  622. fStream:=TMemoryStream.Create;
  623. end;
  624. procedure TTestTokenFloat.TearDown;
  625. begin
  626. fStream.Free;
  627. end;
  628. { ---------------------------------------------------------------------
  629. TTestSymbol
  630. ---------------------------------------------------------------------}
  631. procedure TTestSymbol.Test1;
  632. const
  633. aStr = 'hello world';
  634. begin
  635. fStream.WriteBuffer(aStr[1],length(aStr));
  636. fStream.Position:=0;
  637. fPar:=TParser.Create(fStream);
  638. try
  639. AssertTrue(fPar.TokenSymbolIs('HELLO'));
  640. try
  641. fPar.CheckTokenSymbol('HeLlO');
  642. except
  643. on e : EParserError do Fail('CheckTokenSymbol failed');
  644. end;
  645. AssertEquals('hello',fPar.TokenComponentIdent);
  646. fPar.NextToken;
  647. AssertTrue(fPar.TokenSymbolIs('world'));
  648. try
  649. fPar.CheckTokenSymbol('wOrLd');
  650. except
  651. on e : EParserError do Fail('CheckTokenSymbol failed');
  652. end;
  653. AssertEquals('world',fPar.TokenComponentIdent);
  654. finally
  655. fPar.Free;
  656. end;
  657. end;
  658. procedure TTestSymbol.Test2;
  659. const
  660. aStr = 'first.second.third';
  661. begin
  662. fStream.WriteBuffer(aStr[1],length(aStr));
  663. fStream.Position:=0;
  664. fPar:=TParser.Create(fStream);
  665. try
  666. AssertTrue(fPar.TokenSymbolIs('first'));
  667. try
  668. fPar.CheckTokenSymbol('first');
  669. except
  670. on e : EParserError do Fail('CheckTokenSymbol failed');
  671. end;
  672. AssertEquals('first',fPar.TokenString);
  673. AssertEquals('first.second.third',fPar.TokenComponentIdent);
  674. AssertEquals('first.second.third',fPar.TokenString);
  675. finally
  676. fPar.Free;
  677. end;
  678. end;
  679. procedure TTestSymbol.Test3;
  680. const
  681. aStr = 'first.';
  682. begin
  683. fStream.WriteBuffer(aStr[1],length(aStr));
  684. fStream.Position:=0;
  685. fPar:=TParser.Create(fStream);
  686. try
  687. AssertTrue(fPar.TokenSymbolIs('first'));
  688. try
  689. fPar.CheckTokenSymbol('first');
  690. except
  691. on e : EParserError do Fail('CheckTokenSymbol failed');
  692. end;
  693. AssertEquals('first',fPar.TokenString);
  694. try
  695. fPar.TokenComponentIdent;
  696. except
  697. on e : EParserError do exit
  698. else
  699. Fail('EParserError should be raised');
  700. end;
  701. Fail('EParserError should be raised');
  702. finally
  703. fPar.Free;
  704. end;
  705. end;
  706. procedure TTestSymbol.SetUp;
  707. begin
  708. fStream:=TMemoryStream.Create;
  709. end;
  710. procedure TTestSymbol.TearDown;
  711. begin
  712. fStream.Free;
  713. end;
  714. { ---------------------------------------------------------------------
  715. TTestPositions
  716. ---------------------------------------------------------------------}
  717. procedure TTestPositions.Test1;
  718. const
  719. aStr = 'this is'#10'a '#13'test.'#13#10'Another line';
  720. begin
  721. fStream.WriteBuffer(aStr[1],length(aStr));
  722. fStream.Position:=0;
  723. fPar:=TParser.Create(fStream);
  724. try
  725. //this
  726. AssertEquals(1,fPar.SourceLine);
  727. AssertEquals(4,fPar.SourcePos);
  728. //is
  729. fPar.NextToken;
  730. AssertEquals(1,fPar.SourceLine);
  731. AssertEquals(7,fPar.SourcePos);
  732. //a
  733. fPar.NextToken;
  734. AssertEquals(2,fPar.SourceLine);
  735. AssertEquals(9,fPar.SourcePos);
  736. //test
  737. fPar.NextToken;
  738. AssertEquals(3,fPar.SourceLine);
  739. AssertEquals(15,fPar.SourcePos);
  740. //.
  741. fPar.NextToken;
  742. AssertEquals(3,fPar.SourceLine);
  743. AssertEquals(16,fPar.SourcePos);
  744. //Another
  745. fPar.NextToken;
  746. AssertEquals(4,fPar.SourceLine);
  747. AssertEquals(25,fPar.SourcePos);
  748. //line
  749. fPar.NextToken;
  750. AssertEquals(4,fPar.SourceLine);
  751. AssertEquals(30,fPar.SourcePos);
  752. //eof
  753. fPar.NextToken;
  754. AssertEquals(4,fPar.SourceLine);
  755. AssertEquals(30,fPar.SourcePos);
  756. AssertEquals(toEOF,fPar.Token);
  757. finally
  758. fPar.Free;
  759. end;
  760. end;
  761. procedure TTestPositions.Test2;
  762. const
  763. aStr = 'this is a test';
  764. begin
  765. fStream.WriteBuffer(aStr[1],length(aStr));
  766. fStream.Position:=0;
  767. fPar:=TParser.Create(fStream);
  768. try
  769. //this
  770. fPar.NextToken;
  771. //is
  772. finally
  773. fPar.Free;
  774. end;
  775. AssertEquals(7,fStream.Position);
  776. end;
  777. procedure TTestPositions.SetUp;
  778. begin
  779. fStream:=TMemoryStream.Create;
  780. end;
  781. procedure TTestPositions.TearDown;
  782. begin
  783. fStream.Free;
  784. end;
  785. { ---------------------------------------------------------------------
  786. TTestBinary
  787. ---------------------------------------------------------------------}
  788. procedure TTestBinary.Test1;
  789. const
  790. aStr = '{ 1234 56'+#13#10'789A somethingelse';
  791. var buf : array[0..4] of byte = ($12,$34,$56,$78,$9A);
  792. begin
  793. fStream.WriteBuffer(aStr[1],length(aStr));
  794. fStream.Position:=0;
  795. fOutStr.Position:=0;
  796. fPar:=TParser.Create(fStream);
  797. try
  798. fPar.HexToBinary(fOutStr);
  799. AssertEquals(5,fOutStr.Size);
  800. AssertTrue(CompareMem(@buf[0],fOutStr.Memory,5));
  801. AssertEquals(16,fPar.SourcePos);
  802. finally
  803. fPar.Free;
  804. end;
  805. end;
  806. procedure TTestBinary.Test2;
  807. const
  808. aStr = '{ 123z';
  809. begin
  810. fStream.WriteBuffer(aStr[1],length(aStr));
  811. fStream.Position:=0;
  812. fOutStr.Position:=0;
  813. fPar:=TParser.Create(fStream);
  814. try
  815. try
  816. fPar.HexToBinary(fOutStr);
  817. except
  818. on e : EParserError do exit
  819. else Fail('EParserError should be raised');
  820. end;
  821. Fail('EParserError should be raised');
  822. finally
  823. fPar.Free;
  824. end;
  825. end;
  826. procedure TTestBinary.SetUp;
  827. begin
  828. fStream:=TMemoryStream.Create;
  829. fOutStr:=TMemoryStream.Create;
  830. end;
  831. procedure TTestBinary.TearDown;
  832. begin
  833. fStream.Free;
  834. fOutStr.Free;
  835. end;
  836. initialization
  837. RegisterTests([TTestToString,TTestTokenInt,TTestTokenFloat,TTestSymbol,TTestBinary]);
  838. end.