IdTestStreamHelper.pas 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. unit IdTestStreamHelper;
  2. {
  3. note:
  4. under dotnet,
  5. SetLength(aBuffer,0);
  6. doesnt set aBuffer=nil. win32 does. (this is done to release the buffer)
  7. }
  8. interface
  9. uses
  10. IdObjs,
  11. IdTest,
  12. IdSys,
  13. IdGlobal,
  14. IdStream;
  15. type
  16. TIdTestStreamHelper = class(TIdTest)
  17. published
  18. procedure TestHelper;
  19. end;
  20. implementation
  21. procedure TIdTestStreamHelper.TestHelper;
  22. var
  23. aStream:TIdMemoryStream;
  24. aBuffer:TIdBytes;
  25. aStr:string;
  26. aCount:Integer;
  27. const
  28. cText='0123456789';
  29. begin
  30. aStream:=TIdMemoryStream.Create;
  31. try
  32. //should be safe with nil buffer and 0 count
  33. Assert(aBuffer=nil);
  34. aCount:=TIdStreamHelper.ReadBytes(aStream,aBuffer,0);
  35. Assert(aCount=0);
  36. //text to buffer
  37. aBuffer:=ToBytes(cText);
  38. aStr:=BytesToString(aBuffer);
  39. Assert(aStr=cText);
  40. //buffer to stream
  41. TIdStreamHelper.Write(aStream,aBuffer);
  42. aStream.Position:=0;
  43. aStr:=ReadStringFromStream(aStream);
  44. Assert(aStr=cText);
  45. aBuffer:=nil;
  46. //stream to buffer, positioned at eof
  47. aStream.Position:=aStream.Size;
  48. Assert(aBuffer=nil);
  49. aCount:=TIdStreamHelper.ReadBytes(aStream,aBuffer);
  50. Assert(Length(aBuffer) = 0);
  51. Assert(aCount=0);
  52. //stream to buffer
  53. aStream.Position:=0;
  54. aCount:=TIdStreamHelper.ReadBytes(aStream,aBuffer);
  55. aStr:=BytesToString(aBuffer);
  56. Assert(aCount=Length(cText));
  57. Assert(aStr=cText);
  58. //test read offsets
  59. //put the first char in stream into buffer[5]
  60. aBuffer:=ToBytes(cText);
  61. aStream.Size:=0;
  62. TIdStreamHelper.Write(aStream,aBuffer);
  63. aStream.Position:=0;
  64. TIdStreamHelper.ReadBytes(aStream,aBuffer,Length(cText),0);
  65. aStr:=BytesToString(aBuffer);
  66. Assert(aStr=cText, aStr);
  67. //test buffer to stream using count
  68. aBuffer:=ToBytes(cText);
  69. aStream.Size:=0;
  70. TIdStreamHelper.Write(aStream,aBuffer);
  71. aStream.Position:=2;
  72. TIdStreamHelper.Write(aStream,aBuffer,3);
  73. aStream.Position:=0;
  74. aStr:=ReadStringFromStream(aStream);
  75. Assert(aStr='0101256789');
  76. //test limits. try to write more bytes than available in buffer
  77. aBuffer:=ToBytes(cText);
  78. aStream.Size:=0;
  79. TIdStreamHelper.Write(aStream,aBuffer,100);
  80. aStream.Position:=0;
  81. aStr:=ReadStringFromStream(aStream);
  82. Assert(aStr=cText);
  83. finally
  84. Sys.FreeAndNil(aStream);
  85. end;
  86. end;
  87. initialization
  88. TIdTest.RegisterTest(TIdTestStreamHelper);
  89. end.