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