xsd parser tests suite :

- array test
 - record test

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@266 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
inoussa
2007-09-10 22:19:20 +00:00
parent f6bd5278ab
commit e7786c75b4
14 changed files with 836 additions and 186 deletions

View File

@ -7,7 +7,8 @@ uses
TextTestRunner, TextTestRunner,
test_utilities in '..\test_utilities.pas', test_utilities in '..\test_utilities.pas',
testformatter_unit in '..\testformatter_unit.pas', testformatter_unit in '..\testformatter_unit.pas',
test_parsers in '..\test_parsers.pas'; test_parsers in '..\test_parsers.pas',
testmetadata_unit;
{$R *.res} {$R *.res}

View File

@ -0,0 +1,41 @@
<?xml version="1.0"?>
<definitions name="wst_test"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:tns="library1"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
targetNamespace="urn:wst-test">
<types>
<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:wst-test">
<xsd:complexType name="TArrayIntFieldType">
<xsd:sequence>
<xsd:element name="intField" type="xsd:int" minOccurs="0" maxOccurs="unbounded" />
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="TArrayItemType">
<xsd:sequence>
<xsd:element name="Item" minOccurs="0" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="intField" type="xsd:int" />
<xsd:element name="strField" type="xsd:string" minOccurs="1" maxOccurs="1"/>
<xsd:element name="floatField" type="xsd:float" minOccurs="0" maxOccurs="1"/>
<xsd:element name="byteField" type="xsd:byte" maxOccurs="1"/>
<xsd:element name="charField" type="xsd:char" minOccurs="1"/>
<xsd:element name="longField" type="xsd:long" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="strAtt" type="xsd:string"/>
<xsd:attribute name="intAtt" type="xsd:int"/>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
</types>
</definitions>

View File

@ -0,0 +1,31 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:n="urn:wst-test"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="urn:wst-test">
<xsd:complexType name="TArrayIntFieldType">
<xsd:sequence>
<xsd:element name="intField" type="xsd:int" minOccurs="0" maxOccurs="unbounded" />
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="TArrayItemType">
<xsd:sequence>
<xsd:element name="Item" minOccurs="0" maxOccurs="unbounded" >
<xsd:complexType>
<xsd:sequence>
<xsd:element name="intField" type="xsd:int" />
<xsd:element name="strField" type="xsd:string" minOccurs="1" maxOccurs="1"/>
<xsd:element name="floatField" type="xsd:float" minOccurs="0" maxOccurs="1"/>
<xsd:element name="byteField" type="xsd:byte" maxOccurs="1"/>
<xsd:element name="charField" type="xsd:char" minOccurs="1"/>
<xsd:element name="longField" type="xsd:long" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="strAtt" type="xsd:string"/>
<xsd:attribute name="intAtt" type="xsd:int"/>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>

View File

@ -0,0 +1,46 @@
<?xml version="1.0"?>
<definitions name="wst_test"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:tns="library1"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
targetNamespace="urn:wst-test">
<types>
<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:wst-test">
<xsd:element name="TArrayIntFieldType">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="intField" type="xsd:int" minOccurs="0" maxOccurs="unbounded" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="TArrayItemType">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Item" minOccurs="0" maxOccurs="unbounded" >
<xsd:complexType>
<xsd:sequence>
<xsd:element name="intField" type="xsd:int" />
<xsd:element name="strField" type="xsd:string" minOccurs="1" maxOccurs="1"/>
<xsd:element name="floatField" type="xsd:float" minOccurs="0" maxOccurs="1"/>
<xsd:element name="byteField" type="xsd:byte" maxOccurs="1"/>
<xsd:element name="charField" type="xsd:char" minOccurs="1"/>
<xsd:element name="longField" type="xsd:long" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="strAtt" type="xsd:string"/>
<xsd:attribute name="intAtt" type="xsd:int"/>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
</types>
</definitions>

View File

@ -0,0 +1,35 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:n="urn:wst-test"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="urn:wst-test">
<xsd:element name="TArrayIntFieldType">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="intField" type="xsd:int" minOccurs="0" maxOccurs="unbounded" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="TArrayItemType">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Item" minOccurs="0" maxOccurs="unbounded" >
<xsd:complexType>
<xsd:sequence>
<xsd:element name="intField" type="xsd:int" />
<xsd:element name="strField" type="xsd:string" minOccurs="1" maxOccurs="1"/>
<xsd:element name="floatField" type="xsd:float" minOccurs="0" maxOccurs="1"/>
<xsd:element name="byteField" type="xsd:byte" maxOccurs="1"/>
<xsd:element name="charField" type="xsd:char" minOccurs="1"/>
<xsd:element name="longField" type="xsd:long" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="strAtt" type="xsd:string"/>
<xsd:attribute name="intAtt" type="xsd:int"/>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>

View File

@ -40,6 +40,19 @@
<xsd:attribute name="intAtt" type="xsd:int"/> <xsd:attribute name="intAtt" type="xsd:int"/>
</xsd:complexType> </xsd:complexType>
<xsd:complexType name="TClassSampleDerivedType">
<xsd:complexContent>
<xsd:extension base="n:TClassSampleType">
<xsd:sequence>
<xsd:element name="intFieldEx" type="xsd:int" />
<xsd:element name="strFieldEx" type="xsd:string" minOccurs="1" maxOccurs="1"/>
</xsd:sequence>
<xsd:attribute name="strAttEx" type="xsd:string"/>
<xsd:attribute name="intAttEx" type="xsd:int"/>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
</xsd:schema> </xsd:schema>
</types> </types>

View File

@ -31,4 +31,17 @@
<xsd:attribute name="intAtt" type="xsd:int"/> <xsd:attribute name="intAtt" type="xsd:int"/>
</xsd:complexType> </xsd:complexType>
<xsd:complexType name="TClassSampleDerivedType">
<xsd:complexContent>
<xsd:extension base="n:TClassSampleType">
<xsd:sequence>
<xsd:element name="intFieldEx" type="xsd:int" />
<xsd:element name="strFieldEx" type="xsd:string" minOccurs="1" maxOccurs="1"/>
</xsd:sequence>
<xsd:attribute name="strAttEx" type="xsd:string"/>
<xsd:attribute name="intAttEx" type="xsd:int"/>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
</xsd:schema> </xsd:schema>

View File

@ -0,0 +1,50 @@
<?xml version="1.0"?>
<definitions name="wst_test"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:tns="library1"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
targetNamespace="urn:wst-test">
<types>
<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:wst-test">
<xsd:complexType name="TRecordSampleType">
<xsd:annotation>
<xsd:appinfo record="true"/>
</xsd:annotation>
<xsd:sequence>
<xsd:element name="intField" type="xsd:int" />
<xsd:element name="strField" type="xsd:string" minOccurs="1" maxOccurs="1"/>
<xsd:element name="floatField" type="xsd:float" minOccurs="0" maxOccurs="1"/>
<xsd:element name="byteField" type="xsd:byte" maxOccurs="1"/>
<xsd:element name="charField" type="xsd:char" minOccurs="1"/>
<xsd:element name="longField" type="xsd:long" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="strAtt" type="xsd:string"/>
<xsd:attribute name="intAtt" type="xsd:int"/>
</xsd:complexType>
<xsd:element name="TRecordSample" type="n:TRecordSampleType"/>
<xsd:complexType name="TRecordSampleTypeAll">
<xsd:annotation>
<xsd:appinfo record="true"/>
</xsd:annotation>
<xsd:all>
<xsd:element name="intField" type="xsd:int" />
<xsd:element name="strField" type="xsd:string" minOccurs="1" maxOccurs="1"/>
<xsd:element name="floatField" type="xsd:float" minOccurs="0" maxOccurs="1"/>
<xsd:element name="byteField" type="xsd:byte" maxOccurs="1"/>
<xsd:element name="charField" type="xsd:char" minOccurs="1"/>
<xsd:element name="longField" type="xsd:long" minOccurs="0"/>
</xsd:all>
<xsd:attribute name="strAtt" type="xsd:string"/>
<xsd:attribute name="intAtt" type="xsd:int"/>
</xsd:complexType>
</xsd:schema>
</types>
</definitions>

View File

@ -0,0 +1,36 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:n="urn:wst-test"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="urn:wst-test">
<xsd:complexType name="TRecordSampleType">
<xsd:annotation><xsd:appinfo record="true"/></xsd:annotation>
<xsd:sequence>
<xsd:element name="intField" type="xsd:int" />
<xsd:element name="strField" type="xsd:string" minOccurs="1" maxOccurs="1"/>
<xsd:element name="floatField" type="xsd:float" minOccurs="0" maxOccurs="1"/>
<xsd:element name="byteField" type="xsd:byte" maxOccurs="1"/>
<xsd:element name="charField" type="xsd:char" minOccurs="1"/>
<xsd:element name="longField" type="xsd:long" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="strAtt" type="xsd:string"/>
<xsd:attribute name="intAtt" type="xsd:int"/>
</xsd:complexType>
<xsd:element name="TRecordSample" type="n:TRecordSampleType"/>
<xsd:complexType name="TRecordSampleTypeAll">
<xsd:annotation><xsd:appinfo record="true"/></xsd:annotation>
<xsd:all>
<xsd:element name="intField" type="xsd:int" />
<xsd:element name="strField" type="xsd:string" minOccurs="1" maxOccurs="1"/>
<xsd:element name="floatField" type="xsd:float" minOccurs="0" maxOccurs="1"/>
<xsd:element name="byteField" type="xsd:byte" maxOccurs="1"/>
<xsd:element name="charField" type="xsd:char" minOccurs="1"/>
<xsd:element name="longField" type="xsd:long" minOccurs="0"/>
</xsd:all>
<xsd:attribute name="strAtt" type="xsd:string"/>
<xsd:attribute name="intAtt" type="xsd:int"/>
</xsd:complexType>
</xsd:schema>

View File

