test_convert_helper.pas 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614
  1. {$INCLUDE sdo_global.inc}
  2. unit test_convert_helper;
  3. interface
  4. uses
  5. SysUtils, Classes
  6. {$IFDEF FPC}
  7. ,fpcunit, testutils, testregistry
  8. {$ENDIF}
  9. {$IFNDEF FPC}
  10. ,TestFrameWork
  11. {$ENDIF}
  12. , test_suite_utils, sdo, sdo_types;
  13. type
  14. TSDOConvertHelper_Test = class(TWstBaseTest)
  15. protected
  16. class function getObject() : TSDOConvertHelperClass;
  17. published
  18. procedure BoolToByte();
  19. procedure BoolToInteger();
  20. procedure BoolToLong();
  21. procedure BoolToShort();
  22. procedure BoolToString();
  23. procedure ByteToBool();
  24. procedure ByteToChar();
  25. procedure ByteToString();
  26. procedure BytesToString();
  27. procedure CharToBool();
  28. procedure CharToByte();
  29. procedure CharToInteger();
  30. procedure CharToLong();
  31. procedure CharToShort();
  32. procedure IntegerToBool();
  33. procedure IntegerToChar();
  34. procedure IntegerToString();
  35. procedure LongToBool();
  36. procedure LongToChar();
  37. procedure LongToString();
  38. procedure ShortToBool();
  39. procedure ShortToChar();
  40. procedure ShortToString();
  41. procedure StringToBool();
  42. procedure StringToByte();
  43. procedure StringToBytes();
  44. procedure StringToDate();
  45. procedure StringToInteger();
  46. procedure StringToLong();
  47. procedure StringToShort();
  48. procedure FloatToString();
  49. procedure FloatToBool();
  50. procedure DateToString();
  51. end;
  52. implementation
  53. { TSDOConvertHelper_Test }
  54. procedure TSDOConvertHelper_Test.BoolToByte();
  55. var
  56. locObj : TSDOConvertHelperClass;
  57. begin
  58. locObj := getObject();
  59. CheckEquals(1, locObj.BoolToByte(True), 'true');
  60. CheckEquals(0, locObj.BoolToByte(False), 'false');
  61. end;
  62. procedure TSDOConvertHelper_Test.BoolToInteger();
  63. var
  64. locObj : TSDOConvertHelperClass;
  65. begin
  66. locObj := getObject();
  67. CheckEquals(1, locObj.BoolToInteger(True), 'true');
  68. CheckEquals(0, locObj.BoolToInteger(False), 'false');
  69. end;
  70. procedure TSDOConvertHelper_Test.BoolToLong();
  71. var
  72. locObj : TSDOConvertHelperClass;
  73. begin
  74. locObj := getObject();
  75. CheckEquals(1, locObj.BoolToLong(True), 'true');
  76. CheckEquals(0, locObj.BoolToLong(False), 'false');
  77. end;
  78. procedure TSDOConvertHelper_Test.BoolToShort();
  79. var
  80. locObj : TSDOConvertHelperClass;
  81. begin
  82. locObj := getObject();
  83. CheckEquals(1, locObj.BoolToShort(True), 'true');
  84. CheckEquals(0, locObj.BoolToShort(False), 'false');
  85. end;
  86. procedure TSDOConvertHelper_Test.BoolToString();
  87. var
  88. locObj : TSDOConvertHelperClass;
  89. begin
  90. locObj := getObject();
  91. CheckEquals('1', locObj.BoolToString(True), 'true');
  92. CheckEquals('0', locObj.BoolToString(False), 'false');
  93. end;
  94. procedure TSDOConvertHelper_Test.ByteToBool();
  95. var
  96. locObj : TSDOConvertHelperClass;
  97. begin
  98. locObj := getObject();
  99. CheckEquals(True, locObj.ByteToBool(123));
  100. CheckEquals(False, locObj.ByteToBool(0));
  101. CheckEquals(True, locObj.ByteToBool(1));
  102. CheckEquals(True, locObj.ByteToBool(2));
  103. CheckEquals(True, locObj.ByteToBool(34));
  104. end;
  105. procedure TSDOConvertHelper_Test.ByteToChar();
  106. var
  107. locObj : TSDOConvertHelperClass;
  108. begin
  109. locObj := getObject();
  110. CheckEquals(TSDOChar(#123), locObj.ByteToChar(123));
  111. CheckEquals(TSDOChar(#0), locObj.ByteToChar(0));
  112. CheckEquals(TSDOChar(#1), locObj.ByteToChar(1));
  113. CheckEquals(TSDOChar(#56), locObj.ByteToChar(56));
  114. end;
  115. procedure TSDOConvertHelper_Test.ByteToString();
  116. var
  117. locObj : TSDOConvertHelperClass;
  118. begin
  119. locObj := getObject();
  120. CheckEquals('123', locObj.ByteToString(123));
  121. CheckEquals('0', locObj.ByteToString(0));
  122. CheckEquals('1', locObj.ByteToString(1));
  123. CheckEquals('56', locObj.ByteToString(56));
  124. end;
  125. procedure TSDOConvertHelper_Test.DateToString();
  126. const
  127. sDATE_1 = '1976-10-12T23:34:56Z';
  128. sDATE_2 = '0987-06-12T20:34:56Z';
  129. var
  130. d : TSDODate;
  131. locObj : TSDOConvertHelperClass;
  132. begin
  133. locObj := getObject();
  134. //'-'? yyyy '-' mm '-' dd 'T' hh ':' mm ':' ss ('.' s+)? (zzzzzz)?
  135. FillChar(d,SizeOf(d),#0);
  136. d.Date := EncodeDate(1976,10,12) + EncodeTime(23,34,56,0);
  137. CheckEquals(sDATE_1, locObj.DateToString(d));
  138. FillChar(d,SizeOf(d),#0);
  139. d.Date := EncodeDate(987,06,12) - EncodeTime(20,34,56,0);
  140. CheckEquals(sDATE_2, locObj.DateToString(d));
  141. FillChar(d,SizeOf(d),#0);
  142. d.Date := EncodeDate(2002,10,10) + EncodeTime(12,0,0,0);
  143. d.HourOffset := 5;
  144. CheckEquals('2002-10-10T07:00:00Z', locObj.DateToString(d));
  145. end;
  146. procedure TSDOConvertHelper_Test.FloatToBool();
  147. var
  148. locObj : TSDOConvertHelperClass;
  149. begin
  150. locObj := getObject();
  151. CheckEquals(True, locObj.FloatToBool(1));
  152. CheckEquals(False, locObj.FloatToBool(0));
  153. CheckEquals(True, locObj.FloatToBool(123));
  154. CheckEquals(True, locObj.FloatToBool(-43));
  155. CheckEquals(True, locObj.FloatToBool(123456789));
  156. end;
  157. procedure TSDOConvertHelper_Test.FloatToString;
  158. begin
  159. end;
  160. class function TSDOConvertHelper_Test.getObject() : TSDOConvertHelperClass;
  161. begin
  162. Result := TSDOConvertHelper;
  163. end;
  164. procedure TSDOConvertHelper_Test.CharToBool();
  165. var
  166. locObj : TSDOConvertHelperClass;
  167. begin
  168. locObj := getObject();
  169. CheckEquals(True, locObj.CharToBool('8'));
  170. CheckEquals(False, locObj.CharToBool(#0));
  171. CheckEquals(True, locObj.CharToBool(#1));
  172. CheckEquals(True, locObj.CharToBool('T'));
  173. end;
  174. procedure TSDOConvertHelper_Test.CharToByte();
  175. var
  176. locObj : TSDOConvertHelperClass;
  177. begin
  178. locObj := getObject();
  179. CheckEquals(Ord(TSDOChar('8')), locObj.CharToByte('8'));
  180. CheckEquals(0, locObj.CharToByte(#0));
  181. CheckEquals(1, locObj.CharToByte(#1));
  182. CheckEquals(Ord(TSDOChar('T')), locObj.CharToByte('T'));
  183. end;
  184. procedure TSDOConvertHelper_Test.CharToInteger();
  185. var
  186. locObj : TSDOConvertHelperClass;
  187. begin
  188. locObj := getObject();
  189. CheckEquals(Ord(TSDOChar('8')), locObj.CharToInteger('8'));
  190. CheckEquals(0, locObj.CharToInteger(#0));
  191. CheckEquals(1, locObj.CharToInteger(#1));
  192. CheckEquals(Ord(TSDOChar('T')), locObj.CharToInteger('T'));
  193. end;
  194. procedure TSDOConvertHelper_Test.CharToLong();
  195. var
  196. locObj : TSDOConvertHelperClass;
  197. begin
  198. locObj := getObject();
  199. CheckEquals(Ord(TSDOChar('8')), locObj.CharToLong('8'));
  200. CheckEquals(0, locObj.CharToLong(#0));
  201. CheckEquals(1, locObj.CharToLong(#1));
  202. CheckEquals(Ord(TSDOChar('T')), locObj.CharToLong('T'));
  203. end;
  204. procedure TSDOConvertHelper_Test.CharToShort();
  205. var
  206. locObj : TSDOConvertHelperClass;
  207. begin
  208. locObj := getObject();
  209. CheckEquals(Ord(TSDOChar('8')), locObj.CharToShort('8'));
  210. CheckEquals(0, locObj.CharToShort(#0));
  211. CheckEquals(1, locObj.CharToShort(#1));
  212. CheckEquals(Ord(TSDOChar('T')), locObj.CharToShort('T'));
  213. end;
  214. procedure TSDOConvertHelper_Test.IntegerToBool();
  215. var
  216. locObj : TSDOConvertHelperClass;
  217. begin
  218. locObj := getObject();
  219. CheckEquals(True, locObj.IntegerToBool(-789));
  220. CheckEquals(False, locObj.IntegerToBool(0));
  221. CheckEquals(True, locObj.IntegerToBool(1));
  222. CheckEquals(True, locObj.IntegerToBool(-1));
  223. CheckEquals(True, locObj.IntegerToBool(123));
  224. end;
  225. procedure TSDOConvertHelper_Test.IntegerToChar();
  226. var
  227. locObj : TSDOConvertHelperClass;
  228. begin
  229. locObj := getObject();
  230. CheckEquals(TSDOChar(0), locObj.IntegerToChar(0));
  231. CheckEquals(TSDOChar(12), locObj.IntegerToChar(12));
  232. CheckEquals(TSDOChar(123), locObj.IntegerToChar(123));
  233. CheckEquals(TSDOChar(TSDOInteger(-52)), locObj.IntegerToChar(-52));
  234. CheckEquals(TSDOChar(12345), locObj.IntegerToChar(12345));
  235. end;
  236. procedure TSDOConvertHelper_Test.IntegerToString();
  237. var
  238. locObj : TSDOConvertHelperClass;
  239. begin
  240. locObj := getObject();
  241. CheckEquals('-123456', locObj.IntegerToString(-123456));
  242. CheckEquals('0', locObj.IntegerToString(0));
  243. CheckEquals('1', locObj.IntegerToString(1));
  244. CheckEquals('123456', locObj.IntegerToString(123456));
  245. end;
  246. procedure TSDOConvertHelper_Test.LongToBool();
  247. var
  248. locObj : TSDOConvertHelperClass;
  249. begin
  250. locObj := getObject();
  251. CheckEquals(True, locObj.LongToBool(-789));
  252. CheckEquals(False, locObj.LongToBool(0));
  253. CheckEquals(True, locObj.LongToBool(1));
  254. CheckEquals(True, locObj.LongToBool(-1));
  255. CheckEquals(True, locObj.LongToBool(123));
  256. end;
  257. procedure TSDOConvertHelper_Test.LongToChar();
  258. var
  259. locObj : TSDOConvertHelperClass;
  260. begin
  261. locObj := getObject();
  262. CheckEquals(TSDOChar(0), locObj.LongToChar(0));
  263. CheckEquals(TSDOChar(12), locObj.LongToChar(12));
  264. CheckEquals(TSDOChar(123), locObj.LongToChar(123));
  265. CheckEquals(TSDOChar(TSDOLong(-52)), locObj.LongToChar(-52));
  266. CheckEquals(TSDOChar(TSDOLong(123456)), locObj.LongToChar(123456));
  267. end;
  268. procedure TSDOConvertHelper_Test.LongToString();
  269. var
  270. locObj : TSDOConvertHelperClass;
  271. begin
  272. locObj := getObject();
  273. CheckEquals('-123456', locObj.LongToString(-123456));
  274. CheckEquals('0', locObj.LongToString(0));
  275. CheckEquals('1', locObj.LongToString(1));
  276. CheckEquals('123456', locObj.LongToString(123456));
  277. end;
  278. procedure TSDOConvertHelper_Test.ShortToBool();
  279. var
  280. locObj : TSDOConvertHelperClass;
  281. begin
  282. locObj := getObject();
  283. CheckEquals(True, locObj.ShortToBool(-789));
  284. CheckEquals(False, locObj.ShortToBool(0));
  285. CheckEquals(True, locObj.ShortToBool(1));
  286. CheckEquals(True, locObj.ShortToBool(-1));
  287. CheckEquals(True, locObj.ShortToBool(123));
  288. end;
  289. procedure TSDOConvertHelper_Test.ShortToChar();
  290. var
  291. locObj : TSDOConvertHelperClass;
  292. begin
  293. locObj := getObject();
  294. CheckEquals(TSDOChar(0), locObj.ShortToChar(0));
  295. CheckEquals(TSDOChar(12), locObj.ShortToChar(12));
  296. CheckEquals(TSDOChar(123), locObj.ShortToChar(123));
  297. CheckEquals(TSDOChar(TSDOShort(-52)), locObj.ShortToChar(-52));
  298. CheckEquals(TSDOChar(TSDOShort(12345)), locObj.ShortToChar(12345));
  299. end;
  300. procedure TSDOConvertHelper_Test.ShortToString();
  301. var
  302. locObj : TSDOConvertHelperClass;
  303. begin
  304. locObj := getObject();
  305. CheckEquals('-1234', locObj.ShortToString(-1234));
  306. CheckEquals('0', locObj.ShortToString(0));
  307. CheckEquals('1', locObj.ShortToString(1));
  308. CheckEquals('1234', locObj.ShortToString(1234));
  309. end;
  310. procedure TSDOConvertHelper_Test.StringToBool();
  311. var
  312. locObj : TSDOConvertHelperClass;
  313. procedure check_invalid(const AString : TSDOString);
  314. var
  315. Ok : boolean;
  316. begin
  317. ok := False;
  318. try
  319. locObj.StringToBool(AString);
  320. except
  321. on e : ESDOInvalidConversionException do
  322. ok := True;
  323. end;
  324. Check(ok,Format('This conversion should fail : "%s".',[AString]));
  325. end;
  326. begin
  327. locObj := getObject();
  328. CheckEquals(False, locObj.StringToBool('0'));
  329. CheckEquals(False, locObj.StringToBool('false'));
  330. CheckEquals(False, locObj.StringToBool('FaLsE'));
  331. CheckEquals(True, locObj.StringToBool('1'));
  332. CheckEquals(True, locObj.StringToBool('True'));
  333. check_invalid('');
  334. check_invalid('xxxxx');
  335. check_invalid('falsexxx');
  336. check_invalid('truessss');
  337. end;
  338. procedure TSDOConvertHelper_Test.StringToByte();
  339. var
  340. locObj : TSDOConvertHelperClass;
  341. procedure check_invalid(const AString : TSDOString);
  342. var
  343. Ok : boolean;
  344. begin
  345. ok := False;
  346. try
  347. locObj.StringToByte(AString);
  348. except
  349. on e : ESDOInvalidConversionException do
  350. ok := True;
  351. end;
  352. Check(ok,Format('This conversion should fail : "%s".',[AString]));
  353. end;
  354. begin
  355. locObj := getObject();
  356. CheckEquals(123, locObj.StringToByte('123'));
  357. CheckEquals(0, locObj.StringToByte('0'));
  358. CheckEquals(1, locObj.StringToByte('1'));
  359. CheckEquals(45, locObj.StringToByte('45'));
  360. check_invalid('');
  361. check_invalid('xxxxx');
  362. check_invalid('1235dd');
  363. check_invalid('a2522');
  364. end;
  365. procedure TSDOConvertHelper_Test.StringToDate();
  366. var
  367. locObj : TSDOConvertHelperClass;
  368. procedure check_invalid(const AString : TSDOString);
  369. var
  370. Ok : boolean;
  371. begin
  372. ok := False;
  373. try
  374. locObj.StringToDate(AString);
  375. except
  376. on e : ESDOInvalidConversionException do
  377. ok := True;
  378. end;
  379. Check(ok,Format('This conversion should fail : "%s".',[AString]));
  380. end;
  381. var
  382. s : string;
  383. d : TSDODate;
  384. y,m,dy : Word;
  385. hh,mn,ss, ssss : Word;
  386. begin
  387. locObj := getObject();
  388. //'-'? yyyy '-' mm '-' dd 'T' hh ':' mm ':' ss ('.' s+)? (zzzzzz)?
  389. s := '1976-10-12T23:34:56Z';
  390. d := locObj.StringToDate(s);
  391. DecodeDate(d.Date,y,m,dy);
  392. CheckEquals(y,1976,'Year');
  393. CheckEquals(m,10,'Month');
  394. CheckEquals(dy,12,'Day');
  395. DecodeTime(d.Date,hh,mn,ss,ssss);
  396. CheckEquals(hh,23,'Hour');
  397. CheckEquals(mn,34,'Minute');
  398. CheckEquals(ss,56,'Second');
  399. CheckEquals(0,d.HourOffset,'HourOffset');
  400. CheckEquals(0,d.MinuteOffset,'MinuteOffset');
  401. s := '1976-10-12T23:34:56+12:34';
  402. d := locObj.StringToDate(s);
  403. DecodeDate(d.Date,y,m,dy);
  404. CheckEquals(y,1976,'Year');
  405. CheckEquals(m,10,'Month');
  406. CheckEquals(dy,12,'Day');
  407. DecodeTime(d.Date,hh,mn,ss,ssss);
  408. CheckEquals(hh,23,'Hour');
  409. CheckEquals(mn,34,'Minute');
  410. CheckEquals(ss,56,'Second');
  411. CheckEquals(12,d.HourOffset,'HourOffset');
  412. CheckEquals(34,d.MinuteOffset,'MinuteOffset');
  413. check_invalid('azerty');
  414. check_invalid('123');
  415. end;
  416. procedure TSDOConvertHelper_Test.StringToInteger();
  417. var
  418. locObj : TSDOConvertHelperClass;
  419. procedure check_invalid(const AString : TSDOString);
  420. var
  421. Ok : boolean;
  422. begin
  423. ok := False;
  424. try
  425. locObj.StringToInteger(AString);
  426. except
  427. on e : ESDOInvalidConversionException do
  428. ok := True;
  429. end;
  430. Check(ok,Format('This conversion should fail : "%s".',[AString]));
  431. end;
  432. begin
  433. locObj := getObject();
  434. CheckEquals(-123456, locObj.StringToInteger('-123456'));
  435. CheckEquals(0, locObj.StringToInteger('0'));
  436. CheckEquals(1, locObj.StringToInteger('1'));
  437. CheckEquals(123456, locObj.StringToInteger('123456'));
  438. check_invalid('');
  439. check_invalid('xxxxx');
  440. check_invalid('1235dd');
  441. check_invalid('a2522');
  442. end;
  443. procedure TSDOConvertHelper_Test.StringToLong();
  444. var
  445. locObj : TSDOConvertHelperClass;
  446. procedure check_invalid(const AString : TSDOString);
  447. var
  448. Ok : boolean;
  449. begin
  450. ok := False;
  451. try
  452. locObj.StringToLong(AString);
  453. except
  454. on e : ESDOInvalidConversionException do
  455. ok := True;
  456. end;
  457. Check(ok,Format('This conversion should fail : "%s".',[AString]));
  458. end;
  459. begin
  460. locObj := getObject();
  461. CheckEquals(-123456, locObj.StringToLong('-123456'));
  462. CheckEquals(0, locObj.StringToLong('0'));
  463. CheckEquals(1, locObj.StringToLong('1'));
  464. Check(Int64(High(LongWord)) + 10 = locObj.StringToLong(IntToStr(Int64(High(LongWord)) + 10)));
  465. check_invalid('');
  466. check_invalid('xxxxx');
  467. check_invalid('1235dd');
  468. check_invalid('a2522');
  469. end;
  470. procedure TSDOConvertHelper_Test.StringToShort();
  471. var
  472. locObj : TSDOConvertHelperClass;
  473. procedure check_invalid(const AString : TSDOString);
  474. var
  475. Ok : boolean;
  476. begin
  477. ok := False;
  478. try
  479. locObj.StringToShort(AString);
  480. except
  481. on e : ESDOInvalidConversionException do
  482. ok := True;
  483. end;
  484. Check(ok,Format('This conversion should fail : "%s".',[AString]));
  485. end;
  486. begin
  487. locObj := getObject();
  488. CheckEquals(-1234, locObj.StringToShort('-1234'));
  489. CheckEquals(0, locObj.StringToShort('0'));
  490. CheckEquals(1, locObj.StringToShort('1'));
  491. CheckEquals(1234, locObj.StringToShort('1234'));
  492. check_invalid('');
  493. check_invalid('xxxxx');
  494. check_invalid('1235dd');
  495. check_invalid('a2522');
  496. end;
  497. procedure TSDOConvertHelper_Test.BytesToString();
  498. const
  499. LEN = 1000;
  500. var
  501. locObj : TSDOConvertHelperClass;
  502. buff : TSDOBytes;
  503. strBuff : TSDOString;
  504. ansiStrBuff : AnsiString;
  505. i : Integer;
  506. begin
  507. locObj := getObject();
  508. buff := nil;
  509. strBuff := locObj.BytesToString(buff);
  510. CheckEquals('', strBuff);
  511. SetLength(buff,LEN);
  512. for i := 0 to Pred(LEN) do
  513. buff[i] := ( i mod High(TSDOByte) );
  514. SetLength(ansiStrBuff,LEN * 2);
  515. BinToHex(PAnsiChar(@buff[Low(buff)]),PAnsiChar(@ansiStrBuff[1]),LEN);
  516. strBuff := ansiStrBuff;
  517. CheckEquals(strBuff,locObj.BytesToString(buff));
  518. end;
  519. procedure TSDOConvertHelper_Test.StringToBytes();
  520. const
  521. LEN = 1000;
  522. var
  523. locObj : TSDOConvertHelperClass;
  524. buff, calcBuff : TSDOBytes;
  525. strBuff : TSDOString;
  526. ansiStrBuff : AnsiString;
  527. i : Integer;
  528. begin
  529. locObj := getObject();
  530. SetLength(buff,LEN);
  531. for i := 0 to Pred(LEN) do
  532. buff[i] := ( i mod High(TSDOByte) );
  533. SetLength(ansiStrBuff,LEN * 2);
  534. BinToHex(PAnsiChar(buff),PAnsiChar(ansiStrBuff),LEN);
  535. strBuff := ansiStrBuff;
  536. CheckEquals(PtrUInt(nil), PtrUInt(locObj.StringToBytes('')));
  537. calcBuff := locObj.StringToBytes(strBuff);
  538. Check(CompareMem(Pointer(buff),Pointer(calcBuff),LEN));
  539. end;
  540. initialization
  541. RegisterTest('Helpers',TSDOConvertHelper_Test.Suite);
  542. end.