unit IdTestBuffer; interface uses IdTest, IdObjs, IdSys, IdGlobal, IdBuffer; type TIdTestBuffer = class(TIdTest) published procedure TestBufferToStream; procedure TestStreamToBuffer; procedure TestTypes; end; implementation const cString='12345'; procedure TIdTestBuffer.TestBufferToStream; var aBuffer:TIdBuffer; aStream:TIdMemoryStream; begin aBuffer:=TIdBuffer.Create; aStream:=TIdMemoryStream.Create; try aBuffer.Write(cString); aBuffer.SaveToStream(aStream); aStream.Position := 0; Assert(ReadStringFromStream(aStream)=cString); Assert(aBuffer.Size=5); //extract with index=-1 and >0 to test execution paths //index>-1 doesn't delete data from buffer aStream.Size:=0; aBuffer.ExtractToStream(aStream,2,3); aStream.Position := 0; Assert(ReadStringFromStream(aStream)='45'); Assert(aBuffer.Size=5); //does delete data from buffer aStream.Size:=0; aBuffer.ExtractToStream(aStream,3); aStream.Position := 0; Assert(ReadStringFromStream(aStream)='123'); Assert(aBuffer.Size=2); aStream.Size:=0; aBuffer.ExtractToStream(aStream,2); aStream.Position := 0; Assert(ReadStringFromStream(aStream)='45'); Assert(aBuffer.Size=0); finally Sys.FreeAndNil(aStream); Sys.FreeAndNil(aBuffer); end; end; procedure TIdTestBuffer.TestStreamToBuffer; var aBuffer:TIdBuffer; aStream:TIdMemoryStream; begin aBuffer:=TIdBuffer.Create; aStream:=TIdMemoryStream.Create; try WriteStringToStream(AStream, cString); aStream.Position:=0; //copy specific aBuffer.Write(aStream,2); Assert(aStream.Position=2); Assert(aBuffer.AsString='12'); // aStream.Position := 0; //copy remaining aBuffer.Write(aStream,-1); Assert(aStream.Position=5); Assert(aBuffer.AsString=cString, aBuffer.AsString); //copy all. ensure stream position is >0,-1 so doesnt actually extract aByte:=b.ExtractToByte(SizeOf(Byte)); Assert(b.Size=2*SizeOf(Byte)); Assert(aByte=cByte2); //and extract the data, check expected order (FIFO) aByte:=b.ExtractToByte(-1); Assert(aByte=cByte); Assert(b.Size=SizeOf(Byte)); aByte:=b.ExtractToByte(-1); Assert(aByte=cByte2); Assert(b.Size=0); aCardinal:=cCardinal; b.Write(aCardinal); aCardinal:=cCardinal2; b.Write(aCardinal); Assert(b.Size=2*SizeOf(Cardinal)); aCardinal:=b.ExtractToCardinal(SizeOf(Cardinal)); Assert(b.Size=2*SizeOf(Cardinal)); Assert(aCardinal=cCardinal2); aCardinal:=b.ExtractToCardinal(-1); Assert(aCardinal=cCardinal); aCardinal:=b.ExtractToCardinal(-1); Assert(aCardinal=cCardinal2); Assert(b.Size=0); i64:=c64; b.Write(i64); i64:=c642; b.Write(i64); Assert(b.Size=2*SizeOf(Int64)); i64:=b.ExtractToInt64(SizeOf(Int64)); Assert(i64=c642); Assert(b.Size=2*SizeOf(Int64)); i64:=b.ExtractToInt64(-1); Assert(i64=c64); i64:=b.ExtractToInt64(-1); Assert(i64=c642); Assert(b.Size=0); aWord:=cWord; b.Write(aWord); aWord:=cWord2; b.Write(aWord); Assert(b.Size=2*SizeOf(Word)); aWord:=b.ExtractToWord(SizeOf(Word)); Assert(aWord=cWord2); Assert(b.Size=2*SizeOf(Word)); aWord:=b.ExtractToWord(-1); Assert(aWord=cWord); aWord:=b.ExtractToWord(-1); Assert(aWord=cWord2); Assert(b.Size=0); finally Sys.FreeAndNil(b); end; end; initialization TIdTest.RegisterTest(TIdTestBuffer); end.