fix TAbstractSimpleRemotable serialization ( test case )

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@868 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
inoussa
2009-06-27 22:30:54 +00:00
parent 43a7a0ca59
commit 0382194dd1

View File

@ -26,6 +26,9 @@ uses
TypInfo, TypInfo,
test_suite_utils, base_service_intf, wst_types, server_service_intf, service_intf; test_suite_utils, base_service_intf, wst_types, server_service_intf, service_intf;
const
TEST_NAME_SPACE = 'uri:test-namespace';
type type
TTestEnum = ( teOne, teTwo, teThree, teFour ); TTestEnum = ( teOne, teTwo, teThree, teFour );
@ -39,12 +42,16 @@ type
private private
FVal_32S: LongInt; FVal_32S: LongInt;
FVal_Bool: Boolean; FVal_Bool: Boolean;
FVal_Date: TDateRemotable;
FVal_Enum: TTestEnum; FVal_Enum: TTestEnum;
FVal_String: string; FVal_String: string;
{$IFDEF WST_UNICODESTRING} {$IFDEF WST_UNICODESTRING}
FVal_UnicodeString: UnicodeString; FVal_UnicodeString: UnicodeString;
{$ENDIF WST_UNICODESTRING} {$ENDIF WST_UNICODESTRING}
FVal_WideString: WideString; FVal_WideString: WideString;
public
constructor Create();override;
destructor Destroy();override;
Published Published
property Val_32S : LongInt Read FVal_32S Write FVal_32S; property Val_32S : LongInt Read FVal_32S Write FVal_32S;
property Val_Enum : TTestEnum Read FVal_Enum Write FVal_Enum; property Val_Enum : TTestEnum Read FVal_Enum Write FVal_Enum;
@ -54,6 +61,7 @@ type
{$IFDEF WST_UNICODESTRING} {$IFDEF WST_UNICODESTRING}
property Val_UnicodeString : UnicodeString Read FVal_UnicodeString Write FVal_UnicodeString; property Val_UnicodeString : UnicodeString Read FVal_UnicodeString Write FVal_UnicodeString;
{$ENDIF WST_UNICODESTRING} {$ENDIF WST_UNICODESTRING}
property Val_Date : TDateRemotable read FVal_Date write FVal_Date;
End; End;
TClass_A_Array = class(TBaseObjectArrayRemotable) TClass_A_Array = class(TBaseObjectArrayRemotable)
@ -553,9 +561,15 @@ type
class function GetFormaterName() : string;override; class function GetFormaterName() : string;override;
class function SupportNamedArrayItem() : Boolean;override; class function SupportNamedArrayItem() : Boolean;override;
function CreateFormatter(ARootType : PTypeInfo):IFormatterBase;override; function CreateFormatter(ARootType : PTypeInfo):IFormatterBase;override;
procedure do_test_Object(const AProps, AFileName : string);
published published
procedure test_WriteBuffer(); procedure test_WriteBuffer();
procedure test_ReadBuffer(); procedure test_ReadBuffer();
procedure test_Object_DocumentLiteral();
procedure test_Object_DocumentEncoded();
procedure test_Object_RPCLiteral();
procedure test_Object_RPCEncoded();
end; end;
{ TTestSOAPFormatterAttributes } { TTestSOAPFormatterAttributes }
@ -671,8 +685,7 @@ uses base_binary_formatter, base_soap_formatter, base_xmlrpc_formatter, record_r
{$ENDIF} {$ENDIF}
, server_service_soap, soap_formatter, , server_service_soap, soap_formatter,
server_service_xmlrpc, xmlrpc_formatter, server_service_xmlrpc, xmlrpc_formatter,
binary_streamer, server_binary_formatter, binary_formatter, binary_streamer, server_binary_formatter, binary_formatter;
object_serializer;
function CompareNodes(const A,B : PDataBuffer) : Boolean;overload;forward; function CompareNodes(const A,B : PDataBuffer) : Boolean;overload;forward;
@ -717,7 +730,7 @@ var
ok : Boolean; ok : Boolean;
begin begin
if ( A = nil ) and ( B = nil ) then begin if ( A = nil ) and ( B = nil ) then begin
Result := ok Result := True
end else if ( A <> nil ) and ( B <> nil ) then begin end else if ( A <> nil ) and ( B <> nil ) then begin
if ( A^.Count = B^.Count ) then begin if ( A^.Count = B^.Count ) then begin
ok := True; ok := True;
@ -2606,8 +2619,7 @@ begin
end; end;
procedure TTestFormatter.Test_CplxFloatExtendedSimpleContent_WithClass; procedure TTestFormatter.Test_CplxFloatExtendedSimpleContent_WithClass;
const VAL_S : Extended = -12.10; VAL_U : Double = 10.76; VAL_X = 1210.76; const VAL_S : Extended = -12.10; VAL_U : Double = 10.76;
VAL_STR_S = 'Test Attribute S'; VAL_STR_U = 'Test Attribute U'; VAL_STR_X = 'test it';
var var
f : IFormatterBase; f : IFormatterBase;
s : TMemoryStream; s : TMemoryStream;
@ -2875,6 +2887,8 @@ end;
{$ENDIF WST_UNICODESTRING} {$ENDIF WST_UNICODESTRING}
procedure TTestFormatter.Test_Object(); procedure TTestFormatter.Test_Object();
const
DATE_VALUE = 39000;
Var Var
f : IFormatterBase; f : IFormatterBase;
s : TMemoryStream; s : TMemoryStream;
@ -2893,6 +2907,7 @@ begin
{$ENDIF WST_UNICODESTRING} {$ENDIF WST_UNICODESTRING}
a.ObjProp.Val_String := '456'; a.ObjProp.Val_String := '456';
a.ObjProp.Val_WideString := 'wide456'; a.ObjProp.Val_WideString := 'wide456';
a.ObjProp.Val_Date.AsDate := DATE_VALUE;
{$IFDEF WST_UNICODESTRING} {$IFDEF WST_UNICODESTRING}
a.ObjProp.Val_UnicodeString := 'unicode456'; a.ObjProp.Val_UnicodeString := 'unicode456';
{$ENDIF WST_UNICODESTRING} {$ENDIF WST_UNICODESTRING}
@ -2933,6 +2948,7 @@ begin
CheckEquals(Ord(teFour),Ord(a.ObjProp.Val_Enum)); CheckEquals(Ord(teFour),Ord(a.ObjProp.Val_Enum));
CheckEquals('456',a.ObjProp.Val_String); CheckEquals('456',a.ObjProp.Val_String);
CheckEquals(WideString('wide456'),a.ObjProp.Val_WideString); CheckEquals(WideString('wide456'),a.ObjProp.Val_WideString);
CheckEquals(TDateRemotable.FormatDate(DATE_VALUE),TDateRemotable.FormatDate(a.ObjProp.Val_Date.AsDate));
{$IFDEF WST_UNICODESTRING} {$IFDEF WST_UNICODESTRING}
CheckEquals('unicode456',a.ObjProp.Val_UnicodeString); CheckEquals('unicode456',a.ObjProp.Val_UnicodeString);
{$ENDIF WST_UNICODESTRING} {$ENDIF WST_UNICODESTRING}
@ -3968,7 +3984,6 @@ const AR_LEN = 5;
end; end;
var var
a, areaded : TClass_A_Array; a, areaded : TClass_A_Array;
aitem : TClass_A;
i : Integer; i : Integer;
f : IFormatterBase; f : IFormatterBase;
s : TMemoryStream; s : TMemoryStream;
@ -4016,8 +4031,6 @@ end;
procedure TTestFormatter.Test_ObjectArray_ReadEmptyArray(); procedure TTestFormatter.Test_ObjectArray_ReadEmptyArray();
var var
a, areaded : TClass_A_Array; a, areaded : TClass_A_Array;
aitem : TClass_A;
i : Integer;
f : IFormatterBase; f : IFormatterBase;
s : TMemoryStream; s : TMemoryStream;
x : string; x : string;
@ -4148,7 +4161,6 @@ const AR_LEN = 5;
end; end;
var var
a, areaded : TClass_A_Collection; a, areaded : TClass_A_Collection;
aitem : TClass_A;
i : Integer; i : Integer;
f : IFormatterBase; f : IFormatterBase;
s : TMemoryStream; s : TMemoryStream;
@ -4248,8 +4260,6 @@ end;
procedure TTestFormatter.Test_ObjectCollection_ReadEmptyCollection(); procedure TTestFormatter.Test_ObjectCollection_ReadEmptyCollection();
var var
a, areaded : TClass_A_Collection; a, areaded : TClass_A_Collection;
aitem : TClass_A;
i : Integer;
f : IFormatterBase; f : IFormatterBase;
s : TMemoryStream; s : TMemoryStream;
x : string; x : string;
@ -4303,8 +4313,6 @@ end;
procedure TTestFormatter.Test_SimpleTypeArray_ReadEmptyArray(); procedure TTestFormatter.Test_SimpleTypeArray_ReadEmptyArray();
var var
a, areaded : TArrayOfStringRemotable; a, areaded : TArrayOfStringRemotable;
aitem : TClass_A;
i : Integer;
f : IFormatterBase; f : IFormatterBase;
s : TMemoryStream; s : TMemoryStream;
x : string; x : string;
@ -4590,7 +4598,7 @@ begin
Check( ls.IndexOf('intv') >= 0 ); Check( ls.IndexOf('intv') >= 0 );
x := 'a'; x := 'a';
f.BeginObjectRead(x,TypeInfo(TClass_A)); f.BeginObjectRead(x,TypeInfo(TClass_A));
CheckEquals(5{$IFDEF WST_UNICODESTRING}+1{$ENDIF}, f.GetScopeItemNames(ls), 'GetScopeItemNames.Count(a)'); CheckEquals(6{$IFDEF WST_UNICODESTRING}+1{$ENDIF}, f.GetScopeItemNames(ls), 'GetScopeItemNames.Count(a)');
Check( ls.IndexOf('Val_Bool') >= 0 ); Check( ls.IndexOf('Val_Bool') >= 0 );
Check( ls.IndexOf('Val_Enum') >= 0 ); Check( ls.IndexOf('Val_Enum') >= 0 );
Check( ls.IndexOf('Val_String') >= 0 ); Check( ls.IndexOf('Val_String') >= 0 );
@ -4599,7 +4607,7 @@ begin
x := 'b'; x := 'b';
f.BeginObjectRead(x,TypeInfo(TClass_A)); f.BeginObjectRead(x,TypeInfo(TClass_A));
CheckEquals(5{$IFDEF WST_UNICODESTRING}+1{$ENDIF}, f.GetScopeItemNames(ls), 'GetScopeItemNames.Count(b)'); CheckEquals(6{$IFDEF WST_UNICODESTRING}+1{$ENDIF}, f.GetScopeItemNames(ls), 'GetScopeItemNames.Count(b)');
Check( ls.IndexOf('Val_Bool') >= 0 ); Check( ls.IndexOf('Val_Bool') >= 0 );
Check( ls.IndexOf('Val_Enum') >= 0 ); Check( ls.IndexOf('Val_Enum') >= 0 );
Check( ls.IndexOf('Val_String') >= 0 ); Check( ls.IndexOf('Val_String') >= 0 );
@ -4685,6 +4693,85 @@ begin
Result.BeginObject('Env',ARootType) Result.BeginObject('Env',ARootType)
end; end;
procedure TTestSOAPFormatter.do_test_Object(const AProps, AFilename: string);
const
DATE_VALUE = 39000;
Var
f : IFormatterBase;
s : TMemoryStream;
a : TClass_B;
x : string;
begin
s := Nil;
a := TClass_B.Create();
Try
a.Val_Bool := False;
a.Val_Enum := teThree;
a.Val_String := '123';
a.Val_WideString := 'wide123';
{$IFDEF WST_UNICODESTRING}
a.Val_UnicodeString := 'unicode123';
{$ENDIF WST_UNICODESTRING}
a.ObjProp.Val_String := '456';
a.ObjProp.Val_WideString := 'wide456';
a.ObjProp.Val_Date.AsDate := DATE_VALUE;
{$IFDEF WST_UNICODESTRING}
a.ObjProp.Val_UnicodeString := 'unicode456';
{$ENDIF WST_UNICODESTRING}
a.ObjProp.Val_Enum := teFour;
a.ObjProp.Val_Bool := True;
a.ObjProp.Val_32S := 121076;
a.NonStored := 121076;
f := CreateFormatter(TypeInfo(TClass_B));
f.GetPropertyManager().SetProperties(AProps);
f.BeginObject('Root',TypeInfo(TClass_B));
f.Put('o1',TypeInfo(TClass_B),a);
f.EndScope();
s := TMemoryStream.Create();
f.SaveToStream(s);
FreeAndNil(a);
//if not IsStrEmpty(AFilename) then
//s.SaveToFile(wstExpandLocalFileName(AFilename));
a := TClass_B.Create();
f := CreateFormatter(TypeInfo(TClass_B));
f.GetPropertyManager().SetProperties(AProps);
s.Position := 0;
f.LoadFromStream(s);
x := 'Root';
f.BeginObjectRead(x,TypeInfo(TClass_B));
x := 'o1';
f.Get(TypeInfo(TClass_B),x,a);
f.EndScopeRead();
CheckEquals(False,a.Val_Bool);
CheckEquals(Ord(teThree),Ord(a.Val_Enum));
CheckEquals('123',a.Val_String);
CheckEquals(WideString('wide123'),a.Val_WideString);
{$IFDEF WST_UNICODESTRING}
CheckEquals('unicode123',a.Val_UnicodeString);
{$ENDIF WST_UNICODESTRING}
CheckEquals(True,a.ObjProp.Val_Bool);
CheckEquals(Ord(teFour),Ord(a.ObjProp.Val_Enum));
CheckEquals('456',a.ObjProp.Val_String);
CheckEquals(WideString('wide456'),a.ObjProp.Val_WideString);
CheckEquals(TDateRemotable.FormatDate(DATE_VALUE),TDateRemotable.FormatDate(a.ObjProp.Val_Date.AsDate));
{$IFDEF WST_UNICODESTRING}
CheckEquals('unicode456',a.ObjProp.Val_UnicodeString);
{$ENDIF WST_UNICODESTRING}
CheckEquals(121076,a.ObjProp.Val_32S);
CheckEquals(0,a.NonStored);
Finally
a.Free();
s.Free();
End;
end;
class function TTestSOAPFormatter.GetFormaterName(): string; class function TTestSOAPFormatter.GetFormaterName(): string;
begin begin
Result := 'SOAP'; Result := 'SOAP';
@ -4755,25 +4842,24 @@ procedure TTestSOAPFormatter.test_ReadBuffer();
const const
{$IFDEF FPC} {$IFDEF FPC}
s_XML_BUFFER : AnsiString = s_XML_BUFFER : AnsiString =
'<ns2:ObjProperty> ' + '<ns1:ObjProperty> ' +
' <ns2:fieldSmallint>1</ns2:fieldSmallint> ' + ' <ns1:fieldSmallint>1</ns1:fieldSmallint> ' +
' <ns2:fieldWord>0</ns2:fieldWord> ' + ' <ns1:fieldWord>0</ns1:fieldWord> ' +
' <ns2:fieldString>SampleStringContent</ns2:fieldString> ' + ' <ns1:fieldString>SampleStringContent</ns1:fieldString> ' +
'</ns2:ObjProperty>'; '</ns1:ObjProperty>';
{$ENDIF FPC} {$ENDIF FPC}
{$IFDEF DELPHI} {$IFDEF DELPHI}
s_XML_BUFFER : AnsiString = s_XML_BUFFER : AnsiString =
'<ns2:ObjProperty xmlns:ns2uri:testnamespace> ' + '<ns1:ObjProperty xmlns:ns2uri:testnamespace> ' +
' <ns2:fieldSmallint>1</ns2:fieldSmallint> ' + ' <ns1:fieldSmallint>1</ns1:fieldSmallint> ' +
' <ns2:fieldWord>0</ns2:fieldWord> ' + ' <ns1:fieldWord>0</ns1:fieldWord> ' +
' <ns2:fieldString>SampleStringContent</ns2:fieldString> ' + ' <ns1:fieldString>SampleStringContent</ns1:fieldString> ' +
'</ns2:ObjProperty>'; '</ns1:ObjProperty>';
{$ENDIF DELPHI} {$ENDIF DELPHI}
var var
f : IFormatterBase; f : IFormatterBase;
strm : TMemoryStream; strm : TMemoryStream;
da, db : TXMLDocument;
obj2 : TTestSmallClass2; obj2 : TTestSmallClass2;
obj : TTestSmallClass; obj : TTestSmallClass;
strName, strBuffer : string; strName, strBuffer : string;
@ -4815,6 +4901,26 @@ begin
end; end;
end; end;
procedure TTestSOAPFormatter.test_Object_DocumentLiteral();
begin
do_test_Object('Style=Document;EncodingStyle=Literal','test_Object_DocumentLiteral.xml');
end;
procedure TTestSOAPFormatter.test_Object_DocumentEncoded();
begin
do_test_Object('Style=Document;EncodingStyle=Encoded','test_Object_DocumentEncoded.xml');
end;
procedure TTestSOAPFormatter.test_Object_RPCLiteral();
begin
do_test_Object('Style=RPC;EncodingStyle=Literal','test_Object_RPCLiteral.xml');
end;
procedure TTestSOAPFormatter.test_Object_RPCEncoded();
begin
do_test_Object('Style=RPC;EncodingStyle=Encoded','test_Object_RPCEncoded.xml');
end;
{ TClass_A_Array } { TClass_A_Array }
function TClass_A_Array.GetItem(AIndex: Integer): TClass_A; function TClass_A_Array.GetItem(AIndex: Integer): TClass_A;
@ -6070,33 +6176,47 @@ end;
{ TClass_A }
constructor TClass_A.Create();
begin
inherited Create();
FVal_Date := TDateRemotable.Create();
end;
destructor TClass_A.Destroy();
begin
FreeAndNil(FVal_Date);
inherited Destroy();
end;
initialization initialization
RegisterStdTypes(); RegisterStdTypes();
GetTypeRegistry().Register(sXSD_NS,TypeInfo(TTestEnum),'TTestEnum').RegisterExternalPropertyName('teOne', '1'); GetTypeRegistry().Register(TEST_NAME_SPACE,TypeInfo(TTestEnum),'TTestEnum').RegisterExternalPropertyName('teOne', '1');
GetTypeRegistry().ItemByTypeInfo[TypeInfo(TTestEnum)].RegisterExternalPropertyName('teThree', 'Three-external-name'); GetTypeRegistry().ItemByTypeInfo[TypeInfo(TTestEnum)].RegisterExternalPropertyName('teThree', 'Three-external-name');
GetTypeRegistry().Register(sXSD_NS,TypeInfo(TClass_Int),'TClass_Int').RegisterExternalPropertyName('Val_8U','U8'); GetTypeRegistry().Register(TEST_NAME_SPACE,TypeInfo(TClass_Int),'TClass_Int').RegisterExternalPropertyName('Val_8U','U8');
GetTypeRegistry().Register(sXSD_NS,TypeInfo(TClass_Enum),'TClass_Enum'); GetTypeRegistry().Register(TEST_NAME_SPACE,TypeInfo(TClass_Enum),'TClass_Enum');
GetTypeRegistry().Register(sXSD_NS,TypeInfo(TClass_A),'TClass_A'); GetTypeRegistry().Register(TEST_NAME_SPACE,TypeInfo(TClass_A),'TClass_A');
GetTypeRegistry().Register(sXSD_NS,TypeInfo(TClass_A_Array),'TClass_A_Array'); GetTypeRegistry().Register(TEST_NAME_SPACE,TypeInfo(TClass_A_Array),'TClass_A_Array');
GetTypeRegistry().ItemByTypeInfo[TypeInfo(TClass_A_Array)].RegisterExternalPropertyName(sARRAY_ITEM,'ArrayItem'); GetTypeRegistry().ItemByTypeInfo[TypeInfo(TClass_A_Array)].RegisterExternalPropertyName(sARRAY_ITEM,'ArrayItem');
GetTypeRegistry().Register(sXSD_NS,TypeInfo(TClass_A_Collection),'TClass_A_Collection'); GetTypeRegistry().Register(TEST_NAME_SPACE,TypeInfo(TClass_A_Collection),'TClass_A_Collection');
GetTypeRegistry().ItemByTypeInfo[TypeInfo(TClass_A_Collection)].RegisterExternalPropertyName(sARRAY_ITEM,'Item'); GetTypeRegistry().ItemByTypeInfo[TypeInfo(TClass_A_Collection)].RegisterExternalPropertyName(sARRAY_ITEM,'Item');
GetTypeRegistry().Register(sXSD_NS,TypeInfo(TClass_B),'TClass_B'); GetTypeRegistry().Register(TEST_NAME_SPACE,TypeInfo(TClass_B),'TClass_B');
GetTypeRegistry().Register(sXSD_NS,TypeInfo(TClass_Float),'TClass_Float'); GetTypeRegistry().Register(TEST_NAME_SPACE,TypeInfo(TClass_Float),'TClass_Float');
GetTypeRegistry().Register(sXSD_NS,TypeInfo(T_ComplexInt32SContent),'T_ComplexInt32SContent'); GetTypeRegistry().Register(TEST_NAME_SPACE,TypeInfo(T_ComplexInt32SContent),'T_ComplexInt32SContent');
GetTypeRegistry().Register(sXSD_NS,TypeInfo(T_ComplexInt32UContent),'T_ComplexInt32UContent'); GetTypeRegistry().Register(TEST_NAME_SPACE,TypeInfo(T_ComplexInt32UContent),'T_ComplexInt32UContent');
GetTypeRegistry().Register(sXSD_NS,TypeInfo(T_ComplexInt16SContent),'T_ComplexInt16SContent'); GetTypeRegistry().Register(TEST_NAME_SPACE,TypeInfo(T_ComplexInt16SContent),'T_ComplexInt16SContent');
GetTypeRegistry().Register(sXSD_NS,TypeInfo(T_ComplexInt16UContent),'T_ComplexInt16UContent'); GetTypeRegistry().Register(TEST_NAME_SPACE,TypeInfo(T_ComplexInt16UContent),'T_ComplexInt16UContent');
GetTypeRegistry().Register(sXSD_NS,TypeInfo(T_ComplexFloatExtendedContent),'T_ComplexFloatExtendedContent'); GetTypeRegistry().Register(TEST_NAME_SPACE,TypeInfo(T_ComplexFloatExtendedContent),'T_ComplexFloatExtendedContent');
GetTypeRegistry().Register(sXSD_NS,TypeInfo(T_ComplexFloatDoubleContent),'T_ComplexFloatDoubleContent'); GetTypeRegistry().Register(TEST_NAME_SPACE,TypeInfo(T_ComplexFloatDoubleContent),'T_ComplexFloatDoubleContent');
TClass_CplxSimpleContent.RegisterAttributeProperty('Elt_Exemple'); TClass_CplxSimpleContent.RegisterAttributeProperty('Elt_Exemple');
GetTypeRegistry().Register(sXSD_NS,TypeInfo(TClass_CplxSimpleContent),'TClass_CplxSimpleContent').RegisterExternalPropertyName('Elt_Exemple', 'published'); GetTypeRegistry().Register(TEST_NAME_SPACE,TypeInfo(TClass_CplxSimpleContent),'TClass_CplxSimpleContent').RegisterExternalPropertyName('Elt_Exemple', 'published');
with GetTypeRegistry().Register(sWST_BASE_NS,TypeInfo(TEmbeddedArrayOfStringRemotable),'TEmbeddedArrayOfStringRemotable') do begin with GetTypeRegistry().Register(sWST_BASE_NS,TypeInfo(TEmbeddedArrayOfStringRemotable),'TEmbeddedArrayOfStringRemotable') do begin
RegisterExternalPropertyName(sARRAY_ITEM,'abc'); RegisterExternalPropertyName(sARRAY_ITEM,'abc');