Object Pascal "record" serialization ( first commit! )

TTest_TIntfPoolItem
TTest_TSimpleItemFactory
TTest_XmlRpcFormatterExceptionBlock
TTest_SoapFormatterExceptionBlock
Record serialization test

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@243 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
inoussa
2007-08-19 00:29:43 +00:00
parent bbee29cb90
commit 11a897fc26
60 changed files with 4375 additions and 893 deletions

View File

@ -15,7 +15,7 @@
-$O+
-$P+
-$Q-
-$R-
-$R+
-$S-
-$T-
-$U-

View File

@ -18,7 +18,7 @@ N=1
O=1
P=1
Q=0
R=0
R=1
S=0
T=0
U=0

View File

@ -0,0 +1,39 @@
{$DEFINE HAS_QWORD}
{$DEFINE HAS_COMP}
unit simple_record_test;
interface
type
TTestSmallRecord = record
fieldSmallint : Smallint;
fieldWord : Word;
fieldString : string;
end;
TTestRecord = record
fieldByte : Byte;
fieldShortInt : ShortInt;
fieldSmallint : Smallint;
fieldWord : Word;
fieldInteget : Integer;
fieldLongWord : LongWord;
fieldInt64 : Int64;
{$IFDEF HAS_QWORD}
fieldQWord : QWord;
{$ENDIF}
{$IFDEF HAS_COMP}
fieldComp : Comp;
{$ENDIF}
fieldSingle : Single;
fieldDouble : Double;
fieldExtended : Extended;
fieldCurrency : Currency;
fieldBoolean : Boolean;
fieldString : string;
fieldRecord : TTestSmallRecord;
end;
implementation
end.

View File

@ -13,9 +13,6 @@ uses
TypInfo,
base_service_intf, server_service_intf;
{$INCLUDE wst.inc}
{$INCLUDE wst_delphi.inc}
type
ITest = interface
@ -37,7 +34,35 @@ type
constructor Create();override;
end;
ISimple_A = interface
['{D015AD95-6062-4650-9B00-CF3004E9CA1A}']//['{4793180A-DAA4-4E50-9194-5EEEE851EBE3}']
end;
ISimple_B = interface
['{4793180A-DAA4-4E50-9194-5EEEE851EBE3}']
end;
TSimpleFactoryItem_A = class(TSimpleFactoryItem,IInterface,ISimple_A)
end;
TSimpleFactoryItem_B = class(TSimpleFactoryItem,IInterface,ISimple_B)
end;
{ TTest_TIntfPoolItem }
TTest_TIntfPoolItem = class(TTestCase)
published
procedure All();
end;
{ TTest_TSimpleItemFactory }
TTest_TSimpleItemFactory = class(TTestCase)
published
procedure CreateProc();
procedure CreateInstance();
end;
{ TTest_TIntfPool }
TTest_TIntfPool= class(TTestCase)
@ -447,15 +472,121 @@ begin
Check(oldElt <> elt,'4.2');
end;
{ TTest_TIntfPoolItem }
procedure TTest_TIntfPoolItem.All();
var
i : IInterface;
b : Boolean;
a : TIntfPoolItem;
begin
i := nil;
b := False;
a := TIntfPoolItem.Create(i,b);
try
Check(( i = a.Intf ),'Create() > Intf');
CheckEquals(b,a.Used,'Create() > Used');
b := not b;
a.Used := b;
CheckEquals(b,a.Used,'Used');
finally
FreeAndNil(a);
end;
a := nil;
i := nil;
b := True;
a := TIntfPoolItem.Create(i,b);
try
Check(( i = a.Intf ),'Create() > Intf');
CheckEquals(b,a.Used,'Create() > Used');
b := not b;
a.Used := b;
CheckEquals(b,a.Used,'Used');
finally
FreeAndNil(a);
end;
end;
{ TTest_TSimpleItemFactory }
procedure TTest_TSimpleItemFactory.CreateInstance();
var
b, a : IItemFactory;
itm : IInterface;
begin
a := TSimpleItemFactory.Create(TSimpleFactoryItem_A);
itm := a.CreateInstance();
CheckEquals(True,Assigned(itm));
CheckEquals(True,Supports(itm,ISimple_A));
itm := a.CreateInstance();
CheckEquals(True,Assigned(itm));
CheckEquals(True,Supports(itm,ISimple_A));
b := TSimpleItemFactory.Create(TSimpleFactoryItem_B);
itm := b.CreateInstance();
CheckEquals(True,Assigned(itm));
CheckEquals(True,Supports(itm,ISimple_B));
itm := b.CreateInstance();
CheckEquals(True,Assigned(itm));
CheckEquals(True,Supports(itm,ISimple_B));
end;
type
{ TSimpleItemFactoryCrack }
TSimpleItemFactoryCrack = class(TSimpleItemFactory)
public
function GetItemClass() : TSimpleFactoryItemClass;
end;
{ TSimpleItemFactoryCrack }
function TSimpleItemFactoryCrack.GetItemClass() : TSimpleFactoryItemClass;
begin
Result := inherited GetItemClass();
end;
procedure TTest_TSimpleItemFactory.CreateProc();
var
a : IItemFactory;
b : TSimpleItemFactoryCrack;
ok : Boolean;
begin
ok := False;
try
TSimpleItemFactory.Create(nil);
except
on e : EServiceConfigException do begin
ok := True;
end;
end;
CheckEquals(True,ok,'Create(nil)');
b := TSimpleItemFactoryCrack.Create(TSimpleFactoryItem_A);
CheckEquals(TSimpleFactoryItem_A,b.GetItemClass());
FreeAndNil(b);
b := TSimpleItemFactoryCrack.Create(TSimpleFactoryItem_B);
CheckEquals(TSimpleFactoryItem_B,b.GetItemClass());
end;
initialization
{$IFDEF FPC}
RegisterTest(TTest_TIntfPool);
RegisterTest(TTest_TSimpleItemFactoryEx);
RegisterTest(TTest_TImplementationFactory);
RegisterTest(TTest_TIntfPoolItem);
RegisterTest(TTest_TImplementationFactory);
{$ELSE}
RegisterTest(TTest_TIntfPool.Suite);
RegisterTest(TTest_TSimpleItemFactoryEx.Suite);
RegisterTest(TTest_TImplementationFactory.Suite);
RegisterTest(TTest_TIntfPoolItem.Suite);
RegisterTest(TTest_TImplementationFactory.Suite);
{$ENDIF}
end.

View File

