Test_libsagui.dpr 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658
  1. (* _
  2. * ___ __ _ __ _ _ _(_)
  3. * / __|/ _` |/ _` | | | | |
  4. * \__ \ (_| | (_| | |_| | |
  5. * |___/\__,_|\__, |\__,_|_|
  6. * |___/
  7. *
  8. * Cross-platform library which helps to develop web servers or frameworks.
  9. *
  10. * Copyright (c) 2012-2021 Silvio Clecio <[email protected]>
  11. *
  12. * Brook framework is free software; you can redistribute it and/or
  13. * modify it under the terms of the GNU Lesser General Public
  14. * License as published by the Free Software Foundation; either
  15. * version 2.1 of the License, or (at your option) any later version.
  16. *
  17. * Brook framework is distributed in the hope that it will be useful,
  18. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  19. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  20. * Lesser General Public License for more details.
  21. *
  22. * You should have received a copy of the GNU Lesser General Public
  23. * License along with Brook framework; if not, write to the Free Software
  24. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  25. *)
  26. program Test_libsagui;
  27. {$I Tests.inc}
  28. {.$DEFINE TLS_SUPPORT}
  29. uses
  30. RTLConsts,
  31. SysUtils,
  32. Classes,
  33. Platform,
  34. libsagui,
  35. Test;
  36. type
  37. TFakeObject = class
  38. public
  39. procedure DoAddUnloadEvent1(ASender: TObject);
  40. procedure DoAddUnloadEvent2(ASender: TObject);
  41. procedure DoAddUnloadEvent3(ASender: TObject);
  42. end;
  43. procedure TFakeObject.DoAddUnloadEvent1(ASender: TObject);
  44. begin
  45. TComponent(ASender).Name := 'abc';
  46. end;
  47. procedure TFakeObject.DoAddUnloadEvent2(ASender: TObject);
  48. begin
  49. TComponent(ASender).Name := 'def';
  50. end;
  51. procedure TFakeObject.DoAddUnloadEvent3(ASender: TObject);
  52. begin
  53. TComponent(ASender).Name := 'ghi';
  54. end;
  55. procedure DoAddUnloadEvent(const AArgs: array of const);
  56. begin
  57. SgLib.UnloadEvents.Add(nil, AArgs[0].VObject);
  58. end;
  59. procedure Test_AddUnloadEvent;
  60. var
  61. O: TFakeObject;
  62. C1, C2, C3: TComponent;
  63. begin
  64. O := TFakeObject.Create;
  65. C1 := TComponent.Create(nil);
  66. C2 := TComponent.Create(nil);
  67. C3 := TComponent.Create(nil);
  68. try
  69. AssertExcept(DoAddUnloadEvent, EArgumentNilException,
  70. Format(SParamIsNil, ['AEvent']), [O]);
  71. SgLib.UnloadEvents.Clear;
  72. SgLib.UnloadEvents.Add(O.DoAddUnloadEvent1, nil);
  73. SgLib.UnloadEvents.Remove(O.DoAddUnloadEvent1);
  74. SgLib.Load(SG_LIB_NAME);
  75. SgLib.UnloadEvents.Add(O.DoAddUnloadEvent1, C1);
  76. SgLib.UnloadEvents.Add(O.DoAddUnloadEvent2, C2);
  77. SgLib.UnloadEvents.Add(O.DoAddUnloadEvent3, C3);
  78. Assert(C1.Name = '');
  79. Assert(C2.Name = '');
  80. Assert(C3.Name = '');
  81. SgLib.Unload;
  82. Assert(C1.Name = 'abc');
  83. Assert(C2.Name = 'def');
  84. Assert(C3.Name = 'ghi');
  85. SgLib.UnloadEvents.Clear;
  86. finally
  87. O.Free;
  88. C3.Free;
  89. C2.Free;
  90. C1.Free;
  91. end;
  92. end;
  93. procedure DoRemoveUnloadEvent;
  94. begin
  95. SgLib.UnloadEvents.Remove(nil);
  96. end;
  97. procedure Test_RemoveNotifier;
  98. var
  99. O: TFakeObject;
  100. C1, C2, C3: TComponent;
  101. begin
  102. AssertExcept(DoRemoveUnloadEvent, EArgumentNilException,
  103. Format(SParamIsNil, ['AEvent']));
  104. O := TFakeObject.Create;
  105. C1 := TComponent.Create(nil);
  106. C2 := TComponent.Create(nil);
  107. C3 := TComponent.Create(nil);
  108. try
  109. SgLib.UnloadEvents.Clear;
  110. SgLib.Load(SG_LIB_NAME);
  111. SgLib.UnloadEvents.Add(O.DoAddUnloadEvent1, C1);
  112. SgLib.UnloadEvents.Add(O.DoAddUnloadEvent2, C2);
  113. SgLib.UnloadEvents.Add(O.DoAddUnloadEvent3, C3);
  114. SgLib.UnloadEvents.Remove(O.DoAddUnloadEvent2);
  115. SgLib.Unload;
  116. Assert(C1.Name = 'abc');
  117. Assert(C2.Name = '');
  118. Assert(C3.Name = 'ghi');
  119. SgLib.UnloadEvents.Clear;
  120. finally
  121. C3.Free;
  122. C2.Free;
  123. C1.Free;
  124. O.Free;
  125. end;
  126. end;
  127. procedure Test_GetLastName;
  128. begin
  129. SgLib.Unload;
  130. Assert(SgLib.GetLastName = '');
  131. SgLib.Load(SG_LIB_NAME);
  132. Assert(SgLib.GetLastName = SG_LIB_NAME);
  133. end;
  134. procedure DoSgLibCheckVersion1;
  135. begin
  136. SgLib.CheckVersion((Pred(SG_VERSION_MAJOR) shl 16) or
  137. (SG_VERSION_MINOR shl 8) or SG_VERSION_PATCH);
  138. end;
  139. procedure DoSgLibCheckVersion2;
  140. begin
  141. SgLib.CheckVersion((Succ(SG_VERSION_MAJOR) shl 16) or
  142. (SG_VERSION_MINOR shl 8) or SG_VERSION_PATCH);
  143. end;
  144. procedure DoSgLibCheckVersion3;
  145. begin
  146. SgLib.CheckVersion((SG_VERSION_MAJOR shl 16) or
  147. (Pred(SG_VERSION_MINOR) shl 8) or SG_VERSION_PATCH);
  148. end;
  149. procedure DoSgLibCheckVersion4;
  150. begin
  151. SgLib.CheckVersion((SG_VERSION_MAJOR shl 16) or
  152. (SG_VERSION_MINOR shl 8) or Pred(SG_VERSION_PATCH));
  153. end;
  154. procedure Test_CheckVersion;
  155. begin
  156. SgLib.Unload;
  157. SgLib.Load(SG_LIB_NAME);
  158. AssertExcept(DoSgLibCheckVersion1, EInvalidOpException,
  159. Format(SSgLibVersion, [SG_VERSION_MAJOR, SG_VERSION_MINOR, SG_VERSION_PATCH]));
  160. SgLib.Load(SG_LIB_NAME);
  161. AssertExcept(DoSgLibCheckVersion2, EInvalidOpException,
  162. Format(SSgLibVersion, [SG_VERSION_MAJOR, SG_VERSION_MINOR, SG_VERSION_PATCH]));
  163. SgLib.Load(SG_LIB_NAME);
  164. AssertExcept(DoSgLibCheckVersion3, EInvalidOpException,
  165. Format(SSgLibVersion, [SG_VERSION_MAJOR, SG_VERSION_MINOR, SG_VERSION_PATCH]));
  166. SgLib.Load(SG_LIB_NAME);
  167. SgLib.CheckVersion((SG_VERSION_MAJOR shl 16) or
  168. (Succ(SG_VERSION_MINOR) shl 8) or SG_VERSION_PATCH);
  169. AssertExcept(DoSgLibCheckVersion4, EInvalidOpException,
  170. Format(SSgLibVersion, [SG_VERSION_MAJOR, SG_VERSION_MINOR, SG_VERSION_PATCH]));
  171. SgLib.Load(SG_LIB_NAME);
  172. SgLib.CheckVersion((SG_VERSION_MAJOR shl 16) or
  173. (Succ(SG_VERSION_MINOR) shl 8) or 0);
  174. SgLib.CheckVersion;
  175. end;
  176. procedure DoSgLibCheckLastError1;
  177. begin
  178. SgLib.CheckLastError(EINVAL);
  179. end;
  180. procedure DoSgLibCheckLastError2;
  181. begin
  182. SgLib.CheckLastError(456);
  183. end;
  184. procedure Test_CheckLastError;
  185. function strerror(ALastError: Integer): string;
  186. var
  187. P: array[0..SG_ERR_SIZE-1] of cchar;
  188. begin
  189. sg_strerror(ALastError, @P[0], SG_ERR_SIZE);
  190. {$IFDEF FPC}
  191. SetString(Result, @P[0], Length(Pcchar(@P[0])));
  192. SetCodePage(RawByteString(Result), CP_UTF8, False);
  193. {$ELSE}
  194. Result := TMarshal.ReadStringAsUtf8(TPtrWrapper.Create(@P[0]));
  195. {$ENDIF}
  196. end;
  197. var
  198. F: Pointer;
  199. begin
  200. SgLib.CheckLastError(0);
  201. F := @sg_strerror;
  202. sg_strerror := nil;
  203. SgLib.CheckLastError(123);
  204. sg_strerror := F;
  205. AssertOSExcept(DoSgLibCheckLastError1, strerror(EINVAL), EINVAL);
  206. AssertOSExcept(DoSgLibCheckLastError2, strerror(456), 456);
  207. end;
  208. procedure DoSgLibLoad1;
  209. begin
  210. Assert(SgLib.Load('') = NilHandle);
  211. end;
  212. procedure DoSgLibLoad2;
  213. begin
  214. Assert(SgLib.Load('abc') = NilHandle);
  215. end;
  216. procedure Test_Load;
  217. begin
  218. SgLib.Unload;
  219. AssertExcept(DoSgLibLoad1, EArgumentException, SSgLibEmptyName);
  220. AssertExcept(DoSgLibLoad2, ESgLibNotLoaded, Format(SSgLibNotLoaded, ['abc']));
  221. Assert(SgLib.Load(SG_LIB_NAME) <> NilHandle);
  222. end;
  223. procedure Test_Unload;
  224. begin
  225. Assert(SgLib.Load(SG_LIB_NAME) <> NilHandle);
  226. Assert(SgLib.Unload = NilHandle);
  227. end;
  228. procedure Test_IsLoaded;
  229. begin
  230. SgLib.Unload;
  231. Assert(not SgLib.IsLoaded);
  232. SgLib.Load(SG_LIB_NAME);
  233. Assert(SgLib.IsLoaded);
  234. end;
  235. procedure DoSgLibCheck;
  236. begin
  237. SgLib.Unload;
  238. SgLib.Check;
  239. end;
  240. procedure Test_Check;
  241. begin
  242. AssertExcept(DoSgLibCheck, ESgLibNotLoaded,
  243. Format(SSgLibNotLoaded, [SG_LIB_NAME]));
  244. end;
  245. procedure Test_Handle;
  246. begin
  247. SgLib.Unload;
  248. Assert(SgLib.Handle = NilHandle);
  249. SgLib.Load(SG_LIB_NAME);
  250. Assert(SgLib.Handle <> NilHandle);
  251. end;
  252. procedure Test_Binding;
  253. begin
  254. SgLib.Unload;
  255. Assert(not Assigned(sg_version));
  256. Assert(not Assigned(sg_version_str));
  257. Assert(not Assigned(sg_mm_set));
  258. Assert(not Assigned(sg_malloc));
  259. Assert(not Assigned(sg_alloc));
  260. Assert(not Assigned(sg_realloc));
  261. Assert(not Assigned(sg_free));
  262. Assert(not Assigned(sg_math_set));
  263. Assert(not Assigned(sg_strerror));
  264. Assert(not Assigned(sg_is_post));
  265. Assert(not Assigned(sg_extract_entrypoint));
  266. Assert(not Assigned(sg_tmpdir));
  267. Assert(not Assigned(sg_eor));
  268. Assert(not Assigned(sg_ip));
  269. Assert(not Assigned(sg_str_new));
  270. Assert(not Assigned(sg_str_free));
  271. Assert(not Assigned(sg_str_write));
  272. Assert(not Assigned(sg_str_printf_va));
  273. Assert(not Assigned(sg_str_printf));
  274. Assert(not Assigned(sg_str_content));
  275. Assert(not Assigned(sg_str_length));
  276. Assert(not Assigned(sg_str_clear));
  277. Assert(not Assigned(sg_strmap_name));
  278. Assert(not Assigned(sg_strmap_val));
  279. Assert(not Assigned(sg_strmap_add));
  280. Assert(not Assigned(sg_strmap_set));
  281. Assert(not Assigned(sg_strmap_find));
  282. Assert(not Assigned(sg_strmap_get));
  283. Assert(not Assigned(sg_strmap_rm));
  284. Assert(not Assigned(sg_strmap_iter));
  285. Assert(not Assigned(sg_strmap_sort));
  286. Assert(not Assigned(sg_strmap_count));
  287. Assert(not Assigned(sg_strmap_next));
  288. Assert(not Assigned(sg_strmap_cleanup));
  289. Assert(not Assigned(sg_httpauth_set_realm));
  290. Assert(not Assigned(sg_httpauth_realm));
  291. Assert(not Assigned(sg_httpauth_deny2));
  292. Assert(not Assigned(sg_httpauth_deny));
  293. Assert(not Assigned(sg_httpauth_cancel));
  294. Assert(not Assigned(sg_httpauth_usr));
  295. Assert(not Assigned(sg_httpauth_pwd));
  296. Assert(not Assigned(sg_httpuplds_iter));
  297. Assert(not Assigned(sg_httpuplds_next));
  298. Assert(not Assigned(sg_httpuplds_count));
  299. Assert(not Assigned(sg_httpupld_handle));
  300. Assert(not Assigned(sg_httpupld_dir));
  301. Assert(not Assigned(sg_httpupld_field));
  302. Assert(not Assigned(sg_httpupld_name));
  303. Assert(not Assigned(sg_httpupld_mime));
  304. Assert(not Assigned(sg_httpupld_encoding));
  305. Assert(not Assigned(sg_httpupld_size));
  306. Assert(not Assigned(sg_httpupld_save));
  307. Assert(not Assigned(sg_httpupld_save_as));
  308. Assert(not Assigned(sg_httpreq_srv));
  309. Assert(not Assigned(sg_httpreq_headers));
  310. Assert(not Assigned(sg_httpreq_cookies));
  311. Assert(not Assigned(sg_httpreq_params));
  312. Assert(not Assigned(sg_httpreq_fields));
  313. Assert(not Assigned(sg_httpreq_version));
  314. Assert(not Assigned(sg_httpreq_method));
  315. Assert(not Assigned(sg_httpreq_path));
  316. Assert(not Assigned(sg_httpreq_payload));
  317. Assert(not Assigned(sg_httpreq_is_uploading));
  318. Assert(not Assigned(sg_httpreq_uploads));
  319. Assert(not Assigned(sg_httpreq_client));
  320. {$IFDEF TLS_SUPPORT}
  321. Assert(not Assigned(sg_httpreq_tls_session));
  322. {$ENDIF}
  323. Assert(not Assigned(sg_httpreq_isolate));
  324. Assert(not Assigned(sg_httpreq_set_user_data));
  325. Assert(not Assigned(sg_httpreq_user_data));
  326. Assert(not Assigned(sg_httpres_headers));
  327. Assert(not Assigned(sg_httpres_set_cookie));
  328. Assert(not Assigned(sg_httpres_sendbinary));
  329. Assert(not Assigned(sg_httpres_sendfile2));
  330. Assert(not Assigned(sg_httpres_sendfile));
  331. Assert(not Assigned(sg_httpres_sendstream));
  332. Assert(not Assigned(sg_httpres_zsendbinary2));
  333. Assert(not Assigned(sg_httpres_zsendbinary));
  334. Assert(not Assigned(sg_httpres_zsendstream2));
  335. Assert(not Assigned(sg_httpres_zsendstream));
  336. Assert(not Assigned(sg_httpres_zsendfile2));
  337. Assert(not Assigned(sg_httpres_zsendfile));
  338. Assert(not Assigned(sg_httpres_reset));
  339. Assert(not Assigned(sg_httpres_clear));
  340. Assert(not Assigned(sg_httpres_is_empty));
  341. Assert(not Assigned(sg_httpsrv_new2));
  342. Assert(not Assigned(sg_httpsrv_new));
  343. Assert(not Assigned(sg_httpsrv_free));
  344. {$IFDEF TLS_SUPPORT}
  345. Assert(not Assigned(sg_httpsrv_tls_listen3));
  346. Assert(not Assigned(sg_httpsrv_tls_listen2));
  347. Assert(not Assigned(sg_httpsrv_tls_listen));
  348. {$ENDIF}
  349. Assert(not Assigned(sg_httpsrv_listen));
  350. Assert(not Assigned(sg_httpsrv_shutdown));
  351. Assert(not Assigned(sg_httpsrv_port));
  352. Assert(not Assigned(sg_httpsrv_is_threaded));
  353. Assert(not Assigned(sg_httpsrv_set_cli_cb));
  354. Assert(not Assigned(sg_httpsrv_set_upld_cbs));
  355. Assert(not Assigned(sg_httpsrv_set_upld_dir));
  356. Assert(not Assigned(sg_httpsrv_upld_dir));
  357. Assert(not Assigned(sg_httpsrv_set_post_buf_size));
  358. Assert(not Assigned(sg_httpsrv_post_buf_size));
  359. Assert(not Assigned(sg_httpsrv_set_payld_limit));
  360. Assert(not Assigned(sg_httpsrv_payld_limit));
  361. Assert(not Assigned(sg_httpsrv_set_uplds_limit));
  362. Assert(not Assigned(sg_httpsrv_uplds_limit));
  363. Assert(not Assigned(sg_httpsrv_set_thr_pool_size));
  364. Assert(not Assigned(sg_httpsrv_thr_pool_size));
  365. Assert(not Assigned(sg_httpsrv_set_con_timeout));
  366. Assert(not Assigned(sg_httpsrv_con_timeout));
  367. Assert(not Assigned(sg_httpsrv_set_con_limit));
  368. Assert(not Assigned(sg_httpsrv_con_limit));
  369. Assert(not Assigned(sg_httpsrv_handle));
  370. Assert(not Assigned(sg_entrypoint_name));
  371. Assert(not Assigned(sg_entrypoint_set_user_data));
  372. Assert(not Assigned(sg_entrypoint_user_data));
  373. Assert(not Assigned(sg_entrypoints_new));
  374. Assert(not Assigned(sg_entrypoints_free));
  375. Assert(not Assigned(sg_entrypoints_add));
  376. Assert(not Assigned(sg_entrypoints_rm));
  377. Assert(not Assigned(sg_entrypoints_iter));
  378. Assert(not Assigned(sg_entrypoints_clear));
  379. Assert(not Assigned(sg_entrypoints_find));
  380. Assert(not Assigned(sg_route_handle));
  381. Assert(not Assigned(sg_route_match));
  382. Assert(not Assigned(sg_route_rawpattern));
  383. Assert(not Assigned(sg_route_pattern));
  384. Assert(not Assigned(sg_route_path));
  385. Assert(not Assigned(sg_route_segments_iter));
  386. Assert(not Assigned(sg_route_vars_iter));
  387. Assert(not Assigned(sg_route_user_data));
  388. Assert(not Assigned(sg_routes_add2));
  389. Assert(not Assigned(sg_routes_add));
  390. Assert(not Assigned(sg_routes_rm));
  391. Assert(not Assigned(sg_routes_iter));
  392. Assert(not Assigned(sg_routes_next));
  393. Assert(not Assigned(sg_routes_count));
  394. Assert(not Assigned(sg_routes_cleanup));
  395. Assert(not Assigned(sg_router_new));
  396. Assert(not Assigned(sg_router_free));
  397. Assert(not Assigned(sg_router_dispatch2));
  398. Assert(not Assigned(sg_router_dispatch));
  399. Assert(not Assigned(sg_expr_new));
  400. Assert(not Assigned(sg_expr_free));
  401. Assert(not Assigned(sg_expr_compile));
  402. Assert(not Assigned(sg_expr_clear));
  403. Assert(not Assigned(sg_expr_eval));
  404. Assert(not Assigned(sg_expr_var));
  405. Assert(not Assigned(sg_expr_set_var));
  406. Assert(not Assigned(sg_expr_arg));
  407. Assert(not Assigned(sg_expr_near));
  408. Assert(not Assigned(sg_expr_err));
  409. Assert(not Assigned(sg_expr_strerror));
  410. Assert(not Assigned(sg_expr_calc));
  411. SgLib.Load(SG_LIB_NAME);
  412. Assert(Assigned(sg_version));
  413. Assert(Assigned(sg_version_str));
  414. Assert(Assigned(sg_mm_set));
  415. Assert(Assigned(sg_malloc));
  416. Assert(Assigned(sg_alloc));
  417. Assert(Assigned(sg_realloc));
  418. Assert(Assigned(sg_free));
  419. Assert(Assigned(sg_math_set));
  420. Assert(Assigned(sg_strerror));
  421. Assert(Assigned(sg_is_post));
  422. Assert(Assigned(sg_extract_entrypoint));
  423. Assert(Assigned(sg_tmpdir));
  424. Assert(Assigned(sg_eor));
  425. Assert(Assigned(sg_ip));
  426. Assert(Assigned(sg_str_new));
  427. Assert(Assigned(sg_str_free));
  428. Assert(Assigned(sg_str_write));
  429. Assert(Assigned(sg_str_printf_va));
  430. Assert(Assigned(sg_str_printf));
  431. Assert(Assigned(sg_str_content));
  432. Assert(Assigned(sg_str_length));
  433. Assert(Assigned(sg_str_clear));
  434. Assert(Assigned(sg_strmap_name));
  435. Assert(Assigned(sg_strmap_val));
  436. Assert(Assigned(sg_strmap_add));
  437. Assert(Assigned(sg_strmap_set));
  438. Assert(Assigned(sg_strmap_find));
  439. Assert(Assigned(sg_strmap_get));
  440. Assert(Assigned(sg_strmap_rm));
  441. Assert(Assigned(sg_strmap_iter));
  442. Assert(Assigned(sg_strmap_sort));
  443. Assert(Assigned(sg_strmap_count));
  444. Assert(Assigned(sg_strmap_next));
  445. Assert(Assigned(sg_strmap_cleanup));
  446. Assert(Assigned(sg_httpauth_set_realm));
  447. Assert(Assigned(sg_httpauth_realm));
  448. Assert(Assigned(sg_httpauth_deny2));
  449. Assert(Assigned(sg_httpauth_deny));
  450. Assert(Assigned(sg_httpauth_cancel));
  451. Assert(Assigned(sg_httpauth_usr));
  452. Assert(Assigned(sg_httpauth_pwd));
  453. Assert(Assigned(sg_httpuplds_iter));
  454. Assert(Assigned(sg_httpuplds_next));
  455. Assert(Assigned(sg_httpuplds_count));
  456. Assert(Assigned(sg_httpupld_handle));
  457. Assert(Assigned(sg_httpupld_dir));
  458. Assert(Assigned(sg_httpupld_field));
  459. Assert(Assigned(sg_httpupld_name));
  460. Assert(Assigned(sg_httpupld_mime));
  461. Assert(Assigned(sg_httpupld_encoding));
  462. Assert(Assigned(sg_httpupld_size));
  463. Assert(Assigned(sg_httpupld_save));
  464. Assert(Assigned(sg_httpupld_save_as));
  465. Assert(Assigned(sg_httpreq_srv));
  466. Assert(Assigned(sg_httpreq_headers));
  467. Assert(Assigned(sg_httpreq_cookies));
  468. Assert(Assigned(sg_httpreq_params));
  469. Assert(Assigned(sg_httpreq_fields));
  470. Assert(Assigned(sg_httpreq_version));
  471. Assert(Assigned(sg_httpreq_method));
  472. Assert(Assigned(sg_httpreq_path));
  473. Assert(Assigned(sg_httpreq_payload));
  474. Assert(Assigned(sg_httpreq_is_uploading));
  475. Assert(Assigned(sg_httpreq_uploads));
  476. Assert(Assigned(sg_httpreq_client));
  477. {$IFDEF TLS_SUPPORT}
  478. Assert(Assigned(sg_httpreq_tls_session));
  479. {$ENDIF}
  480. Assert(Assigned(sg_httpreq_isolate));
  481. Assert(Assigned(sg_httpreq_set_user_data));
  482. Assert(Assigned(sg_httpreq_user_data));
  483. Assert(Assigned(sg_httpres_headers));
  484. Assert(Assigned(sg_httpres_set_cookie));
  485. Assert(Assigned(sg_httpres_sendbinary));
  486. Assert(Assigned(sg_httpres_sendfile2));
  487. Assert(Assigned(sg_httpres_sendfile));
  488. Assert(Assigned(sg_httpres_sendstream));
  489. Assert(Assigned(sg_httpres_zsendbinary2));
  490. Assert(Assigned(sg_httpres_zsendbinary));
  491. Assert(Assigned(sg_httpres_zsendstream2));
  492. Assert(Assigned(sg_httpres_zsendstream));
  493. Assert(Assigned(sg_httpres_zsendfile2));
  494. Assert(Assigned(sg_httpres_zsendfile));
  495. Assert(Assigned(sg_httpres_reset));
  496. Assert(Assigned(sg_httpres_clear));
  497. Assert(Assigned(sg_httpres_is_empty));
  498. Assert(Assigned(sg_httpsrv_new2));
  499. Assert(Assigned(sg_httpsrv_new));
  500. Assert(Assigned(sg_httpsrv_free));
  501. {$IFDEF TLS_SUPPORT}
  502. Assert(Assigned(sg_httpsrv_tls_listen3));
  503. Assert(Assigned(sg_httpsrv_tls_listen2));
  504. Assert(Assigned(sg_httpsrv_tls_listen));
  505. {$ENDIF}
  506. Assert(Assigned(sg_httpsrv_listen));
  507. Assert(Assigned(sg_httpsrv_shutdown));
  508. Assert(Assigned(sg_httpsrv_port));
  509. Assert(Assigned(sg_httpsrv_is_threaded));
  510. Assert(Assigned(sg_httpsrv_set_cli_cb));
  511. Assert(Assigned(sg_httpsrv_set_upld_cbs));
  512. Assert(Assigned(sg_httpsrv_set_upld_dir));
  513. Assert(Assigned(sg_httpsrv_upld_dir));
  514. Assert(Assigned(sg_httpsrv_set_post_buf_size));
  515. Assert(Assigned(sg_httpsrv_post_buf_size));
  516. Assert(Assigned(sg_httpsrv_set_payld_limit));
  517. Assert(Assigned(sg_httpsrv_payld_limit));
  518. Assert(Assigned(sg_httpsrv_set_uplds_limit));
  519. Assert(Assigned(sg_httpsrv_uplds_limit));
  520. Assert(Assigned(sg_httpsrv_set_thr_pool_size));
  521. Assert(Assigned(sg_httpsrv_thr_pool_size));
  522. Assert(Assigned(sg_httpsrv_set_con_timeout));
  523. Assert(Assigned(sg_httpsrv_con_timeout));
  524. Assert(Assigned(sg_httpsrv_set_con_limit));
  525. Assert(Assigned(sg_httpsrv_con_limit));
  526. Assert(Assigned(sg_httpsrv_handle));
  527. Assert(Assigned(sg_entrypoint_name));
  528. Assert(Assigned(sg_entrypoint_set_user_data));
  529. Assert(Assigned(sg_entrypoint_user_data));
  530. Assert(Assigned(sg_entrypoints_new));
  531. Assert(Assigned(sg_entrypoints_free));
  532. Assert(Assigned(sg_entrypoints_add));
  533. Assert(Assigned(sg_entrypoints_rm));
  534. Assert(Assigned(sg_entrypoints_iter));
  535. Assert(Assigned(sg_entrypoints_clear));
  536. Assert(Assigned(sg_entrypoints_find));
  537. Assert(Assigned(sg_route_handle));
  538. Assert(Assigned(sg_route_match));
  539. Assert(Assigned(sg_route_rawpattern));
  540. Assert(Assigned(sg_route_pattern));
  541. Assert(Assigned(sg_route_path));
  542. Assert(Assigned(sg_route_segments_iter));
  543. Assert(Assigned(sg_route_vars_iter));
  544. Assert(Assigned(sg_route_user_data));
  545. Assert(Assigned(sg_routes_add2));
  546. Assert(Assigned(sg_routes_add));
  547. Assert(Assigned(sg_routes_rm));
  548. Assert(Assigned(sg_routes_iter));
  549. Assert(Assigned(sg_routes_next));
  550. Assert(Assigned(sg_routes_count));
  551. Assert(Assigned(sg_routes_cleanup));
  552. Assert(Assigned(sg_router_new));
  553. Assert(Assigned(sg_router_free));
  554. Assert(Assigned(sg_router_dispatch2));
  555. Assert(Assigned(sg_router_dispatch));
  556. Assert(Assigned(sg_expr_new));
  557. Assert(Assigned(sg_expr_free));
  558. Assert(Assigned(sg_expr_compile));
  559. Assert(Assigned(sg_expr_clear));
  560. Assert(Assigned(sg_expr_eval));
  561. Assert(Assigned(sg_expr_var));
  562. Assert(Assigned(sg_expr_set_var));
  563. Assert(Assigned(sg_expr_arg));
  564. Assert(Assigned(sg_expr_near));
  565. Assert(Assigned(sg_expr_err));
  566. Assert(Assigned(sg_expr_strerror));
  567. Assert(Assigned(sg_expr_calc));
  568. end;
  569. begin
  570. {$IF (NOT DEFINED(FPC)) AND DEFINED(DEBUG)}
  571. ReportMemoryLeaksOnShutdown := True;
  572. {$ENDIF}
  573. Test_AddUnloadEvent;
  574. Test_RemoveNotifier;
  575. Test_GetLastName;
  576. Test_CheckVersion;
  577. Test_CheckLastError;
  578. Test_Load;
  579. Test_Unload;
  580. Test_IsLoaded;
  581. Test_Check;
  582. Test_Handle;
  583. Test_Binding;
  584. end.