tcnetencoding.pp 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. unit tcnetencoding;
  2. {$mode objfpc}{$H+}
  3. interface
  4. uses
  5. Classes, SysUtils, fpcunit, testutils, testregistry, System.NetEncoding;
  6. type
  7. { TTestBase64Encoding }
  8. TTestBase64Encoding = class(TTestCase)
  9. private
  10. FBytes: TBytes;
  11. FEnc: TBase64Encoding;
  12. FEnDefBytes: TBytes;
  13. procedure AssertBytes(aExpected, aActual: TBytes);
  14. protected
  15. procedure SetUp; override;
  16. procedure TearDown; override;
  17. property Enc : TBase64Encoding Read FEnc;
  18. Property DefBytes : TBytes read FBytes;
  19. Property EncDefBytes : TBytes read FEnDefBytes;
  20. published
  21. procedure TestHookUp;
  22. procedure TestBytesToString;
  23. procedure TestBytesToBytes;
  24. procedure TestStringToString;
  25. end;
  26. { TTestURLEncoding }
  27. TTestURLEncoding = class(TTestCase)
  28. private
  29. FEnc: TURLEncoding;
  30. protected
  31. procedure SetUp; override;
  32. procedure TearDown; override;
  33. property Enc : TURLEncoding Read FEnc;
  34. published
  35. procedure TestHookUp;
  36. Procedure TestSpace;
  37. procedure TestEqual;
  38. procedure TestAmpersand;
  39. procedure TestQuestion;
  40. end;
  41. { TTestHTMLEncoding }
  42. TTestHTMLEncoding = class(TTestCase)
  43. private
  44. FEnc: THTMLEncoding;
  45. protected
  46. procedure SetUp; override;
  47. procedure TearDown; override;
  48. property Enc : THTMLEncoding Read FEnc;
  49. published
  50. procedure TestHookUp;
  51. procedure TestLessThan;
  52. procedure TestGreaterThan;
  53. procedure TestAmpersand;
  54. procedure TestBeforeAfter;
  55. end;
  56. implementation
  57. { TTestHTMLEncoding }
  58. procedure TTestHTMLEncoding.SetUp;
  59. begin
  60. inherited SetUp;
  61. FEnc:=THTMLEncoding.Create;
  62. end;
  63. procedure TTestHTMLEncoding.TearDown;
  64. begin
  65. inherited TearDown;
  66. FEnc:=THTMLEncoding.Create;
  67. end;
  68. procedure TTestHTMLEncoding.TestHookUp;
  69. begin
  70. AssertNotNull('Enc',Enc);
  71. end;
  72. procedure TTestHTMLEncoding.TestLessThan;
  73. begin
  74. AssertEquals('from lessThan','&lt;',Enc.Encode('<'));
  75. AssertEquals('To lessthan','<',Enc.Decode('&lt;'));
  76. end;
  77. procedure TTestHTMLEncoding.TestGreaterThan;
  78. begin
  79. AssertEquals('from greaterThan','&gt;',Enc.Encode('>'));
  80. AssertEquals('To greaterthan','>',Enc.Decode('&gt;'));
  81. end;
  82. procedure TTestHTMLEncoding.TestAmpersand;
  83. begin
  84. AssertEquals('from ampersand','&amp;',Enc.Encode('&'));
  85. AssertEquals('To ampersand','&',Enc.Decode('&amp;'));
  86. end;
  87. procedure TTestHTMLEncoding.TestBeforeAfter;
  88. begin
  89. AssertEquals('from ','A&amp;B',Enc.Encode('A&B'));
  90. AssertEquals('To ','A&B',Enc.Decode('A&amp;B'));
  91. end;
  92. { TTestURLEncoding }
  93. procedure TTestURLEncoding.SetUp;
  94. begin
  95. inherited SetUp;
  96. FEnc:=TURLENcoding.Create;
  97. end;
  98. procedure TTestURLEncoding.TearDown;
  99. begin
  100. FreeAndNil(FEnc);
  101. inherited TearDown;
  102. end;
  103. procedure TTestURLEncoding.TestHookUp;
  104. begin
  105. AssertNotNull('Enc',Enc);
  106. end;
  107. procedure TTestURLEncoding.TestSpace;
  108. begin
  109. AssertEquals('Space','+',Enc.Encode(' '));
  110. end;
  111. procedure TTestURLEncoding.TestEqual;
  112. begin
  113. AssertEquals('from Equal','%'+hexStr(Ord('='),2),Enc.Encode('='));
  114. AssertEquals('To Equal','=',Enc.Decode('%'+hexStr(Ord('='),2)));
  115. end;
  116. procedure TTestURLEncoding.TestAmpersand;
  117. begin
  118. AssertEquals('From Ampersand','%'+hexStr(Ord('&'),2),Enc.Encode('&'));
  119. AssertEquals('To Ampersand','&',Enc.Decode('%'+hexStr(Ord('&'),2)));
  120. end;
  121. procedure TTestURLEncoding.TestQuestion;
  122. begin
  123. AssertEquals('From QuestionMark','%'+hexStr(Ord('?'),2),Enc.Encode('?'));
  124. AssertEquals('To questionmark','?',Enc.Decode('%'+hexStr(Ord('?'),2)));
  125. end;
  126. { TTestBase64Encoding }
  127. Const
  128. // Sequence of 5 bytes: 0,1,2,3,4 base64 encoded
  129. SDefBytes = 'AQIDBAU=';
  130. // Sequence of 5 letters: ABCDE base64 encoded
  131. SDefLetters = 'QUJDREU=';
  132. procedure TTestBase64Encoding.SetUp;
  133. Var
  134. I : integer;
  135. begin
  136. Inherited;
  137. FEnc:=TBase64Encoding.Create;
  138. SetLength(FBytes,5);
  139. For I:=0 to 4 do
  140. FBytes[I]:=I+1;
  141. SetLength(FEnDefBytes,Length(SDefBytes));
  142. For I:=0 to Length(SDefBytes)-1 do
  143. FEnDefBytes[I]:=Ord(SDefBytes[I+1]);
  144. end;
  145. procedure TTestBase64Encoding.TearDown;
  146. begin
  147. FreeAndNil(FEnc);
  148. Inherited;
  149. end;
  150. procedure TTestBase64Encoding.TestHookUp;
  151. begin
  152. AssertNotNull('Enc',Enc);
  153. end;
  154. procedure TTestBase64Encoding.AssertBytes(aExpected,aActual : TBytes);
  155. Var
  156. I : Integer;
  157. begin
  158. AssertEquals('Length same',Length(aExpected),Length(aActual));
  159. For I:=0 to Length(aExpected)-1 do
  160. AssertEquals(Format('Byte at pos %d same',[i]),aExpected[i],aActual[i]);
  161. end;
  162. procedure TTestBase64Encoding.TestBytesToString;
  163. begin
  164. AssertEquals('Encoding', SDefBytes,Enc.EncodeBytesToString(DefBytes));
  165. end;
  166. procedure TTestBase64Encoding.TestBytesToBytes;
  167. begin
  168. AssertBytes(EncDefBytes,Enc.Encode(DefBytes));
  169. end;
  170. procedure TTestBase64Encoding.TestStringToString;
  171. begin
  172. AssertEquals('Encoding', SDefLetters,Enc.Encode('ABCDE'));
  173. end;
  174. initialization
  175. RegisterTests([TTestBase64Encoding,TTestURLEncoding,TTestHTMLEncoding]);
  176. end.