Test_URLEntryPoints.dpr 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898
  1. (* _ _
  2. * | |__ _ __ ___ ___ | | __
  3. * | '_ \| '__/ _ \ / _ \| |/ /
  4. * | |_) | | | (_) | (_) | <
  5. * |_.__/|_| \___/ \___/|_|\_\
  6. *
  7. * Microframework which helps to develop web Pascal applications.
  8. *
  9. * Copyright (c) 2012-2021 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_URLEntryPoints;
  26. {$I Tests.inc}
  27. uses
  28. RTLConsts,
  29. SysUtils,
  30. Classes,
  31. BrookExtra,
  32. BrookLibraryLoader,
  33. BrookHTTPRequest,
  34. BrookHTTPResponse,
  35. BrookURLEntryPoints,
  36. BrookURLRouter,
  37. Test;
  38. type
  39. { TFakeHTTPRequest }
  40. TFakeHTTPRequest = class(TBrookHTTPRequest)
  41. private
  42. FPath: string;
  43. public
  44. constructor Create(AHandle: Pointer); override;
  45. destructor Destroy; override;
  46. property Path: string read FPath;
  47. end;
  48. { TFakeHTTPResponse }
  49. TFakeHTTPResponse = class(TBrookHTTPResponse)
  50. public
  51. constructor Create(AHandle: Pointer); override;
  52. destructor Destroy; override;
  53. procedure SendFmt(const AFormat: string; const AArgs: array of const;
  54. const AContentType: string; AStatus: Word); override;
  55. end;
  56. { TFakeURLEntryPointList }
  57. TFakeURLEntryPointList = class(TBrookURLEntryPointList)
  58. public
  59. function NewName: string; override;
  60. end;
  61. { TFakeURLEntryPoints }
  62. TFakeURLEntryPoints = class(TBrookURLEntryPoints)
  63. public
  64. procedure FakeOnNotFound(ASender: TObject; const AEntryPoint, APath: string;
  65. ARequest: TBrookHTTPRequest; AResponse: TBrookHTTPResponse);
  66. procedure FakeOnActivate(ASender: TObject);
  67. procedure FakeOnDeactivate(ASender: TObject);
  68. end;
  69. { TFakeURLRouter }
  70. TFakeURLRouter = class(TBrookURLRouter)
  71. public
  72. procedure Route(ASender: TObject; const ARoute: string;
  73. AReq: TBrookHTTPRequest; ARes: TBrookHTTPResponse); overload; override;
  74. end;
  75. var
  76. FakeRoutedPath: string;
  77. FakeFlag: Boolean;
  78. FakeResponseFakeFmt: string;
  79. FakeStatus: Word;
  80. { TFakeHTTPRequest }
  81. constructor TFakeHTTPRequest.Create(AHandle: Pointer);
  82. begin
  83. end;
  84. destructor TFakeHTTPRequest.Destroy;
  85. begin
  86. end;
  87. { TFakeHTTPResponse }
  88. constructor TFakeHTTPResponse.Create(AHandle: Pointer);
  89. begin
  90. end;
  91. destructor TFakeHTTPResponse.Destroy;
  92. begin
  93. end;
  94. procedure TFakeHTTPResponse.SendFmt(const AFormat: string;
  95. const AArgs: array of const; const AContentType: string; AStatus: Word);
  96. begin
  97. Assert(AFormat = FakeResponseFakeFmt);
  98. Assert(SameStr(string(AArgs[0].VPointer), FakeRoutedPath));
  99. Assert(AContentType = BROOK_CT_TEXT_PLAIN);
  100. Assert(AStatus = FakeStatus);
  101. end;
  102. { TFakeURLEntryPointList }
  103. function TFakeURLEntryPointList.NewName: string;
  104. begin
  105. Result := '';
  106. end;
  107. procedure TFakeURLEntryPoints.FakeOnNotFound(ASender: TObject;
  108. const AEntryPoint, APath: string; ARequest: TBrookHTTPRequest;
  109. AResponse: TBrookHTTPResponse);
  110. begin
  111. Assert(AEntryPoint = '/xxx');
  112. Assert(APath = '/');
  113. FakeFlag := True;
  114. end;
  115. procedure TFakeURLEntryPoints.FakeOnActivate(ASender: TObject);
  116. begin
  117. FakeFlag := True;
  118. end;
  119. procedure TFakeURLEntryPoints.FakeOnDeactivate(ASender: TObject);
  120. begin
  121. FakeFlag := True;
  122. end;
  123. { TFakeURLRouter }
  124. procedure TFakeURLRouter.Route(ASender: TObject; const ARoute: string;
  125. AReq: TBrookHTTPRequest; ARes: TBrookHTTPResponse);
  126. begin
  127. FakeFlag := ARoute = FakeRoutedPath;
  128. end;
  129. procedure Test_URLEntryPointCreate(AList: TBrookURLEntryPointList);
  130. var
  131. EP: TBrookURLEntryPoint;
  132. begin
  133. AList.Clear;
  134. EP := TBrookURLEntryPoint.Create(nil);
  135. try
  136. Assert(EP.Name = '/');
  137. finally
  138. EP.Free;
  139. end;
  140. EP := TBrookURLEntryPoint.Create(AList);
  141. Assert(EP.Name = '/api1');
  142. EP := TBrookURLEntryPoint.Create(AList);
  143. Assert(EP.Name = '/api2');
  144. end;
  145. procedure DoURLEntryPointEmptyEntryPointName(const AArgs: array of const);
  146. begin
  147. TBrookURLEntryPoint(AArgs[0].VObject).Validate;
  148. end;
  149. procedure Test_URLEntryPointValidate(AList: TBrookURLEntryPointList);
  150. var
  151. FL: TFakeURLEntryPointList;
  152. EP: TBrookURLEntryPoint;
  153. begin
  154. AList.Clear;
  155. FL := TFakeURLEntryPointList.Create(nil);
  156. try
  157. EP := TBrookURLEntryPoint.Create(AList);
  158. EP.Validate;
  159. EP := TBrookURLEntryPoint.Create(FL);
  160. AssertExcept(DoURLEntryPointEmptyEntryPointName, EBrookURLEntryPoint,
  161. Format(SBrookEmptyEntryPointName, [EP.GetNamePath]),
  162. [EP]);
  163. finally
  164. FL.Free;
  165. end;
  166. end;
  167. procedure Test_URLEntryPointUserData(AList: TBrookURLEntryPointList);
  168. var
  169. EP: TBrookURLEntryPoint;
  170. begin
  171. AList.Clear;
  172. EP := TBrookURLEntryPoint.Create(AList);
  173. Assert(not Assigned(EP.UserData));
  174. EP.UserData := AList;
  175. Assert(EP.UserData = AList);
  176. end;
  177. procedure DoURLEntryPointAlreadyExists(const AArgs: array of const);
  178. begin
  179. TBrookURLEntryPoint(AArgs[0].VObject).Name := '/api1';
  180. end;
  181. procedure Test_URLEntryPointName(AList: TBrookURLEntryPointList);
  182. var
  183. EP1, EP2: TBrookURLEntryPoint;
  184. begin
  185. AList.Clear;
  186. EP1 := TBrookURLEntryPoint.Create(nil);
  187. try
  188. Assert(EP1.Name = '/');
  189. EP1.Name := '';
  190. Assert(EP1.Name = '/');
  191. finally
  192. EP1.Free;
  193. end;
  194. EP1 := TBrookURLEntryPoint.Create(AList);
  195. Assert(EP1.Name = '/api1');
  196. EP1.Name := '';
  197. Assert(EP1.Name = '/');
  198. EP1 := AList.Add;
  199. Assert(EP1.Name = '/api1');
  200. EP2 := AList.Add;
  201. AssertExcept(DoURLEntryPointAlreadyExists, EBrookURLEntryPoint,
  202. Format(SBrookEntryPointAlreadyExists, [EP2.GetNamePath, '/api1',
  203. EP1.GetNamePath]), [EP2]);
  204. end;
  205. procedure Test_URLEntryPointRouter(AList: TBrookURLEntryPointList);
  206. var
  207. EP: TBrookURLEntryPoint;
  208. R: TBrookURLRouter;
  209. begin
  210. AList.Clear;
  211. EP := TBrookURLEntryPoint.Create(AList);
  212. Assert(not Assigned(EP.Router));
  213. R := TBrookURLRouter.Create(nil);
  214. try
  215. EP.Router := R;
  216. Assert(EP.Router = R);
  217. Assert(EP.UserData = R);
  218. finally
  219. R.Free;
  220. end;
  221. end;
  222. procedure Test_URLEntryPointListCreate;
  223. var
  224. M: TBrookURLEntryPointList;
  225. P: TPersistent;
  226. begin
  227. P := TPersistent.Create;
  228. M := TBrookURLEntryPointList.Create(P);
  229. try
  230. Assert(M.Owner = P);
  231. M.Add;
  232. M.Prepare;
  233. Assert(M.Prepared);
  234. TBrookLibraryLoader.Unload;
  235. Assert(not M.Prepared);
  236. TBrookLibraryLoader.Load;
  237. finally
  238. M.Free;
  239. P.Free;
  240. end;
  241. end;
  242. procedure Test_URLEntryPointListGetEntryPointClass;
  243. begin
  244. Assert(TBrookURLEntryPointList.GetEntryPointClass = TBrookURLEntryPoint);
  245. end;
  246. procedure DoURLEntryPointListPrepareValidate(const AArgs: array of const);
  247. begin
  248. TBrookURLEntryPointList(AArgs[0].VObject).Prepare;
  249. end;
  250. procedure Test_URLEntryPointListPrepare;
  251. var
  252. L1: TBrookURLEntryPointList;
  253. L2: TFakeURLEntryPointList;
  254. P: TBrookURLEntryPoint;
  255. begin
  256. L1 := TBrookURLEntryPointList.Create(nil);
  257. try
  258. Assert(not L1.Prepared);
  259. L1.Prepare;
  260. Assert(not L1.Prepared);
  261. L1.Add;
  262. L1.Prepare;
  263. L1.Prepare;
  264. Assert(L1.Prepared);
  265. TBrookLibraryLoader.Unload;
  266. Assert(not L1.Prepared);
  267. TBrookLibraryLoader.Load;
  268. finally
  269. L1.Free;
  270. end;
  271. L2 := TFakeURLEntryPointList.Create(nil);
  272. try
  273. P := L2.Add;
  274. AssertExcept(DoURLEntryPointListPrepareValidate, EBrookURLEntryPoint,
  275. Format(SBrookEmptyEntryPointName, [P.GetNamePath]), [L2]);
  276. finally
  277. L2.Free;
  278. end;
  279. end;
  280. procedure Test_URLEntryPointListUnprepare;
  281. var
  282. L: TBrookURLEntryPointList;
  283. begin
  284. L := TBrookURLEntryPointList.Create(nil);
  285. try
  286. Assert(not L.Prepared);
  287. L.Add;
  288. L.Prepare;
  289. Assert(L.Prepared);
  290. L.Unprepare;
  291. Assert(not L.Prepared);
  292. finally
  293. L.Free;
  294. end;
  295. end;
  296. procedure Test_URLEntryPointListIsPrepared;
  297. var
  298. L: TBrookURLEntryPointList;
  299. begin
  300. L := TBrookURLEntryPointList.Create(nil);
  301. try
  302. Assert(not L.IsPrepared);
  303. L.Add;
  304. L.Prepare;
  305. Assert(L.IsPrepared);
  306. finally
  307. L.Free;
  308. end;
  309. end;
  310. procedure Test_URLEntryPointListNewName;
  311. var
  312. L: TBrookURLEntryPointList;
  313. begin
  314. L := TBrookURLEntryPointList.Create(nil);
  315. try
  316. Assert(L.NewName = '/api1');
  317. L.Add;
  318. Assert(L.NewName = '/api2');
  319. L.Add;
  320. Assert(L.NewName = '/api3');
  321. L.Add;
  322. Assert(L.NewName = '/api4');
  323. L.Delete(L.Count - 1);
  324. Assert(L.NewName = '/api3');
  325. L.Delete(0);
  326. Assert(L.NewName = '/api1');
  327. finally
  328. L.Free;
  329. end;
  330. end;
  331. procedure Test_URLEntryPointListAdd;
  332. var
  333. L: TBrookURLEntryPointList;
  334. P: TBrookURLEntryPoint;
  335. begin
  336. L := TBrookURLEntryPointList.Create(nil);
  337. try
  338. Assert(L.Count = 0);
  339. P := L.Add;
  340. Assert(Assigned(P));
  341. Assert(P.Name = '/api1');
  342. Assert(L.Count = 1);
  343. P := L.Add;
  344. Assert(Assigned(P));
  345. Assert(P.Name = '/api2');
  346. Assert(L.Count = 2);
  347. finally
  348. L.Free;
  349. end;
  350. end;
  351. procedure Test_URLEntryPointListRemove;
  352. var
  353. L: TBrookURLEntryPointList;
  354. begin
  355. L := TBrookURLEntryPointList.Create(nil);
  356. try
  357. L.Add;
  358. L.Add;
  359. L.Add;
  360. Assert(L.Count = 3);
  361. Assert(Assigned(L.FindInList('/api1')));
  362. Assert(Assigned(L.FindInList('/api2')));
  363. Assert(Assigned(L.FindInList('/api3')));
  364. L.Remove('/api1');
  365. Assert(not Assigned(L.FindInList('/api1')));
  366. Assert(Assigned(L.FindInList('/api2')));
  367. Assert(Assigned(L.FindInList('/api3')));
  368. L.Remove('/api3');
  369. Assert(not Assigned(L.FindInList('/api1')));
  370. Assert(Assigned(L.FindInList('/api2')));
  371. Assert(not Assigned(L.FindInList('/api3')));
  372. L.Remove('/api2');
  373. Assert(not Assigned(L.FindInList('/api1')));
  374. Assert(not Assigned(L.FindInList('/api2')));
  375. Assert(not Assigned(L.FindInList('/api3')));
  376. Assert(L.Count = 0);
  377. finally
  378. L.Free;
  379. end;
  380. end;
  381. procedure Test_URLEntryPointListIndexOf;
  382. var
  383. L: TBrookURLEntryPointList;
  384. begin
  385. L := TBrookURLEntryPointList.Create(nil);
  386. try
  387. Assert(L.IndexOf('/api1') = -1);
  388. Assert(L.IndexOf('/api2') = -1);
  389. Assert(L.IndexOf('/api3') = -1);
  390. L.Add;
  391. L.Add;
  392. L.Add;
  393. Assert(L.IndexOf('/api1') = 0);
  394. Assert(L.IndexOf('/api2') = 1);
  395. Assert(L.IndexOf('/api3') = 2);
  396. finally
  397. L.Free;
  398. end;
  399. end;
  400. procedure Test_URLEntryPointListFindInList;
  401. var
  402. L: TBrookURLEntryPointList;
  403. begin
  404. L := TBrookURLEntryPointList.Create(nil);
  405. try
  406. Assert(not Assigned(L.FindInList('/api1')));
  407. Assert(not Assigned(L.FindInList('/api2')));
  408. Assert(not Assigned(L.FindInList('/api3')));
  409. L.Add;
  410. L.Add;
  411. L.Add;
  412. Assert(Assigned(L.FindInList('/api1')));
  413. Assert(Assigned(L.FindInList('/api2')));
  414. Assert(Assigned(L.FindInList('/api3')));
  415. finally
  416. L.Free;
  417. end;
  418. end;
  419. procedure DoURLEntryPointListFindUnprepared(const AArgs: array of const);
  420. var
  421. UD: Pointer;
  422. begin
  423. TBrookURLEntryPointList(AArgs[0].VObject).Find('a', UD);
  424. end;
  425. procedure Test_URLEntryPointListFind(AList: TBrookURLEntryPointList);
  426. var
  427. L: TBrookURLEntryPointList;
  428. UD: Pointer;
  429. begin
  430. L := TBrookURLEntryPointList.Create(nil);
  431. try
  432. L.Add.UserData := AList;
  433. L.Add;
  434. L.Add.UserData := L;
  435. L.Prepare;
  436. UD := nil;
  437. Assert(not L.Find('/x1', UD));
  438. Assert(not Assigned(UD));
  439. Assert(not L.Find('/x2', UD));
  440. Assert(not Assigned(UD));
  441. Assert(not L.Find('/x3', UD));
  442. Assert(not Assigned(UD));
  443. L.Unprepare;
  444. L.Prepare;
  445. Assert(L.Find('/api1', UD));
  446. Assert(UD = AList);
  447. Assert(L.Find('api2', UD));
  448. Assert(not Assigned(UD));
  449. Assert(L.Find('/api3', UD));
  450. Assert(UD = L);
  451. L.Find('', UD);
  452. L.Unprepare;
  453. AssertExcept(DoURLEntryPointListFindUnprepared, EBrookURLEntryPointList,
  454. SBrookEntryPointListUnprepared, [L]);
  455. finally
  456. L.Free;
  457. end;
  458. end;
  459. procedure Test_URLEntryPointListClear;
  460. var
  461. L: TBrookURLEntryPointList;
  462. begin
  463. L := TBrookURLEntryPointList.Create(nil);
  464. try
  465. L.Add;
  466. L.Add;
  467. L.Add;
  468. L.Prepare;
  469. Assert(L.Prepared);
  470. Assert(L.Count = 3);
  471. L.Clear;
  472. Assert(L.Count = 0);
  473. L.Clear;
  474. finally
  475. L.Free;
  476. end;
  477. end;
  478. procedure Test_URLEntryPointListItems;
  479. var
  480. L: TBrookURLEntryPointList;
  481. begin
  482. L := TBrookURLEntryPointList.Create(nil);
  483. try
  484. L.Add;
  485. L.Add;
  486. L.Add;
  487. Assert(L[0].Name = '/api1');
  488. Assert(L[1].Name = '/api2');
  489. Assert(L[2].Name = '/api3');
  490. finally
  491. L.Free;
  492. end;
  493. end;
  494. procedure Test_URLEntryPointListPrepared;
  495. var
  496. L: TBrookURLEntryPointList;
  497. begin
  498. L := TBrookURLEntryPointList.Create(nil);
  499. try
  500. Assert(not L.Prepared);
  501. L.Add;
  502. L.Prepare;
  503. Assert(L.Prepared);
  504. finally
  505. L.Free;
  506. end;
  507. end;
  508. procedure Test_URLEntryPointsCreate;
  509. var
  510. EPL: TBrookURLEntryPoints;
  511. begin
  512. EPL := TBrookURLEntryPoints.Create(nil);
  513. try
  514. Assert(Assigned(EPL.List));
  515. finally
  516. EPL.Free;
  517. end;
  518. end;
  519. procedure Test_URLEntryPointsAdd;
  520. var
  521. EPL: TBrookURLEntryPoints;
  522. EP: TBrookURLEntryPoint;
  523. begin
  524. EPL := TBrookURLEntryPoints.Create(nil);
  525. try
  526. Assert(EPL.List.Count = 0);
  527. EP := EPL.Add;
  528. Assert(Assigned(EP));
  529. EP := EPL.Add;
  530. Assert(Assigned(EP));
  531. EP := EPL.Add;
  532. Assert(Assigned(EP));
  533. Assert(EPL.List.Count = 3);
  534. finally
  535. EPL.Free;
  536. end;
  537. end;
  538. procedure Test_URLEntryPointsRemove;
  539. var
  540. EPL: TBrookURLEntryPoints;
  541. EP: TBrookURLEntryPoint;
  542. begin
  543. EPL := TBrookURLEntryPoints.Create(nil);
  544. try
  545. Assert(EPL.List.Count = 0);
  546. EP := EPL.Add;
  547. Assert(Assigned(EP));
  548. EP := EPL.Add;
  549. Assert(Assigned(EP));
  550. EP := EPL.Add;
  551. Assert(Assigned(EP));
  552. Assert(EPL.List.Count = 3);
  553. EPL.Remove('/api1');
  554. EPL.Remove('/api2');
  555. EPL.Remove('/api3');
  556. Assert(EPL.List.Count = 0);
  557. finally
  558. EPL.Free;
  559. end;
  560. end;
  561. procedure Test_URLEntryPointsClear;
  562. var
  563. EPL: TBrookURLEntryPoints;
  564. EP: TBrookURLEntryPoint;
  565. begin
  566. EPL := TBrookURLEntryPoints.Create(nil);
  567. try
  568. Assert(EPL.List.Count = 0);
  569. EP := EPL.Add;
  570. Assert(Assigned(EP));
  571. EP := EPL.Add;
  572. Assert(Assigned(EP));
  573. EP := EPL.Add;
  574. Assert(Assigned(EP));
  575. Assert(EPL.List.Count = 3);
  576. EPL.Clear;
  577. Assert(EPL.List.Count = 0);
  578. finally
  579. EPL.Free;
  580. end;
  581. end;
  582. procedure Test_URLEntryPointsOpen;
  583. var
  584. EPL: TBrookURLEntryPoints;
  585. begin
  586. EPL := TBrookURLEntryPoints.Create(nil);
  587. try
  588. Assert(not EPL.Active);
  589. EPL.Open;
  590. Assert(not EPL.Active);
  591. EPL.Add;
  592. EPL.Open;
  593. Assert(EPL.Active);
  594. EPL.Open;
  595. finally
  596. EPL.Free;
  597. end;
  598. end;
  599. procedure Test_URLEntryPointsClose;
  600. var
  601. EPL: TBrookURLEntryPoints;
  602. begin
  603. EPL := TBrookURLEntryPoints.Create(nil);
  604. try
  605. EPL.Add;
  606. EPL.Open;
  607. Assert(EPL.Active);
  608. EPL.Close;
  609. Assert(not EPL.Active);
  610. EPL.Close;
  611. finally
  612. EPL.Free;
  613. end;
  614. end;
  615. procedure DoURLEntryPointsEnterNoEntryPointsDefined(const AArgs: array of const);
  616. begin
  617. TFakeURLEntryPoints(AArgs[0].VObject).Enter(nil, '/api', nil, nil);
  618. end;
  619. procedure DoURLEntryPointsEnterInactiveEntryPoints(const AArgs: array of const);
  620. begin
  621. TFakeURLEntryPoints(AArgs[0].VObject).Enter(nil, '/api', nil, nil);
  622. end;
  623. procedure DoURLEntryPointsEnterParamIsNil(const AArgs: array of const);
  624. begin
  625. TFakeURLEntryPoints(AArgs[0].VObject).Enter(nil, nil, nil);
  626. end;
  627. procedure Test_URLEntryPointsEnter;
  628. var
  629. RQ: TFakeHTTPRequest;
  630. RS: TFakeHTTPResponse;
  631. EPL: TFakeURLEntryPoints;
  632. EP: TBrookURLEntryPoint;
  633. RT: TFakeURLRouter;
  634. begin
  635. RQ := TFakeHTTPRequest.Create(nil);
  636. RS := TFakeHTTPResponse.Create(nil);
  637. EPL := TFakeURLEntryPoints.Create(nil);
  638. RT := TFakeURLRouter.Create(nil);
  639. try
  640. EPL.Add.Router := RT;
  641. EPL.Open;
  642. FakeFlag := False;
  643. FakeRoutedPath := '/';
  644. EPL.Enter(nil, 'api1', nil, nil);
  645. Assert(FakeFlag);
  646. FakeFlag := False;
  647. FakeRoutedPath := '/test';
  648. EPL.Enter(nil, 'api1/test', nil, nil);
  649. Assert(FakeFlag);
  650. EPL.Close;
  651. EPL.Add;
  652. EPL.Open;
  653. FakeResponseFakeFmt := SBrookRouterNotAssigned;
  654. FakeRoutedPath := '/api1';
  655. FakeStatus := 500;
  656. EPL.Enter(nil, 'api1', nil, RS);
  657. EPL.OnNotFound := EPL.FakeOnNotFound;
  658. FakeResponseFakeFmt := SBrookEntryPointNotFound;
  659. FakeRoutedPath := '/xxx';
  660. FakeStatus := 404;
  661. EPL.Enter(nil, 'xxx', nil, nil);
  662. EPL.OnNotFound := nil;
  663. EPL.Enter(nil, 'xxx', nil, RS);
  664. EPL.Clear;
  665. AssertExcept(DoURLEntryPointsEnterNoEntryPointsDefined,
  666. EBrookURLEntryPointList, SBrookNoEntryPointsDefined, [EPL]);
  667. EPL.Open;
  668. EPL.Add;
  669. EPL.Close;
  670. AssertExcept(DoURLEntryPointsEnterInactiveEntryPoints,
  671. EInvalidOpException, SBrookInactiveEntryPoints, [EPL]);
  672. EPL.Clear;
  673. EP := EPL.Add;
  674. EP.Router := RT;
  675. EP.Name := '/';
  676. EPL.Open;
  677. EPL.Enter(nil, RQ, nil);
  678. AssertExcept(DoURLEntryPointsEnterParamIsNil,
  679. EArgumentNilException, Format(SParamIsNil, ['ARequest']), [EPL]);
  680. finally
  681. RT.Free;
  682. EPL.Free;
  683. RS.Free;
  684. RQ.Free;
  685. end;
  686. end;
  687. procedure Test_URLEntryPointsItems;
  688. var
  689. L: TBrookURLEntryPoints;
  690. begin
  691. L := TBrookURLEntryPoints.Create(nil);
  692. try
  693. L.Add;
  694. L.Add;
  695. L.Add;
  696. Assert(L[0].Name = '/api1');
  697. Assert(L[1].Name = '/api2');
  698. Assert(L[2].Name = '/api3');
  699. finally
  700. L.Free;
  701. end;
  702. end;
  703. procedure Test_URLEntryPointsActive;
  704. var
  705. L: TBrookURLEntryPoints;
  706. begin
  707. L := TBrookURLEntryPoints.Create(nil);
  708. try
  709. L.Add;
  710. Assert(not L.Active);
  711. L.Active := not L.Active;
  712. Assert(L.Active);
  713. Assert(L.List.Prepared);
  714. finally
  715. L.Free;
  716. end;
  717. end;
  718. procedure Test_URLEntryPointsOnNotFound;
  719. var
  720. EPL: TFakeURLEntryPoints;
  721. begin
  722. EPL := TFakeURLEntryPoints.Create(nil);
  723. try
  724. EPL.Add;
  725. EPL.Open;
  726. EPL.OnNotFound := EPL.FakeOnNotFound;
  727. FakeResponseFakeFmt := SBrookEntryPointNotFound;
  728. FakeRoutedPath := '/xxx';
  729. FakeStatus := 404;
  730. FakeFlag := False;
  731. EPL.Enter(nil, 'xxx', nil, nil);
  732. Assert(FakeFlag);
  733. finally
  734. EPL.Free;
  735. end;
  736. end;
  737. procedure Test_URLEntryPointsOnActivate;
  738. var
  739. EPL: TFakeURLEntryPoints;
  740. begin
  741. EPL := TFakeURLEntryPoints.Create(nil);
  742. try
  743. EPL.OnActivate := EPL.FakeOnActivate;
  744. FakeFlag := False;
  745. EPL.Add;
  746. EPL.Open;
  747. Assert(FakeFlag);
  748. finally
  749. EPL.Free;
  750. end;
  751. end;
  752. procedure Test_URLEntryPointsOnDeactivate;
  753. var
  754. EPL: TFakeURLEntryPoints;
  755. begin
  756. EPL := TFakeURLEntryPoints.Create(nil);
  757. try
  758. EPL.Add;
  759. EPL.Open;
  760. EPL.OnDeactivate := EPL.FakeOnDeactivate;
  761. FakeFlag := False;
  762. EPL.Close;
  763. Assert(FakeFlag);
  764. finally
  765. EPL.Free;
  766. end;
  767. end;
  768. var
  769. L: TBrookURLEntryPointList;
  770. begin
  771. {$IF (NOT DEFINED(FPC)) AND DEFINED(DEBUG)}
  772. ReportMemoryLeaksOnShutdown := True;
  773. {$ENDIF}
  774. TBrookLibraryLoader.Load;
  775. L := TBrookURLEntryPointList.Create(nil);
  776. try
  777. Test_URLEntryPointCreate(L);
  778. Test_URLEntryPointValidate(L);
  779. Test_URLEntryPointUserData(L);
  780. Test_URLEntryPointName(L);
  781. Test_URLEntryPointRouter(L);
  782. Test_URLEntryPointListCreate;
  783. Test_URLEntryPointListGetEntryPointClass;
  784. Test_URLEntryPointListPrepare;
  785. Test_URLEntryPointListUnprepare;
  786. Test_URLEntryPointListIsPrepared;
  787. Test_URLEntryPointListNewName;
  788. Test_URLEntryPointListAdd;
  789. Test_URLEntryPointListRemove;
  790. Test_URLEntryPointListIndexOf;
  791. Test_URLEntryPointListFindInList;
  792. Test_URLEntryPointListFind(L);
  793. Test_URLEntryPointListClear;
  794. Test_URLEntryPointListItems;
  795. Test_URLEntryPointListPrepared;
  796. Test_URLEntryPointsCreate;
  797. Test_URLEntryPointsAdd;
  798. Test_URLEntryPointsRemove;
  799. Test_URLEntryPointsClear;
  800. Test_URLEntryPointsOpen;
  801. Test_URLEntryPointsClose;
  802. Test_URLEntryPointsEnter;
  803. Test_URLEntryPointsItems;
  804. Test_URLEntryPointsActive;
  805. Test_URLEntryPointsOnNotFound;
  806. Test_URLEntryPointsOnActivate;
  807. Test_URLEntryPointsOnDeactivate;
  808. finally
  809. L.Free;
  810. TBrookLibraryLoader.Unload;
  811. end;
  812. end.