tcnetencoding.pp 4.9 KB

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