@ -35,6 +35,11 @@ type
function LoadComplexType_Class_Schema() : TwstPasTreeContainer;virtual;abstract; function LoadComplexType_Class_Schema() : TwstPasTreeContainer;virtual;abstract;
function LoadComplexType_Class_Embedded_Schema() : TwstPasTreeContainer;virtual;abstract; function LoadComplexType_Class_Embedded_Schema() : TwstPasTreeContainer;virtual;abstract;
function LoadComplexType_Record_Schema() : TwstPasTreeContainer;virtual;abstract;
function LoadComplexType_ArraySequence_Schema() : TwstPasTreeContainer;virtual;abstract;
function LoadComplexType_ArraySequence_Embedded_Schema() : TwstPasTreeContainer;virtual;abstract;
published published
procedure EmptySchema(); procedure EmptySchema();
@ -43,6 +48,11 @@ type
procedure ComplexType_Class(); procedure ComplexType_Class();
procedure ComplexType_Class_Embedded(); procedure ComplexType_Class_Embedded();
procedure ComplexType_Record();
procedure ComplexType_ArraySequence();
procedure ComplexType_ArraySequence_Embedded();
end; end;
{ TTest_XsdParser } { TTest_XsdParser }
@ -52,10 +62,17 @@ type
function ParseDoc(const ADoc : string) : TwstPasTreeContainer; function ParseDoc(const ADoc : string) : TwstPasTreeContainer;
protected protected
function LoadEmptySchema() : TwstPasTreeContainer;override; function LoadEmptySchema() : TwstPasTreeContainer;override;
function LoadSimpleType_Enum_Schema() : TwstPasTreeContainer;override; function LoadSimpleType_Enum_Schema() : TwstPasTreeContainer;override;
function LoadSimpleType_Enum_Embedded_Schema() : TwstPasTreeContainer;override; function LoadSimpleType_Enum_Embedded_Schema() : TwstPasTreeContainer;override;
function LoadComplexType_Class_Schema() : TwstPasTreeContainer;override; function LoadComplexType_Class_Schema() : TwstPasTreeContainer;override;
function LoadComplexType_Class_Embedded_Schema() : TwstPasTreeContainer;override; function LoadComplexType_Class_Embedded_Schema() : TwstPasTreeContainer;override;
function LoadComplexType_Record_Schema() : TwstPasTreeContainer;override;
function LoadComplexType_ArraySequence_Schema() : TwstPasTreeContainer;override;
function LoadComplexType_ArraySequence_Embedded_Schema() : TwstPasTreeContainer;override;
end; end;
{ TTest_WsdlParser } { TTest_WsdlParser }
@ -65,21 +82,40 @@ type
function ParseDoc(const ADoc : string) : TwstPasTreeContainer; function ParseDoc(const ADoc : string) : TwstPasTreeContainer;
protected protected
function LoadEmptySchema() : TwstPasTreeContainer;override; function LoadEmptySchema() : TwstPasTreeContainer;override;
function LoadSimpleType_Enum_Schema() : TwstPasTreeContainer;override; function LoadSimpleType_Enum_Schema() : TwstPasTreeContainer;override;
function LoadSimpleType_Enum_Embedded_Schema() : TwstPasTreeContainer;override; function LoadSimpleType_Enum_Embedded_Schema() : TwstPasTreeContainer;override;
function LoadComplexType_Class_Schema() : TwstPasTreeContainer;override; function LoadComplexType_Class_Schema() : TwstPasTreeContainer;override;
function LoadComplexType_Class_Embedded_Schema() : TwstPasTreeContainer;override; function LoadComplexType_Class_Embedded_Schema() : TwstPasTreeContainer;override;
function LoadComplexType_Record_Schema() : TwstPasTreeContainer;override;
function LoadComplexType_ArraySequence_Schema() : TwstPasTreeContainer;override;
function LoadComplexType_ArraySequence_Embedded_Schema() : TwstPasTreeContainer;override;
end; end;
implementation implementation
uses parserutils; uses parserutils;
const const
x_complexType_SampleArrayIntFieldType = 'TArrayIntFieldType';
x_complexType_SampleArrayItemType = 'TArrayItemType';
x_complexType_SampleDerivedType = 'TClassSampleDerivedType';
x_complexType_SampleClassType = 'TClassSampleType'; x_complexType_SampleClassType = 'TClassSampleType';
x_complexType_SampleClassTypeAll = 'TClassSampleTypeAll'; x_complexType_SampleClassTypeAll = 'TClassSampleTypeAll';
x_complexType_SampleClass = 'TClassSample'; x_complexType_SampleClass = 'TClassSample';
x_complexType_SampleRecordType = 'TRecordSampleType';
x_complexType_SampleRecordTypeAll = 'TRecordSampleTypeAll';
x_complexType_SampleRecord = 'TRecordSample';
x_complexType_array_sequence = 'complex_array_sequence';
x_complexType_array_sequence_embedded = 'complex_array_sequence_embedded';
x_complexType_class = 'complex_class'; x_complexType_class = 'complex_class';
x_complexType_class_embedded = 'complex_class_embedded'; x_complexType_class_embedded = 'complex_class_embedded';
x_complexType_record = 'complex_record';
x_complexType_record_embedded = 'complex_record_embedded';
x_empty = 'empty'; x_empty = 'empty';
@ -105,6 +141,7 @@ const
x_intAtt = 'intAtt'; x_intAtt = 'intAtt';
x_strAtt = 'strAtt'; x_strAtt = 'strAtt';
x_Item = 'Item';
function LoadXmlFile(const AFileName : string) : TXMLDocument; function LoadXmlFile(const AFileName : string) : TXMLDocument;
begin begin
@ -251,7 +288,7 @@ begin
CheckEquals(x_complexType_class,mdl.Name); CheckEquals(x_complexType_class,mdl.Name);
CheckEquals(x_targetNamespace,tr.GetExternalName(mdl)); CheckEquals(x_targetNamespace,tr.GetExternalName(mdl));
ls := mdl.InterfaceSection.Declarations; ls := mdl.InterfaceSection.Declarations;
CheckEquals(3,ls.Count); CheckEquals(4,ls.Count);
elt := tr.FindElement(x_complexType_SampleClassType); elt := tr.FindElement(x_complexType_SampleClassType);
CheckNotNull(elt,x_complexType_SampleClassType); CheckNotNull(elt,x_complexType_SampleClassType);
CheckEquals(x_complexType_SampleClassType,elt.Name); CheckEquals(x_complexType_SampleClassType,elt.Name);
@ -304,6 +341,24 @@ begin
CheckProperty(x_strAtt,'string',ptAttribute); CheckProperty(x_strAtt,'string',ptAttribute);
CheckProperty(x_intAtt,'int',ptAttribute); CheckProperty(x_intAtt,'int',ptAttribute);
elt := tr.FindElement(x_complexType_SampleDerivedType);
CheckNotNull(elt,x_complexType_SampleDerivedType);
CheckEquals(x_complexType_SampleDerivedType,elt.Name);
CheckEquals(x_complexType_SampleDerivedType,tr.GetExternalName(elt));
CheckIs(elt,TPasClassType);
clsType := elt as TPasClassType;
CheckNotNull(clsType.AncestorType);
CheckEquals(x_complexType_SampleClassType,tr.GetExternalName(clsType.AncestorType));
prpLs.Clear();
for i := 0 to Pred(clsType.Members.Count) do begin
if TPasElement(clsType.Members[i]).InheritsFrom(TPasProperty) then
prpLs.Add(clsType.Members[i]);
end;
CheckEquals(4,prpLs.Count);
CheckProperty(x_intField + 'Ex','int',ptField);
CheckProperty(x_strField + 'Ex','string',ptField);
CheckProperty(x_strAtt + 'Ex','string',ptAttribute);
CheckProperty(x_intAtt + 'Ex','int',ptAttribute);
finally finally
FreeAndNil(prpLs); FreeAndNil(prpLs);
end; end;
@ -440,6 +495,275 @@ begin
end; end;
end; end;
procedure TTest_CustomXsdParser.ComplexType_Record();
var
tr : TwstPasTreeContainer;
recType : TPasRecordType;
procedure CheckProperty(const AName,ATypeName : string; const AFieldType : TPropertyType);
var
prp : TPasVariable;
begin
prp := FindMember(recType,AName) as TPasVariable;
CheckNotNull(prp);
CheckEquals(AName,prp.Name);
CheckEquals(AName,tr.GetExternalName(prp));
CheckNotNull(prp.VarType);
CheckEquals(ATypeName,tr.GetExternalName(prp.VarType));
CheckEquals(PropertyType_Att[AFieldType],tr.IsAttributeProperty(prp));
end;
var
mdl : TPasModule;
ls : TList;
elt : TPasElement;
aliasType : TPasAliasType;
i : Integer;
prpLs : TList;
begin
prpLs := TList.Create();
try
tr := LoadComplexType_Record_Schema();
mdl := tr.FindModule(x_targetNamespace);
CheckNotNull(mdl);
CheckEquals(x_complexType_record,mdl.Name);
CheckEquals(x_targetNamespace,tr.GetExternalName(mdl));
ls := mdl.InterfaceSection.Declarations;
CheckEquals(3,ls.Count);
elt := tr.FindElement(x_complexType_SampleRecordType);
CheckNotNull(elt,x_complexType_SampleRecordType);
CheckEquals(x_complexType_SampleRecordType,elt.Name);
CheckEquals(x_complexType_SampleRecordType,tr.GetExternalName(elt));
CheckIs(elt,TPasRecordType,'Element Type');
recType := elt as TPasRecordType;
prpLs.Clear();
for i := 0 to Pred(recType.Members.Count) do begin
if TPasElement(recType.Members[i]).InheritsFrom(TPasVariable) then
prpLs.Add(recType.Members[i]);
end;
CheckEquals(8,prpLs.Count);
CheckProperty(x_intField,'int',ptField);
CheckProperty(x_strField,'string',ptField);
CheckProperty(x_floatField,'float',ptField);
CheckProperty(x_byteField,'byte',ptField);
CheckProperty(x_charField,'char',ptField);
CheckProperty(x_longField,'long',ptField);
CheckProperty(x_strAtt,'string',ptAttribute);
CheckProperty(x_intAtt,'int',ptAttribute);
elt := tr.FindElement(x_complexType_SampleRecord);
CheckNotNull(elt,x_complexType_SampleRecord);
CheckEquals(x_complexType_SampleRecord,elt.Name);
CheckEquals(x_complexType_SampleRecord,tr.GetExternalName(elt));
CheckIs(elt,TPasAliasType);
aliasType := elt as TPasAliasType;
CheckNotNull(aliasType.DestType);
CheckEquals(x_complexType_SampleRecordType, tr.GetExternalName(aliasType.DestType));
elt := tr.FindElement(x_complexType_SampleRecordTypeAll);
CheckNotNull(elt,x_complexType_SampleRecordTypeAll);
CheckEquals(x_complexType_SampleRecordTypeAll,elt.Name);
CheckEquals(x_complexType_SampleRecordTypeAll,tr.GetExternalName(elt));
CheckIs(elt,TPasRecordType,'Element type');
recType := elt as TPasRecordType;
prpLs.Clear();
for i := 0 to Pred(recType.Members.Count) do begin
if TPasElement(recType.Members[i]).InheritsFrom(TPasVariable) then
prpLs.Add(recType.Members[i]);
end;
CheckEquals(8,prpLs.Count);
CheckProperty(x_intField,'int',ptField);
CheckProperty(x_strField,'string',ptField);
CheckProperty(x_floatField,'float',ptField);
CheckProperty(x_byteField,'byte',ptField);
CheckProperty(x_charField,'char',ptField);
CheckProperty(x_longField,'long',ptField);
CheckProperty(x_strAtt,'string',ptAttribute);
CheckProperty(x_intAtt,'int',ptAttribute);
finally
FreeAndNil(prpLs);
end;
end;
procedure TTest_CustomXsdParser.ComplexType_ArraySequence();
var
tr : TwstPasTreeContainer;
clsType : TPasClassType;
procedure CheckProperty(const AName,ATypeName : string; const AFieldType : TPropertyType);
var
prp : TPasProperty;
begin
prp := FindMember(clsType,AName) as TPasProperty;
CheckNotNull(prp);
CheckEquals(AName,prp.Name);
CheckEquals(AName,tr.GetExternalName(prp));
CheckNotNull(prp.VarType);
CheckEquals(ATypeName,tr.GetExternalName(prp.VarType));
CheckEquals(PropertyType_Att[AFieldType],tr.IsAttributeProperty(prp));
end;
var
mdl : TPasModule;
ls : TList;
elt : TPasElement;
arrayType : TPasArrayType;
aliasType : TPasAliasType;
i : Integer;
prpLs : TList;
nestedClassName : string;
begin
prpLs := TList.Create();
try
tr := LoadComplexType_ArraySequence_Schema();
mdl := tr.FindModule(x_targetNamespace);
CheckNotNull(mdl);
CheckEquals(x_complexType_array_sequence,mdl.Name);
CheckEquals(x_targetNamespace,tr.GetExternalName(mdl));
ls := mdl.InterfaceSection.Declarations;
CheckEquals(3,ls.Count);
elt := tr.FindElement(x_complexType_SampleArrayIntFieldType);
CheckNotNull(elt,x_complexType_SampleArrayIntFieldType);
CheckEquals(x_complexType_SampleArrayIntFieldType,elt.Name);
CheckEquals(x_complexType_SampleArrayIntFieldType,tr.GetExternalName(elt));
CheckIs(elt,TPasArrayType);
arrayType := elt as TPasArrayType;
CheckNotNull(arrayType.ElType);
CheckEquals('int',tr.GetExternalName(arrayType.ElType));
CheckEquals(x_intField,tr.GetArrayItemName(arrayType));
CheckEquals(x_intField,tr.GetArrayItemExternalName(arrayType));
nestedClassName := Format('%s_%s_Type',[x_complexType_SampleArrayItemType,x_Item]);
elt := tr.FindElement(nestedClassName);
CheckNotNull(elt,nestedClassName);
CheckEquals(nestedClassName,elt.Name,'Item Name');
CheckEquals(nestedClassName,tr.GetExternalName(elt),'Item ExternalName');
CheckIs(elt,TPasClassType);
clsType := elt as TPasClassType;
prpLs.Clear();
for i := 0 to Pred(clsType.Members.Count) do begin
if TPasElement(clsType.Members[i]).InheritsFrom(TPasProperty) then
prpLs.Add(clsType.Members[i]);
end;
CheckEquals(8,prpLs.Count);
CheckProperty(x_intField,'int',ptField);
CheckProperty(x_strField,'string',ptField);
CheckProperty(x_floatField,'float',ptField);
CheckProperty(x_byteField,'byte',ptField);
CheckProperty(x_charField,'char',ptField);
CheckProperty(x_longField,'long',ptField);
CheckProperty(x_strAtt,'string',ptAttribute);
CheckProperty(x_intAtt,'int',ptAttribute);
elt := tr.FindElement(x_complexType_SampleArrayItemType);
CheckNotNull(elt,x_complexType_SampleArrayItemType);
CheckEquals(x_complexType_SampleArrayItemType,elt.Name, 'Array name');
CheckEquals(x_complexType_SampleArrayItemType,tr.GetExternalName(elt), 'Array external name');
CheckIs(elt,TPasArrayType);
arrayType := elt as TPasArrayType;
CheckNotNull(arrayType.ElType);
CheckEquals(nestedClassName,tr.GetExternalName(arrayType.ElType));
CheckEquals(x_Item,tr.GetArrayItemExternalName(arrayType));
finally
FreeAndNil(prpLs);
end;
end;
procedure TTest_CustomXsdParser.ComplexType_ArraySequence_Embedded();
var
tr : TwstPasTreeContainer;
clsType : TPasClassType;
procedure CheckProperty(const AName,ATypeName : string; const AFieldType : TPropertyType);
var
prp : TPasProperty;
begin
prp := FindMember(clsType,AName) as TPasProperty;
CheckNotNull(prp);
CheckEquals(AName,prp.Name);
CheckEquals(AName,tr.GetExternalName(prp));
CheckNotNull(prp.VarType);
CheckEquals(ATypeName,tr.GetExternalName(prp.VarType));
CheckEquals(PropertyType_Att[AFieldType],tr.IsAttributeProperty(prp));
end;
var
mdl : TPasModule;
ls : TList;
elt : TPasElement;
arrayType : TPasArrayType;
aliasType : TPasAliasType;
i : Integer;
prpLs : TList;
nestedClassName : string;
begin
prpLs := TList.Create();
try
tr := LoadComplexType_ArraySequence_Schema();
mdl := tr.FindModule(x_targetNamespace);
CheckNotNull(mdl);
CheckEquals(x_complexType_array_sequence,mdl.Name);
CheckEquals(x_targetNamespace,tr.GetExternalName(mdl));
ls := mdl.InterfaceSection.Declarations;
CheckEquals(3,ls.Count);
elt := tr.FindElement(x_complexType_SampleArrayIntFieldType);
CheckNotNull(elt,x_complexType_SampleArrayIntFieldType);
CheckEquals(x_complexType_SampleArrayIntFieldType,elt.Name);
CheckEquals(x_complexType_SampleArrayIntFieldType,tr.GetExternalName(elt));
CheckIs(elt,TPasArrayType);
arrayType := elt as TPasArrayType;
CheckNotNull(arrayType.ElType);
CheckEquals('int',tr.GetExternalName(arrayType.ElType));
CheckEquals(x_intField,tr.GetArrayItemName(arrayType));
CheckEquals(x_intField,tr.GetArrayItemExternalName(arrayType));
nestedClassName := Format('%s_%s_Type',[x_complexType_SampleArrayItemType,x_Item]);
elt := tr.FindElement(nestedClassName);
CheckNotNull(elt,nestedClassName);
CheckEquals(nestedClassName,elt.Name,'Item Name');
CheckEquals(nestedClassName,tr.GetExternalName(elt),'Item ExternalName');
CheckIs(elt,TPasClassType);
clsType := elt as TPasClassType;
prpLs.Clear();
for i := 0 to Pred(clsType.Members.Count) do begin
if TPasElement(clsType.Members[i]).InheritsFrom(TPasProperty) then
prpLs.Add(clsType.Members[i]);
end;
CheckEquals(8,prpLs.Count);
CheckProperty(x_intField,'int',ptField);
CheckProperty(x_strField,'string',ptField);
CheckProperty(x_floatField,'float',ptField);
CheckProperty(x_byteField,'byte',ptField);
CheckProperty(x_charField,'char',ptField);
CheckProperty(x_longField,'long',ptField);
CheckProperty(x_strAtt,'string',ptAttribute);
CheckProperty(x_intAtt,'int',ptAttribute);
elt := tr.FindElement(x_complexType_SampleArrayItemType);
CheckNotNull(elt,x_complexType_SampleArrayItemType);
CheckEquals(x_complexType_SampleArrayItemType,elt.Name, 'Array name');
CheckEquals(x_complexType_SampleArrayItemType,tr.GetExternalName(elt), 'Array external name');
CheckIs(elt,TPasArrayType);
arrayType := elt as TPasArrayType;
CheckNotNull(arrayType.ElType);
CheckEquals(nestedClassName,tr.GetExternalName(arrayType.ElType));
CheckEquals(x_Item,tr.GetArrayItemExternalName(arrayType));
finally
FreeAndNil(prpLs);
end;
end;
{ TTest_XsdParser } { TTest_XsdParser }
function TTest_XsdParser.ParseDoc(const ADoc: string): TwstPasTreeContainer; function TTest_XsdParser.ParseDoc(const ADoc: string): TwstPasTreeContainer;
@ -488,6 +812,21 @@ begin
Result := ParseDoc(x_complexType_class_embedded); Result := ParseDoc(x_complexType_class_embedded);
end; end;
function TTest_XsdParser.LoadComplexType_Record_Schema(): TwstPasTreeContainer;
begin
Result := ParseDoc(x_complexType_record);
end;
function TTest_XsdParser.LoadComplexType_ArraySequence_Schema(): TwstPasTreeContainer;
begin
Result := ParseDoc(x_complexType_array_sequence);
end;
function TTest_XsdParser.LoadComplexType_ArraySequence_Embedded_Schema(): TwstPasTreeContainer;
begin
Result := ParseDoc(x_complexType_array_sequence_embedded);
end;
{ TTest_WsdlParser } { TTest_WsdlParser }
function TTest_WsdlParser.ParseDoc(const ADoc: string): TwstPasTreeContainer; function TTest_WsdlParser.ParseDoc(const ADoc: string): TwstPasTreeContainer;
@ -536,6 +875,21 @@ begin
Result := ParseDoc(x_complexType_class_embedded); Result := ParseDoc(x_complexType_class_embedded);
end; end;
function TTest_WsdlParser.LoadComplexType_Record_Schema(): TwstPasTreeContainer;
begin
Result := ParseDoc(x_complexType_record);
end;
function TTest_WsdlParser.LoadComplexType_ArraySequence_Schema(): TwstPasTreeContainer;
begin
Result := ParseDoc(x_complexType_array_sequence);
end;
function TTest_WsdlParser.LoadComplexType_ArraySequence_Embedded_Schema(): TwstPasTreeContainer;
begin
Result := ParseDoc(x_complexType_array_sequence_embedded);
end;
initialization initialization
RegisterTest('XSD parser',TTest_XsdParser.Suite); RegisterTest('XSD parser',TTest_XsdParser.Suite);
RegisterTest('WSDL parser',TTest_WsdlParser.Suite); RegisterTest('WSDL parser',TTest_WsdlParser.Suite);

