{ Component streaming tests. Copyright (C) 2020 Michael Van Canneyt michael@freepascal.org This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version with the following modification: As a special exception, the copyright holders of this library give you permission to link this library with independent modules to produce an executable, regardless of the license terms of these independent modules,and to copy and distribute the resulting executable under terms of your choice, provided that you also meet, for each linked independent module, the terms and conditions of the license of that module. An independent module is a module which is not derived from or based on this library. If you modify this library, you may extend this exception to your version of the library, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1335, USA. } Unit tccompstreaming; interface Uses SysUtils, Classes, tcstreaming, fpcunit, testregistry, testcomps; Type { TTestComponentStream } TTestComponentStream = Class(TTestStreaming) Published Procedure TestTEmptyComponent; Procedure TestTEmptyComponentText; Procedure TestTIntegerComponent; Procedure TestTIntegerComponentText; Procedure TestTIntegerComponent2; Procedure TestTIntegerComponent2Text; Procedure TestTIntegerComponent3; Procedure TestTIntegerComponent3Text; Procedure TestTIntegerComponent4; Procedure TestTIntegerComponent5; Procedure TestTInt64Component; Procedure TestTInt64ComponentText; Procedure TestTInt64Component2; Procedure TestTInt64Component2Text; Procedure TestTInt64Component3; Procedure TestTInt64Component3Text; Procedure TestTInt64Component4; Procedure TestTInt64Component4Text; Procedure TestTInt64Component5; Procedure TestTInt64Component6; Procedure TestTStringComponent; Procedure TestTStringComponentText; Procedure TestTStringComponent2; Procedure TestTStringComponent3; Procedure TestTStringComponent3Text; Procedure TestTWideStringComponent; Procedure TestTWideStringComponentText; Procedure TestTWideStringComponent2; Procedure TestTSingleComponent; Procedure TestTDoubleComponent; Procedure TestTDoubleComponentText; Procedure TestTExtendedComponent; // Procedure TestTCompComponent; Procedure TestTCurrencyComponent; procedure TestTCurrencyComponentText; Procedure TestTDateTimeComponent; Procedure TestTDateTimeComponent2; Procedure TestTDateTimeComponent3; Procedure TestTEnumComponent; Procedure TestTEnumComponentText; Procedure TestTEnumComponent2; Procedure TestTEnumComponent3; Procedure TestTEnumComponent4; Procedure TestTEnumComponent5; Procedure TestTSetComponent; Procedure TestTSetComponentText; Procedure TestTSetComponent2; Procedure TestTSetComponent3; Procedure TestTSetComponent4; Procedure TestTMultipleComponent; Procedure TestTMultipleComponentText; Procedure TestTPersistentComponent; Procedure TestTPersistentComponentText; Procedure TestTCollectionComponent; Procedure TestTCollectionComponentText; Procedure TestTCollectionComponent2; Procedure TestTCollectionComponent2Text; Procedure TestTCollectionComponent3; Procedure TestTCollectionComponent4; Procedure TestTCollectionComponent5; Procedure TestTOwnedComponent; Procedure TestTOwnedComponentText; Procedure TestTStreamedOwnedComponent; Procedure TestTStreamedOwnedComponentText; Procedure TestTStreamedOwnedComponents; Procedure TestTStreamedOwnedComponentsText; Procedure TestTMethodComponent; Procedure TestTMethodComponentText; Procedure TestTMethodComponent2; Procedure TestTMethodComponent2Text; // Read // ReadText will convert to text by calling text version, and read back after objecttexttobinary. Procedure TestTEmptyComponentRead; procedure TestTEmptyComponentReadText; Procedure TestTIntegerComponentRead; procedure TestTIntegerComponentReadText; Procedure TestTIntegerComponent2Read; Procedure TestTIntegerComponent2ReadText; Procedure TestTIntegerComponent3Read; Procedure TestTIntegerComponent3ReadText; Procedure TestTIntegerComponent4Read; Procedure TestTIntegerComponent5Read; Procedure TestTInt64ComponentRead; Procedure TestTInt64ComponentReadText; Procedure TestTInt64Component2Read; Procedure TestTInt64Component2ReadText; Procedure TestTInt64Component3Read; Procedure TestTInt64Component3ReadText; Procedure TestTInt64Component4Read; Procedure TestTInt64Component4ReadText; Procedure TestTInt64Component5Read; Procedure TestTInt64Component6Read; Procedure TestTStringComponentRead; Procedure TestTStringComponentReadText; Procedure TestTStringComponent2Read; Procedure TestTWideStringComponentRead; Procedure TestTWideStringComponentReadText; Procedure TestTWideStringComponent2Read; Procedure TestTSingleComponentRead; Procedure TestTDoubleComponentRead; Procedure TestTDoubleComponentReadText; Procedure TestTExtendedComponentRead; // Procedure TestTCompComponent; Procedure TestTCurrencyComponentRead; Procedure TestTDateTimeComponentRead; Procedure TestTDateTimeComponent2Read; Procedure TestTDateTimeComponent3Read; Procedure TestTEnumComponentRead; Procedure TestTEnumComponentReadText; Procedure TestTEnumComponent2Read; Procedure TestTEnumComponent3Read; Procedure TestTEnumComponent4Read; Procedure TestTEnumComponent5Read; Procedure TestTSetComponentRead; Procedure TestTSetComponentReadText; Procedure TestTSetComponent2Read; Procedure TestTSetComponent3Read; Procedure TestTSetComponent4Read; Procedure TestTMultipleComponentRead; Procedure TestTMultipleComponentReadText; Procedure TestTPersistentComponentRead; Procedure TestTPersistentComponentReadText; Procedure TestTCollectionComponentRead; Procedure TestTCollectionComponentReadText; Procedure TestTCollectionComponent2Read; Procedure TestTCollectionComponent2ReadText; Procedure TestTCollectionComponent3Read; Procedure TestTCollectionComponent4Read; Procedure TestTCollectionComponent5Read; Procedure TestTOwnedComponentRead; Procedure TestTOwnedComponentReadText; Procedure TestTStreamedOwnedComponentRead; Procedure TestTStreamedOwnedComponentReadText; Procedure TestTStreamedOwnedComponentsRead; Procedure TestTStreamedOwnedComponentsReadText; 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 Const LE = sLineBreak; 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.TestTEmptyComponentText; Const SData = 'object TestTEmptyComponent: TEmptyComponent'+sLineBreak+'end'+sLineBreak; begin TestTEmptyComponent; CheckAsString(sData); end; procedure TTestComponentStream.TestTEmptyComponentRead; Var C : TEmptyComponent; begin TestTEmptyComponent; C:=TEmptyComponent.Create(Nil); try LoadFromStream(C); AssertEquals('Name','TestTEmptyComponent',C.Name); finally C.Free; end; end; procedure TTestComponentStream.TestTEmptyComponentReadText; Var C : TEmptyComponent; begin TestTEmptyComponentText; C:=TEmptyComponent.Create(Nil); try LoadFromtextStream(C); AssertEquals('Name','TestTEmptyComponent',C.Name); 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.TestTIntegerComponentText; Const SData = 'object TestTIntegerComponent: TIntegerComponent'+sLineBreak+ ' IntProp = 3'+sLineBreak+ 'end'+sLineBreak; begin TestTIntegerComponent; CheckAsString(sData); end; procedure TTestComponentStream.TestTIntegerComponentRead; Var C : TIntegerComponent; begin TestTIntegerComponent; C:=TIntegerComponent.Create(Nil); Try LoadFromStream(C); AssertEquals('Name','TestTIntegerComponent',C.Name); AssertEquals('IntProp',3,C.IntProp); Finally C.Free; end; end; procedure TTestComponentStream.TestTIntegerComponentReadText; Var C : TIntegerComponent; begin TestTIntegerComponentText; C:=TIntegerComponent.Create(Nil); Try LoadFromTextStream(C); AssertEquals('Name','TestTIntegerComponent',C.Name); AssertEquals('IntProp',3,C.IntProp); Finally C.Free; end; end; procedure TTestComponentStream.TestTIntegerComponent2Read; Var C : TIntegerComponent2; begin TestTIntegerComponent2; C:=TIntegerComponent2.Create(Nil); Try LoadFromStream(C); AssertEquals('Name','TestTIntegerComponent2',C.Name); AssertEquals('IntProp',1024,C.IntProp); Finally C.Free; end; end; procedure TTestComponentStream.TestTIntegerComponent2ReadText; Var C : TIntegerComponent2; begin TestTIntegerComponent2Text; C:=TIntegerComponent2.Create(Nil); Try LoadFromTextStream(C); AssertEquals('Name','TestTIntegerComponent2',C.Name); AssertEquals('IntProp',1024,C.IntProp); Finally C.Free; end; end; procedure TTestComponentStream.TestTIntegerComponent3Read; Var C : TIntegerComponent3; begin TestTIntegerComponent3; C:=TIntegerComponent3.Create(Nil); Try LoadFromStream(C); AssertEquals('Name','TestTIntegerComponent3',C.Name); AssertEquals('IntProp',262144,C.IntProp); Finally C.Free; end; end; procedure TTestComponentStream.TestTIntegerComponent3ReadText; Var C : TIntegerComponent3; begin TestTIntegerComponent3Text; C:=TIntegerComponent3.Create(Nil); Try LoadFromTextStream(C); AssertEquals('Name','TestTIntegerComponent3',C.Name); AssertEquals('IntProp',262144,C.IntProp); Finally C.Free; end; end; procedure TTestComponentStream.TestTIntegerComponent4Read; Var C : TIntegerComponent4; begin TestTIntegerComponent4; C:=TIntegerComponent4.Create(Nil); Try LoadFromStream(C); AssertEquals('Name','TestTIntegerComponent4',C.Name); AssertEquals('IntProp',6,C.IntProp); Finally C.Free; end; end; procedure TTestComponentStream.TestTIntegerComponent5Read; Var C : TIntegerComponent5; begin TestTIntegerComponent5; C:=TIntegerComponent5.Create(Nil); Try LoadFromStream(C); AssertEquals('Name','TestTIntegerComponent5',C.Name); AssertEquals('IntProp',5,C.IntProp); Finally C.Free; end; end; procedure TTestComponentStream.TestTInt64ComponentRead; Var C : TInt64Component; begin TestTInt64Component; C:=TInt64Component.Create(Nil); Try C.Int64Prop:=0; LoadFromStream(C); AssertEquals('Name','TestTInt64Component',C.Name); AssertEquals('Int64Prop',4,C.Int64Prop); Finally C.Free; end; end; procedure TTestComponentStream.TestTInt64ComponentReadText; Var C : TInt64Component; begin TestTInt64ComponentText; C:=TInt64Component.Create(Nil); Try C.Int64Prop:=0; LoadFromTextStream(C); AssertEquals('Name','TestTInt64Component',C.Name); AssertEquals('Int64Prop',4,C.Int64Prop); Finally C.Free; end; end; procedure TTestComponentStream.TestTInt64Component2Read; Var C : TInt64Component2; begin TestTInt64Component2; C:=TInt64Component2.Create(Nil); Try C.Int64Prop:=0; LoadFromStream(C); AssertEquals('Name','TestTInt64Component2',C.Name); AssertEquals('Int64Prop',2 shl 9,C.Int64Prop); Finally C.Free; end; end; procedure TTestComponentStream.TestTInt64Component2ReadText; Var C : TInt64Component2; begin TestTInt64Component2Text; C:=TInt64Component2.Create(Nil); Try C.Int64Prop:=0; LoadFromTextStream(C); AssertEquals('Name','TestTInt64Component2',C.Name); AssertEquals('Int64Prop',2 shl 9,C.Int64Prop); Finally C.Free; end; end; procedure TTestComponentStream.TestTInt64Component3Read; Var C : TInt64Component3; begin TestTInt64Component3; C:=TInt64Component3.Create(Nil); Try C.Int64Prop:=0; LoadFromStream(C); AssertEquals('Name','TestTInt64Component3',C.Name); AssertEquals('Int64Prop',2 shl 17,C.Int64Prop); Finally C.Free; end; end; procedure TTestComponentStream.TestTInt64Component3ReadText; Var C : TInt64Component3; begin TestTInt64Component3Text; C:=TInt64Component3.Create(Nil); Try C.Int64Prop:=0; LoadFromTextStream(C); AssertEquals('Name','TestTInt64Component3',C.Name); AssertEquals('Int64Prop',2 shl 17,C.Int64Prop); Finally C.Free; end; end; procedure TTestComponentStream.TestTInt64Component4Read; Var C : TInt64Component4; begin TestTInt64Component4; C:=TInt64Component4.Create(Nil); Try C.Int64Prop:=0; LoadFromStream(C); AssertEquals('Name','TestTInt64Component4',C.Name); AssertEquals('Int64Prop',NativeInt(MaxInt)+NativeInt(2 shl 14),C.Int64Prop); Finally C.Free; end; end; procedure TTestComponentStream.TestTInt64Component4ReadText; Var C : TInt64Component4; begin TestTInt64Component4Text; C:=TInt64Component4.Create(Nil); Try C.Int64Prop:=0; LoadFromTextStream(C); AssertEquals('Name','TestTInt64Component4',C.Name); AssertEquals('Int64Prop',NativeInt(MaxInt)+NativeInt(2 shl 14),C.Int64Prop); Finally C.Free; end; end; procedure TTestComponentStream.TestTInt64Component5Read; Var C : TInt64Component5; begin TestTInt64Component5; C:=TInt64Component5.Create(Nil); Try C.Int64Prop:=0; LoadFromStream(C); AssertEquals('Name','TestTInt64Component5',C.Name); // Not written, so zero remains AssertEquals('Int64Prop',0,C.Int64Prop); Finally C.Free; end; end; procedure TTestComponentStream.TestTInt64Component6Read; Var C : TInt64Component6; begin TestTInt64Component6; C:=TInt64Component6.Create(Nil); Try C.Int64Prop:=0; LoadFromStream(C); AssertEquals('Name','TestTInt64Component6',C.Name); AssertEquals('Int64Prop',8,C.Int64Prop); Finally C.Free; end; end; procedure TTestComponentStream.TestTStringComponentRead; Var C : TStringComponent; begin TestTStringComponent; C:=TStringComponent.Create(Nil); Try C.StringProp:=''; LoadFromStream(C); AssertEquals('Name','TestTStringComponent',C.Name); AssertEquals('StringProp','A string',C.StringProp); Finally C.Free; end; end; procedure TTestComponentStream.TestTStringComponentReadText; Var C : TStringComponent; begin TestTStringComponentText; C:=TStringComponent.Create(Nil); Try C.StringProp:=''; LoadFromTextStream(C); AssertEquals('Name','TestTStringComponent',C.Name); AssertEquals('StringProp','A string',C.StringProp); Finally C.Free; end; end; procedure TTestComponentStream.TestTStringComponent2Read; Var C : TStringComponent2; begin TestTStringComponent2; C:=TStringComponent2.Create(Nil); Try C.StringProp:='abc'; LoadFromStream(C); AssertEquals('Name','TestTStringComponent2',C.Name); AssertEquals('StringProp','abc',C.StringProp); Finally C.Free; end; end; procedure TTestComponentStream.TestTWideStringComponentRead; Var C : TWideStringComponent; begin TestTWideStringComponent; C:=TWideStringComponent.Create(Nil); Try C.WideStringProp:='abc'; LoadFromStream(C); AssertEquals('Name','TestTWideStringComponent',C.Name); AssertEquals('WideStringProp','Some WideString',C.WideStringProp); Finally C.Free; end; end; procedure TTestComponentStream.TestTWideStringComponentReadText; Var C : TWideStringComponent; begin TestTWideStringComponentText; C:=TWideStringComponent.Create(Nil); Try C.WideStringProp:='abc'; LoadFromTextStream(C); AssertEquals('Name','TestTWideStringComponent',C.Name); AssertEquals('WideStringProp','Some WideString',C.WideStringProp); Finally C.Free; end; end; procedure TTestComponentStream.TestTWideStringComponent2Read; Var C : TWideStringComponent2; begin TestTWideStringComponent2; C:=TWideStringComponent2.Create(Nil); Try C.WideStringProp:='abc'; LoadFromStream(C); AssertEquals('Name','TestTWideStringComponent2',C.Name); AssertEquals('WideStringProp','abc',C.WideStringProp); Finally C.Free; end; end; procedure TTestComponentStream.TestTSingleComponentRead; Var C : TSingleComponent; begin TestTSingleComponent; C:=TSingleComponent.Create(Nil); Try C.SingleProp:=0; LoadFromStream(C); AssertEquals('Name','TestTSingleComponent',C.Name); AssertEquals('SingleProp',1.23,C.SingleProp,0.01); Finally C.Free; end; end; procedure TTestComponentStream.TestTDoubleComponentRead; Var C : TDoubleComponent; begin TestTDoubleComponent; C:=TDoubleComponent.Create(Nil); Try C.DoubleProp:=0; LoadFromStream(C); AssertEquals('Name','TestTDoubleComponent',C.Name); AssertEquals('DoubleProp',2.34,C.DoubleProp,0.01); Finally C.Free; end; end; procedure TTestComponentStream.TestTDoubleComponentReadText; Var C : TDoubleComponent; begin TestTDoubleComponentText; C:=TDoubleComponent.Create(Nil); Try C.DoubleProp:=0; LoadFromTextStream(C); AssertEquals('Name','TestTDoubleComponent',C.Name); // TODO: extend precision to 0.1 AssertEquals('DoubleProp',2.34,C.DoubleProp,0.1); Finally C.Free; end; end; procedure TTestComponentStream.TestTExtendedComponentRead; Var C : TExtendedComponent; begin TestTExtendedComponent; C:=TExtendedComponent.Create(Nil); Try C.ExtendedProp:=0; LoadFromStream(C); AssertEquals('Name','TestTExtendedComponent',C.Name); AssertEquals('ExtendedProp',3.45,C.ExtendedProp,0.01); Finally C.Free; end; end; procedure TTestComponentStream.TestTCurrencyComponentRead; Var C : TCurrencyComponent; begin TestTCurrencyComponent; C:=TCurrencyComponent.Create(Nil); Try C.CurrencyProp:=0; LoadFromStream(C); AssertEquals('Name','TestTCurrencyComponent',C.Name); AssertEquals('CurrencyProp',5.67,C.CurrencyProp,0.01); Finally C.Free; end; end; procedure TTestComponentStream.TestTDateTimeComponentRead; Var C : TDateTimeComponent; begin TestTDateTimeComponent; C:=TDateTimeComponent.Create(Nil); Try C.DateTimeProp:=0; LoadFromStream(C); AssertEquals('Name','TestTDateTimeComponent',C.Name); AssertEquals('DateTimeProp',35278.00,C.DateTimeProp,0.01); Finally C.Free; end; end; procedure TTestComponentStream.TestTDateTimeComponent2Read; Var C : TDateTimeComponent2; begin TestTDateTimeComponent2; C:=TDateTimeComponent2.Create(Nil); Try C.DateTimeProp:=0; LoadFromStream(C); AssertEquals('Name','TestTDateTimeComponent2',C.Name); AssertEquals('DateTimeProp',0.97,C.DateTimeProp,0.01); Finally C.Free; end; end; procedure TTestComponentStream.TestTDateTimeComponent3Read; Var C : TDateTimeComponent3; begin TestTDateTimeComponent3; C:=TDateTimeComponent3.Create(Nil); Try C.DateTimeProp:=0; LoadFromStream(C); AssertEquals('Name','TestTDateTimeComponent3',C.Name); AssertEquals('DateTimeProp',35278.97,C.DateTimeProp,0.01); Finally C.Free; end; end; procedure TTestComponentStream.TestTEnumComponentRead; Var C : TEnumComponent; begin TestTEnumComponent; C:=TEnumComponent.Create(Nil); Try C.Dice:=One; LoadFromStream(C); AssertEquals('Name','TestTEnumComponent',C.Name); AssertTrue('Dice',four=C.Dice); Finally C.Free; end; end; procedure TTestComponentStream.TestTEnumComponentReadText; Var C : TEnumComponent; begin TestTEnumComponentText; C:=TEnumComponent.Create(Nil); Try C.Dice:=One; LoadFromTextStream(C); AssertEquals('Name','TestTEnumComponent',C.Name); AssertTrue('Dice',four=C.Dice); Finally C.Free; end; end; procedure TTestComponentStream.TestTEnumComponent2Read; Var C : TEnumComponent2; begin TestTEnumComponent2; C:=TEnumComponent2.Create(Nil); Try C.Dice:=Three; LoadFromStream(C); AssertEquals('Name','TestTEnumComponent2',C.Name); // Stream does a value AssertTrue('Dice',One=C.Dice); Finally C.Free; end; end; procedure TTestComponentStream.TestTEnumComponent3Read; Var C : TEnumComponent3; begin TestTEnumComponent3; C:=TEnumComponent3.Create(Nil); Try LoadFromStream(C); AssertEquals('Name','TestTEnumComponent3',C.Name); // Stream does not contain a value AssertTrue('Dice',Three=C.Dice); Finally C.Free; end; end; procedure TTestComponentStream.TestTEnumComponent4Read; Var C : TEnumComponent4; begin TestTEnumComponent4; C:=TEnumComponent4.Create(Nil); Try C.Dice:=six; LoadFromStream(C); AssertEquals('Name','TestTEnumComponent4',C.Name); // Stream does not contain a value AssertTrue('Dice',Six=C.Dice); Finally C.Free; end; end; procedure TTestComponentStream.TestTEnumComponent5Read; Var C : TEnumComponent5; begin TestTEnumComponent5; C:=TEnumComponent5.Create(Nil); Try C.Dice:=six; LoadFromStream(C); AssertEquals('Name','TestTEnumComponent5',C.Name); // Stream does not contain a value AssertTrue('Dice',Six=C.Dice); Finally C.Free; end; end; procedure TTestComponentStream.TestTSetComponentRead; Var C : TSetComponent; begin TestTSetComponent; C:=TSetComponent.Create(Nil); Try C.Throw:=[]; LoadFromStream(C); AssertEquals('Name','TestTSetComponent',C.Name); AssertTrue('Throw',[two,five]=C.Throw); Finally C.Free; end; end; procedure TTestComponentStream.TestTSetComponentReadText; Var C : TSetComponent; begin TestTSetComponentText; C:=TSetComponent.Create(Nil); Try C.Throw:=[]; LoadFromTextStream(C); AssertEquals('Name','TestTSetComponent',C.Name); AssertTrue('Throw',[two,five]=C.Throw); Finally C.Free; end; end; procedure TTestComponentStream.TestTSetComponent2Read; Var C : TSetComponent2; begin TestTSetComponent2; C:=TSetComponent2.Create(Nil); Try C.Throw:=[one,six]; LoadFromStream(C); AssertEquals('Name','TestTSetComponent2',C.Name); // Nothing was streamed AssertTrue('Throw',[one,six]=C.Throw); Finally C.Free; end; end; procedure TTestComponentStream.TestTSetComponent3Read; Var C : TSetComponent3; begin TestTSetComponent3; C:=TSetComponent3.Create(Nil); Try C.Throw:=[two,six]; LoadFromStream(C); AssertEquals('Name','TestTSetComponent3',C.Name); // Nothing was streamed AssertTrue('Throw',[one,four]=C.Throw); Finally C.Free; end; end; procedure TTestComponentStream.TestTSetComponent4Read; Var C : TSetComponent4; begin TestTSetComponent4; C:=TSetComponent4.Create(Nil); Try C.Throw:=[two,six]; LoadFromStream(C); AssertEquals('Name','TestTSetComponent4',C.Name); // Nothing was streamed AssertTrue('Throw',[two,six]=C.Throw); Finally C.Free; end; end; procedure TTestComponentStream.TestTMultipleComponentRead; Var C : TMultipleComponent; begin TestTMultipleComponent; C:=TMultipleComponent.Create(Nil); Try c.IntProp:=23; C.Dice:=six; C.CurrencyProp:=12.3; C.StringProp:='abc'; LoadFromStream(C); AssertEquals('Name','TestTMultipleComponent',C.Name); AssertEquals('IntProp',1,C.IntProp); AssertEquals('StringProp','A String',C.StringProp); AssertEquals('CurrencyProp',2.3,C.CurrencyProp,0.1); AssertTrue('Dice',two=C.Dice); AssertTrue('Throw',[three,four]=C.Throw); Finally C.Free; end; end; procedure TTestComponentStream.TestTMultipleComponentReadText; Var C : TMultipleComponent; begin TestTMultipleComponentText; C:=TMultipleComponent.Create(Nil); Try c.IntProp:=23; C.Dice:=six; C.CurrencyProp:=12.3; C.StringProp:='abc'; LoadFromTextStream(C); AssertEquals('Name','TestTMultipleComponent',C.Name); AssertEquals('IntProp',1,C.IntProp); AssertEquals('StringProp','A String',C.StringProp); AssertEquals('CurrencyProp',2.3,C.CurrencyProp,0.1); AssertTrue('Dice',two=C.Dice); AssertTrue('Throw',[three,four]=C.Throw); Finally C.Free; end; end; procedure TTestComponentStream.TestTPersistentComponentRead; Var C : TPersistentComponent; begin TestTPersistentComponent; C:=TPersistentComponent.Create(Nil); Try C.Persist.AInteger:=36; C.Persist.AString:='nono'; LoadFromStream(C); AssertEquals('Name','TestTPersistentComponent',C.Name); AssertEquals('Persist.AInteger',3,C.Persist.AInteger); AssertEquals('Persist.AString','A persistent string',C.Persist.AString); Finally C.Free; end; end; procedure TTestComponentStream.TestTPersistentComponentReadText; Var C : TPersistentComponent; begin TestTPersistentComponentText; C:=TPersistentComponent.Create(Nil); Try C.Persist.AInteger:=36; C.Persist.AString:='nono'; LoadFromTextStream(C); AssertEquals('Name','TestTPersistentComponent',C.Name); AssertEquals('Persist.AInteger',3,C.Persist.AInteger); AssertEquals('Persist.AString','A persistent string',C.Persist.AString); Finally C.Free; end; end; procedure TTestComponentStream.TestTCollectionComponentRead; Var C : TCollectionComponent; begin TestTCollectionComponent; C:=TCollectionComponent.Create(Nil); Try C.Coll.Add; LoadFromStream(C); AssertEquals('Name','TestTCollectionComponent',C.Name); // If the stream does not have a collection, it does not get cleared AssertEquals('Coll count',1,C.Coll.Count); Finally C.Free; end; end; procedure TTestComponentStream.TestTCollectionComponentReadText; Var C : TCollectionComponent; begin TestTCollectionComponentText; C:=TCollectionComponent.Create(Nil); Try C.Coll.Add; LoadFromTextStream(C); AssertEquals('Name','TestTCollectionComponent',C.Name); // If the stream does not have a collection, it does not get cleared AssertEquals('Coll count',1,C.Coll.Count); Finally C.Free; end; end; procedure TTestComponentStream.TestTCollectionComponent2Read; Var C : TCollectionComponent2; begin TestTCollectionComponent2; C:=TCollectionComponent2.Create(Nil); Try C.Coll.Add; LoadFromStream(C); AssertEquals('Name','TestTCollectionComponent2',C.Name); AssertEquals('Coll count',3,C.Coll.Count); AssertEquals('Correct class type',TTestItem,C.Coll.Items[0].ClassType); AssertEquals('Coll 0 Property','First',TTestItem(C.Coll.items[0]).StrProp); AssertEquals('Coll 1 Property','Second',TTestItem(C.Coll.Items[1]).StrProp); AssertEquals('Coll 2 Property','Third',TTestItem(C.Coll.Items[2]).StrProp); Finally C.Free; end; end; procedure TTestComponentStream.TestTCollectionComponent2ReadText; Var C : TCollectionComponent2; begin TestTCollectionComponent2Text; C:=TCollectionComponent2.Create(Nil); Try C.Coll.Add; LoadFromTextStream(C); AssertEquals('Name','TestTCollectionComponent2',C.Name); AssertEquals('Coll count',3,C.Coll.Count); AssertEquals('Correct class type',TTestItem,C.Coll.Items[0].ClassType); AssertEquals('Coll 0 Property','First',TTestItem(C.Coll.items[0]).StrProp); AssertEquals('Coll 1 Property','Second',TTestItem(C.Coll.Items[1]).StrProp); AssertEquals('Coll 2 Property','Third',TTestItem(C.Coll.Items[2]).StrProp); Finally C.Free; end; end; procedure TTestComponentStream.TestTCollectionComponent3Read; Var C : TCollectionComponent3; begin TestTCollectionComponent3; C:=TCollectionComponent3.Create(Nil); Try C.Coll.Add; LoadFromStream(C); AssertEquals('Name','TestTCollectionComponent3',C.Name); AssertEquals('Coll count',3,C.Coll.Count); AssertEquals('Correct class type',TTestItem,C.Coll.Items[0].ClassType); AssertEquals('Coll 0 Property','First',TTestItem(C.Coll.items[0]).StrProp); AssertEquals('Coll 1 Property','',TTestItem(C.Coll.Items[1]).StrProp); AssertEquals('Coll 2 Property','Third',TTestItem(C.Coll.Items[2]).StrProp); Finally C.Free; end; end; procedure TTestComponentStream.TestTCollectionComponent4Read; Var C : TCollectionComponent4; begin TestTCollectionComponent4; C:=TCollectionComponent4.Create(Nil); Try C.Coll.Add; LoadFromStream(C); AssertEquals('Name','TestTCollectionComponent4',C.Name); AssertEquals('Coll count',1,C.Coll.Count); AssertEquals('Correct class type',TTestItem,C.Coll.Items[0].ClassType); AssertEquals('Coll 0 Property','Something',TTestItem(C.Coll.items[0]).StrProp); Finally C.Free; end; end; procedure TTestComponentStream.TestTCollectionComponent5Read; Var C : TCollectionComponent5; begin TestTCollectionComponent5; C:=TCollectionComponent5.Create(Nil); Try C.Coll.Add; LoadFromStream(C); AssertEquals('Name','TestTCollectionComponent5',C.Name); AssertEquals('Coll count',2,C.Coll.Count); AssertEquals('Correct class type',TTest2Item,C.Coll.Items[0].ClassType); AssertEquals('Coll 0 Property 1','Something',TTest2Item(C.Coll.items[0]).StrProp1); AssertEquals('Coll 0 Property 2','Otherthing',TTest2Item(C.Coll.items[0]).StrProp2); AssertEquals('Coll 1 property 1','Something 2',TTest2Item(C.Coll.items[1]).StrProp1); AssertEquals('Coll 1 property 2','Otherthing 2',TTest2Item(C.Coll.items[1]).StrProp2); Finally C.Free; end; end; procedure TTestComponentStream.TestTOwnedComponentRead; Var C : TOwnedComponent; C2 : TComponent; begin TestTOwnedComponent; C:=TOwnedComponent.Create(Nil); try C2:=C.CompProp; C.CompProp:=nil; LoadFromStream(C); AssertEquals('Name','TestTOwnedComponent',C.Name); AssertEquals('ComponentCount',1,C.ComponentCount); AssertSame('ComponentCount',C2,C.CompProp); finally C.Free; end; end; procedure TTestComponentStream.TestTOwnedComponentReadText; Var C : TOwnedComponent; C2 : TComponent; begin TestTOwnedComponentText; C:=TOwnedComponent.Create(Nil); try C2:=C.CompProp; C.CompProp:=nil; LoadFromTextStream(C); AssertEquals('Name','TestTOwnedComponent',C.Name); AssertEquals('ComponentCount',1,C.ComponentCount); AssertSame('ComponentCount',C2,C.CompProp); finally C.Free; end; end; procedure TTestComponentStream.TestTStreamedOwnedComponentRead; Var C : TStreamedOwnedComponent; begin TestTStreamedOwnedComponent; C:=TStreamedOwnedComponent.Create(Nil); Try C.Sub.Free; C.Sub:=Nil; LoadFromStream(C); AssertEquals('Name','TestTStreamedOwnedComponent',C.Name); AssertNotNull('Have sub',C.Sub); AssertEquals('Correct class',TIntegerComponent,C.Sub.ClassType); AssertEquals('Name','Sub',C.Sub.Name); AssertEquals('Name',3,C.Sub.IntProp); Finally C.Free; end; end; procedure TTestComponentStream.TestTStreamedOwnedComponentReadText; Var C : TStreamedOwnedComponent; begin TestTStreamedOwnedComponentText; C:=TStreamedOwnedComponent.Create(Nil); Try C.Sub.Free; C.Sub:=Nil; LoadFromTextStream(C); AssertEquals('Name','TestTStreamedOwnedComponent',C.Name); AssertNotNull('Have sub',C.Sub); AssertEquals('Correct class',TIntegerComponent,C.Sub.ClassType); AssertEquals('Name','Sub',C.Sub.Name); AssertEquals('Name',3,C.Sub.IntProp); Finally C.Free; end; end; procedure TTestComponentStream.TestTStreamedOwnedComponentsRead; Var C : TStreamedOwnedComponents; begin TestTStreamedOwnedComponents; C:=TStreamedOwnedComponents.Create(Nil); Try C.SubA.Free; C.SubA:=Nil; C.SubB.Free; C.SubB:=Nil; LoadFromStream(C); AssertEquals('Name','TestTStreamedOwnedComponents',C.Name); AssertNotNull('Have sub A',C.SubA); AssertEquals('Correct sub A class',TIntegerComponent,C.SubA.ClassType); AssertEquals('Name','SubA',C.SubA.Name); AssertEquals('Name',3,C.SubA.IntProp); AssertNotNull('Have sub B',C.SubB); AssertEquals('Correct sub B class',TStringComponent,C.SubB.ClassType); AssertEquals('Name','SubB',C.SubB.Name); AssertEquals('Name','A string',C.SubB.StringProp); Finally C.Free; end; end; procedure TTestComponentStream.TestTStreamedOwnedComponentsReadText; Var C : TStreamedOwnedComponents; begin TestTStreamedOwnedComponentsText; C:=TStreamedOwnedComponents.Create(Nil); Try C.SubA.Free; C.SubA:=Nil; C.SubB.Free; C.SubB:=Nil; LoadFromTextStream(C); AssertEquals('Name','TestTStreamedOwnedComponents',C.Name); AssertNotNull('Have sub A',C.SubA); AssertEquals('Correct sub A class',TIntegerComponent,C.SubA.ClassType); AssertEquals('Name','SubA',C.SubA.Name); AssertEquals('Name',3,C.SubA.IntProp); AssertNotNull('Have sub B',C.SubB); AssertEquals('Correct sub B class',TStringComponent,C.SubB.ClassType); AssertEquals('Name','SubB',C.SubB.Name); AssertEquals('Name','A string',C.SubB.StringProp); 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.TestTIntegerComponent2Text; Const SData3 = 'object TestTIntegerComponent2: TIntegerComponent2'+sLineBreak+ ' IntProp = 1024'+sLineBreak+ 'end'+sLineBreak; begin TestTIntegerComponent2; CheckAsString(SData3); 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.TestTIntegerComponent3Text; Const SData4 = 'object TestTIntegerComponent3: TIntegerComponent3'+sLineBreak+ ' IntProp = 262144'+sLineBreak+ 'end'+sLineBreak; begin TestTIntegerComponent3; CheckAsString(SData4); 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.TestTInt64ComponentText; Const SData5 = 'object TestTInt64Component: TInt64Component'+sLineBreak+ ' Int64Prop = 4'+sLineBreak+ 'end'+sLineBreak; begin TestTInt64Component; CheckAsString(SData5); 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.TestTInt64Component2Text; Const SData6 = 'object TestTInt64Component2: TInt64Component2'+sLineBreak+ ' Int64Prop = 1024'+sLineBreak+ 'end'+sLineBreak; begin TestTInt64Component2; CheckAsString(SData6); 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.TestTInt64Component3Text; Const SData7 = 'object TestTInt64Component3: TInt64Component3'+sLineBreak+ ' Int64Prop = 262144'+sLineBreak+ 'end'+sLineBreak; begin TestTInt64Component3; CheckAsString(SData7); 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(2147516415{ 2147745791}); ExpectEndOfList; ExpectEndOfList; Finally C.Free; end; end; procedure TTestComponentStream.TestTInt64Component4Text; Const SData8 = 'object TestTInt64Component4: TInt64Component4'+sLineBreak+ ' Int64Prop = 2147516415'+sLineBreak+ 'end'+sLineBreak; begin TestTInt64Component4; CheckAsString(SData8); 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.TestTStringComponentText; Const SData9 = 'object TestTStringComponent: TStringComponent'+sLineBreak+ ' StringProp = ''A string'''+sLineBreak+ 'end'+sLineBreak; begin TestTStringComponent; CheckAsString(SData9); 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.TestTStringComponent3; Var C : TComponent; begin C:=TStringComponent3.Create(Nil); Try SaveToStream(C); ExpectSignature; ExpectFlags([],0); ExpectBareString('TStringComponent3'); ExpectBareString('TestTStringComponent3'); ExpectBareString('StringProp'); ExpectString('A ''quoted'' string'); ExpectEndOfList; ExpectEndOfList; Finally C.Free; end; end; procedure TTestComponentStream.TestTStringComponent3Text; Const SData10 = 'object TestTStringComponent3: TStringComponent3'+sLineBreak+ ' StringProp = ''A ''''quoted'''' string'''+sLineBreak+ 'end'+sLineBreak; begin TestTStringComponent3; CheckAsString(SData10); 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.TestTWideStringComponentText; Const SData11 = 'object TestTWideStringComponent: TWideStringComponent'+sLineBreak+ ' WideStringProp = ''Some WideString'''+sLineBreak+ 'end'+sLineBreak; begin TestTWideStringComponent; CheckAsString(SData11); 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.TestTDoubleComponentText; Const SData12 = 'object TestTDoubleComponent: TDoubleComponent'+sLineBreak+ ' DoubleProp = 2.3E+000'+sLineBreak+ 'end'+sLineBreak; begin TestTDoubleComponent; CheckAsString(SData12); 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'); ExpectInteger(56700); // Natively, this is: // ExpectExtended(5.67); ExpectEndOfList; ExpectEndOfList; Finally C.Free; end; end; procedure TTestComponentStream.TestTCurrencyComponentTExt; Const SData13 = 'object TestTCurrencyComponent: TCurrencyComponent'+sLineBreak+ ' CurrencyProp = 56700'+sLineBreak+ 'end'+sLineBreak; begin TestTCurrencyComponent; CheckAsString(SData13); 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.TestTEnumComponentText; Const SData14 = 'object TestTEnumComponent: TEnumComponent'+sLineBreak+ ' Dice = four'+sLineBreak+ 'end'+sLineBreak; begin TestTEnumComponent; CheckAsString(SData14); 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.TestTSetComponentText; Const SData15 = 'object TestTSetComponent: TSetComponent'+sLineBreak+ ' Throw = [two, five]'+sLineBreak+ 'end'+sLineBreak; begin TestTSetComponent; CheckAsString(SData15); end; Procedure TTestComponentStream.TestTSetComponent2; Var C : TComponent; begin C:=TSetComponent2.Create(Nil); Try SaveToStream(C); ExpectSignature; ExpectFlags([],0); ExpectBareString('TSetComponent2'); ExpectBareString('TestTSetComponent2'); {$ifdef delphi} // 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 delphi} 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 // Writeln('Start test'); 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'); ExpectInteger(23000); // 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.TestTMultipleComponentText; Const SData16 = 'object TestTMultipleComponent: TMultipleComponent'+sLineBreak+ ' IntProp = 1'+sLineBreak+ ' StringProp = ''A String'''+sLineBreak+ ' CurrencyProp = 23000'+sLineBreak+ ' Dice = two'+sLineBreak+ ' Throw = [three, four]'+sLineBreak+ 'end'+sLineBreak; begin TestTMultipleComponent; CheckAsString(SData16); 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.TestTPersistentComponentText; Const SData17 = 'object TestTPersistentComponent: TPersistentComponent'+sLineBreak+ ' Persist.AInteger = 3'+sLineBreak+ ' Persist.AString = ''A persistent string'''+sLineBreak+ 'end'+sLineBreak; begin TestTPersistentComponent; CheckAsString(SData17); 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.TestTCollectionComponentText; Const SData18 = 'object TestTCollectionComponent: TCollectionComponent'+sLineBreak+ ' Coll = <>'+sLineBreak+ 'end'+sLineBreak; begin TestTCollectionComponent; CheckAsString(SData18); 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.TestTCollectionComponent2Text; Const SData19 = 'object TestTCollectionComponent2: TCollectionComponent2'+sLineBreak+ ' Coll = < '+sLineBreak+ ' item'+sLineBreak+ ' StrProp = ''First'''+sLineBreak+ ' end '+sLineBreak+ ' item'+sLineBreak+ ' StrProp = ''Second'''+sLineBreak+ ' end '+sLineBreak+ ' item'+sLineBreak+ ' StrProp = ''Third'''+sLineBreak+ ' end>'+sLineBreak+ 'end'+sLineBreak; begin TestTCollectionComponent2; CheckAsString(SData19); 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.TestTOwnedComponentText; Const SData20 = 'object TestTOwnedComponent: TOwnedComponent'+sLineBreak+ ' CompProp = SubComponent'+sLineBreak+ 'end'+sLineBreak; begin TestTOwnedComponent; CheckAsString(SData20); 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.TestTStreamedOwnedComponentText; Const SData21 = 'object TestTStreamedOwnedComponent: TStreamedOwnedComponent'+sLineBreak+ ' object Sub: TIntegerComponent'+sLineBreak+ ' IntProp = 3'+sLineBreak+ ' end'+sLineBreak+ 'end'+sLineBreak; begin TestTStreamedOwnedComponent; CheckAsString(SData21); 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.TestTStreamedOwnedComponentsText; Const SData22 = 'object TestTStreamedOwnedComponents: TStreamedOwnedComponents'+sLineBreak+ ' object SubA: TIntegerComponent'+sLineBreak+ ' IntProp = 3'+sLineBreak+ ' end'+sLineBreak+ ' object SubB: TStringComponent'+sLineBreak+ ' StringProp = ''A string'''+sLineBreak+ ' end'+sLineBreak+ 'end'+sLineBreak; begin TestTStreamedOwnedComponents; CheckAsString(SData22); 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.TestTMethodComponentText; Const SData23 = 'object TestTMethodComponent: TMethodComponent'+sLineBreak+ ' MethodProp = MyMethod'+sLineBreak+ 'end'+sLineBreak; begin TestTMethodComponent; CheckAsString(SData23); 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; procedure TTestComponentStream.TestTMethodComponent2Text; Const SData24 = 'object TestTMethodComponent2: TMethodComponent2'+sLineBreak+ ' object AComponent: TMethodComponent'+sLineBreak+ ' MethodProp = MyMethod2'+sLineBreak+ ' end'+sLineBreak+ 'end'+sLineBreak; begin TestTMethodComponent2; CheckAsString(SData24); 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.