@ -19,14 +19,12 @@ uses
Classes, SysUtils,
{$IFDEF FPC}
fpcunit, testutils, testregistry,
{$ELSE}
TestFrameWork,
{$ENDIF}
{$IFNDEF FPC}
TestFrameWork, ActiveX,
{$ENDIF}
TypInfo,
base_service_intf;
{$INCLUDE wst.inc}
{$INCLUDE wst_delphi.inc}
base_service_intf, wst_types, server_service_intf, service_intf;
type
@ -285,6 +283,31 @@ type
TEmbeddedArrayOfStringRemotable = class(TArrayOfStringRemotable);
TTestSmallRecord = record
fieldSmallint : Smallint;
fieldWord : Word;
fieldString : string;
end;
TTestRecord = record
fieldByte : Byte;
fieldShortInt : ShortInt;
fieldSmallint : Smallint;
fieldWord : Word;
fieldInteger : Integer;
fieldLongWord : LongWord;
fieldInt64 : Int64;
fieldQWord : QWord;
fieldComp : Comp;
fieldSingle : Single;
fieldDouble : Double;
fieldExtended : Extended;
fieldCurrency : Currency;
fieldBoolean : Boolean;
fieldString : string;
fieldRecord : TTestSmallRecord;
end;
{ TTestFormatterSimpleType }
TTestFormatterSimpleType= class(TTestCase)
@ -352,6 +375,9 @@ type
procedure Test_FloatCurrencyArray();
procedure Test_ComplexInt32S();
procedure Test_Record_simple();
procedure Test_Record_nested();
end;
{ TTestBinaryFormatter }
@ -452,8 +478,43 @@ type
procedure ParseDate();
end;
{ TTest_SoapFormatterExceptionBlock }
TTest_SoapFormatterExceptionBlock = class(TTestCase)
protected
procedure SetUp(); override;
procedure TearDown(); override;
function CreateFormatter():IFormatterResponse;
function CreateFormatterClient():IFormatterClient;
published
procedure ExceptBlock_server();
procedure ExceptBlock_client();
end;
{ TTest_XmlRpcFormatterExceptionBlock }
TTest_XmlRpcFormatterExceptionBlock = class(TTestCase)
protected
procedure SetUp(); override;
procedure TearDown(); override;
function CreateFormatter():IFormatterResponse;
function CreateFormatterClient():IFormatterClient;
published
procedure ExceptBlock_server();
procedure ExceptBlock_client();
end;
implementation
uses base_binary_formatter, base_soap_formatter, base_xmlrpc_formatter;
uses base_binary_formatter, base_soap_formatter, base_xmlrpc_formatter, record_rtti,
Math, imp_utils
{$IFNDEF FPC}
, xmldom, wst_delphi_xml
{$ENDIF}
{$IFDEF FPC}
, DOM, XMLRead, wst_fpc_xml
{$ENDIF}
, server_service_soap, soap_formatter,
server_service_xmlrpc, xmlrpc_formatter;
function TTestFormatterSimpleType.Support_ComplextType_with_SimpleContent( ): Boolean;
begin
@ -2502,6 +2563,139 @@ begin
end;
end;
procedure TTestFormatter.Test_Record_simple();
const VAL_1 : Integer = 12; VAL_2 : Integer = -76; VAL_3 = 'wst record sample';
var
f : IFormatterBase;
s : TMemoryStream;
x : string;
a : TTestSmallRecord;
begin
s := nil;
try
a.fieldWord := VAL_1;
a.fieldSmallint := VAL_2;
a.fieldString := VAL_3;
f := CreateFormatter(TypeInfo(TClass_Int));
f.BeginObject('Root',TypeInfo(TClass_Int));
f.Put('a',TypeInfo(TTestSmallRecord),a);
f.EndScope();
a.fieldWord := 0;
a.fieldSmallint := 0;
a.fieldString := '';
s := TMemoryStream.Create();
f.SaveToStream(s); s.SaveToFile(ClassName + '.Test_Record_simple.xml');
f := CreateFormatter(TypeInfo(TClass_Int));
s.Position := 0;
f.LoadFromStream(s);
x := 'Root';
f.BeginObjectRead(x,TypeInfo(TClass_Int));
x := 'a';
f.Get(TypeInfo(TTestSmallRecord),x,a);
f.EndScopeRead();
CheckEquals(VAL_1,a.fieldWord);
CheckEquals(VAL_2,a.fieldSmallint);
CheckEquals(VAL_3,a.fieldString);
finally
s.Free();
end;
end;
procedure TTestFormatter.Test_Record_nested();
const
VAL_EPSILON = 0.0001;
VAL_EMPTY_RECORD : TTestRecord = (
fieldByte : 0;
fieldShortInt : 0;
fieldSmallint : 0;
fieldWord : 0;
fieldInteger : 0;
fieldLongWord : 0;
fieldInt64 : 0;
fieldQWord : 0;
fieldComp : 0;
fieldSingle : 0;
fieldDouble : 0;
fieldExtended : 0;
fieldCurrency : 0;
fieldBoolean : False;
fieldString : '';
fieldRecord : ( fieldSmallint : 0; fieldWord : 0; fieldString : '');
);
VAL_RECORD : TTestRecord = (
fieldByte : 12;
fieldShortInt : -10;
fieldSmallint : 76;
fieldWord : 34;
fieldInteger : -45;
fieldLongWord : 567;
fieldInt64 : 8910;
fieldQWord : 111213;
fieldComp : 141516;
fieldSingle : 1718;
fieldDouble : -1819;
fieldExtended : 2021;
fieldCurrency : -2122;
fieldBoolean : True;
fieldString : 'sample record string 0123456789';
fieldRecord : ( fieldSmallint : 10; fieldWord : 11; fieldString : 'azertyqwerty');
);
var
f : IFormatterBase;
s : TMemoryStream;
x : string;
a : TTestRecord;
begin
s := nil;
try
a := VAL_RECORD;
f := CreateFormatter(TypeInfo(TClass_Int));
f.BeginObject('Root',TypeInfo(TClass_Int));
f.Put('a',TypeInfo(TTestRecord),a);
f.EndScope();
a := VAL_EMPTY_RECORD;
s := TMemoryStream.Create();
f.SaveToStream(s); s.SaveToFile(ClassName + '.Test_Record_nested.xml');
f := CreateFormatter(TypeInfo(TClass_Int));
s.Position := 0;
f.LoadFromStream(s);
x := 'Root';
f.BeginObjectRead(x,TypeInfo(TClass_Int));
x := 'a';
f.Get(TypeInfo(TTestRecord),x,a);
f.EndScopeRead();
CheckEquals(VAL_RECORD.fieldBoolean,a.fieldBoolean,'fieldBoolean');
CheckEquals(VAL_RECORD.fieldByte,a.fieldByte,'fieldByte');
{$IFDEF HAS_COMP}
CheckEquals(VAL_RECORD.fieldComp,a.fieldComp,'fieldComp');
{$ENDIF}
Check(IsZero(VAL_RECORD.fieldCurrency-a.fieldCurrency,VAL_EPSILON),'fieldCurrency');
Check(IsZero(VAL_RECORD.fieldExtended-a.fieldExtended,VAL_EPSILON),'fieldExtended');
CheckEquals(VAL_RECORD.fieldInt64,a.fieldInt64,'fieldInt64');
CheckEquals(VAL_RECORD.fieldInteger,a.fieldInteger,'fieldInteger');
Check(VAL_RECORD.fieldLongWord = a.fieldLongWord,'fieldLongWord');
{$IFDEF HAS_QWORD}
CheckEquals(VAL_RECORD.fieldQWord,a.fieldQWord,'fieldQWord');
{$ENDIF}
CheckEquals(VAL_RECORD.fieldRecord.fieldSmallint,a.fieldRecord.fieldSmallint,'fieldSmallint');
CheckEquals(VAL_RECORD.fieldRecord.fieldString,a.fieldRecord.fieldString,'fieldString');
CheckEquals(VAL_RECORD.fieldRecord.fieldWord,a.fieldRecord.fieldWord,'fieldWord');
CheckEquals(VAL_RECORD.fieldShortInt,a.fieldShortInt,'fieldShortInt');
Check(IsZero(VAL_RECORD.fieldSingle-a.fieldSingle,VAL_EPSILON),'fieldSingle');
CheckEquals(VAL_RECORD.fieldSmallint,a.fieldSmallint,'fieldSmallint');
CheckEquals(VAL_RECORD.fieldString,a.fieldString,'fieldString');
CheckEquals(VAL_RECORD.fieldWord,a.fieldWord,'fieldWord');
finally
s.Free();
end;
end;
{ TTestBinaryFormatter }
@ -3151,6 +3345,386 @@ begin
Result := False;
end;
{ TTest_SoapFormatterExceptionBlock }
function TTest_SoapFormatterExceptionBlock.CreateFormatter() : IFormatterResponse;
begin
Result := server_service_soap.TSOAPFormatter.Create() as IFormatterResponse;
end;
function TTest_SoapFormatterExceptionBlock.CreateFormatterClient() : IFormatterClient;
begin
Result := soap_formatter.TSOAPFormatter.Create() as IFormatterClient;
end;
function FindAttributeByValueInNode(
const AAttValue : string;
const ANode : TDOMNode;
out AResAtt : string
):boolean;
Var
i,c : Integer;
begin
AResAtt := '';
if Assigned(ANode) and
Assigned(ANode.Attributes) and
( ANode.Attributes.Length > 0 )
then begin
c := Pred(ANode.Attributes.Length);
For i := 0 To c Do Begin
If AnsiSameText(AAttValue,ANode.Attributes.Item[i].NodeValue) Then Begin
AResAtt := ANode.Attributes.Item[i].NodeName;
Result := True;
Exit;
End;
End;
end;
Result := False;
end;
procedure TTest_SoapFormatterExceptionBlock.ExceptBlock_server();
const
VAL_CODE = 'Server.CustomCode.Test'; VAL_MSG = 'This is a sample exception message.';
var
f : IFormatterResponse;
strm : TMemoryStream;
envNd : TDOMElement;
bdyNd, fltNd, hdrNd, tmpNode : TDOMNode;
nsShortName,eltName, msgBuff : string;
doc : TXMLDocument;
begin
f := CreateFormatter();
f.BeginExceptionList(VAL_CODE,VAL_MSG);
f.EndExceptionList();
strm := TMemoryStream.Create();
try
f.SaveToStream(strm);strm.SaveToFile('TTest_SoapFormatterExceptionBlock.ExceptBlock.xml');
strm.Position := 0;
ReadXMLFile(doc,strm);
if FindAttributeByValueInNode(sSOAP_ENV,doc.DocumentElement,nsShortName) or
FindAttributeByValueInNode('"' + sSOAP_ENV + '"',doc.DocumentElement,nsShortName)
then begin
nsShortName := Copy(nsShortName,1 + Pos(':',nsShortName),MaxInt);
if not IsStrEmpty(nsShortName) then
nsShortName := nsShortName + ':';
end else begin
nsShortName := '';
end;
eltName := nsShortName + sENVELOPE;
envNd := doc.DocumentElement;
if not SameText(eltName,envNd.NodeName) then
check(False,Format('XML root node must be "Envelope", found : "%s"',[envNd.NodeName + ':::' + nsShortName]));
bdyNd := envNd.FirstChild;
if not Assigned(bdyNd) then
check(False,'Node not found : "Body".');
eltName := nsShortName + 'Body';
if not SameText(bdyNd.NodeName,eltName) then begin
check(False,'Node not found : "Body".');
end;
bdyNd := envNd.FirstChild;
If Not Assigned(bdyNd) Then
check(False,'Node not found : "Body"');
If Not SameText(bdyNd.NodeName,eltName) Then
bdyNd := bdyNd.NextSibling;
If Not Assigned(bdyNd) Then
Check(False,'Node not found : "Body"');
If Not Assigned(bdyNd.FirstChild) Then
Check(False,'Response Node not found');
eltName := nsShortName + 'Fault';
if SameText(eltName,bdyNd.FirstChild.NodeName) then begin
fltNd := bdyNd.FirstChild;
eltName := 'faultcode';
tmpNode := FindNode(fltNd,eltName);
if not Assigned(tmpNode) then
Check(False,Format('"%s" Node not found.',[eltName]));
if tmpNode.HasChildNodes then
msgBuff := tmpNode.FirstChild.NodeValue
else
msgBuff := tmpNode.NodeValue;
CheckEquals(VAL_CODE,msgBuff,eltName);
eltName := 'faultstring';
tmpNode := FindNode(fltNd,eltName);
if not Assigned(tmpNode) then
Check(False,Format('"%s" Node not found.',[eltName]));
if tmpNode.HasChildNodes then
msgBuff := tmpNode.FirstChild.NodeValue
else
msgBuff := tmpNode.NodeValue;
CheckEquals(VAL_MSG,msgBuff,eltName);
end;
finally
FreeAndNil(strm);
end;
end;
procedure TTest_SoapFormatterExceptionBlock.ExceptBlock_client();
const
VAL_CODE = 'Server.CustomCode.Test'; VAL_MSG = 'This is a sample exception message.';
VAL_STREAM =
'<?xml version="1.0"?> '+
' <SOAP-ENV:Envelope ' +
' xmlns:xsd="http://www.w3.org/2001/XMLSchema" ' +
' xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" ' +
' xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> ' +
' <SOAP-ENV:Body> '+
' <SOAP-ENV:Fault> '+
' <faultcode>' + VAL_CODE + '</faultcode> '+
' <faultstring>' + VAL_MSG +'</faultstring> '+
' </SOAP-ENV:Fault> '+
' </SOAP-ENV:Body> '+
' </SOAP-ENV:Envelope>';
var
f : IFormatterClient;
strm : TStringStream;
excpt_code, excpt_msg : string;
begin
excpt_code := '';
excpt_msg := '';
f := CreateFormatterClient();
strm := TStringStream.Create(VAL_STREAM);
try
strm.Position := 0;
f.LoadFromStream(strm);
try
f.BeginCallRead(nil);
Check(False,'BeginCallRead() should raise an exception.');
except
on e : ESOAPException do begin
excpt_code := e.FaultCode;
excpt_msg := e.FaultString;
end;
end;
CheckEquals(VAL_CODE,excpt_code,'faultCode');
CheckEquals(VAL_MSG,excpt_msg,'faultString');
finally
FreeAndNil(strm);
end;
end;
{$IFDEF WST_RECORD_RTTI}
function __TTestSmallRecord_TYPEINFO_FUNC__() : PTypeInfo;
var
p : ^TTestSmallRecord;
r : TTestSmallRecord;
begin
p := @r;
Result := MakeRawTypeInfo(
'TTestSmallRecord',
SizeOf(TTestSmallRecord),
[ PtrUInt(@(p^.fieldSmallint)) - PtrUInt(p), PtrUInt(@(p^.fieldWord)) - PtrUInt(p), PtrUInt(@(p^.fieldString)) - PtrUInt(p) ],
[ TypeInfo(SmallInt), TypeInfo(Word), TypeInfo(String) ]
);
end;
{$ENDIF WST_RECORD_RTTI}
{$IFDEF WST_RECORD_RTTI}
function __TTestRecord_TYPEINFO_FUNC__() : PTypeInfo;
var
p : ^TTestRecord;
r : TTestRecord;
begin
p := @r;
Result := MakeRawTypeInfo(
'TTestRecord',
SizeOf(TTestRecord),
[ PtrUInt(@(p^.fieldByte)) - PtrUInt(p), PtrUInt(@(p^.fieldShortInt)) - PtrUInt(p), PtrUInt(@(p^.fieldSmallint)) - PtrUInt(p), PtrUInt(@(p^.fieldWord)) - PtrUInt(p), PtrUInt(@(p^.fieldInteger)) - PtrUInt(p), PtrUInt(@(p^.fieldLongWord)) - PtrUInt(p), PtrUInt(@(p^.fieldInt64)) - PtrUInt(p), PtrUInt(@(p^.fieldQWord)) - PtrUInt(p), PtrUInt(@(p^.fieldComp)) - PtrUInt(p), PtrUInt(@(p^.fieldSingle)) - PtrUInt(p), PtrUInt(@(p^.fieldDouble)) - PtrUInt(p), PtrUInt(@(p^.fieldExtended)) - PtrUInt(p), PtrUInt(@(p^.fieldCurrency)) - PtrUInt(p), PtrUInt(@(p^.fieldBoolean)) - PtrUInt(p), PtrUInt(@(p^.fieldString)) - PtrUInt(p), PtrUInt(@(p^.fieldRecord)) - PtrUInt(p) ],
[ TypeInfo(Byte), TypeInfo(ShortInt), TypeInfo(SmallInt), TypeInfo(Word), TypeInfo(Integer), TypeInfo(LongWord), TypeInfo(Int64), TypeInfo(QWord), TypeInfo(Comp), TypeInfo(Single), TypeInfo(Double), TypeInfo(Extended), TypeInfo(Currency), TypeInfo(Boolean), TypeInfo(String), TypeInfo(TTestSmallRecord) ]
);
end;
{$ENDIF WST_RECORD_RTTI}
procedure TTest_SoapFormatterExceptionBlock.SetUp();
begin
inherited;
{$IFNDEF FPC}
CoInitialize(nil);
{$ENDIF}
end;
procedure TTest_SoapFormatterExceptionBlock.TearDown();
begin
{$IFNDEF FPC}
CoUninitialize();
{$ENDIF}
inherited;
end;
{ TTest_XmlRpcFormatterExceptionBlock }
procedure TTest_XmlRpcFormatterExceptionBlock.SetUp();
begin
inherited;
{$IFNDEF FPC}
CoInitialize(nil);
{$ENDIF}
end;
procedure TTest_XmlRpcFormatterExceptionBlock.TearDown();
begin
{$IFNDEF FPC}
CoUninitialize();
{$ENDIF}
inherited;
end;
function TTest_XmlRpcFormatterExceptionBlock.CreateFormatter() : IFormatterResponse;
begin
Result := server_service_xmlrpc.TXmlRpcFormatter.Create() as IFormatterResponse;
end;
function TTest_XmlRpcFormatterExceptionBlock.CreateFormatterClient() : IFormatterClient;
begin
Result := xmlrpc_formatter.TXmlRpcFormatter.Create() as IFormatterClient;
end;
procedure TTest_XmlRpcFormatterExceptionBlock.ExceptBlock_server();
function loc_FindNode(AScope : TDOMNode; const ANodeName: string): TDOMNode;
var
memberNode, tmpNode : TDOMNode;
i : Integer;
chilNodes : TDOMNodeList;
nodeFound : Boolean;
begin
Result := nil;
if AScope.HasChildNodes() then begin
nodeFound := False;
memberNode := AScope.FirstChild;
while ( not nodeFound ) and ( memberNode <> nil ) do begin
if memberNode.HasChildNodes() then begin
chilNodes := memberNode.ChildNodes;
for i := 0 to Pred(GetNodeListCount(chilNodes)) do begin
tmpNode := chilNodes.Item[i];
if AnsiSameText(sNAME,tmpNode.NodeName) and
( tmpNode.FirstChild <> nil ) and
AnsiSameText(ANodeName,tmpNode.FirstChild.NodeValue)
then begin
nodeFound := True;
Break;
end;
end;
if nodeFound then begin
tmpNode := FindNode(memberNode,sVALUE);
if ( tmpNode <> nil ) and ( tmpNode.FirstChild <> nil ) then begin
Result := tmpNode.FirstChild;
Break;
end;
end;
end;
memberNode := memberNode.NextSibling;
end;
end;
end;
const VAL_CODE = '1210'; VAL_MSG = 'This is a sample exception message.';
var
f : IFormatterResponse;
strm : TMemoryStream;
callNode : TDOMElement;
faultNode, faultStruct, tmpNode : TDOMNode;
doc : TXMLDocument;
eltName : string;
excpt_Obj : EXmlRpcException;
excpt_code, excpt_msg : string;
begin
f := CreateFormatter();
f.BeginExceptionList(VAL_CODE,VAL_MSG);
f.EndExceptionList();
strm := TMemoryStream.Create();
try
f.SaveToStream(strm);strm.SaveToFile('TTest_XmlRpcFormatterExceptionBlock.ExceptBlock.xml');
strm.Position := 0;
ReadXMLFile(doc,strm);
callNode := doc.DocumentElement;
if not SameText(base_xmlrpc_formatter.sMETHOD_RESPONSE,callNode.NodeName) then
Check(False,Format('XML root node must be "%s".',[base_xmlrpc_formatter.sMETHOD_RESPONSE]));
faultNode := FindNode(callNode,base_xmlrpc_formatter.sFAULT);
if ( faultNode = nil ) then begin
Check(False,Format('Invalid XmlRPC response message, "%s" or "%s" are not present.',[base_xmlrpc_formatter.sPARAMS,base_xmlrpc_formatter.sFAULT]));
end;
tmpNode := FindNode(faultNode,base_xmlrpc_formatter.sVALUE);
if ( tmpNode = nil ) then begin
Check(False,Format('Invalid XmlRPC fault response message, "%s" is not present.',[base_xmlrpc_formatter.sVALUE]));
end;
faultStruct := FindNode(tmpNode,XmlRpcDataTypeNames[xdtStruct]);
if ( faultStruct = nil ) then begin
Check(False,Format('Invalid XmlRPC fault response message, "%s" is not present.',[XmlRpcDataTypeNames[xdtStruct]]));
end;
tmpNode := loc_FindNode(faultStruct,base_xmlrpc_formatter.sFAULT_CODE);
if ( tmpNode = nil ) then begin
Check(False,Format('Invalid XmlRPC fault response message, "%s" is not present.',[base_xmlrpc_formatter.sFAULT_CODE]));
end;
excpt_code := tmpNode.FirstChild.NodeValue;
CheckEquals(VAL_CODE,excpt_code,base_xmlrpc_formatter.sFAULT_STRING);
tmpNode := loc_FindNode(faultStruct,base_xmlrpc_formatter.sFAULT_STRING);
if ( tmpNode = nil ) then begin
Check(False,Format('Invalid XmlRPC fault response message, "%s" is not present.',[base_xmlrpc_formatter.sFAULT_STRING]));
end;
excpt_msg := tmpNode.FirstChild.NodeValue;
CheckEquals(VAL_MSG,excpt_msg,base_xmlrpc_formatter.sFAULT_STRING);
finally
FreeAndNil(strm);
end;
end;
procedure TTest_XmlRpcFormatterExceptionBlock.ExceptBlock_client();
const
VAL_CODE = '1210'; VAL_MSG = 'This is a sample exception message.';
VAL_STREAM =
'<?xml version="1.0"?> ' +
' <methodResponse> ' +
' <fault> ' +
' <value> ' +
' <struct> ' +
' <member> ' +
' <name>faultCode</name> ' +
' <value> ' +
' <int>' + VAL_CODE + '</int> ' +
' </value> ' +
' </member> ' +
' <member> ' +
' <name>faultString</name> ' +
' <value> ' +
' <string>' + VAL_MSG + '</string> ' +
' </value> ' +
' </member> ' +
' </struct> ' +
' </value> ' +
' </fault> ' +
' </methodResponse>';
var
f : IFormatterClient;
strm : TStringStream;
excpt_code, excpt_msg : string;
begin
excpt_code := '';
excpt_msg := '';
f := CreateFormatterClient();
strm := TStringStream.Create(VAL_STREAM);
try
strm.Position := 0;
f.LoadFromStream(strm);
try
f.BeginCallRead(nil);
Check(False,'BeginCallRead() should raise an exception.');
except
on e : EXmlRpcException do begin
excpt_code := e.FaultCode;
excpt_msg := e.FaultString;
end;
end;
CheckEquals(VAL_CODE,excpt_code,'faultCode');
CheckEquals(VAL_MSG,excpt_msg,'faultString');
finally
FreeAndNil(strm);
end;
end;
initialization
RegisterStdTypes();
GetTypeRegistry().Register(sXSD_NS,TypeInfo(TTestEnum),'TTestEnum').RegisterExternalPropertyName('teOne', '1');
@ -3177,6 +3751,22 @@ initialization
RegisterExternalPropertyName(sARRAY_STYLE,sEmbedded);
end;
GetTypeRegistry().Register(sWST_BASE_NS,TypeInfo(TTestSmallRecord),'TTestSmallRecord').RegisterExternalPropertyName('__FIELDS__','fieldSmallint;fieldWord;fieldString');
{$IFNDEF WST_RECORD_RTTI}
GetTypeRegistry().ItemByTypeInfo[TypeInfo(TTestSmallRecord)].RegisterObject(FIELDS_STRING,TRecordRttiDataObject.Create(MakeRecordTypeInfo(TypeInfo(TTestSmallRecord)),GetTypeRegistry().ItemByTypeInfo[TypeInfo(TTestSmallRecord)].GetExternalPropertyName('__FIELDS__')));
{$ENDIF WST_RECORD_RTTI}
{$IFDEF WST_RECORD_RTTI}
GetTypeRegistry().ItemByTypeInfo[TypeInfo(TTestSmallRecord)].RegisterObject(FIELDS_STRING,TRecordRttiDataObject.Create(MakeRecordTypeInfo(__TTestSmallRecord_TYPEINFO_FUNC__()),GetTypeRegistry().ItemByTypeInfo[TypeInfo(TTestSmallRecord)].GetExternalPropertyName('__FIELDS__')));
{$ENDIF WST_RECORD_RTTI}
GetTypeRegistry().Register(sWST_BASE_NS,TypeInfo(TTestRecord),'TTestRecord').RegisterExternalPropertyName('__FIELDS__','fieldByte;fieldShortInt;fieldSmallint;fieldWord;fieldInteger;fieldLongWord;fieldInt64;fieldQWord;fieldComp;fieldSingle;fieldDouble;fieldExtended;fieldCurrency;fieldBoolean;fieldString;fieldRecord');
{$IFNDEF WST_RECORD_RTTI}
GetTypeRegistry().ItemByTypeInfo[TypeInfo(TTestRecord)].RegisterObject(FIELDS_STRING,TRecordRttiDataObject.Create(MakeRecordTypeInfo(TypeInfo(TTestRecord)),GetTypeRegistry().ItemByTypeInfo[TypeInfo(TTestRecord)].GetExternalPropertyName('__FIELDS__')));
{$ENDIF WST_RECORD_RTTI}
{$IFDEF WST_RECORD_RTTI}
GetTypeRegistry().ItemByTypeInfo[TypeInfo(TTestRecord)].RegisterObject(FIELDS_STRING,TRecordRttiDataObject.Create(MakeRecordTypeInfo(__TTestRecord_TYPEINFO_FUNC__()),GetTypeRegistry().ItemByTypeInfo[TypeInfo(TTestRecord)].GetExternalPropertyName('__FIELDS__')));
{$ENDIF WST_RECORD_RTTI}
{$IFDEF FPC}
RegisterTest(TTestArray);
RegisterTest(TTestSOAPFormatter);
@ -3190,6 +3780,8 @@ initialization
RegisterTest(TTestXmlRpcFormatterAttributes);
RegisterTest(TTestXmlRpcFormatter);
RegisterTest(TTest_SoapFormatterExceptionBlock);
RegisterTest(TTest_XmlRpcFormatterExceptionBlock);
{$ELSE}
RegisterTest(TTestArray.Suite);
RegisterTest(TTestSOAPFormatter.Suite);
@ -3203,5 +3795,9 @@ initialization
RegisterTest(TTestXmlRpcFormatterAttributes.Suite);
RegisterTest(TTestXmlRpcFormatter.Suite);
RegisterTest(TTest_SoapFormatterExceptionBlock.Suite);
RegisterTest(TTest_XmlRpcFormatterExceptionBlock.Suite);
{$ENDIF}
end.