View File

@ -19,7 +19,7 @@ interface
uses uses
Classes, SysUtils, Classes, SysUtils,
{$IFDEF FPC} {$IFDEF FPC}
fpcunit, testutils, testregistry, DOM, XMLWrite, fpcunit, testutils, testregistry, DOM, XMLWrite, wst_fpc_xml,
{$ELSE} {$ELSE}
TestFrameWork, xmldom, wst_delphi_xml, TestFrameWork, xmldom, wst_delphi_xml,
{$ENDIF} {$ENDIF}
@ -120,7 +120,7 @@ var
s : string; s : string;
begin begin
strm := nil;; strm := nil;;
locDoc := TXMLDocument.Create(); locDoc := CreateDoc();// TXMLDocument.Create();
try try
GenerateWSDL(ARep,locDoc); GenerateWSDL(ARep,locDoc);
strm := TMemoryStream.Create(); strm := TMemoryStream.Create();
@ -131,7 +131,7 @@ begin
WriteLn(s); WriteLn(s);
WriteLn('*******************************************************'); WriteLn('*******************************************************');
finally finally
locDoc.Free(); ReleaseDomNode(locDoc);
strm.Free(); strm.Free();
end; end;
end; end;
@ -160,28 +160,28 @@ begin
wtr := nil; wtr := nil;
strm.Position := 0; strm.Position := 0;
AssertTrue(strm.Size>10); Check(strm.Size>10);
AssertEquals('symbol count',2,LoadRepositoryData(strm,rp)); CheckEquals(2,LoadRepositoryData(strm,rp),'symbol count');
AssertEquals('unit name','test_unit_name',rp^.Name); CheckEquals('test_unit_name',rp^.Name,'unit name');
AssertEquals('services count',2,rp^.ServicesCount); CheckEquals(2,rp^.ServicesCount,'services count');
AssertNotNull('services pointer',rp^.Services); Check( rp^.Services <> nil , 'services pointer');
ps := rp^.Services; ps := rp^.Services;
AssertEquals('service name','service_1',ps^.Name); CheckEquals('service_1',ps^.Name,'service name');
AssertEquals('operations count',2,ps^.OperationsCount); CheckEquals(2,ps^.OperationsCount,'operations count');
AssertNotNull('operations pointer',ps^.Operations); Check(ps^.Operations <> nil, 'operations pointer');
po := ps^.Operations; po := ps^.Operations;
AssertEquals('operation name','void_operation_proc',po^.Name); CheckEquals('void_operation_proc',po^.Name, 'operation name');
AssertEquals('params count',0,po^.ParamsCount); CheckEquals(0,po^.ParamsCount,'params count');
AssertNull('params pointer',po^.Params); Check( po^.Params = nil ,'params pointer');
Inc(po); Inc(po);
AssertEquals('operation name','void_operation_func',po^.Name); CheckEquals('void_operation_func',po^.Name, 'operation name');
AssertEquals('params count',1,po^.ParamsCount); CheckEquals(1,po^.ParamsCount, 'params count');
AssertNotNull('params pointer',po^.Params); Check( po^.Params <> nil, 'params pointer');
pop := po^.Params; pop := po^.Params;
AssertEquals('param name','result',pop^.Name); CheckEquals('result',pop^.Name,'param name');
AssertEquals('param type name','integer',pop^.TypeName); CheckEquals('integer',pop^.TypeName,'param type name');
AssertEquals('param modifier',ord(argOut),ord(pop^.Modifier)); CheckEquals(ord(argOut),ord(pop^.Modifier),'param modifier');
rp^.NameSpace := 'http://test_name_space/'; rp^.NameSpace := 'http://test_name_space/';
//PrintWSDL(rp); //PrintWSDL(rp);
@ -194,6 +194,6 @@ begin
end; end;
initialization initialization
RegisterTest(TTestMetadata); RegisterTest('Metadata', TTestMetadata.Suite);
end. end.

