123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614 |
- {$INCLUDE sdo_global.inc}
- unit test_convert_helper;
- interface
- uses
- SysUtils, Classes
- {$IFDEF FPC}
- ,fpcunit, testutils, testregistry
- {$ENDIF}
- {$IFNDEF FPC}
- ,TestFrameWork
- {$ENDIF}
- , test_suite_utils, sdo, sdo_types;
- type
- TSDOConvertHelper_Test = class(TWstBaseTest)
- protected
- class function getObject() : TSDOConvertHelperClass;
- published
- procedure BoolToByte();
- procedure BoolToInteger();
- procedure BoolToLong();
- procedure BoolToShort();
- procedure BoolToString();
- procedure ByteToBool();
- procedure ByteToChar();
- procedure ByteToString();
- procedure BytesToString();
- procedure CharToBool();
- procedure CharToByte();
- procedure CharToInteger();
- procedure CharToLong();
- procedure CharToShort();
- procedure IntegerToBool();
- procedure IntegerToChar();
- procedure IntegerToString();
- procedure LongToBool();
- procedure LongToChar();
- procedure LongToString();
- procedure ShortToBool();
- procedure ShortToChar();
- procedure ShortToString();
- procedure StringToBool();
- procedure StringToByte();
- procedure StringToBytes();
- procedure StringToDate();
- procedure StringToInteger();
- procedure StringToLong();
- procedure StringToShort();
- procedure FloatToString();
- procedure FloatToBool();
- procedure DateToString();
- end;
- implementation
- { TSDOConvertHelper_Test }
- procedure TSDOConvertHelper_Test.BoolToByte();
- var
- locObj : TSDOConvertHelperClass;
- begin
- locObj := getObject();
- CheckEquals(1, locObj.BoolToByte(True), 'true');
- CheckEquals(0, locObj.BoolToByte(False), 'false');
- end;
- procedure TSDOConvertHelper_Test.BoolToInteger();
- var
- locObj : TSDOConvertHelperClass;
- begin
- locObj := getObject();
- CheckEquals(1, locObj.BoolToInteger(True), 'true');
- CheckEquals(0, locObj.BoolToInteger(False), 'false');
- end;
- procedure TSDOConvertHelper_Test.BoolToLong();
- var
- locObj : TSDOConvertHelperClass;
- begin
- locObj := getObject();
- CheckEquals(1, locObj.BoolToLong(True), 'true');
- CheckEquals(0, locObj.BoolToLong(False), 'false');
- end;
- procedure TSDOConvertHelper_Test.BoolToShort();
- var
- locObj : TSDOConvertHelperClass;
- begin
- locObj := getObject();
- CheckEquals(1, locObj.BoolToShort(True), 'true');
- CheckEquals(0, locObj.BoolToShort(False), 'false');
- end;
- procedure TSDOConvertHelper_Test.BoolToString();
- var
- locObj : TSDOConvertHelperClass;
- begin
- locObj := getObject();
- CheckEquals('1', locObj.BoolToString(True), 'true');
- CheckEquals('0', locObj.BoolToString(False), 'false');
- end;
- procedure TSDOConvertHelper_Test.ByteToBool();
- var
- locObj : TSDOConvertHelperClass;
- begin
- locObj := getObject();
- CheckEquals(True, locObj.ByteToBool(123));
- CheckEquals(False, locObj.ByteToBool(0));
- CheckEquals(True, locObj.ByteToBool(1));
- CheckEquals(True, locObj.ByteToBool(2));
- CheckEquals(True, locObj.ByteToBool(34));
- end;
- procedure TSDOConvertHelper_Test.ByteToChar();
- var
- locObj : TSDOConvertHelperClass;
- begin
- locObj := getObject();
- CheckEquals(TSDOChar(#123), locObj.ByteToChar(123));
- CheckEquals(TSDOChar(#0), locObj.ByteToChar(0));
- CheckEquals(TSDOChar(#1), locObj.ByteToChar(1));
- CheckEquals(TSDOChar(#56), locObj.ByteToChar(56));
- end;
- procedure TSDOConvertHelper_Test.ByteToString();
- var
- locObj : TSDOConvertHelperClass;
- begin
- locObj := getObject();
- CheckEquals('123', locObj.ByteToString(123));
- CheckEquals('0', locObj.ByteToString(0));
- CheckEquals('1', locObj.ByteToString(1));
- CheckEquals('56', locObj.ByteToString(56));
- end;
- procedure TSDOConvertHelper_Test.DateToString();
- const
- sDATE_1 = '1976-10-12T23:34:56Z';
- sDATE_2 = '0987-06-12T20:34:56Z';
- var
- d : TSDODate;
- locObj : TSDOConvertHelperClass;
- begin
- locObj := getObject();
- //'-'? yyyy '-' mm '-' dd 'T' hh ':' mm ':' ss ('.' s+)? (zzzzzz)?
- FillChar(d,SizeOf(d),#0);
- d.Date := EncodeDate(1976,10,12) + EncodeTime(23,34,56,0);
- CheckEquals(sDATE_1, locObj.DateToString(d));
- FillChar(d,SizeOf(d),#0);
- d.Date := EncodeDate(987,06,12) - EncodeTime(20,34,56,0);
- CheckEquals(sDATE_2, locObj.DateToString(d));
- FillChar(d,SizeOf(d),#0);
- d.Date := EncodeDate(2002,10,10) + EncodeTime(12,0,0,0);
- d.HourOffset := 5;
- CheckEquals('2002-10-10T07:00:00Z', locObj.DateToString(d));
- end;
- procedure TSDOConvertHelper_Test.FloatToBool();
- var
- locObj : TSDOConvertHelperClass;
- begin
- locObj := getObject();
- CheckEquals(True, locObj.FloatToBool(1));
- CheckEquals(False, locObj.FloatToBool(0));
- CheckEquals(True, locObj.FloatToBool(123));
- CheckEquals(True, locObj.FloatToBool(-43));
- CheckEquals(True, locObj.FloatToBool(123456789));
- end;
- procedure TSDOConvertHelper_Test.FloatToString;
- begin
- end;
- class function TSDOConvertHelper_Test.getObject() : TSDOConvertHelperClass;
- begin
- Result := TSDOConvertHelper;
- end;
- procedure TSDOConvertHelper_Test.CharToBool();
- var
- locObj : TSDOConvertHelperClass;
- begin
- locObj := getObject();
- CheckEquals(True, locObj.CharToBool('8'));
- CheckEquals(False, locObj.CharToBool(#0));
- CheckEquals(True, locObj.CharToBool(#1));
- CheckEquals(True, locObj.CharToBool('T'));
- end;
- procedure TSDOConvertHelper_Test.CharToByte();
- var
- locObj : TSDOConvertHelperClass;
- begin
- locObj := getObject();
- CheckEquals(Ord(TSDOChar('8')), locObj.CharToByte('8'));
- CheckEquals(0, locObj.CharToByte(#0));
- CheckEquals(1, locObj.CharToByte(#1));
- CheckEquals(Ord(TSDOChar('T')), locObj.CharToByte('T'));
- end;
- procedure TSDOConvertHelper_Test.CharToInteger();
- var
- locObj : TSDOConvertHelperClass;
- begin
- locObj := getObject();
- CheckEquals(Ord(TSDOChar('8')), locObj.CharToInteger('8'));
- CheckEquals(0, locObj.CharToInteger(#0));
- CheckEquals(1, locObj.CharToInteger(#1));
- CheckEquals(Ord(TSDOChar('T')), locObj.CharToInteger('T'));
- end;
- procedure TSDOConvertHelper_Test.CharToLong();
- var
- locObj : TSDOConvertHelperClass;
- begin
- locObj := getObject();
- CheckEquals(Ord(TSDOChar('8')), locObj.CharToLong('8'));
- CheckEquals(0, locObj.CharToLong(#0));
- CheckEquals(1, locObj.CharToLong(#1));
- CheckEquals(Ord(TSDOChar('T')), locObj.CharToLong('T'));
- end;
- procedure TSDOConvertHelper_Test.CharToShort();
- var
- locObj : TSDOConvertHelperClass;
- begin
- locObj := getObject();
- CheckEquals(Ord(TSDOChar('8')), locObj.CharToShort('8'));
- CheckEquals(0, locObj.CharToShort(#0));
- CheckEquals(1, locObj.CharToShort(#1));
- CheckEquals(Ord(TSDOChar('T')), locObj.CharToShort('T'));
- end;
- procedure TSDOConvertHelper_Test.IntegerToBool();
- var
- locObj : TSDOConvertHelperClass;
- begin
- locObj := getObject();
- CheckEquals(True, locObj.IntegerToBool(-789));
- CheckEquals(False, locObj.IntegerToBool(0));
- CheckEquals(True, locObj.IntegerToBool(1));
- CheckEquals(True, locObj.IntegerToBool(-1));
- CheckEquals(True, locObj.IntegerToBool(123));
- end;
- procedure TSDOConvertHelper_Test.IntegerToChar();
- var
- locObj : TSDOConvertHelperClass;
- begin
- locObj := getObject();
- CheckEquals(TSDOChar(0), locObj.IntegerToChar(0));
- CheckEquals(TSDOChar(12), locObj.IntegerToChar(12));
- CheckEquals(TSDOChar(123), locObj.IntegerToChar(123));
- CheckEquals(TSDOChar(TSDOInteger(-52)), locObj.IntegerToChar(-52));
- CheckEquals(TSDOChar(12345), locObj.IntegerToChar(12345));
- end;
- procedure TSDOConvertHelper_Test.IntegerToString();
- var
- locObj : TSDOConvertHelperClass;
- begin
- locObj := getObject();
- CheckEquals('-123456', locObj.IntegerToString(-123456));
- CheckEquals('0', locObj.IntegerToString(0));
- CheckEquals('1', locObj.IntegerToString(1));
- CheckEquals('123456', locObj.IntegerToString(123456));
- end;
- procedure TSDOConvertHelper_Test.LongToBool();
- var
- locObj : TSDOConvertHelperClass;
- begin
- locObj := getObject();
- CheckEquals(True, locObj.LongToBool(-789));
- CheckEquals(False, locObj.LongToBool(0));
- CheckEquals(True, locObj.LongToBool(1));
- CheckEquals(True, locObj.LongToBool(-1));
- CheckEquals(True, locObj.LongToBool(123));
- end;
- procedure TSDOConvertHelper_Test.LongToChar();
- var
- locObj : TSDOConvertHelperClass;
- begin
- locObj := getObject();
- CheckEquals(TSDOChar(0), locObj.LongToChar(0));
- CheckEquals(TSDOChar(12), locObj.LongToChar(12));
- CheckEquals(TSDOChar(123), locObj.LongToChar(123));
- CheckEquals(TSDOChar(TSDOLong(-52)), locObj.LongToChar(-52));
- CheckEquals(TSDOChar(TSDOLong(123456)), locObj.LongToChar(123456));
- end;
- procedure TSDOConvertHelper_Test.LongToString();
- var
- locObj : TSDOConvertHelperClass;
- begin
- locObj := getObject();
- CheckEquals('-123456', locObj.LongToString(-123456));
- CheckEquals('0', locObj.LongToString(0));
- CheckEquals('1', locObj.LongToString(1));
- CheckEquals('123456', locObj.LongToString(123456));
- end;
- procedure TSDOConvertHelper_Test.ShortToBool();
- var
- locObj : TSDOConvertHelperClass;
- begin
- locObj := getObject();
- CheckEquals(True, locObj.ShortToBool(-789));
- CheckEquals(False, locObj.ShortToBool(0));
- CheckEquals(True, locObj.ShortToBool(1));
- CheckEquals(True, locObj.ShortToBool(-1));
- CheckEquals(True, locObj.ShortToBool(123));
- end;
- procedure TSDOConvertHelper_Test.ShortToChar();
- var
- locObj : TSDOConvertHelperClass;
- begin
- locObj := getObject();
- CheckEquals(TSDOChar(0), locObj.ShortToChar(0));
- CheckEquals(TSDOChar(12), locObj.ShortToChar(12));
- CheckEquals(TSDOChar(123), locObj.ShortToChar(123));
- CheckEquals(TSDOChar(TSDOShort(-52)), locObj.ShortToChar(-52));
- CheckEquals(TSDOChar(TSDOShort(12345)), locObj.ShortToChar(12345));
- end;
- procedure TSDOConvertHelper_Test.ShortToString();
- var
- locObj : TSDOConvertHelperClass;
- begin
- locObj := getObject();
- CheckEquals('-1234', locObj.ShortToString(-1234));
- CheckEquals('0', locObj.ShortToString(0));
- CheckEquals('1', locObj.ShortToString(1));
- CheckEquals('1234', locObj.ShortToString(1234));
- end;
- procedure TSDOConvertHelper_Test.StringToBool();
- var
- locObj : TSDOConvertHelperClass;
- procedure check_invalid(const AString : TSDOString);
- var
- Ok : boolean;
- begin
- ok := False;
- try
- locObj.StringToBool(AString);
- except
- on e : ESDOInvalidConversionException do
- ok := True;
- end;
- Check(ok,Format('This conversion should fail : "%s".',[AString]));
- end;
- begin
- locObj := getObject();
- CheckEquals(False, locObj.StringToBool('0'));
- CheckEquals(False, locObj.StringToBool('false'));
- CheckEquals(False, locObj.StringToBool('FaLsE'));
- CheckEquals(True, locObj.StringToBool('1'));
- CheckEquals(True, locObj.StringToBool('True'));
- check_invalid('');
- check_invalid('xxxxx');
- check_invalid('falsexxx');
- check_invalid('truessss');
- end;
- procedure TSDOConvertHelper_Test.StringToByte();
- var
- locObj : TSDOConvertHelperClass;
- procedure check_invalid(const AString : TSDOString);
- var
- Ok : boolean;
- begin
- ok := False;
- try
- locObj.StringToByte(AString);
- except
- on e : ESDOInvalidConversionException do
- ok := True;
- end;
- Check(ok,Format('This conversion should fail : "%s".',[AString]));
- end;
- begin
- locObj := getObject();
- CheckEquals(123, locObj.StringToByte('123'));
- CheckEquals(0, locObj.StringToByte('0'));
- CheckEquals(1, locObj.StringToByte('1'));
- CheckEquals(45, locObj.StringToByte('45'));
- check_invalid('');
- check_invalid('xxxxx');
- check_invalid('1235dd');
- check_invalid('a2522');
- end;
- procedure TSDOConvertHelper_Test.StringToDate();
- var
- locObj : TSDOConvertHelperClass;
- procedure check_invalid(const AString : TSDOString);
- var
- Ok : boolean;
- begin
- ok := False;
- try
- locObj.StringToDate(AString);
- except
- on e : ESDOInvalidConversionException do
- ok := True;
- end;
- Check(ok,Format('This conversion should fail : "%s".',[AString]));
- end;
- var
- s : string;
- d : TSDODate;
- y,m,dy : Word;
- hh,mn,ss, ssss : Word;
- begin
- locObj := getObject();
- //'-'? yyyy '-' mm '-' dd 'T' hh ':' mm ':' ss ('.' s+)? (zzzzzz)?
- s := '1976-10-12T23:34:56Z';
- d := locObj.StringToDate(s);
- DecodeDate(d.Date,y,m,dy);
- CheckEquals(y,1976,'Year');
- CheckEquals(m,10,'Month');
- CheckEquals(dy,12,'Day');
- DecodeTime(d.Date,hh,mn,ss,ssss);
- CheckEquals(hh,23,'Hour');
- CheckEquals(mn,34,'Minute');
- CheckEquals(ss,56,'Second');
- CheckEquals(0,d.HourOffset,'HourOffset');
- CheckEquals(0,d.MinuteOffset,'MinuteOffset');
- s := '1976-10-12T23:34:56+12:34';
- d := locObj.StringToDate(s);
- DecodeDate(d.Date,y,m,dy);
- CheckEquals(y,1976,'Year');
- CheckEquals(m,10,'Month');
- CheckEquals(dy,12,'Day');
- DecodeTime(d.Date,hh,mn,ss,ssss);
- CheckEquals(hh,23,'Hour');
- CheckEquals(mn,34,'Minute');
- CheckEquals(ss,56,'Second');
- CheckEquals(12,d.HourOffset,'HourOffset');
- CheckEquals(34,d.MinuteOffset,'MinuteOffset');
- check_invalid('azerty');
- check_invalid('123');
- end;
- procedure TSDOConvertHelper_Test.StringToInteger();
- var
- locObj : TSDOConvertHelperClass;
- procedure check_invalid(const AString : TSDOString);
- var
- Ok : boolean;
- begin
- ok := False;
- try
- locObj.StringToInteger(AString);
- except
- on e : ESDOInvalidConversionException do
- ok := True;
- end;
- Check(ok,Format('This conversion should fail : "%s".',[AString]));
- end;
- begin
- locObj := getObject();
- CheckEquals(-123456, locObj.StringToInteger('-123456'));
- CheckEquals(0, locObj.StringToInteger('0'));
- CheckEquals(1, locObj.StringToInteger('1'));
- CheckEquals(123456, locObj.StringToInteger('123456'));
- check_invalid('');
- check_invalid('xxxxx');
- check_invalid('1235dd');
- check_invalid('a2522');
- end;
- procedure TSDOConvertHelper_Test.StringToLong();
- var
- locObj : TSDOConvertHelperClass;
- procedure check_invalid(const AString : TSDOString);
- var
- Ok : boolean;
- begin
- ok := False;
- try
- locObj.StringToLong(AString);
- except
- on e : ESDOInvalidConversionException do
- ok := True;
- end;
- Check(ok,Format('This conversion should fail : "%s".',[AString]));
- end;
- begin
- locObj := getObject();
- CheckEquals(-123456, locObj.StringToLong('-123456'));
- CheckEquals(0, locObj.StringToLong('0'));
- CheckEquals(1, locObj.StringToLong('1'));
- Check(Int64(High(LongWord)) + 10 = locObj.StringToLong(IntToStr(Int64(High(LongWord)) + 10)));
- check_invalid('');
- check_invalid('xxxxx');
- check_invalid('1235dd');
- check_invalid('a2522');
- end;
- procedure TSDOConvertHelper_Test.StringToShort();
- var
- locObj : TSDOConvertHelperClass;
- procedure check_invalid(const AString : TSDOString);
- var
- Ok : boolean;
- begin
- ok := False;
- try
- locObj.StringToShort(AString);
- except
- on e : ESDOInvalidConversionException do
- ok := True;
- end;
- Check(ok,Format('This conversion should fail : "%s".',[AString]));
- end;
- begin
- locObj := getObject();
- CheckEquals(-1234, locObj.StringToShort('-1234'));
- CheckEquals(0, locObj.StringToShort('0'));
- CheckEquals(1, locObj.StringToShort('1'));
- CheckEquals(1234, locObj.StringToShort('1234'));
- check_invalid('');
- check_invalid('xxxxx');
- check_invalid('1235dd');
- check_invalid('a2522');
- end;
- procedure TSDOConvertHelper_Test.BytesToString();
- const
- LEN = 1000;
- var
- locObj : TSDOConvertHelperClass;
- buff : TSDOBytes;
- strBuff : TSDOString;
- ansiStrBuff : AnsiString;
- i : Integer;
- begin
- locObj := getObject();
- buff := nil;
- strBuff := locObj.BytesToString(buff);
- CheckEquals('', strBuff);
- SetLength(buff,LEN);
- for i := 0 to Pred(LEN) do
- buff[i] := ( i mod High(TSDOByte) );
- SetLength(ansiStrBuff,LEN * 2);
- BinToHex(PAnsiChar(@buff[Low(buff)]),PAnsiChar(@ansiStrBuff[1]),LEN);
- strBuff := ansiStrBuff;
- CheckEquals(strBuff,locObj.BytesToString(buff));
- end;
- procedure TSDOConvertHelper_Test.StringToBytes();
- const
- LEN = 1000;
- var
- locObj : TSDOConvertHelperClass;
- buff, calcBuff : TSDOBytes;
- strBuff : TSDOString;
- ansiStrBuff : AnsiString;
- i : Integer;
- begin
- locObj := getObject();
- SetLength(buff,LEN);
- for i := 0 to Pred(LEN) do
- buff[i] := ( i mod High(TSDOByte) );
- SetLength(ansiStrBuff,LEN * 2);
- BinToHex(PAnsiChar(buff),PAnsiChar(ansiStrBuff),LEN);
- strBuff := ansiStrBuff;
- CheckEquals(PtrUInt(nil), PtrUInt(locObj.StringToBytes('')));
- calcBuff := locObj.StringToBytes(strBuff);
- Check(CompareMem(Pointer(buff),Pointer(calcBuff),LEN));
- end;
- initialization
- RegisterTest('Helpers',TSDOConvertHelper_Test.Suite);
- end.
|