Unit tccompstreaming; interface Uses SysUtils,Classes,tcstreaming,fpcunit, testregistry; Type { TTestComponentStream } TTestComponentStream = Class(TTestStreaming) Published Procedure TestTEmptyComponent; Procedure TestTIntegerComponent; Procedure TestTIntegerComponent2; Procedure TestTIntegerComponent3; Procedure TestTIntegerComponent4; Procedure TestTIntegerComponent5; Procedure TestTInt64Component; Procedure TestTInt64Component2; Procedure TestTInt64Component3; Procedure TestTInt64Component4; Procedure TestTInt64Component5; Procedure TestTInt64Component6; Procedure TestTStringComponent; Procedure TestTStringComponent2; Procedure TestTWideStringComponent; Procedure TestTWideStringComponent2; Procedure TestTSingleComponent; Procedure TestTDoubleComponent; Procedure TestTExtendedComponent; Procedure TestTCompComponent; Procedure TestTCurrencyComponent; Procedure TestTDateTimeComponent; Procedure TestTDateTimeComponent2; Procedure TestTDateTimeComponent3; Procedure TestTEnumComponent; Procedure TestTEnumComponent2; Procedure TestTEnumComponent3; Procedure TestTEnumComponent4; Procedure TestTEnumComponent5; Procedure TestTSetComponent; Procedure TestTSetComponent2; Procedure TestTSetComponent3; Procedure TestTSetComponent4; Procedure TestTMultipleComponent; Procedure TestTPersistentComponent; Procedure TestTCollectionComponent; Procedure TestTCollectionComponent2; Procedure TestTCollectionComponent3; Procedure TestTCollectionComponent4; Procedure TestTCollectionComponent5; Procedure TestTOwnedComponent; Procedure TestTStreamedOwnedComponent; Procedure TestTStreamedOwnedComponents; Procedure TestTMethodComponent; Procedure TestTMethodComponent2; end; { TMyItem } TMyItem = Class(TCollectionItem) private FNR: Integer; FStr: String; Public Procedure Assign(Source : TPersistent); override; Published Property Nr : Integer Read FNR Write FNR; Property Str: String Read FStr Write FStr; end; { TMyColl } TMyColl = Class(TCollection) private function GetIt(index : Integer): TMyItem; procedure SetIt(index : Integer; const AValue: TMyItem); Public Property It[index : Integer] : TMyItem Read GetIt Write SetIt; default; end; { TCollComp } TCollComp = Class(TComponent) private FMyColl: TMyColl; procedure SetMyColl(const AValue: TMyColl); Public Constructor Create(AOwner : TComponent); override; Destructor Destroy; override; Function ToStream : TStream; Procedure FromStream(AStream : TStream); Published Property MyColl : TMyColl Read FMyColl Write SetMyColl; end; { TTestCollectionStream } TTestCollectionStream = Class(TTestCase) private procedure CompareColl(CA, CB: TMyColl); function CreateColl(Anr: Integer): TCollComp; function EmptyComp: TCollComp; procedure TestNr(ACount: Integer); Published procedure Test1; procedure Test2; procedure Test3; procedure TestClear; procedure TestEmpty; end; Implementation uses testcomps; Procedure TTestComponentStream.TestTEmptyComponent; Var C : TComponent; begin C:=TEmptyComponent.Create(Nil); Try SaveToStream(C); ExpectSignature; ExpectFlags([],0); ExpectBareString('TEmptyComponent'); ExpectBareString('TestTEmptyComponent'); ExpectEndOfList; ExpectEndOfList; Finally C.Free; end; end; Procedure TTestComponentStream.TestTIntegerComponent; Var C : TComponent; begin C:=TIntegerComponent.Create(Nil); Try SaveToStream(C); ExpectSignature; ExpectFlags([],0); ExpectBareString('TIntegerComponent'); ExpectBareString('TestTIntegerComponent'); ExpectBareString('IntProp'); ExpectInteger(3); ExpectEndOfList; ExpectEndOfList; Finally C.Free; end; end; Procedure TTestComponentStream.TestTIntegerComponent2; Var C : TComponent; begin C:=TIntegerComponent2.Create(Nil); Try SaveToStream(C); ExpectSignature; ExpectFlags([],0); ExpectBareString('TIntegerComponent2'); ExpectBareString('TestTIntegerComponent2'); ExpectBareString('IntProp'); ExpectInteger(1024); ExpectEndOfList; ExpectEndOfList; Finally C.Free; end; end; Procedure TTestComponentStream.TestTIntegerComponent3; Var C : TComponent; begin C:=TIntegerComponent3.Create(Nil); Try SaveToStream(C); ExpectSignature; ExpectFlags([],0); ExpectBareString('TIntegerComponent3'); ExpectBareString('TestTIntegerComponent3'); ExpectBareString('IntProp'); ExpectInteger(262144); ExpectEndOfList; ExpectEndOfList; Finally C.Free; end; end; Procedure TTestComponentStream.TestTIntegerComponent4; Var C : TComponent; begin C:=TIntegerComponent4.Create(Nil); Try SaveToStream(C); ExpectSignature; ExpectFlags([],0); ExpectBareString('TIntegerComponent4'); ExpectBareString('TestTIntegerComponent4'); ExpectEndOfList; ExpectEndOfList; Finally C.Free; end; end; Procedure TTestComponentStream.TestTIntegerComponent5; Var C : TComponent; begin C:=TIntegerComponent5.Create(Nil); Try SaveToStream(C); ExpectSignature; ExpectFlags([],0); ExpectBareString('TIntegerComponent5'); ExpectBareString('TestTIntegerComponent5'); ExpectBareString('IntProp'); ExpectInteger(5); ExpectEndOfList; ExpectEndOfList; Finally C.Free; end; end; Procedure TTestComponentStream.TestTInt64Component; Var C : TComponent; begin C:=TInt64Component.Create(Nil); Try SaveToStream(C); ExpectSignature; ExpectFlags([],0); ExpectBareString('TInt64Component'); ExpectBareString('TestTInt64Component'); ExpectBareString('Int64Prop'); ExpectInteger(4); ExpectEndOfList; ExpectEndOfList; Finally C.Free; end; end; Procedure TTestComponentStream.TestTInt64Component2; Var C : TComponent; begin C:=TInt64Component2.Create(Nil); Try SaveToStream(C); ExpectSignature; ExpectFlags([],0); ExpectBareString('TInt64Component2'); ExpectBareString('TestTInt64Component2'); ExpectBareString('Int64Prop'); ExpectInteger(1024); ExpectEndOfList; ExpectEndOfList; Finally C.Free; end; end; Procedure TTestComponentStream.TestTInt64Component3; Var C : TComponent; begin C:=TInt64Component3.Create(Nil); Try SaveToStream(C); ExpectSignature; ExpectFlags([],0); ExpectBareString('TInt64Component3'); ExpectBareString('TestTInt64Component3'); ExpectBareString('Int64Prop'); ExpectInteger(262144); ExpectEndOfList; ExpectEndOfList; Finally C.Free; end; end; Procedure TTestComponentStream.TestTInt64Component4; Var C : TComponent; begin C:=TInt64Component4.Create(Nil); Try SaveToStream(C); ExpectSignature; ExpectFlags([],0); ExpectBareString('TInt64Component4'); ExpectBareString('TestTInt64Component4'); ExpectBareString('Int64Prop'); ExpectInt64(2147745791); ExpectEndOfList; ExpectEndOfList; Finally C.Free; end; end; Procedure TTestComponentStream.TestTInt64Component5; Var C : TComponent; begin C:=TInt64Component5.Create(Nil); Try SaveToStream(C); ExpectSignature; ExpectFlags([],0); ExpectBareString('TInt64Component5'); ExpectBareString('TestTInt64Component5'); ExpectBareString('Int64Prop'); ExpectInteger(7); ExpectEndOfList; ExpectEndOfList; Finally C.Free; end; end; Procedure TTestComponentStream.TestTInt64Component6; Var C : TComponent; begin C:=TInt64Component6.Create(Nil); Try SaveToStream(C); ExpectSignature; ExpectFlags([],0); ExpectBareString('TInt64Component6'); ExpectBareString('TestTInt64Component6'); ExpectBareString('Int64Prop'); ExpectInteger(8); ExpectEndOfList; ExpectEndOfList; Finally C.Free; end; end; Procedure TTestComponentStream.TestTStringComponent; Var C : TComponent; begin C:=TStringComponent.Create(Nil); Try SaveToStream(C); ExpectSignature; ExpectFlags([],0); ExpectBareString('TStringComponent'); ExpectBareString('TestTStringComponent'); ExpectBareString('StringProp'); ExpectString('A string'); ExpectEndOfList; ExpectEndOfList; Finally C.Free; end; end; Procedure TTestComponentStream.TestTStringComponent2; Var C : TComponent; begin C:=TStringComponent2.Create(Nil); Try SaveToStream(C); ExpectSignature; ExpectFlags([],0); ExpectBareString('TStringComponent2'); ExpectBareString('TestTStringComponent2'); ExpectEndOfList; ExpectEndOfList; Finally C.Free; end; end; Procedure TTestComponentStream.TestTWideStringComponent; Var C : TComponent; begin C:=TWideStringComponent.Create(Nil); Try SaveToStream(C); ExpectSignature; ExpectFlags([],0); ExpectBareString('TWideStringComponent'); ExpectBareString('TestTWideStringComponent'); ExpectBareString('WideStringProp'); ExpectString('Some WideString'); ExpectEndOfList; ExpectEndOfList; Finally C.Free; end; end; Procedure TTestComponentStream.TestTWideStringComponent2; Var C : TComponent; begin C:=TWideStringComponent2.Create(Nil); Try SaveToStream(C); ExpectSignature; ExpectFlags([],0); ExpectBareString('TWideStringComponent2'); ExpectBareString('TestTWideStringComponent2'); ExpectEndOfList; ExpectEndOfList; Finally C.Free; end; end; Procedure TTestComponentStream.TestTSingleComponent; Var C : TComponent; begin C:=TSingleComponent.Create(Nil); Try SaveToStream(C); ExpectSignature; ExpectFlags([],0); ExpectBareString('TSingleComponent'); ExpectBareString('TestTSingleComponent'); ExpectBareString('SingleProp'); ExpectExtended(1.23); ExpectEndOfList; ExpectEndOfList; Finally C.Free; end; end; Procedure TTestComponentStream.TestTDoubleComponent; Var C : TComponent; begin C:=TDoubleComponent.Create(Nil); Try SaveToStream(C); ExpectSignature; ExpectFlags([],0); ExpectBareString('TDoubleComponent'); ExpectBareString('TestTDoubleComponent'); ExpectBareString('DoubleProp'); ExpectExtended(2.34); ExpectEndOfList; ExpectEndOfList; Finally C.Free; end; end; Procedure TTestComponentStream.TestTExtendedComponent; Var C : TComponent; begin C:=TExtendedComponent.Create(Nil); Try SaveToStream(C); ExpectSignature; ExpectFlags([],0); ExpectBareString('TExtendedComponent'); ExpectBareString('TestTExtendedComponent'); ExpectBareString('ExtendedProp'); ExpectExtended(3.45); ExpectEndOfList; ExpectEndOfList; Finally C.Free; end; end; Procedure TTestComponentStream.TestTCompComponent; Var C : TComponent; begin C:=TCompComponent.Create(Nil); Try SaveToStream(C); ExpectSignature; ExpectFlags([],0); ExpectBareString('TCompComponent'); ExpectBareString('TestTCompComponent'); ExpectBareString('ExtendedProp'); ExpectExtended(5.00); ExpectEndOfList; ExpectEndOfList; Finally C.Free; end; end; Procedure TTestComponentStream.TestTCurrencyComponent; Var C : TComponent; begin C:=TCurrencyComponent.Create(Nil); Try SaveToStream(C); ExpectSignature; ExpectFlags([],0); ExpectBareString('TCurrencyComponent'); ExpectBareString('TestTCurrencyComponent'); ExpectBareString('CurrencyProp'); ExpectExtended(5.67); ExpectEndOfList; ExpectEndOfList; Finally C.Free; end; end; Procedure TTestComponentStream.TestTDateTimeComponent; Var C : TComponent; begin C:=TDateTimeComponent.Create(Nil); Try SaveToStream(C); ExpectSignature; ExpectFlags([],0); ExpectBareString('TDateTimeComponent'); ExpectBareString('TestTDateTimeComponent'); ExpectBareString('DateTimeProp'); ExpectExtended(35278.00); ExpectEndOfList; ExpectEndOfList; Finally C.Free; end; end; Procedure TTestComponentStream.TestTDateTimeComponent2; Var C : TComponent; begin C:=TDateTimeComponent2.Create(Nil); Try SaveToStream(C); ExpectSignature; ExpectFlags([],0); ExpectBareString('TDateTimeComponent2'); ExpectBareString('TestTDateTimeComponent2'); ExpectBareString('DateTimeProp'); ExpectExtended(0.97); ExpectEndOfList; ExpectEndOfList; Finally C.Free; end; end; Procedure TTestComponentStream.TestTDateTimeComponent3; Var C : TComponent; begin C:=TDateTimeComponent3.Create(Nil); Try SaveToStream(C); ExpectSignature; ExpectFlags([],0); ExpectBareString('TDateTimeComponent3'); ExpectBareString('TestTDateTimeComponent3'); ExpectBareString('DateTimeProp'); ExpectExtended(35278.97); ExpectEndOfList; ExpectEndOfList; Finally C.Free; end; end; Procedure TTestComponentStream.TestTEnumComponent; Var C : TComponent; begin C:=TEnumComponent.Create(Nil); Try SaveToStream(C); ExpectSignature; ExpectFlags([],0); ExpectBareString('TEnumComponent'); ExpectBareString('TestTEnumComponent'); ExpectBareString('Dice'); ExpectIdent('four'); ExpectEndOfList; ExpectEndOfList; Finally C.Free; end; end; Procedure TTestComponentStream.TestTEnumComponent2; Var C : TComponent; begin C:=TEnumComponent2.Create(Nil); Try SaveToStream(C); ExpectSignature; ExpectFlags([],0); ExpectBareString('TEnumComponent2'); ExpectBareString('TestTEnumComponent2'); {$ifndef FPC} // FPC does not stream an undeclared default value, it assumes the // 0-the value is the default. ExpectBareString('Dice'); ExpectIdent('one'); {$endif FPC} ExpectEndOfList; ExpectEndOfList; Finally C.Free; end; end; Procedure TTestComponentStream.TestTEnumComponent3; Var C : TComponent; begin C:=TEnumComponent3.Create(Nil); Try SaveToStream(C); ExpectSignature; ExpectFlags([],0); ExpectBareString('TEnumComponent3'); ExpectBareString('TestTEnumComponent3'); ExpectBareString('Dice'); ExpectIdent('three'); ExpectEndOfList; ExpectEndOfList; Finally C.Free; end; end; Procedure TTestComponentStream.TestTEnumComponent4; Var C : TComponent; begin C:=TEnumComponent4.Create(Nil); Try SaveToStream(C); ExpectSignature; ExpectFlags([],0); ExpectBareString('TEnumComponent4'); ExpectBareString('TestTEnumComponent4'); ExpectEndOfList; ExpectEndOfList; Finally C.Free; end; end; Procedure TTestComponentStream.TestTEnumComponent5; Var C : TComponent; begin C:=TEnumComponent5.Create(Nil); Try SaveToStream(C); ExpectSignature; ExpectFlags([],0); ExpectBareString('TEnumComponent5'); ExpectBareString('TestTEnumComponent5'); ExpectEndOfList; ExpectEndOfList; Finally C.Free; end; end; Procedure TTestComponentStream.TestTSetComponent; Var C : TComponent; begin C:=TSetComponent.Create(Nil); Try SaveToStream(C); ExpectSignature; ExpectFlags([],0); ExpectBareString('TSetComponent'); ExpectBareString('TestTSetComponent'); ExpectBareString('Throw'); ExpectValue(vaSet); ExpectBareString('two'); ExpectBareString('five'); ExpectBareString(''); ExpectEndOfList; ExpectEndOfList; Finally C.Free; end; end; Procedure TTestComponentStream.TestTSetComponent2; Var C : TComponent; begin C:=TSetComponent2.Create(Nil); Try SaveToStream(C); ExpectSignature; ExpectFlags([],0); ExpectBareString('TSetComponent2'); ExpectBareString('TestTSetComponent2'); {$ifndef FPC} // Same as for sets: a set with undeclared default is regarded as // A set with default [], and is not streamed if it is empty. ExpectBareString('Throw'); ExpectValue(vaSet); ExpectBareString(''); {$endif FPC} ExpectEndOfList; ExpectEndOfList; Finally C.Free; end; end; Procedure TTestComponentStream.TestTSetComponent3; Var C : TComponent; begin C:=TSetComponent3.Create(Nil); Try SaveToStream(C); ExpectSignature; ExpectFlags([],0); ExpectBareString('TSetComponent3'); ExpectBareString('TestTSetComponent3'); ExpectBareString('Throw'); ExpectValue(vaSet); ExpectBareString('one'); ExpectBareString('four'); ExpectBareString(''); ExpectEndOfList; ExpectEndOfList; Finally C.Free; end; end; Procedure TTestComponentStream.TestTSetComponent4; Var C : TComponent; begin C:=TSetComponent4.Create(Nil); Try SaveToStream(C); ExpectSignature; ExpectFlags([],0); ExpectBareString('TSetComponent4'); ExpectBareString('TestTSetComponent4'); ExpectEndOfList; ExpectEndOfList; Finally C.Free; end; end; Procedure TTestComponentStream.TestTMultipleComponent; Var C : TComponent; begin C:=TMultipleComponent.Create(Nil); Try SaveToStream(C); ExpectSignature; ExpectFlags([],0); ExpectBareString('TMultipleComponent'); ExpectBareString('TestTMultipleComponent'); ExpectBareString('IntProp'); ExpectInteger(1); ExpectBareString('StringProp'); ExpectString('A String'); ExpectBareString('CurrencyProp'); ExpectExtended(2.30); ExpectBareString('Dice'); ExpectIdent('two'); ExpectBareString('Throw'); ExpectValue(vaSet); ExpectBareString('three'); ExpectBareString('four'); ExpectBareString(''); ExpectEndOfList; ExpectEndOfList; Finally C.Free; end; end; Procedure TTestComponentStream.TestTPersistentComponent; Var C : TComponent; begin C:=TPersistentComponent.Create(Nil); Try SaveToStream(C); ExpectSignature; ExpectFlags([],0); ExpectBareString('TPersistentComponent'); ExpectBareString('TestTPersistentComponent'); ExpectBareString('Persist.AInteger'); ExpectInteger(3); ExpectBareString('Persist.AString'); ExpectString('A persistent string'); ExpectEndOfList; ExpectEndOfList; Finally C.Free; end; end; Procedure TTestComponentStream.TestTCollectionComponent; Var C : TComponent; begin C:=TCollectionComponent.Create(Nil); Try SaveToStream(C); ExpectSignature; ExpectFlags([],0); ExpectBareString('TCollectionComponent'); ExpectBareString('TestTCollectionComponent'); ExpectBareString('Coll'); ExpectValue(vaCollection); ExpectEndOfList; ExpectEndOfList; ExpectEndOfList; Finally C.Free; end; end; Procedure TTestComponentStream.TestTCollectionComponent2; Var C : TComponent; begin C:=TCollectionComponent2.Create(Nil); Try SaveToStream(C); ExpectSignature; ExpectFlags([],0); ExpectBareString('TCollectionComponent2'); ExpectBareString('TestTCollectionComponent2'); ExpectBareString('Coll'); ExpectValue(vaCollection); ExpectValue(vaList); ExpectBareString('StrProp'); ExpectString('First'); ExpectEndOfList; ExpectValue(vaList); ExpectBareString('StrProp'); ExpectString('Second'); ExpectEndOfList; ExpectValue(vaList); ExpectBareString('StrProp'); ExpectString('Third'); ExpectEndOfList; ExpectEndOfList; ExpectEndOfList; ExpectEndOfList; Finally C.Free; end; end; Procedure TTestComponentStream.TestTCollectionComponent3; Var C : TComponent; begin C:=TCollectionComponent3.Create(Nil); Try SaveToStream(C); ExpectSignature; ExpectFlags([],0); ExpectBareString('TCollectionComponent3'); ExpectBareString('TestTCollectionComponent3'); ExpectBareString('Coll'); ExpectValue(vaCollection); ExpectValue(vaList); ExpectBareString('StrProp'); ExpectString('First'); ExpectEndOfList; ExpectValue(vaList); ExpectEndOfList; ExpectValue(vaList); ExpectBareString('StrProp'); ExpectString('Third'); ExpectEndOfList; ExpectEndOfList; ExpectEndOfList; ExpectEndOfList; Finally C.Free; end; end; Procedure TTestComponentStream.TestTCollectionComponent4; Var C : TComponent; begin C:=TCollectionComponent4.Create(Nil); Try SaveToStream(C); ExpectSignature; ExpectFlags([],0); ExpectBareString('TCollectionComponent4'); ExpectBareString('TestTCollectionComponent4'); ExpectBareString('Coll'); ExpectValue(vaCollection); ExpectValue(vaList); ExpectBareString('StrProp'); ExpectString('Something'); ExpectEndOfList; ExpectEndOfList; ExpectEndOfList; ExpectEndOfList; Finally C.Free; end; end; Procedure TTestComponentStream.TestTCollectionComponent5; Var C : TComponent; begin C:=TCollectionComponent5.Create(Nil); Try SaveToStream(C); ExpectSignature; ExpectFlags([],0); ExpectBareString('TCollectionComponent5'); ExpectBareString('TestTCollectionComponent5'); ExpectBareString('Coll'); ExpectValue(vaCollection); ExpectValue(vaList); ExpectBareString('StrProp1'); ExpectString('Something'); ExpectBareString('StrProp2'); ExpectString('Otherthing'); ExpectEndOfList; ExpectValue(vaList); ExpectBareString('StrProp1'); ExpectString('Something 2'); ExpectBareString('StrProp2'); ExpectString('Otherthing 2'); ExpectEndOfList; ExpectEndOfList; ExpectEndOfList; Finally C.Free; end; end; Procedure TTestComponentStream.TestTOwnedComponent; Var C : TComponent; begin C:=TOwnedComponent.Create(Nil); Try SaveToStream(C); ExpectSignature; ExpectFlags([],0); ExpectBareString('TOwnedComponent'); ExpectBareString('TestTOwnedComponent'); ExpectBareString('CompProp'); ExpectIdent('SubComponent'); ExpectEndOfList; ExpectEndOfList; Finally C.Free; end; end; Procedure TTestComponentStream.TestTStreamedOwnedComponent; Var C : TComponent; begin C:=TStreamedOwnedComponent.Create(Nil); Try SaveToStream(C); ExpectSignature; ExpectFlags([],0); ExpectBareString('TStreamedOwnedComponent'); ExpectBareString('TestTStreamedOwnedComponent'); ExpectEndOfList; ExpectFlags([],0); ExpectBareString('TIntegerComponent'); ExpectBareString('Sub'); ExpectBareString('IntProp'); ExpectInteger(3); ExpectEndOfList; ExpectEndOfList; ExpectEndOfList; ExpectEndOfStream; Finally C.Free; end; end; Procedure TTestComponentStream.TestTStreamedOwnedComponents; Var C : TComponent; begin C:=TStreamedOwnedComponents.Create(Nil); Try SaveToStream(C); ExpectSignature; ExpectFlags([],0); ExpectBareString('TStreamedOwnedComponents'); ExpectBareString('TestTStreamedOwnedComponents'); ExpectEndOfList; ExpectFlags([],0); ExpectBareString('TIntegerComponent'); ExpectBareString('SubA'); ExpectBareString('IntProp'); ExpectInteger(3); ExpectEndOfList; ExpectEndOfList; ExpectFlags([],0); ExpectBareString('TStringComponent'); ExpectBareString('SubB'); ExpectBareString('StringProp'); ExpectString('A string'); ExpectEndOfList; ExpectEndOfList; ExpectEndOfList; ExpectEndOfStream; Finally C.Free; end; end; Procedure TTestComponentStream.TestTMethodComponent; Var C : TComponent; begin C:=TMethodComponent.Create(Nil); Try SaveToStream(C); ExpectSignature; ExpectFlags([],0); ExpectBareString('TMethodComponent'); ExpectBareString('TestTMethodComponent'); ExpectBareString('MethodProp'); ExpectIdent('MyMethod'); ExpectEndOfList; ExpectEndOfList; Finally C.Free; end; end; Procedure TTestComponentStream.TestTMethodComponent2; Var C : TComponent; begin C:=TMethodComponent2.Create(Nil); Try SaveToStream(C); ExpectSignature; ExpectFlags([],0); ExpectBareString('TMethodComponent2'); ExpectBareString('TestTMethodComponent2'); ExpectEndOfList; ExpectFlags([],0); ExpectBareString('TMethodComponent'); ExpectBareString('AComponent'); ExpectBareString('MethodProp'); ExpectIdent('MyMethod2'); ExpectEndOfList; ExpectEndOfList; ExpectEndOfList; Finally C.Free; end; end; { TMyColl } function TMyColl.GetIt(index : Integer): TMyItem; begin Result:=Items[Index] as TMyItem; end; procedure TMyColl.SetIt(index : Integer; const AValue: TMyItem); begin Items[Index]:=AValue; end; { TCollComp } procedure TCollComp.SetMyColl(const AValue: TMyColl); begin if (FMyColl=AValue) then exit; FMyColl.Assign(AValue); end; constructor TCollComp.Create(AOwner: TComponent); begin inherited Create(AOwner); FMyColl:=TMyCOll.Create(TMyItem); end; destructor TCollComp.Destroy; begin FreeAndNil(FMyColl); inherited Destroy; end; function TCollComp.ToStream: TStream; begin Result:=TMemoryStream.Create; Result.WriteComponent(Self); Result.Position:=0; end; procedure TCollComp.FromStream(AStream: TStream); begin AStream.ReadComponent(Self); Astream.Free; end; procedure TMyItem.Assign(Source: TPersistent); Var I : TMyItem; begin If (Source is TMyItem) then begin I:=Source as TMyItem; FNR:=I.NR; FStr:=I.Str; end else inherited Assign(Source); end; Procedure TTestCollectionStream.CompareColl(CA,CB : TMyColl); Var I : Integer; begin AssertEquals('Counts differ: %d %d',CA.Count,CB.Count); For I:=0 to CA.Count-1 do begin AssertEquals(Format('Nr property of element %d equals',[I]),CA[i].Nr,CB[i].Nr); AssertEquals(Format('Str property of element %d equals',[I]),CA[i].Str,CB[i].Str); end; end; Function TTestCollectionStream.EmptyComp : TCollComp; begin Result:=TCollComp.Create(Nil); end; Function TTestCollectionStream.CreateColl(Anr : Integer) : TCollComp; Var I : Integer; T : TMyItem; begin Result:=EmptyComp; Result.Name:='C'+IntToStr(Anr); For I:=0 to ANr-1 do begin T:=Result.MyColl.Add as TMyItem; T.Nr:=I; // not I+1, so the default value gets tested too T.Str:=IntToStr(I+1); end; end; Procedure TTestCollectionStream.TestEmpty; Var CA,CB : TCollComp; begin CA:=CreateColl(0); try CB:=EmptyComp; Try CB.FromStream(CA.ToStream); CompareColl(CA.MyColl,CB.MyColl); Finally CB.Free; end; Finally CA.Free; end; end; Procedure TTestCollectionStream.TestNr(ACount : Integer); Var CA,CB : TCollComp; begin CA:=CreateColl(ACount); try CB:=EmptyComp; Try CB.FromStream(CA.ToStream); CompareColl(CA.MyColl,CB.MyColl); Finally CB.Free; end; Finally CA.Free; end; end; Procedure TTestCollectionStream.TestClear; Var CA,CB : TCollComp; begin CA:=CreateColl(3); try CB:=CreateColl(1); CB.Name:=''; Try // CB collection should be cleared before loading. CB.FromStream(CA.ToStream); CompareColl(CA.MyColl,CB.MyColl); Finally CB.Free; end; Finally CA.Free; end; end; Procedure TTestCollectionStream.Test1; begin TestNr(1); end; Procedure TTestCollectionStream.Test2; begin TestNr(2); end; Procedure TTestCollectionStream.Test3; begin TestNr(3); end; begin RegisterTests([TTestComponentStream,TTestCollectionStream]); end.