View File

@ -7,7 +7,7 @@
<MainUnit Value="0"/> <MainUnit Value="0"/>
<IconPath Value="./"/> <IconPath Value="./"/>
<TargetFileExt Value=".exe"/> <TargetFileExt Value=".exe"/>
<ActiveEditorIndexAtStart Value="2"/> <ActiveEditorIndexAtStart Value="7"/>
</General> </General>
<PublishOptions> <PublishOptions>
<Version Value="2"/> <Version Value="2"/>
@ -27,14 +27,16 @@
<PackageName Value="FPCUnitTestRunner"/> <PackageName Value="FPCUnitTestRunner"/>
</Item1> </Item1>
</RequiredPackages> </RequiredPackages>
<Units Count="83"> <Units Count="85">
<Unit0> <Unit0>
<Filename Value="wst_test_suite.lpr"/> <Filename Value="wst_test_suite.lpr"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="wst_test_suite"/> <UnitName Value="wst_test_suite"/>
<CursorPos X="48" Y="5"/> <CursorPos X="41" Y="108"/>
<TopLine Value="4"/> <TopLine Value="95"/>
<EditorIndex Value="15"/>
<UsageCount Value="200"/> <UsageCount Value="200"/>
<Loaded Value="True"/>
</Unit0> </Unit0>
<Unit1> <Unit1>
<Filename Value="testformatter_unit.pas"/> <Filename Value="testformatter_unit.pas"/>
@ -63,7 +65,9 @@
<UnitName Value="soap_formatter"/> <UnitName Value="soap_formatter"/>
<CursorPos X="1" Y="188"/> <CursorPos X="1" Y="188"/>
<TopLine Value="173"/> <TopLine Value="173"/>
<EditorIndex Value="8"/>
<UsageCount Value="200"/> <UsageCount Value="200"/>
<Loaded Value="True"/>
</Unit3> </Unit3>
<Unit4> <Unit4>
<Filename Value="..\..\base_binary_formatter.pas"/> <Filename Value="..\..\base_binary_formatter.pas"/>
@ -77,21 +81,25 @@
<Filename Value="..\..\base_service_intf.pas"/> <Filename Value="..\..\base_service_intf.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="base_service_intf"/> <UnitName Value="base_service_intf"/>
<CursorPos X="1" Y="4553"/> <CursorPos X="62" Y="4556"/>
<TopLine Value="4538"/> <TopLine Value="4538"/>
<EditorIndex Value="16"/>
<UsageCount Value="200"/> <UsageCount Value="200"/>
<Bookmarks Count="2"> <Bookmarks Count="2">
<Item0 X="33" Y="1135" ID="0"/> <Item0 X="33" Y="1135" ID="0"/>
<Item1 X="5" Y="1189" ID="1"/> <Item1 X="5" Y="1189" ID="1"/>
</Bookmarks> </Bookmarks>
<Loaded Value="True"/>
</Unit5> </Unit5>
<Unit6> <Unit6>
<Filename Value="..\..\base_soap_formatter.pas"/> <Filename Value="..\..\base_soap_formatter.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="base_soap_formatter"/> <UnitName Value="base_soap_formatter"/>
<CursorPos X="29" Y="225"/> <CursorPos X="54" Y="356"/>
<TopLine Value="209"/> <TopLine Value="337"/>
<EditorIndex Value="12"/>
<UsageCount Value="200"/> <UsageCount Value="200"/>
<Loaded Value="True"/>
</Unit6> </Unit6>
<Unit7> <Unit7>
<Filename Value="..\..\binary_formatter.pas"/> <Filename Value="..\..\binary_formatter.pas"/>
@ -99,7 +107,9 @@
<UnitName Value="binary_formatter"/> <UnitName Value="binary_formatter"/>
<CursorPos X="1" Y="125"/> <CursorPos X="1" Y="125"/>
<TopLine Value="110"/> <TopLine Value="110"/>
<EditorIndex Value="10"/>
<UsageCount Value="200"/> <UsageCount Value="200"/>
<Loaded Value="True"/>
</Unit7> </Unit7>
<Unit8> <Unit8>
<Filename Value="..\..\binary_streamer.pas"/> <Filename Value="..\..\binary_streamer.pas"/>
@ -132,8 +142,8 @@
<Filename Value="testmetadata_unit.pas"/> <Filename Value="testmetadata_unit.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="testmetadata_unit"/> <UnitName Value="testmetadata_unit"/>
<CursorPos X="1" Y="161"/> <CursorPos X="64" Y="22"/>
<TopLine Value="146"/> <TopLine Value="12"/>
<UsageCount Value="202"/> <UsageCount Value="202"/>
</Unit11> </Unit11>
<Unit12> <Unit12>
@ -148,12 +158,14 @@
<Filename Value="..\..\ws_helper\parserdefs.pas"/> <Filename Value="..\..\ws_helper\parserdefs.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="parserdefs"/> <UnitName Value="parserdefs"/>
<CursorPos X="62" Y="1028"/> <CursorPos X="64" Y="1028"/>
<TopLine Value="1009"/> <TopLine Value="1009"/>
<EditorIndex Value="11"/>
<UsageCount Value="202"/> <UsageCount Value="202"/>
<Bookmarks Count="1"> <Bookmarks Count="1">
<Item0 X="18" Y="1133" ID="2"/> <Item0 X="18" Y="1133" ID="2"/>
</Bookmarks> </Bookmarks>
<Loaded Value="True"/>
</Unit13> </Unit13>
<Unit14> <Unit14>
<Filename Value="..\..\metadata_wsdl.pas"/> <Filename Value="..\..\metadata_wsdl.pas"/>
@ -168,13 +180,13 @@
<UnitName Value="DOM"/> <UnitName Value="DOM"/>
<CursorPos X="15" Y="429"/> <CursorPos X="15" Y="429"/>
<TopLine Value="413"/> <TopLine Value="413"/>
<UsageCount Value="1"/> <UsageCount Value="10"/>
</Unit15> </Unit15>
<Unit16> <Unit16>
<Filename Value="D:\lazarusClean\fpc\2.0.4\source\rtl\objpas\sysutils\sysutilh.inc"/> <Filename Value="D:\lazarusClean\fpc\2.0.4\source\rtl\objpas\sysutils\sysutilh.inc"/>
<CursorPos X="13" Y="235"/> <CursorPos X="13" Y="235"/>
<TopLine Value="215"/> <TopLine Value="215"/>
<UsageCount Value="5"/> <UsageCount Value="4"/>
</Unit16> </Unit16>
<Unit17> <Unit17>
<Filename Value="..\..\server_service_intf.pas"/> <Filename Value="..\..\server_service_intf.pas"/>
@ -189,38 +201,38 @@
<UnitName Value="service_intf"/> <UnitName Value="service_intf"/>
<CursorPos X="15" Y="22"/> <CursorPos X="15" Y="22"/>
<TopLine Value="10"/> <TopLine Value="10"/>
<UsageCount Value="25"/> <UsageCount Value="24"/>
</Unit18> </Unit18>
<Unit19> <Unit19>
<Filename Value="D:\lazarusClean\fpc\2.0.4\source\rtl\objpas\classes\classesh.inc"/> <Filename Value="D:\lazarusClean\fpc\2.0.4\source\rtl\objpas\classes\classesh.inc"/>
<CursorPos X="3" Y="316"/> <CursorPos X="3" Y="316"/>
<TopLine Value="304"/> <TopLine Value="304"/>
<UsageCount Value="5"/> <UsageCount Value="4"/>
</Unit19> </Unit19>
<Unit20> <Unit20>
<Filename Value="D:\lazarusClean\fpc\2.0.4\source\rtl\objpas\classes\lists.inc"/> <Filename Value="D:\lazarusClean\fpc\2.0.4\source\rtl\objpas\classes\lists.inc"/>
<CursorPos X="3" Y="407"/> <CursorPos X="3" Y="407"/>
<TopLine Value="404"/> <TopLine Value="404"/>
<UsageCount Value="5"/> <UsageCount Value="4"/>
</Unit20> </Unit20>
<Unit21> <Unit21>
<Filename Value="D:\lazarusClean\fpc\2.0.4\source\fcl\inc\contnrs.pp"/> <Filename Value="D:\lazarusClean\fpc\2.0.4\source\fcl\inc\contnrs.pp"/>
<UnitName Value="contnrs"/> <UnitName Value="contnrs"/>
<CursorPos X="3" Y="474"/> <CursorPos X="3" Y="474"/>
<TopLine Value="471"/> <TopLine Value="471"/>
<UsageCount Value="5"/> <UsageCount Value="4"/>
</Unit21> </Unit21>
<Unit22> <Unit22>
<Filename Value="D:\lazarusClean\fpc\2.0.4\source\rtl\inc\objpash.inc"/> <Filename Value="D:\lazarusClean\fpc\2.0.4\source\rtl\inc\objpash.inc"/>
<CursorPos X="27" Y="121"/> <CursorPos X="27" Y="121"/>
<TopLine Value="104"/> <TopLine Value="104"/>
<UsageCount Value="5"/> <UsageCount Value="4"/>
</Unit22> </Unit22>
<Unit23> <Unit23>
<Filename Value="D:\lazarusClean\fpc\2.0.4\source\rtl\inc\objpas.inc"/> <Filename Value="D:\lazarusClean\fpc\2.0.4\source\rtl\inc\objpas.inc"/>
<CursorPos X="9" Y="166"/> <CursorPos X="9" Y="166"/>
<TopLine Value="142"/> <TopLine Value="142"/>
<UsageCount Value="5"/> <UsageCount Value="4"/>
</Unit23> </Unit23>
<Unit24> <Unit24>
<Filename Value="D:\Lazarus\components\fpcunit\guitestrunner.pas"/> <Filename Value="D:\Lazarus\components\fpcunit\guitestrunner.pas"/>
@ -229,28 +241,28 @@
<UnitName Value="GuiTestRunner"/> <UnitName Value="GuiTestRunner"/>
<CursorPos X="34" Y="32"/> <CursorPos X="34" Y="32"/>
<TopLine Value="25"/> <TopLine Value="25"/>
<UsageCount Value="5"/> <UsageCount Value="4"/>
</Unit24> </Unit24>
<Unit25> <Unit25>
<Filename Value="..\..\..\..\..\lazarusClean\fpc\2.0.4\source\fcl\fpcunit\fpcunit.pp"/> <Filename Value="..\..\..\..\..\lazarusClean\fpc\2.0.4\source\fcl\fpcunit\fpcunit.pp"/>
<UnitName Value="fpcunit"/> <UnitName Value="fpcunit"/>
<CursorPos X="21" Y="94"/> <CursorPos X="21" Y="94"/>
<TopLine Value="83"/> <TopLine Value="83"/>
<UsageCount Value="3"/> <UsageCount Value="2"/>
</Unit25> </Unit25>
<Unit26> <Unit26>
<Filename Value="..\..\imp_utils.pas"/> <Filename Value="..\..\imp_utils.pas"/>
<UnitName Value="imp_utils"/> <UnitName Value="imp_utils"/>
<CursorPos X="1" Y="105"/> <CursorPos X="1" Y="105"/>
<TopLine Value="90"/> <TopLine Value="90"/>
<UsageCount Value="17"/> <UsageCount Value="16"/>
</Unit26> </Unit26>
<Unit27> <Unit27>
<Filename Value="..\..\..\..\..\lazarusClean\fpc\2.0.4\source\fcl\xml\xmlread.pp"/> <Filename Value="..\..\..\..\..\lazarusClean\fpc\2.0.4\source\fcl\xml\xmlread.pp"/>
<UnitName Value="XMLRead"/> <UnitName Value="XMLRead"/>
<CursorPos X="43" Y="13"/> <CursorPos X="43" Y="13"/>
<TopLine Value="1"/> <TopLine Value="1"/>
<UsageCount Value="1"/> <UsageCount Value="10"/>
</Unit27> </Unit27>
<Unit28> <Unit28>
<Filename Value="test_parserdef.pas"/> <Filename Value="test_parserdef.pas"/>
@ -264,20 +276,20 @@
<Filename Value="..\..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\inc\objpash.inc"/> <Filename Value="..\..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\inc\objpash.inc"/>
<CursorPos X="8" Y="190"/> <CursorPos X="8" Y="190"/>
<TopLine Value="133"/> <TopLine Value="133"/>
<UsageCount Value="2"/> <UsageCount Value="1"/>
</Unit29> </Unit29>
<Unit30> <Unit30>
<Filename Value="..\..\wst.inc"/> <Filename Value="..\..\wst.inc"/>
<CursorPos X="1" Y="1"/> <CursorPos X="1" Y="1"/>
<TopLine Value="1"/> <TopLine Value="1"/>
<UsageCount Value="8"/> <UsageCount Value="7"/>
</Unit30> </Unit30>
<Unit31> <Unit31>
<Filename Value="..\test_fpc\interface_problem\interface_problem.pas"/> <Filename Value="..\test_fpc\interface_problem\interface_problem.pas"/>
<UnitName Value="interface_problem"/> <UnitName Value="interface_problem"/>
<CursorPos X="1" Y="10"/> <CursorPos X="1" Y="10"/>
<TopLine Value="1"/> <TopLine Value="1"/>
<UsageCount Value="8"/> <UsageCount Value="7"/>
</Unit31> </Unit31>
<Unit32> <Unit32>
<Filename Value="..\..\base_xmlrpc_formatter.pas"/> <Filename Value="..\..\base_xmlrpc_formatter.pas"/>
@ -285,123 +297,123 @@
<UnitName Value="base_xmlrpc_formatter"/> <UnitName Value="base_xmlrpc_formatter"/>
<CursorPos X="70" Y="354"/> <CursorPos X="70" Y="354"/>
<TopLine Value="325"/> <TopLine Value="325"/>
<UsageCount Value="165"/> <UsageCount Value="173"/>
</Unit32> </Unit32>
<Unit33> <Unit33>
<Filename Value="..\..\ws_helper\pscanner.pp"/> <Filename Value="..\..\ws_helper\pscanner.pp"/>
<UnitName Value="PScanner"/> <UnitName Value="PScanner"/>
<CursorPos X="19" Y="505"/> <CursorPos X="19" Y="505"/>
<TopLine Value="491"/> <TopLine Value="491"/>
<UsageCount Value="15"/> <UsageCount Value="14"/>
</Unit33> </Unit33>
<Unit34> <Unit34>
<Filename Value="..\..\ws_helper\pascal_parser_intf.pas"/> <Filename Value="..\..\ws_helper\pascal_parser_intf.pas"/>
<UnitName Value="pascal_parser_intf"/> <UnitName Value="pascal_parser_intf"/>
<CursorPos X="3" Y="226"/> <CursorPos X="13" Y="179"/>
<TopLine Value="206"/> <TopLine Value="168"/>
<EditorIndex Value="3"/> <EditorIndex Value="4"/>
<UsageCount Value="32"/> <UsageCount Value="36"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit34> </Unit34>
<Unit35> <Unit35>
<Filename Value="..\..\ws_helper\pastree.pp"/> <Filename Value="..\..\ws_helper\pastree.pp"/>
<UnitName Value="PasTree"/> <UnitName Value="PasTree"/>
<CursorPos X="5" Y="150"/> <CursorPos X="3" Y="172"/>
<TopLine Value="135"/> <TopLine Value="157"/>
<UsageCount Value="15"/> <UsageCount Value="14"/>
</Unit35> </Unit35>
<Unit36> <Unit36>
<Filename Value="..\..\..\..\..\..\lazarus_23_215\fpc\2.1.5\source\packages\fcl-xml\src\dom.pp"/> <Filename Value="..\..\..\..\..\..\lazarus_23_215\fpc\2.1.5\source\packages\fcl-xml\src\dom.pp"/>
<UnitName Value="DOM"/> <UnitName Value="DOM"/>
<CursorPos X="38" Y="225"/> <CursorPos X="38" Y="225"/>
<TopLine Value="203"/> <TopLine Value="203"/>
<UsageCount Value="14"/> <UsageCount Value="13"/>
</Unit36> </Unit36>
<Unit37> <Unit37>
<Filename Value="..\..\wst_rtti_filter\cursor_intf.pas"/> <Filename Value="..\..\wst_rtti_filter\cursor_intf.pas"/>
<UnitName Value="cursor_intf"/> <UnitName Value="cursor_intf"/>
<CursorPos X="3" Y="75"/> <CursorPos X="3" Y="75"/>
<TopLine Value="70"/> <TopLine Value="70"/>
<UsageCount Value="6"/> <UsageCount Value="5"/>
</Unit37> </Unit37>
<Unit38> <Unit38>
<Filename Value="..\..\wst_rtti_filter\dom_cursors.pas"/> <Filename Value="..\..\wst_rtti_filter\dom_cursors.pas"/>
<UnitName Value="dom_cursors"/> <UnitName Value="dom_cursors"/>
<CursorPos X="3" Y="182"/> <CursorPos X="3" Y="182"/>
<TopLine Value="180"/> <TopLine Value="180"/>
<UsageCount Value="6"/> <UsageCount Value="5"/>
</Unit38> </Unit38>
<Unit39> <Unit39>
<Filename Value="..\..\..\..\..\..\lazarus_23_215\fpc\2.1.5\source\packages\fcl-fpcunit\src\fpcunit.pp"/> <Filename Value="..\..\..\..\..\..\lazarus_23_215\fpc\2.1.5\source\packages\fcl-fpcunit\src\fpcunit.pp"/>
<UnitName Value="fpcunit"/> <UnitName Value="fpcunit"/>
<CursorPos X="1" Y="446"/> <CursorPos X="1" Y="446"/>
<TopLine Value="434"/> <TopLine Value="434"/>
<UsageCount Value="4"/> <UsageCount Value="3"/>
</Unit39> </Unit39>
<Unit40> <Unit40>
<Filename Value="..\..\..\..\..\..\lazarus_23_215\fpc\2.1.5\source\rtl\i386\i386.inc"/> <Filename Value="..\..\..\..\..\..\lazarus_23_215\fpc\2.1.5\source\rtl\i386\i386.inc"/>
<CursorPos X="1" Y="1284"/> <CursorPos X="1" Y="1284"/>
<TopLine Value="1268"/> <TopLine Value="1268"/>
<UsageCount Value="3"/> <UsageCount Value="2"/>
</Unit40> </Unit40>
<Unit41> <Unit41>
<Filename Value="..\..\..\..\..\..\lazarus_23_215\fpc\2.1.5\source\rtl\objpas\classes\streams.inc"/> <Filename Value="..\..\..\..\..\..\lazarus_23_215\fpc\2.1.5\source\rtl\objpas\classes\streams.inc"/>
<CursorPos X="1" Y="107"/> <CursorPos X="1" Y="107"/>
<TopLine Value="95"/> <TopLine Value="95"/>
<UsageCount Value="3"/> <UsageCount Value="2"/>
</Unit41> </Unit41>
<Unit42> <Unit42>
<Filename Value="..\..\semaphore.pas"/> <Filename Value="..\..\semaphore.pas"/>
<UnitName Value="semaphore"/> <UnitName Value="semaphore"/>
<CursorPos X="3" Y="30"/> <CursorPos X="3" Y="30"/>
<TopLine Value="23"/> <TopLine Value="23"/>
<UsageCount Value="5"/> <UsageCount Value="4"/>
</Unit42> </Unit42>
<Unit43> <Unit43>
<Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\packages\fcl-xml\src\dom.pp"/> <Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\packages\fcl-xml\src\dom.pp"/>
<UnitName Value="DOM"/> <UnitName Value="DOM"/>
<CursorPos X="14" Y="351"/> <CursorPos X="14" Y="351"/>
<TopLine Value="336"/> <TopLine Value="336"/>
<UsageCount Value="6"/> <UsageCount Value="5"/>
</Unit43> </Unit43>
<Unit44> <Unit44>
<Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\win32\system.pp"/> <Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\win32\system.pp"/>
<UnitName Value="System"/> <UnitName Value="System"/>
<CursorPos X="22" Y="33"/> <CursorPos X="22" Y="33"/>
<TopLine Value="18"/> <TopLine Value="18"/>
<UsageCount Value="4"/> <UsageCount Value="3"/>
</Unit44> </Unit44>
<Unit45> <Unit45>
<Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\packages\fcl-base\src\inc\contnrs.pp"/> <Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\packages\fcl-base\src\inc\contnrs.pp"/>
<UnitName Value="contnrs"/> <UnitName Value="contnrs"/>
<CursorPos X="3" Y="964"/> <CursorPos X="3" Y="964"/>
<TopLine Value="962"/> <TopLine Value="962"/>
<UsageCount Value="3"/> <UsageCount Value="2"/>
</Unit45> </Unit45>
<Unit46> <Unit46>
<Filename Value="..\..\wst_delphi.inc"/> <Filename Value="..\..\wst_delphi.inc"/>
<CursorPos X="1" Y="1"/> <CursorPos X="1" Y="1"/>
<TopLine Value="1"/> <TopLine Value="1"/>
<UsageCount Value="8"/> <UsageCount Value="7"/>
</Unit46> </Unit46>
<Unit47> <Unit47>
<Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\objpas\strutils.pp"/> <Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\objpas\strutils.pp"/>
<UnitName Value="strutils"/> <UnitName Value="strutils"/>
<CursorPos X="10" Y="29"/> <CursorPos X="10" Y="29"/>
<TopLine Value="14"/> <TopLine Value="14"/>
<UsageCount Value="3"/> <UsageCount Value="2"/>
</Unit47> </Unit47>
<Unit48> <Unit48>
<Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\inc\objpash.inc"/> <Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\inc\objpash.inc"/>
<CursorPos X="26" Y="173"/> <CursorPos X="26" Y="173"/>
<TopLine Value="156"/> <TopLine Value="156"/>
<UsageCount Value="8"/> <UsageCount Value="7"/>
</Unit48> </Unit48>
<Unit49> <Unit49>
<Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\inc\objpas.inc"/> <Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\inc\objpas.inc"/>
<CursorPos X="11" Y="333"/> <CursorPos X="11" Y="333"/>
<TopLine Value="375"/> <TopLine Value="375"/>
<UsageCount Value="8"/> <UsageCount Value="7"/>
</Unit49> </Unit49>
<Unit50> <Unit50>
<Filename Value="..\..\wst_fpc_xml.pas"/> <Filename Value="..\..\wst_fpc_xml.pas"/>
@ -409,20 +421,20 @@
<UnitName Value="wst_fpc_xml"/> <UnitName Value="wst_fpc_xml"/>
<CursorPos X="65" Y="85"/> <CursorPos X="65" Y="85"/>
<TopLine Value="56"/> <TopLine Value="56"/>
<UsageCount Value="111"/> <UsageCount Value="119"/>
</Unit50> </Unit50>
<Unit51> <Unit51>
<Filename Value="..\..\wst_global.inc"/> <Filename Value="..\..\wst_global.inc"/>
<CursorPos X="3" Y="4"/> <CursorPos X="3" Y="4"/>
<TopLine Value="1"/> <TopLine Value="1"/>
<UsageCount Value="9"/> <UsageCount Value="8"/>
</Unit51> </Unit51>
<Unit52> <Unit52>
<Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\packages\fcl-base\src\inc\custapp.pp"/> <Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\packages\fcl-base\src\inc\custapp.pp"/>
<UnitName Value="CustApp"/> <UnitName Value="CustApp"/>
<CursorPos X="1" Y="1"/> <CursorPos X="1" Y="1"/>
<TopLine Value="1"/> <TopLine Value="1"/>
<UsageCount Value="3"/> <UsageCount Value="2"/>
</Unit52> </Unit52>
<Unit53> <Unit53>
<Filename Value="test_utilities.pas"/> <Filename Value="test_utilities.pas"/>
@ -431,7 +443,7 @@
<CursorPos X="40" Y="64"/> <CursorPos X="40" Y="64"/>
<TopLine Value="58"/> <TopLine Value="58"/>
<EditorIndex Value="1"/> <EditorIndex Value="1"/>
<UsageCount Value="102"/> <UsageCount Value="110"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit53> </Unit53>
<Unit54> <Unit54>
@ -439,60 +451,60 @@
<UnitName Value="fpcunit"/> <UnitName Value="fpcunit"/>
<CursorPos X="66" Y="231"/> <CursorPos X="66" Y="231"/>
<TopLine Value="231"/> <TopLine Value="231"/>
<UsageCount Value="11"/> <UsageCount Value="10"/>
</Unit54> </Unit54>
<Unit55> <Unit55>
<Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\packages\fcl-fpcunit\src\testregistry.pp"/> <Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\packages\fcl-fpcunit\src\testregistry.pp"/>
<UnitName Value="testregistry"/> <UnitName Value="testregistry"/>
<CursorPos X="11" Y="32"/> <CursorPos X="11" Y="32"/>
<TopLine Value="17"/> <TopLine Value="17"/>
<UsageCount Value="13"/> <UsageCount Value="12"/>
</Unit55> </Unit55>
<Unit56> <Unit56>
<Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\packages\fcl-fpcunit\src\testdecorator.pp"/> <Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\packages\fcl-fpcunit\src\testdecorator.pp"/>
<UnitName Value="testdecorator"/> <UnitName Value="testdecorator"/>
<CursorPos X="3" Y="30"/> <CursorPos X="3" Y="30"/>
<TopLine Value="1"/> <TopLine Value="1"/>
<UsageCount Value="5"/> <UsageCount Value="4"/>
</Unit56> </Unit56>
<Unit57> <Unit57>
<Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\packages\fcl-fpcunit\src\DUnitCompatibleInterface.inc"/> <Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\packages\fcl-fpcunit\src\DUnitCompatibleInterface.inc"/>
<CursorPos X="21" Y="9"/> <CursorPos X="21" Y="9"/>
<TopLine Value="1"/> <TopLine Value="1"/>
<UsageCount Value="10"/> <UsageCount Value="9"/>
</Unit57> </Unit57>
<Unit58> <Unit58>
<Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\objpas\typinfo.pp"/> <Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\objpas\typinfo.pp"/>
<UnitName Value="typinfo"/> <UnitName Value="typinfo"/>
<CursorPos X="53" Y="41"/> <CursorPos X="53" Y="41"/>
<TopLine Value="37"/> <TopLine Value="37"/>
<UsageCount Value="8"/> <UsageCount Value="7"/>
</Unit58> </Unit58>
<Unit59> <Unit59>
<Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\objpas\sysutils\sysstrh.inc"/> <Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\objpas\sysutils\sysstrh.inc"/>
<CursorPos X="89" Y="122"/> <CursorPos X="89" Y="122"/>
<TopLine Value="106"/> <TopLine Value="106"/>
<UsageCount Value="7"/> <UsageCount Value="6"/>
</Unit59> </Unit59>
<Unit60> <Unit60>
<Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\objpas\sysutils\sysinth.inc"/> <Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\objpas\sysutils\sysinth.inc"/>
<CursorPos X="24" Y="63"/> <CursorPos X="24" Y="63"/>
<TopLine Value="46"/> <TopLine Value="46"/>
<UsageCount Value="7"/> <UsageCount Value="6"/>
</Unit60> </Unit60>
<Unit61> <Unit61>
<Filename Value="..\..\ws_helper\wsdl2pas_imp.pas"/> <Filename Value="..\..\ws_helper\wsdl2pas_imp.pas"/>
<UnitName Value="wsdl2pas_imp"/> <UnitName Value="wsdl2pas_imp"/>
<CursorPos X="1" Y="1"/> <CursorPos X="1" Y="1"/>
<TopLine Value="31"/> <TopLine Value="31"/>
<UsageCount Value="8"/> <UsageCount Value="7"/>
</Unit61> </Unit61>
<Unit62> <Unit62>
<Filename Value="..\..\..\..\..\..\lazarus2204\fpc\2.0.4\source\fcl\xml\dom.pp"/> <Filename Value="..\..\..\..\..\..\lazarus2204\fpc\2.0.4\source\fcl\xml\dom.pp"/>
<UnitName Value="DOM"/> <UnitName Value="DOM"/>
<CursorPos X="3" Y="196"/> <CursorPos X="3" Y="196"/>
<TopLine Value="191"/> <TopLine Value="191"/>
<UsageCount Value="6"/> <UsageCount Value="5"/>
</Unit62> </Unit62>
<Unit63> <Unit63>
<Filename Value="..\..\type_lib_edtr\umoduleedit.pas"/> <Filename Value="..\..\type_lib_edtr\umoduleedit.pas"/>
@ -502,7 +514,7 @@
<UnitName Value="umoduleedit"/> <UnitName Value="umoduleedit"/>
<CursorPos X="47" Y="21"/> <CursorPos X="47" Y="21"/>
<TopLine Value="18"/> <TopLine Value="18"/>
<UsageCount Value="8"/> <UsageCount Value="7"/>
</Unit63> </Unit63>
<Unit64> <Unit64>
<Filename Value="..\..\type_lib_edtr\ubindingedit.pas"/> <Filename Value="..\..\type_lib_edtr\ubindingedit.pas"/>
@ -512,7 +524,7 @@
<UnitName Value="ubindingedit"/> <UnitName Value="ubindingedit"/>
<CursorPos X="41" Y="21"/> <CursorPos X="41" Y="21"/>
<TopLine Value="18"/> <TopLine Value="18"/>
<UsageCount Value="8"/> <UsageCount Value="7"/>
</Unit64> </Unit64>
<Unit65> <Unit65>
<Filename Value="..\..\type_lib_edtr\ufarrayedit.pas"/> <Filename Value="..\..\type_lib_edtr\ufarrayedit.pas"/>
@ -522,7 +534,7 @@
<UnitName Value="ufarrayedit"/> <UnitName Value="ufarrayedit"/>
<CursorPos X="41" Y="9"/> <CursorPos X="41" Y="9"/>
<TopLine Value="5"/> <TopLine Value="5"/>
<UsageCount Value="8"/> <UsageCount Value="7"/>
</Unit65> </Unit65>
<Unit66> <Unit66>
<Filename Value="..\..\type_lib_edtr\uftypealiasedit.pas"/> <Filename Value="..\..\type_lib_edtr\uftypealiasedit.pas"/>
@ -532,7 +544,7 @@
<UnitName Value="uftypealiasedit"/> <UnitName Value="uftypealiasedit"/>
<CursorPos X="22" Y="9"/> <CursorPos X="22" Y="9"/>
<TopLine Value="7"/> <TopLine Value="7"/>
<UsageCount Value="8"/> <UsageCount Value="7"/>
</Unit66> </Unit66>
<Unit67> <Unit67>
<Filename Value="..\..\type_lib_edtr\ufrmsaveoption.pas"/> <Filename Value="..\..\type_lib_edtr\ufrmsaveoption.pas"/>
@ -542,13 +554,13 @@
<UnitName Value="ufrmsaveoption"/> <UnitName Value="ufrmsaveoption"/>
<CursorPos X="22" Y="9"/> <CursorPos X="22" Y="9"/>
<TopLine Value="6"/> <TopLine Value="6"/>
<UsageCount Value="8"/> <UsageCount Value="7"/>
</Unit67> </Unit67>
<Unit68> <Unit68>
<Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\objpas\sysutils\sysutilh.inc"/> <Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\objpas\sysutils\sysutilh.inc"/>
<CursorPos X="4" Y="64"/> <CursorPos X="4" Y="64"/>
<TopLine Value="64"/> <TopLine Value="64"/>
<UsageCount Value="6"/> <UsageCount Value="5"/>
</Unit68> </Unit68>
<Unit69> <Unit69>
<Filename Value="..\..\server_service_xmlrpc.pas"/> <Filename Value="..\..\server_service_xmlrpc.pas"/>
@ -556,225 +568,222 @@
<UnitName Value="server_service_xmlrpc"/> <UnitName Value="server_service_xmlrpc"/>
<CursorPos X="38" Y="33"/> <CursorPos X="38" Y="33"/>
<TopLine Value="27"/> <TopLine Value="27"/>
<UsageCount Value="56"/> <UsageCount Value="64"/>
</Unit69> </Unit69>
<Unit70> <Unit70>
<Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\packages\fcl-xml\src\xmlread.pp"/> <Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\packages\fcl-xml\src\xmlread.pp"/>
<UnitName Value="XMLRead"/> <UnitName Value="XMLRead"/>
<CursorPos X="6" Y="37"/> <CursorPos X="6" Y="37"/>
<TopLine Value="31"/> <TopLine Value="31"/>
<UsageCount Value="8"/> <UsageCount Value="7"/>
</Unit70> </Unit70>
<Unit71> <Unit71>
<Filename Value="..\..\xmlrpc_formatter.pas"/> <Filename Value="..\..\xmlrpc_formatter.pas"/>
<UnitName Value="xmlrpc_formatter"/> <UnitName Value="xmlrpc_formatter"/>
<CursorPos X="1" Y="169"/> <CursorPos X="1" Y="169"/>
<TopLine Value="154"/> <TopLine Value="154"/>
<UsageCount Value="12"/> <EditorIndex Value="9"/>
<UsageCount Value="11"/>
<Loaded Value="True"/>
</Unit71> </Unit71>
<Unit72> <Unit72>
<Filename Value="..\..\record_rtti.pas"/> <Filename Value="..\..\record_rtti.pas"/>
<UnitName Value="record_rtti"/> <UnitName Value="record_rtti"/>
<CursorPos X="37" Y="276"/> <CursorPos X="37" Y="276"/>
<TopLine Value="265"/> <TopLine Value="265"/>
<UsageCount Value="16"/> <UsageCount Value="15"/>
</Unit72> </Unit72>
<Unit73> <Unit73>
<Filename Value="..\..\wst_rtl_imp.inc"/> <Filename Value="..\..\wst_rtl_imp.inc"/>
<CursorPos X="1" Y="1"/> <CursorPos X="1" Y="1"/>
<TopLine Value="1"/> <TopLine Value="1"/>
<UsageCount Value="8"/> <UsageCount Value="7"/>
</Unit73> </Unit73>
<Unit74> <Unit74>
<Filename Value="test_parsers.pas"/> <Filename Value="test_parsers.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="test_parsers"/> <UnitName Value="test_parsers"/>
<CursorPos X="3" Y="401"/> <CursorPos X="1" Y="524"/>
<TopLine Value="421"/> <TopLine Value="509"/>
<EditorIndex Value="2"/> <EditorIndex Value="2"/>
<UsageCount Value="34"/> <UsageCount Value="42"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit74> </Unit74>
<Unit75> <Unit75>
<Filename Value="..\..\ws_helper\xsd_parser.pas"/> <Filename Value="..\..\ws_helper\xsd_parser.pas"/>
<UnitName Value="xsd_parser"/> <UnitName Value="xsd_parser"/>
<CursorPos X="14" Y="83"/> <CursorPos X="18" Y="125"/>
<TopLine Value="102"/> <TopLine Value="112"/>
<EditorIndex Value="4"/> <EditorIndex Value="6"/>
<UsageCount Value="16"/> <UsageCount Value="20"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit75> </Unit75>
<Unit76> <Unit76>
<Filename Value="..\..\ws_helper\parserutils.pas"/> <Filename Value="..\..\ws_helper\parserutils.pas"/>
<UnitName Value="parserutils"/> <UnitName Value="parserutils"/>
<CursorPos X="3" Y="76"/> <CursorPos X="1" Y="363"/>
<TopLine Value="61"/> <TopLine Value="342"/>
<UsageCount Value="10"/> <EditorIndex Value="5"/>
<UsageCount Value="12"/>
<Loaded Value="True"/>
</Unit76> </Unit76>
<Unit77> <Unit77>
<Filename Value="..\..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\packages\fcl-fpcunit\src\testregistry.pp"/> <Filename Value="..\..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\packages\fcl-fpcunit\src\testregistry.pp"/>
<UnitName Value="testregistry"/> <UnitName Value="testregistry"/>
<CursorPos X="1" Y="1"/> <CursorPos X="1" Y="1"/>
<TopLine Value="18"/> <TopLine Value="18"/>
<UsageCount Value="10"/> <UsageCount Value="9"/>
</Unit77> </Unit77>
<Unit78> <Unit78>
<Filename Value="..\..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\packages\fcl-fpcunit\src\DUnitCompatibleInterface.inc"/> <Filename Value="..\..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\packages\fcl-fpcunit\src\DUnitCompatibleInterface.inc"/>
<CursorPos X="3" Y="120"/> <CursorPos X="3" Y="120"/>
<TopLine Value="115"/> <TopLine Value="115"/>
<UsageCount Value="9"/> <UsageCount Value="8"/>
</Unit78> </Unit78>
<Unit79> <Unit79>
<Filename Value="..\..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\packages\fcl-fpcunit\src\fpcunit.pp"/> <Filename Value="..\..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\packages\fcl-fpcunit\src\fpcunit.pp"/>
<UnitName Value="fpcunit"/> <UnitName Value="fpcunit"/>
<CursorPos X="1" Y="446"/> <CursorPos X="1" Y="446"/>
<TopLine Value="431"/> <TopLine Value="431"/>
<UsageCount Value="11"/> <EditorIndex Value="14"/>
<UsageCount Value="10"/>
<Loaded Value="True"/>
</Unit79> </Unit79>
<Unit80> <Unit80>
<Filename Value="..\..\ws_helper\logger_intf.pas"/> <Filename Value="..\..\ws_helper\logger_intf.pas"/>
<UnitName Value="logger_intf"/> <UnitName Value="logger_intf"/>
<CursorPos X="85" Y="50"/> <CursorPos X="85" Y="50"/>
<TopLine Value="35"/> <TopLine Value="35"/>
<UsageCount Value="9"/> <UsageCount Value="8"/>
</Unit80> </Unit80>
<Unit81> <Unit81>
<Filename Value="..\..\ws_helper\ws_parser_imp.pas"/> <Filename Value="..\..\ws_helper\ws_parser_imp.pas"/>
<UnitName Value="ws_parser_imp"/> <UnitName Value="ws_parser_imp"/>
<CursorPos X="65" Y="505"/> <CursorPos X="59" Y="823"/>
<TopLine Value="482"/> <TopLine Value="804"/>
<EditorIndex Value="5"/> <EditorIndex Value="7"/>
<UsageCount Value="15"/> <UsageCount Value="19"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit81> </Unit81>
<Unit82> <Unit82>
<Filename Value="..\..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\rtl\inc\objpash.inc"/> <Filename Value="..\..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\rtl\inc\objpash.inc"/>
<CursorPos X="26" Y="159"/> <CursorPos X="26" Y="159"/>
<TopLine Value="144"/> <TopLine Value="144"/>
<UsageCount Value="9"/> <UsageCount Value="8"/>
</Unit82> </Unit82>
<Unit83>
<Filename Value="..\..\ws_helper\wsdl_generator.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="wsdl_generator"/>
<CursorPos X="48" Y="16"/>
<TopLine Value="112"/>
<EditorIndex Value="3"/>
<UsageCount Value="22"/>
<Loaded Value="True"/>
</Unit83>
<Unit84>
<Filename Value="..\..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\packages\fcl-xml\src\xmlread.pp"/>
<UnitName Value="XMLRead"/>
<CursorPos X="1" Y="1975"/>
<TopLine Value="1963"/>
<EditorIndex Value="13"/>
<UsageCount Value="10"/>
<Loaded Value="True"/>
</Unit84>
</Units> </Units>
<JumpHistory Count="30" HistoryIndex="29"> <JumpHistory Count="23" HistoryIndex="22">
<Position1> <Position1>
<Filename Value="test_parsers.pas"/> <Filename Value="test_parsers.pas"/>
<Caret Line="1" Column="1" TopLine="1"/> <Caret Line="30" Column="35" TopLine="19"/>
</Position1> </Position1>
<Position2> <Position2>
<Filename Value="test_parsers.pas"/> <Filename Value="..\..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\packages\fcl-fpcunit\src\fpcunit.pp"/>
<Caret Line="446" Column="53" TopLine="424"/> <Caret Line="446" Column="1" TopLine="431"/>
</Position2> </Position2>
<Position3> <Position3>
<Filename Value="test_parsers.pas"/> <Filename Value="..\..\soap_formatter.pas"/>
<Caret Line="494" Column="54" TopLine="472"/> <Caret Line="188" Column="1" TopLine="173"/>
</Position3> </Position3>
<Position4> <Position4>
<Filename Value="test_parsers.pas"/> <Filename Value="..\..\xmlrpc_formatter.pas"/>
<Caret Line="1" Column="1" TopLine="1"/> <Caret Line="169" Column="1" TopLine="154"/>
</Position4> </Position4>
<Position5> <Position5>
<Filename Value="test_parsers.pas"/> <Filename Value="..\..\binary_formatter.pas"/>
<Caret Line="446" Column="53" TopLine="424"/> <Caret Line="125" Column="1" TopLine="110"/>
</Position5> </Position5>
<Position6> <Position6>
<Filename Value="test_parsers.pas"/> <Filename Value="..\..\ws_helper\parserdefs.pas"/>
<Caret Line="494" Column="54" TopLine="472"/> <Caret Line="1028" Column="64" TopLine="1009"/>
</Position6> </Position6>
<Position7> <Position7>
<Filename Value="test_parsers.pas"/> <Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="1" Column="1" TopLine="1"/> <Caret Line="4553" Column="1" TopLine="4538"/>
</Position7> </Position7>
<Position8> <Position8>
<Filename Value="test_parsers.pas"/> <Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="446" Column="53" TopLine="424"/> <Caret Line="2237" Column="62" TopLine="2219"/>
</Position8> </Position8>
<Position9> <Position9>
<Filename Value="test_parsers.pas"/> <Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="254" Column="44" TopLine="218"/> <Caret Line="4556" Column="62" TopLine="4538"/>
</Position9> </Position9>
<Position10> <Position10>
<Filename Value="test_parsers.pas"/> <Filename Value="..\..\ws_helper\ws_parser_imp.pas"/>
<Caret Line="300" Column="19" TopLine="262"/> <Caret Line="819" Column="1" TopLine="804"/>
</Position10> </Position10>
<Position11> <Position11>
<Filename Value="test_parsers.pas"/> <Filename Value="test_parsers.pas"/>
<Caret Line="249" Column="34" TopLine="240"/> <Caret Line="524" Column="1" TopLine="509"/>
</Position11> </Position11>
<Position12> <Position12>
<Filename Value="test_parsers.pas"/> <Filename Value="test_parsers.pas"/>
<Caret Line="337" Column="11" TopLine="322"/> <Caret Line="817" Column="1" TopLine="802"/>
</Position12> </Position12>
<Position13> <Position13>
<Filename Value="test_parsers.pas"/> <Filename Value="test_parsers.pas"/>
<Caret Line="245" Column="8" TopLine="219"/> <Caret Line="774" Column="1" TopLine="759"/>
</Position13> </Position13>
<Position14> <Position14>
<Filename Value="test_parsers.pas"/> <Filename Value="test_parsers.pas"/>
<Caret Line="261" Column="9" TopLine="248"/> <Caret Line="775" Column="1" TopLine="760"/>
</Position14> </Position14>
<Position15> <Position15>
<Filename Value="test_parsers.pas"/> <Filename Value="test_parsers.pas"/>
<Caret Line="264" Column="18" TopLine="249"/> <Caret Line="779" Column="1" TopLine="764"/>
</Position15> </Position15>
<Position16> <Position16>
<Filename Value="test_parsers.pas"/> <Filename Value="test_parsers.pas"/>
<Caret Line="266" Column="26" TopLine="251"/> <Caret Line="780" Column="1" TopLine="765"/>
</Position16> </Position16>
<Position17> <Position17>
<Filename Value="test_parsers.pas"/> <Filename Value="test_parsers.pas"/>
<Caret Line="292" Column="23" TopLine="279"/> <Caret Line="781" Column="1" TopLine="766"/>
</Position17> </Position17>
<Position18> <Position18>
<Filename Value="test_parsers.pas"/> <Filename Value="..\..\ws_helper\ws_parser_imp.pas"/>
<Caret Line="295" Column="18" TopLine="280"/> <Caret Line="819" Column="1" TopLine="804"/>
</Position18> </Position18>
<Position19> <Position19>
<Filename Value="test_parsers.pas"/> <Filename Value="..\..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\packages\fcl-fpcunit\src\fpcunit.pp"/>
<Caret Line="297" Column="26" TopLine="282"/> <Caret Line="446" Column="1" TopLine="431"/>
</Position19> </Position19>
<Position20> <Position20>
<Filename Value="test_parsers.pas"/> <Filename Value="..\..\ws_helper\ws_parser_imp.pas"/>
<Caret Line="308" Column="21" TopLine="293"/> <Caret Line="819" Column="1" TopLine="804"/>
</Position20> </Position20>
<Position21> <Position21>
<Filename Value="test_parsers.pas"/> <Filename Value="test_parsers.pas"/>
<Caret Line="339" Column="10" TopLine="324"/> <Caret Line="524" Column="1" TopLine="509"/>
</Position21> </Position21>
<Position22> <Position22>
<Filename Value="test_parsers.pas"/> <Filename Value="..\..\ws_helper\ws_parser_imp.pas"/>
<Caret Line="342" Column="10" TopLine="327"/> <Caret Line="819" Column="1" TopLine="804"/>
</Position22> </Position22>
<Position23> <Position23>
<Filename Value="test_parsers.pas"/> <Filename Value="..\..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\packages\fcl-fpcunit\src\fpcunit.pp"/>
<Caret Line="353" Column="20" TopLine="338"/> <Caret Line="446" Column="1" TopLine="431"/>
</Position23> </Position23>
<Position24>
<Filename Value="test_parsers.pas"/>
<Caret Line="355" Column="28" TopLine="340"/>
</Position24>
<Position25>
<Filename Value="test_parsers.pas"/>
<Caret Line="361" Column="23" TopLine="346"/>
</Position25>
<Position26>
<Filename Value="test_parsers.pas"/>
<Caret Line="399" Column="8" TopLine="384"/>
</Position26>
<Position27>
<Filename Value="test_parsers.pas"/>
<Caret Line="401" Column="8" TopLine="386"/>
</Position27>
<Position28>
<Filename Value="test_parsers.pas"/>
<Caret Line="421" Column="23" TopLine="408"/>
</Position28>
<Position29>
<Filename Value="test_parsers.pas"/>
<Caret Line="424" Column="18" TopLine="409"/>
</Position29>
<Position30>
<Filename Value="test_parsers.pas"/>
<Caret Line="426" Column="27" TopLine="411"/>
</Position30>
</JumpHistory> </JumpHistory>
</ProjectOptions> </ProjectOptions>
<CompilerOptions> <CompilerOptions>
@ -813,6 +822,24 @@
</Other> </Other>
</CompilerOptions> </CompilerOptions>
<Debugging> <Debugging>
<BreakPoints Count="4">
<Item1>
<Source Value="..\..\ws_helper\ws_parser_imp.pas"/>
<Line Value="819"/>
</Item1>
<Item2>
<Source Value="..\..\..\..\..\..\lazarus_23_2.2.1\fpc\2.2.1\source\packages\fcl-xml\src\xmlread.pp"/>
<Line Value="1975"/>
</Item2>
<Item3>
<Source Value="test_parsers.pas"/>
<Line Value="817"/>
</Item3>
<Item4>
<Source Value="test_parsers.pas"/>
<Line Value="524"/>
</Item4>
</BreakPoints>
<Watches Count="2"> <Watches Count="2">
<Item1> <Item1>
<Expression Value="FScopeObject^.Name"/> <Expression Value="FScopeObject^.Name"/>

View File

@ -16,7 +16,7 @@ uses
server_binary_formatter, metadata_repository, server_binary_formatter, metadata_repository,
metadata_generator, parserdefs, server_service_intf, metadata_wsdl, 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, test_parsers; server_service_xmlrpc, test_parsers, wsdl_generator;
Const Const
ShortOpts = 'alh'; ShortOpts = 'alh';

View File

@ -814,7 +814,10 @@ begin
end; end;
//check for record //check for record
if ( FDerivationMode = dmNone ) and Result.InheritsFrom(TPasClassType) and IsRecordType() then begin if ( FDerivationMode = dmNone ) and
Result.InheritsFrom(TPasClassType) and
IsRecordType()
then begin
tmpClassDef := classDef; tmpClassDef := classDef;
classDef := nil; classDef := nil;
recordType := TPasRecordType(FSymbols.CreateElement(TPasRecordType,tmpClassDef.Name,Self.Module.InterfaceSection,visPublic,'',0)); recordType := TPasRecordType(FSymbols.CreateElement(TPasRecordType,tmpClassDef.Name,Self.Module.InterfaceSection,visPublic,'',0));