View File

@ -27,9 +27,6 @@ uses
pascal_parser_intf,
metadata_wsdl;
{$INCLUDE wst.inc}
{$INCLUDE wst_delphi.inc}
type
{ TTestMetadata }

View File

@ -7,7 +7,7 @@
<MainUnit Value="0"/>
<IconPath Value="./"/>
<TargetFileExt Value=".exe"/>
<ActiveEditorIndexAtStart Value="4"/>
<ActiveEditorIndexAtStart Value="2"/>
</General>
<PublishOptions>
<Version Value="2"/>
@ -27,27 +27,25 @@
<PackageName Value="FPCUnitTestRunner"/>
</Item1>
</RequiredPackages>
<Units Count="72">
<Units Count="74">
<Unit0>
<Filename Value="wst_test_suite.lpr"/>
<IsPartOfProject Value="True"/>
<UnitName Value="wst_test_suite"/>
<CursorPos X="9" Y="5"/>
<TopLine Value="1"/>
<EditorIndex Value="5"/>
<CursorPos X="48" Y="5"/>
<TopLine Value="4"/>
<UsageCount Value="200"/>
<Loaded Value="True"/>
</Unit0>
<Unit1>
<Filename Value="testformatter_unit.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="testformatter_unit"/>
<CursorPos X="17" Y="1733"/>
<TopLine Value="1726"/>
<EditorIndex Value="4"/>
<CursorPos X="3" Y="901"/>
<TopLine Value="890"/>
<EditorIndex Value="11"/>
<UsageCount Value="200"/>
<Bookmarks Count="1">
<Item0 X="17" Y="984" ID="3"/>
<Item0 X="17" Y="1046" ID="3"/>
</Bookmarks>
<Loaded Value="True"/>
</Unit1>
@ -55,25 +53,29 @@
<Filename Value="..\..\server_service_soap.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="server_service_soap"/>
<CursorPos X="38" Y="29"/>
<TopLine Value="18"/>
<CursorPos X="8" Y="182"/>
<TopLine Value="161"/>
<EditorIndex Value="7"/>
<UsageCount Value="200"/>
<Loaded Value="True"/>
</Unit2>
<Unit3>
<Filename Value="..\..\soap_formatter.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="soap_formatter"/>
<CursorPos X="26" Y="13"/>
<TopLine Value="1"/>
<CursorPos X="31" Y="148"/>
<TopLine Value="148"/>
<EditorIndex Value="8"/>
<UsageCount Value="200"/>
<Loaded Value="True"/>
</Unit3>
<Unit4>
<Filename Value="..\..\base_binary_formatter.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="base_binary_formatter"/>
<CursorPos X="15" Y="1479"/>
<TopLine Value="1464"/>
<EditorIndex Value="12"/>
<CursorPos X="31" Y="19"/>
<TopLine Value="13"/>
<EditorIndex Value="14"/>
<UsageCount Value="200"/>
<Loaded Value="True"/>
</Unit4>
@ -81,13 +83,13 @@
<Filename Value="..\..\base_service_intf.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="base_service_intf"/>
<CursorPos X="46" Y="4524"/>
<TopLine Value="4490"/>
<CursorPos X="19" Y="10"/>
<TopLine Value="10"/>
<EditorIndex Value="0"/>
<UsageCount Value="200"/>
<Bookmarks Count="2">
<Item0 X="33" Y="1130" ID="0"/>
<Item1 X="5" Y="1184" ID="1"/>
<Item0 X="33" Y="1135" ID="0"/>
<Item1 X="5" Y="1189" ID="1"/>
</Bookmarks>
<Loaded Value="True"/>
</Unit5>
@ -95,9 +97,9 @@
<Filename Value="..\..\base_soap_formatter.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="base_soap_formatter"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<EditorIndex Value="1"/>
<CursorPos X="3" Y="1127"/>
<TopLine Value="1116"/>
<EditorIndex Value="4"/>
<UsageCount Value="200"/>
<Loaded Value="True"/>
</Unit6>
@ -105,17 +107,19 @@
<Filename Value="..\..\binary_formatter.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="binary_formatter"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<CursorPos X="12" Y="108"/>
<TopLine Value="103"/>
<EditorIndex Value="15"/>
<UsageCount Value="200"/>
<Loaded Value="True"/>
</Unit7>
<Unit8>
<Filename Value="..\..\binary_streamer.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="binary_streamer"/>
<CursorPos X="14" Y="14"/>
<CursorPos X="1" Y="14"/>
<TopLine Value="1"/>
<EditorIndex Value="17"/>
<EditorIndex Value="1"/>
<UsageCount Value="200"/>
<Bookmarks Count="1">
<Item0 X="38" Y="490" ID="2"/>
@ -126,34 +130,34 @@
<Filename Value="..\..\server_binary_formatter.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="server_binary_formatter"/>
<CursorPos X="26" Y="13"/>
<CursorPos X="22" Y="21"/>
<TopLine Value="1"/>
<EditorIndex Value="9"/>
<UsageCount Value="200"/>
<Loaded Value="True"/>
</Unit9>
<Unit10>
<Filename Value="..\..\metadata_repository.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="metadata_repository"/>
<CursorPos X="1" Y="334"/>
<TopLine Value="337"/>
<CursorPos X="51" Y="18"/>
<TopLine Value="1"/>
<UsageCount Value="200"/>
</Unit10>
<Unit11>
<Filename Value="testmetadata_unit.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="testmetadata_unit"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<EditorIndex Value="14"/>
<CursorPos X="1" Y="30"/>
<TopLine Value="7"/>
<UsageCount Value="202"/>
<Loaded Value="True"/>
</Unit11>
<Unit12>
<Filename Value="..\..\ws_helper\metadata_generator.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="metadata_generator"/>
<CursorPos X="1" Y="19"/>
<TopLine Value="67"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="40"/>
<UsageCount Value="202"/>
</Unit12>
<Unit13>
@ -161,20 +165,19 @@
<IsPartOfProject Value="True"/>
<UnitName Value="parserdefs"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<TopLine Value="16"/>
<UsageCount Value="202"/>
<Bookmarks Count="2">
<Item0 X="45" Y="1146" ID="0"/>
<Item1 X="18" Y="1133" ID="2"/>
<Bookmarks Count="1">
<Item0 X="18" Y="1133" ID="2"/>
</Bookmarks>
</Unit13>
<Unit14>
<Filename Value="..\..\metadata_wsdl.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="metadata_wsdl"/>
<CursorPos X="44" Y="21"/>
<TopLine Value="209"/>
<EditorIndex Value="13"/>
<CursorPos X="1" Y="22"/>
<TopLine Value="1"/>
<EditorIndex Value="16"/>
<UsageCount Value="206"/>
<Loaded Value="True"/>
</Unit14>
@ -183,61 +186,63 @@
<UnitName Value="DOM"/>
<CursorPos X="15" Y="429"/>
<TopLine Value="413"/>
<UsageCount Value="5"/>
<UsageCount Value="3"/>
</Unit15>
<Unit16>
<Filename Value="D:\lazarusClean\fpc\2.0.4\source\rtl\objpas\sysutils\sysutilh.inc"/>
<CursorPos X="13" Y="235"/>
<TopLine Value="215"/>
<UsageCount Value="9"/>
<UsageCount Value="7"/>
</Unit16>
<Unit17>
<Filename Value="..\..\server_service_intf.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="server_service_intf"/>
<CursorPos X="54" Y="19"/>
<CursorPos X="25" Y="14"/>
<TopLine Value="1"/>
<EditorIndex Value="3"/>
<EditorIndex Value="6"/>
<UsageCount Value="203"/>
<Loaded Value="True"/>
</Unit17>
<Unit18>
<Filename Value="..\..\service_intf.pas"/>
<UnitName Value="service_intf"/>
<CursorPos X="3" Y="38"/>
<TopLine Value="27"/>
<UsageCount Value="15"/>
<CursorPos X="15" Y="15"/>
<TopLine Value="1"/>
<EditorIndex Value="13"/>
<UsageCount Value="16"/>
<Loaded Value="True"/>
</Unit18>
<Unit19>
<Filename Value="D:\lazarusClean\fpc\2.0.4\source\rtl\objpas\classes\classesh.inc"/>
<CursorPos X="3" Y="316"/>
<TopLine Value="304"/>
<UsageCount Value="9"/>
<UsageCount Value="7"/>
</Unit19>
<Unit20>
<Filename Value="D:\lazarusClean\fpc\2.0.4\source\rtl\objpas\classes\lists.inc"/>
<CursorPos X="3" Y="407"/>
<TopLine Value="404"/>
<UsageCount Value="9"/>
<UsageCount Value="7"/>
</Unit20>
<Unit21>
<Filename Value="D:\lazarusClean\fpc\2.0.4\source\fcl\inc\contnrs.pp"/>
<UnitName Value="contnrs"/>
<CursorPos X="3" Y="474"/>
<TopLine Value="471"/>
<UsageCount Value="9"/>
<UsageCount Value="7"/>
</Unit21>
<Unit22>
<Filename Value="D:\lazarusClean\fpc\2.0.4\source\rtl\inc\objpash.inc"/>
<CursorPos X="27" Y="121"/>
<TopLine Value="104"/>
<UsageCount Value="9"/>
<UsageCount Value="7"/>
</Unit22>
<Unit23>
<Filename Value="D:\lazarusClean\fpc\2.0.4\source\rtl\inc\objpas.inc"/>
<CursorPos X="9" Y="166"/>
<TopLine Value="142"/>
<UsageCount Value="9"/>
<UsageCount Value="7"/>
</Unit23>
<Unit24>
<Filename Value="D:\Lazarus\components\fpcunit\guitestrunner.pas"/>
@ -246,302 +251,280 @@
<UnitName Value="GuiTestRunner"/>
<CursorPos X="34" Y="32"/>
<TopLine Value="25"/>
<UsageCount Value="9"/>
<UsageCount Value="7"/>
</Unit24>
<Unit25>
<Filename Value="..\..\..\..\..\lazarusClean\fpc\2.0.4\source\fcl\fpcunit\fpcunit.pp"/>
<UnitName Value="fpcunit"/>
<CursorPos X="21" Y="94"/>
<TopLine Value="83"/>
<UsageCount Value="7"/>
<UsageCount Value="5"/>
</Unit25>
<Unit26>
<Filename Value="..\..\..\..\..\lazarusClean\fpc\2.0.4\source\fcl\fpcunit\DUnitCompatibleInterface.inc"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="4"/>
<UsageCount Value="1"/>
</Unit26>
<Unit27>
<Filename Value="..\..\imp_utils.pas"/>
<UnitName Value="imp_utils"/>
<CursorPos X="15" Y="36"/>
<TopLine Value="22"/>
<UsageCount Value="1"/>
</Unit27>
<Unit28>
<Filename Value="..\..\..\..\..\lazarusClean\fpc\2.0.4\source\fcl\xml\dom.pp"/>
<UnitName Value="DOM"/>
<CursorPos X="3" Y="51"/>
<TopLine Value="41"/>
<UsageCount Value="1"/>
</Unit28>
<Unit29>
<CursorPos X="15" Y="50"/>
<TopLine Value="8"/>
<EditorIndex Value="3"/>
<UsageCount Value="10"/>
<Loaded Value="True"/>
</Unit26>
<Unit27>
<Filename Value="..\..\..\..\..\lazarusClean\fpc\2.0.4\source\fcl\xml\xmlread.pp"/>
<UnitName Value="XMLRead"/>
<CursorPos X="43" Y="13"/>
<TopLine Value="1"/>
<UsageCount Value="5"/>
</Unit29>
<Unit30>
<UsageCount Value="3"/>
</Unit27>
<Unit28>
<Filename Value="test_parserdef.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="test_parserdef"/>
<CursorPos X="93" Y="76"/>
<TopLine Value="11"/>
<UsageCount Value="176"/>
</Unit30>
<Unit31>
<UsageCount Value="198"/>
</Unit28>
<Unit29>
<Filename Value="..\..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\inc\objpash.inc"/>
<CursorPos X="8" Y="190"/>
<TopLine Value="133"/>
<UsageCount Value="6"/>
</Unit31>
<Unit32>
<UsageCount Value="4"/>
</Unit29>
<Unit30>
<Filename Value="..\..\wst.inc"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<UsageCount Value="12"/>
</Unit32>
<Unit33>
<Filename Value="..\..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\objpas\objpas.pp"/>
<UnitName Value="objpas"/>
<CursorPos X="47" Y="64"/>
<TopLine Value="38"/>
<UsageCount Value="1"/>
</Unit33>
<Unit34>
<UsageCount Value="10"/>
</Unit30>
<Unit31>
<Filename Value="..\..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\inc\heaph.inc"/>
<CursorPos X="43" Y="100"/>
<TopLine Value="83"/>
<UsageCount Value="4"/>
</Unit34>
<Unit35>
<UsageCount Value="2"/>
</Unit31>
<Unit32>
<Filename Value="..\test_fpc\interface_problem\interface_problem.pas"/>
<UnitName Value="interface_problem"/>
<CursorPos X="1" Y="10"/>
<TopLine Value="1"/>
<UsageCount Value="12"/>
</Unit35>
<Unit36>
<UsageCount Value="10"/>
</Unit32>
<Unit33>
<Filename Value="..\..\base_xmlrpc_formatter.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="base_xmlrpc_formatter"/>
<CursorPos X="8" Y="1352"/>
<TopLine Value="1335"/>
<EditorIndex Value="2"/>
<UsageCount Value="114"/>
<CursorPos X="32" Y="64"/>
<TopLine Value="49"/>
<EditorIndex Value="5"/>
<UsageCount Value="136"/>
<Loaded Value="True"/>
</Unit36>
<Unit37>
</Unit33>
<Unit34>
<Filename Value="..\..\ws_helper\pscanner.pp"/>
<UnitName Value="PScanner"/>
<CursorPos X="19" Y="505"/>
<TopLine Value="491"/>
<UsageCount Value="19"/>
</Unit37>
<Unit38>
<UsageCount Value="17"/>
</Unit34>
<Unit35>
<Filename Value="..\..\ws_helper\pascal_parser_intf.pas"/>
<UnitName Value="pascal_parser_intf"/>
<CursorPos X="62" Y="296"/>
<TopLine Value="296"/>
<UsageCount Value="29"/>
</Unit38>
<Unit39>
<UsageCount Value="27"/>
</Unit35>
<Unit36>
<Filename Value="..\..\ws_helper\pastree.pp"/>
<UnitName Value="PasTree"/>
<CursorPos X="18" Y="254"/>
<TopLine Value="243"/>
<UsageCount Value="19"/>
</Unit39>
<Unit40>
<UsageCount Value="17"/>
</Unit36>
<Unit37>
<Filename Value="..\..\..\..\..\..\lazarus_23_215\fpc\2.1.5\source\packages\fcl-xml\src\dom.pp"/>
<UnitName Value="DOM"/>
<CursorPos X="38" Y="225"/>
<TopLine Value="203"/>
<UsageCount Value="18"/>
</Unit40>
<Unit41>
<UsageCount Value="16"/>
</Unit37>
<Unit38>
<Filename Value="..\..\wst_rtti_filter\cursor_intf.pas"/>
<UnitName Value="cursor_intf"/>
<CursorPos X="3" Y="75"/>
<TopLine Value="70"/>
<UsageCount Value="10"/>
</Unit41>
<Unit42>
<UsageCount Value="8"/>
</Unit38>
<Unit39>
<Filename Value="..\..\wst_rtti_filter\dom_cursors.pas"/>
<UnitName Value="dom_cursors"/>
<CursorPos X="3" Y="182"/>
<TopLine Value="180"/>
<UsageCount Value="10"/>
</Unit42>
<Unit43>
<UsageCount Value="8"/>
</Unit39>
<Unit40>
<Filename Value="..\..\..\..\..\..\lazarus_23_215\fpc\2.1.5\source\packages\fcl-fpcunit\src\fpcunit.pp"/>
<UnitName Value="fpcunit"/>
<CursorPos X="1" Y="446"/>
<TopLine Value="434"/>
<UsageCount Value="8"/>
</Unit43>
<Unit44>
<UsageCount Value="6"/>
</Unit40>
<Unit41>
<Filename Value="..\..\..\..\..\..\lazarus_23_215\fpc\2.1.5\source\rtl\i386\i386.inc"/>
<CursorPos X="1" Y="1284"/>
<TopLine Value="1268"/>
<UsageCount Value="7"/>
</Unit44>
<Unit45>
<UsageCount Value="5"/>
</Unit41>
<Unit42>
<Filename Value="..\..\..\..\..\..\lazarus_23_215\fpc\2.1.5\source\rtl\objpas\classes\streams.inc"/>
<CursorPos X="1" Y="107"/>
<TopLine Value="95"/>
<UsageCount Value="7"/>
</Unit45>
<Unit46>
<UsageCount Value="5"/>
</Unit42>
<Unit43>
<Filename Value="..\..\semaphore.pas"/>
<UnitName Value="semaphore"/>
<CursorPos X="3" Y="30"/>
<TopLine Value="23"/>
<UsageCount Value="9"/>
</Unit46>
<Unit47>
<UsageCount Value="7"/>
</Unit43>
<Unit44>
<Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\packages\fcl-xml\src\dom.pp"/>
<UnitName Value="DOM"/>
<CursorPos X="14" Y="351"/>
<TopLine Value="336"/>
<UsageCount Value="10"/>
</Unit47>
<Unit48>
<UsageCount Value="8"/>
</Unit44>
<Unit45>
<Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\win32\system.pp"/>
<UnitName Value="System"/>
<CursorPos X="22" Y="33"/>
<TopLine Value="18"/>
<UsageCount Value="8"/>
</Unit48>
<Unit49>
<UsageCount Value="6"/>
</Unit45>
<Unit46>
<Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\packages\fcl-base\src\inc\contnrs.pp"/>
<UnitName Value="contnrs"/>
<CursorPos X="3" Y="964"/>
<TopLine Value="962"/>
<UsageCount Value="7"/>
</Unit49>
<Unit50>
<UsageCount Value="5"/>
</Unit46>
<Unit47>
<Filename Value="..\..\wst_delphi.inc"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<UsageCount Value="12"/>
</Unit50>
<Unit51>
<UsageCount Value="10"/>
</Unit47>
<Unit48>
<Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\objpas\strutils.pp"/>
<UnitName Value="strutils"/>
<CursorPos X="10" Y="29"/>
<TopLine Value="14"/>
<UsageCount Value="7"/>
</Unit51>
<Unit52>
<UsageCount Value="5"/>
</Unit48>
<Unit49>
<Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\inc\objpash.inc"/>
<CursorPos X="20" Y="168"/>
<TopLine Value="166"/>
<UsageCount Value="7"/>
</Unit52>
<Unit53>
<UsageCount Value="5"/>
</Unit49>
<Unit50>
<Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\inc\objpas.inc"/>
<CursorPos X="11" Y="442"/>
<TopLine Value="556"/>
<UsageCount Value="7"/>
</Unit53>
<Unit54>
<UsageCount Value="5"/>
</Unit50>
<Unit51>
<Filename Value="..\..\wst_fpc_xml.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="wst_fpc_xml"/>
<CursorPos X="8" Y="38"/>
<TopLine Value="11"/>
<UsageCount Value="60"/>
</Unit54>
<Unit55>
<CursorPos X="3" Y="53"/>
<TopLine Value="51"/>
<UsageCount Value="82"/>
</Unit51>
<Unit52>
<Filename Value="..\..\wst_global.inc"/>
<CursorPos X="1" Y="1"/>
<CursorPos X="20" Y="11"/>
<TopLine Value="1"/>
<UsageCount Value="9"/>
</Unit55>
<Unit56>
<UsageCount Value="10"/>
</Unit52>
<Unit53>
<Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\packages\fcl-base\src\inc\custapp.pp"/>
<UnitName Value="CustApp"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<UsageCount Value="7"/>
</Unit56>
<Unit57>
<UsageCount Value="5"/>
</Unit53>
<Unit54>
<Filename Value="test_utilities.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="test_utilities"/>
<CursorPos X="29" Y="43"/>
<CursorPos X="71" Y="3"/>
<TopLine Value="3"/>
<EditorIndex Value="16"/>
<UsageCount Value="51"/>
<EditorIndex Value="17"/>
<UsageCount Value="73"/>
<Loaded Value="True"/>
</Unit57>
<Unit58>
</Unit54>
<Unit55>
<Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\packages\fcl-fpcunit\src\fpcunit.pp"/>
<UnitName Value="fpcunit"/>
<CursorPos X="21" Y="99"/>
<TopLine Value="84"/>
<UsageCount Value="15"/>
</Unit58>
<Unit59>
<CursorPos X="66" Y="231"/>
<TopLine Value="231"/>
<UsageCount Value="13"/>
</Unit55>
<Unit56>
<Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\packages\fcl-fpcunit\src\testregistry.pp"/>
<UnitName Value="testregistry"/>
<CursorPos X="39" Y="27"/>
<CursorPos X="11" Y="32"/>
<TopLine Value="17"/>
<EditorIndex Value="15"/>
<UsageCount Value="17"/>
<Loaded Value="True"/>
</Unit59>
<Unit60>
<UsageCount Value="15"/>
</Unit56>
<Unit57>
<Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\packages\fcl-fpcunit\src\testdecorator.pp"/>
<UnitName Value="testdecorator"/>
<CursorPos X="3" Y="30"/>
<TopLine Value="1"/>
<UsageCount Value="9"/>
</Unit60>
<Unit61>
<UsageCount Value="7"/>
</Unit57>
<Unit58>
<Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\packages\fcl-fpcunit\src\DUnitCompatibleInterface.inc"/>
<CursorPos X="11" Y="49"/>
<TopLine Value="47"/>
<UsageCount Value="14"/>
</Unit61>
<Unit62>
<CursorPos X="21" Y="9"/>
<TopLine Value="1"/>
<UsageCount Value="12"/>
</Unit58>
<Unit59>
<Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\objpas\typinfo.pp"/>
<UnitName Value="typinfo"/>
<CursorPos X="79" Y="218"/>
<TopLine Value="203"/>
<UsageCount Value="12"/>
</Unit62>
<Unit63>
<UsageCount Value="10"/>
</Unit59>
<Unit60>
<Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\objpas\sysutils\sysstrh.inc"/>
<CursorPos X="89" Y="122"/>
<TopLine Value="106"/>
<UsageCount Value="11"/>
</Unit63>
<Unit64>
<UsageCount Value="9"/>
</Unit60>
<Unit61>
<Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\objpas\sysutils\sysinth.inc"/>
<CursorPos X="24" Y="63"/>
<TopLine Value="46"/>
<UsageCount Value="11"/>
</Unit64>
<Unit65>
<UsageCount Value="9"/>
</Unit61>
<Unit62>
<Filename Value="..\..\ws_helper\wsdl2pas_imp.pas"/>
<UnitName Value="wsdl2pas_imp"/>
<CursorPos X="16" Y="2045"/>
<TopLine Value="2031"/>
<EditorIndex Value="6"/>
<UsageCount Value="12"/>
<Loaded Value="True"/>
</Unit65>
<Unit66>
<CursorPos X="1" Y="1"/>
<TopLine Value="31"/>
<UsageCount Value="10"/>
</Unit62>
<Unit63>
<Filename Value="..\..\..\..\..\..\lazarus2204\fpc\2.0.4\source\fcl\xml\dom.pp"/>
<UnitName Value="DOM"/>
<CursorPos X="3" Y="196"/>
<TopLine Value="191"/>
<UsageCount Value="10"/>
</Unit66>
<Unit67>
<UsageCount Value="8"/>
</Unit63>
<Unit64>
<Filename Value="..\..\type_lib_edtr\umoduleedit.pas"/>
<ComponentName Value="fModuleEdit"/>
<HasResources Value="True"/>
@ -549,11 +532,9 @@
<UnitName Value="umoduleedit"/>
<CursorPos X="47" Y="21"/>
<TopLine Value="18"/>
<EditorIndex Value="7"/>
<UsageCount Value="12"/>
<Loaded Value="True"/>
</Unit67>
<Unit68>
<UsageCount Value="10"/>
</Unit64>
<Unit65>
<Filename Value="..\..\type_lib_edtr\ubindingedit.pas"/>
<ComponentName Value="fBindingEdit"/>
<HasResources Value="True"/>
@ -561,11 +542,9 @@
<UnitName Value="ubindingedit"/>
<CursorPos X="41" Y="21"/>
<TopLine Value="18"/>
<EditorIndex Value="8"/>
<UsageCount Value="12"/>
<Loaded Value="True"/>
</Unit68>
<Unit69>
<UsageCount Value="10"/>
</Unit65>
<Unit66>
<Filename Value="..\..\type_lib_edtr\ufarrayedit.pas"/>
<ComponentName Value="fArrayEdit"/>
<HasResources Value="True"/>
@ -573,11 +552,9 @@
<UnitName Value="ufarrayedit"/>
<CursorPos X="41" Y="9"/>
<TopLine Value="5"/>
<EditorIndex Value="9"/>
<UsageCount Value="12"/>
<Loaded Value="True"/>
</Unit69>
<Unit70>
<UsageCount Value="10"/>
</Unit66>
<Unit67>
<Filename Value="..\..\type_lib_edtr\uftypealiasedit.pas"/>
<ComponentName Value="fTypeAliasEdit"/>
<HasResources Value="True"/>
@ -585,11 +562,9 @@
<UnitName Value="uftypealiasedit"/>
<CursorPos X="22" Y="9"/>
<TopLine Value="7"/>
<EditorIndex Value="10"/>
<UsageCount Value="12"/>
<Loaded Value="True"/>
</Unit70>
<Unit71>
<UsageCount Value="10"/>
</Unit67>
<Unit68>
<Filename Value="..\..\type_lib_edtr\ufrmsaveoption.pas"/>
<ComponentName Value="frmSaveOptions"/>
<HasResources Value="True"/>
@ -597,12 +572,76 @@
<UnitName Value="ufrmsaveoption"/>
<CursorPos X="22" Y="9"/>
<TopLine Value="6"/>
<EditorIndex Value="11"/>
<UsageCount Value="10"/>
</Unit68>
<Unit69>
<Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\objpas\sysutils\sysutilh.inc"/>
<CursorPos X="4" Y="64"/>
<TopLine Value="64"/>
<UsageCount Value="8"/>
</Unit69>
<Unit70>
<Filename Value="..\..\server_service_xmlrpc.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="server_service_xmlrpc"/>
<CursorPos X="14" Y="144"/>
<TopLine Value="136"/>
<EditorIndex Value="10"/>
<UsageCount Value="27"/>
<Loaded Value="True"/>
</Unit70>
<Unit71>
<Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\packages\fcl-xml\src\xmlread.pp"/>
<UnitName Value="XMLRead"/>
<CursorPos X="6" Y="37"/>
<TopLine Value="31"/>
<UsageCount Value="10"/>
</Unit71>
<Unit72>
<Filename Value="..\..\xmlrpc_formatter.pas"/>
<UnitName Value="xmlrpc_formatter"/>
<CursorPos X="31" Y="131"/>
<TopLine Value="116"/>
<EditorIndex Value="12"/>
<UsageCount Value="12"/>
<Loaded Value="True"/>
</Unit71>
</Unit72>
<Unit73>
<Filename Value="..\..\record_rtti.pas"/>
<UnitName Value="record_rtti"/>
<CursorPos X="3" Y="248"/>
<TopLine Value="13"/>
<EditorIndex Value="2"/>
<UsageCount Value="10"/>
<Loaded Value="True"/>
</Unit73>
</Units>
<JumpHistory Count="0" HistoryIndex="-1"/>
<JumpHistory Count="6" HistoryIndex="5">
<Position1>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="1211" Column="10" TopLine="1211"/>
</Position1>
<Position2>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="1" Column="1" TopLine="1"/>
</Position2>
<Position3>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="4614" Column="1" TopLine="4572"/>
</Position3>
<Position4>
<Filename Value="..\..\server_binary_formatter.pas"/>
<Caret Line="121" Column="11" TopLine="111"/>
</Position4>
<Position5>
<Filename Value="..\..\server_binary_formatter.pas"/>
<Caret Line="21" Column="22" TopLine="1"/>
</Position5>
<Position6>
<Filename Value="..\..\base_binary_formatter.pas"/>
<Caret Line="19" Column="31" TopLine="13"/>
</Position6>
</JumpHistory>
</ProjectOptions>
<CompilerOptions>
<Version Value="5"/>
@ -622,6 +661,10 @@
</SyntaxOptions>
</Parsing>
<CodeGeneration>
<Checks>
<RangeChecks Value="True"/>
<OverflowChecks Value="True"/>
</Checks>
<Generate Value="Faster"/>
</CodeGeneration>
<Linking>

View File

@ -15,7 +15,8 @@ uses
base_service_intf, base_soap_formatter, binary_formatter, binary_streamer,
server_binary_formatter, metadata_repository,
metadata_generator, parserdefs, server_service_intf, metadata_wsdl,
test_parserdef, base_xmlrpc_formatter, wst_fpc_xml, test_utilities;
test_parserdef, base_xmlrpc_formatter, wst_fpc_xml, test_utilities,
server_service_xmlrpc;
Const
ShortOpts = 'alh';