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,
test_suite_utils, base_service_intf, wst_types, server_service_intf, service_intf;
const
TEST_NAME_SPACE = 'uri:test-namespace';
type
TTestEnum = ( teOne, teTwo, teThree, teFour );
@ -39,12 +42,16 @@ type
private
FVal_32S: LongInt;
FVal_Bool: Boolean;
FVal_Date: TDateRemotable;
FVal_Enum: TTestEnum;
FVal_String: string;
{$IFDEF WST_UNICODESTRING}
FVal_UnicodeString: UnicodeString;
{$ENDIF WST_UNICODESTRING}
FVal_WideString: WideString;
public
constructor Create();override;
destructor Destroy();override;
Published
property Val_32S : LongInt Read FVal_32S Write FVal_32S;
property Val_Enum : TTestEnum Read FVal_Enum Write FVal_Enum;
@ -54,6 +61,7 @@ type
{$IFDEF WST_UNICODESTRING}
property Val_UnicodeString : UnicodeString Read FVal_UnicodeString Write FVal_UnicodeString;
{$ENDIF WST_UNICODESTRING}
property Val_Date : TDateRemotable read FVal_Date write FVal_Date;
End;
TClass_A_Array = class(TBaseObjectArrayRemotable)
@ -553,9 +561,15 @@ type
class function GetFormaterName() : string;override;
class function SupportNamedArrayItem() : Boolean;override;
function CreateFormatter(ARootType : PTypeInfo):IFormatterBase;override;
procedure do_test_Object(const AProps, AFileName : string);
published
procedure test_WriteBuffer();
procedure test_ReadBuffer();
procedure test_Object_DocumentLiteral();
procedure test_Object_DocumentEncoded();
procedure test_Object_RPCLiteral();
procedure test_Object_RPCEncoded();
end;
{ TTestSOAPFormatterAttributes }
@ -671,8 +685,7 @@ uses base_binary_formatter, base_soap_formatter, base_xmlrpc_formatter, record_r
{$ENDIF}
, server_service_soap, soap_formatter,
server_service_xmlrpc, xmlrpc_formatter,
binary_streamer, server_binary_formatter, binary_formatter,
object_serializer;
binary_streamer, server_binary_formatter, binary_formatter;
function CompareNodes(const A,B : PDataBuffer) : Boolean;overload;forward;
@ -717,7 +730,7 @@ var
ok : Boolean;
begin
if ( A = nil ) and ( B = nil ) then begin
Result := ok
Result := True
end else if ( A <> nil ) and ( B <> nil ) then begin
if ( A^.Count = B^.Count ) then begin
ok := True;
@ -2606,8 +2619,7 @@ begin
end;
procedure TTestFormatter.Test_CplxFloatExtendedSimpleContent_WithClass;
const VAL_S : Extended = -12.10; VAL_U : Double = 10.76; VAL_X = 1210.76;
VAL_STR_S = 'Test Attribute S'; VAL_STR_U = 'Test Attribute U'; VAL_STR_X = 'test it';
const VAL_S : Extended = -12.10; VAL_U : Double = 10.76;
var
f : IFormatterBase;
s : TMemoryStream;
@ -2875,6 +2887,8 @@ end;
{$ENDIF WST_UNICODESTRING}
procedure TTestFormatter.Test_Object();
const
DATE_VALUE = 39000;
Var
f : IFormatterBase;
s : TMemoryStream;
@ -2893,6 +2907,7 @@ begin
{$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}
@ -2933,6 +2948,7 @@ begin
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}
@ -3968,7 +3984,6 @@ const AR_LEN = 5;
end;
var
a, areaded : TClass_A_Array;
aitem : TClass_A;
i : Integer;
f : IFormatterBase;
s : TMemoryStream;
@ -4016,8 +4031,6 @@ end;
procedure TTestFormatter.Test_ObjectArray_ReadEmptyArray();
var
a, areaded : TClass_A_Array;
aitem : TClass_A;
i : Integer;
f : IFormatterBase;
s : TMemoryStream;
x : string;
@ -4148,7 +4161,6 @@ const AR_LEN = 5;
end;
var
a, areaded : TClass_A_Collection;
aitem : TClass_A;
i : Integer;
f : IFormatterBase;
s : TMemoryStream;
@ -4248,8 +4260,6 @@ end;
procedure TTestFormatter.Test_ObjectCollection_ReadEmptyCollection();
var
a, areaded : TClass_A_Collection;
aitem : TClass_A;
i : Integer;
f : IFormatterBase;
s : TMemoryStream;
x : string;
@ -4303,8 +4313,6 @@ end;
procedure TTestFormatter.Test_SimpleTypeArray_ReadEmptyArray();
var
a, areaded : TArrayOfStringRemotable;
aitem : TClass_A;
i : Integer;
f : IFormatterBase;
s : TMemoryStream;
x : string;
@ -4590,7 +4598,7 @@ begin
Check( ls.IndexOf('intv') >= 0 );
x := '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_Enum') >= 0 );
Check( ls.IndexOf('Val_String') >= 0 );
@ -4599,7 +4607,7 @@ begin
x := 'b';
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_Enum') >= 0 );
Check( ls.IndexOf('Val_String') >= 0 );
@ -4685,6 +4693,85 @@ begin
Result.BeginObject('Env',ARootType)
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;
begin
Result := 'SOAP';
@ -4755,25 +4842,24 @@ procedure TTestSOAPFormatter.test_ReadBuffer();
const
{$IFDEF FPC}
s_XML_BUFFER : AnsiString =
'<ns2:ObjProperty> ' +
' <ns2:fieldSmallint>1</ns2:fieldSmallint> ' +
' <ns2:fieldWord>0</ns2:fieldWord> ' +
' <ns2:fieldString>SampleStringContent</ns2:fieldString> ' +
'</ns2:ObjProperty>';
'<ns1:ObjProperty> ' +
' <ns1:fieldSmallint>1</ns1:fieldSmallint> ' +
' <ns1:fieldWord>0</ns1:fieldWord> ' +
' <ns1:fieldString>SampleStringContent</ns1:fieldString> ' +
'</ns1:ObjProperty>';
{$ENDIF FPC}
{$IFDEF DELPHI}
s_XML_BUFFER : AnsiString =
'<ns2:ObjProperty xmlns:ns2uri:testnamespace> ' +
' <ns2:fieldSmallint>1</ns2:fieldSmallint> ' +
' <ns2:fieldWord>0</ns2:fieldWord> ' +
' <ns2:fieldString>SampleStringContent</ns2:fieldString> ' +
'</ns2:ObjProperty>';
'<ns1:ObjProperty xmlns:ns2uri:testnamespace> ' +
' <ns1:fieldSmallint>1</ns1:fieldSmallint> ' +
' <ns1:fieldWord>0</ns1:fieldWord> ' +
' <ns1:fieldString>SampleStringContent</ns1:fieldString> ' +
'</ns1:ObjProperty>';
{$ENDIF DELPHI}
var
f : IFormatterBase;
strm : TMemoryStream;
da, db : TXMLDocument;
obj2 : TTestSmallClass2;
obj : TTestSmallClass;
strName, strBuffer : string;
@ -4815,6 +4901,26 @@ begin
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 }
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
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().Register(sXSD_NS,TypeInfo(TClass_Int),'TClass_Int').RegisterExternalPropertyName('Val_8U','U8');
GetTypeRegistry().Register(sXSD_NS,TypeInfo(TClass_Enum),'TClass_Enum');
GetTypeRegistry().Register(sXSD_NS,TypeInfo(TClass_A),'TClass_A');
GetTypeRegistry().Register(sXSD_NS,TypeInfo(TClass_A_Array),'TClass_A_Array');
GetTypeRegistry().Register(TEST_NAME_SPACE,TypeInfo(TClass_Int),'TClass_Int').RegisterExternalPropertyName('Val_8U','U8');
GetTypeRegistry().Register(TEST_NAME_SPACE,TypeInfo(TClass_Enum),'TClass_Enum');
GetTypeRegistry().Register(TEST_NAME_SPACE,TypeInfo(TClass_A),'TClass_A');
GetTypeRegistry().Register(TEST_NAME_SPACE,TypeInfo(TClass_A_Array),'TClass_A_Array');
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().Register(sXSD_NS,TypeInfo(TClass_B),'TClass_B');
GetTypeRegistry().Register(sXSD_NS,TypeInfo(TClass_Float),'TClass_Float');
GetTypeRegistry().Register(TEST_NAME_SPACE,TypeInfo(TClass_B),'TClass_B');
GetTypeRegistry().Register(TEST_NAME_SPACE,TypeInfo(TClass_Float),'TClass_Float');
GetTypeRegistry().Register(sXSD_NS,TypeInfo(T_ComplexInt32SContent),'T_ComplexInt32SContent');
GetTypeRegistry().Register(sXSD_NS,TypeInfo(T_ComplexInt32UContent),'T_ComplexInt32UContent');
GetTypeRegistry().Register(TEST_NAME_SPACE,TypeInfo(T_ComplexInt32SContent),'T_ComplexInt32SContent');
GetTypeRegistry().Register(TEST_NAME_SPACE,TypeInfo(T_ComplexInt32UContent),'T_ComplexInt32UContent');
GetTypeRegistry().Register(sXSD_NS,TypeInfo(T_ComplexInt16SContent),'T_ComplexInt16SContent');
GetTypeRegistry().Register(sXSD_NS,TypeInfo(T_ComplexInt16UContent),'T_ComplexInt16UContent');
GetTypeRegistry().Register(TEST_NAME_SPACE,TypeInfo(T_ComplexInt16SContent),'T_ComplexInt16SContent');
GetTypeRegistry().Register(TEST_NAME_SPACE,TypeInfo(T_ComplexInt16UContent),'T_ComplexInt16UContent');
GetTypeRegistry().Register(sXSD_NS,TypeInfo(T_ComplexFloatExtendedContent),'T_ComplexFloatExtendedContent');
GetTypeRegistry().Register(sXSD_NS,TypeInfo(T_ComplexFloatDoubleContent),'T_ComplexFloatDoubleContent');
GetTypeRegistry().Register(TEST_NAME_SPACE,TypeInfo(T_ComplexFloatExtendedContent),'T_ComplexFloatExtendedContent');
GetTypeRegistry().Register(TEST_NAME_SPACE,TypeInfo(T_ComplexFloatDoubleContent),'T_ComplexFloatDoubleContent');
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
RegisterExternalPropertyName(sARRAY_ITEM,'abc');