diff --git a/wst/trunk/tests/test_suite/delphi/wst_test_suite.dpr b/wst/trunk/tests/test_suite/delphi/wst_test_suite.dpr
index 3854fc038..4d095845e 100644
--- a/wst/trunk/tests/test_suite/delphi/wst_test_suite.dpr
+++ b/wst/trunk/tests/test_suite/delphi/wst_test_suite.dpr
@@ -7,7 +7,8 @@ uses
TextTestRunner,
test_utilities in '..\test_utilities.pas',
testformatter_unit in '..\testformatter_unit.pas',
- test_parsers in '..\test_parsers.pas';
+ test_parsers in '..\test_parsers.pas',
+ testmetadata_unit;
{$R *.res}
diff --git a/wst/trunk/tests/test_suite/files/complex_array_sequence.WSDL b/wst/trunk/tests/test_suite/files/complex_array_sequence.WSDL
new file mode 100644
index 000000000..64174d701
--- /dev/null
+++ b/wst/trunk/tests/test_suite/files/complex_array_sequence.WSDL
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/wst/trunk/tests/test_suite/files/complex_array_sequence.xsd b/wst/trunk/tests/test_suite/files/complex_array_sequence.xsd
new file mode 100644
index 000000000..b28742bfb
--- /dev/null
+++ b/wst/trunk/tests/test_suite/files/complex_array_sequence.xsd
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/wst/trunk/tests/test_suite/files/complex_array_sequence_embedded.WSDL b/wst/trunk/tests/test_suite/files/complex_array_sequence_embedded.WSDL
new file mode 100644
index 000000000..1653016c2
--- /dev/null
+++ b/wst/trunk/tests/test_suite/files/complex_array_sequence_embedded.WSDL
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/wst/trunk/tests/test_suite/files/complex_array_sequence_embedded.xsd b/wst/trunk/tests/test_suite/files/complex_array_sequence_embedded.xsd
new file mode 100644
index 000000000..4aedccc89
--- /dev/null
+++ b/wst/trunk/tests/test_suite/files/complex_array_sequence_embedded.xsd
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/wst/trunk/tests/test_suite/files/complex_class.WSDL b/wst/trunk/tests/test_suite/files/complex_class.WSDL
index 0833c8f6d..71bece421 100644
--- a/wst/trunk/tests/test_suite/files/complex_class.WSDL
+++ b/wst/trunk/tests/test_suite/files/complex_class.WSDL
@@ -40,6 +40,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/wst/trunk/tests/test_suite/files/complex_class.xsd b/wst/trunk/tests/test_suite/files/complex_class.xsd
index bc5c59f61..2da458339 100644
--- a/wst/trunk/tests/test_suite/files/complex_class.xsd
+++ b/wst/trunk/tests/test_suite/files/complex_class.xsd
@@ -31,4 +31,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/wst/trunk/tests/test_suite/files/complex_record.WSDL b/wst/trunk/tests/test_suite/files/complex_record.WSDL
new file mode 100644
index 000000000..a89b662e5
--- /dev/null
+++ b/wst/trunk/tests/test_suite/files/complex_record.WSDL
@@ -0,0 +1,50 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/wst/trunk/tests/test_suite/files/complex_record.xsd b/wst/trunk/tests/test_suite/files/complex_record.xsd
new file mode 100644
index 000000000..9335a704d
--- /dev/null
+++ b/wst/trunk/tests/test_suite/files/complex_record.xsd
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/wst/trunk/tests/test_suite/test_parsers.pas b/wst/trunk/tests/test_suite/test_parsers.pas
index 891609fba..b3192d7d2 100644
--- a/wst/trunk/tests/test_suite/test_parsers.pas
+++ b/wst/trunk/tests/test_suite/test_parsers.pas
@@ -35,6 +35,11 @@ type
function LoadComplexType_Class_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
procedure EmptySchema();
@@ -43,6 +48,11 @@ type
procedure ComplexType_Class();
procedure ComplexType_Class_Embedded();
+
+ procedure ComplexType_Record();
+
+ procedure ComplexType_ArraySequence();
+ procedure ComplexType_ArraySequence_Embedded();
end;
{ TTest_XsdParser }
@@ -52,10 +62,17 @@ type
function ParseDoc(const ADoc : string) : TwstPasTreeContainer;
protected
function LoadEmptySchema() : TwstPasTreeContainer;override;
+
function LoadSimpleType_Enum_Schema() : TwstPasTreeContainer;override;
function LoadSimpleType_Enum_Embedded_Schema() : TwstPasTreeContainer;override;
+
function LoadComplexType_Class_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;
{ TTest_WsdlParser }
@@ -65,21 +82,40 @@ type
function ParseDoc(const ADoc : string) : TwstPasTreeContainer;
protected
function LoadEmptySchema() : TwstPasTreeContainer;override;
+
function LoadSimpleType_Enum_Schema() : TwstPasTreeContainer;override;
function LoadSimpleType_Enum_Embedded_Schema() : TwstPasTreeContainer;override;
+
function LoadComplexType_Class_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;
implementation
uses parserutils;
const
- x_complexType_SampleClassType = 'TClassSampleType';
- x_complexType_SampleClassTypeAll = 'TClassSampleTypeAll';
- x_complexType_SampleClass = 'TClassSample';
+ x_complexType_SampleArrayIntFieldType = 'TArrayIntFieldType';
+ x_complexType_SampleArrayItemType = 'TArrayItemType';
+ x_complexType_SampleDerivedType = 'TClassSampleDerivedType';
+ x_complexType_SampleClassType = 'TClassSampleType';
+ x_complexType_SampleClassTypeAll = 'TClassSampleTypeAll';
+ 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_embedded = 'complex_class_embedded';
+ x_complexType_record = 'complex_record';
+ x_complexType_record_embedded = 'complex_record_embedded';
x_empty = 'empty';
@@ -105,6 +141,7 @@ const
x_intAtt = 'intAtt';
x_strAtt = 'strAtt';
+ x_Item = 'Item';
function LoadXmlFile(const AFileName : string) : TXMLDocument;
begin
@@ -251,7 +288,7 @@ begin
CheckEquals(x_complexType_class,mdl.Name);
CheckEquals(x_targetNamespace,tr.GetExternalName(mdl));
ls := mdl.InterfaceSection.Declarations;
- CheckEquals(3,ls.Count);
+ CheckEquals(4,ls.Count);
elt := tr.FindElement(x_complexType_SampleClassType);
CheckNotNull(elt,x_complexType_SampleClassType);
CheckEquals(x_complexType_SampleClassType,elt.Name);
@@ -304,6 +341,24 @@ begin
CheckProperty(x_strAtt,'string',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
FreeAndNil(prpLs);
end;
@@ -440,6 +495,275 @@ begin
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 }
function TTest_XsdParser.ParseDoc(const ADoc: string): TwstPasTreeContainer;
@@ -488,6 +812,21 @@ begin
Result := ParseDoc(x_complexType_class_embedded);
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 }
function TTest_WsdlParser.ParseDoc(const ADoc: string): TwstPasTreeContainer;
@@ -536,6 +875,21 @@ begin
Result := ParseDoc(x_complexType_class_embedded);
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
RegisterTest('XSD parser',TTest_XsdParser.Suite);
RegisterTest('WSDL parser',TTest_WsdlParser.Suite);
diff --git a/wst/trunk/tests/test_suite/testmetadata_unit.pas b/wst/trunk/tests/test_suite/testmetadata_unit.pas
index 5b7bea9c8..fc24dc245 100644
--- a/wst/trunk/tests/test_suite/testmetadata_unit.pas
+++ b/wst/trunk/tests/test_suite/testmetadata_unit.pas
@@ -19,7 +19,7 @@ interface
uses
Classes, SysUtils,
{$IFDEF FPC}
- fpcunit, testutils, testregistry, DOM, XMLWrite,
+ fpcunit, testutils, testregistry, DOM, XMLWrite, wst_fpc_xml,
{$ELSE}
TestFrameWork, xmldom, wst_delphi_xml,
{$ENDIF}
@@ -120,7 +120,7 @@ var
s : string;
begin
strm := nil;;
- locDoc := TXMLDocument.Create();
+ locDoc := CreateDoc();// TXMLDocument.Create();
try
GenerateWSDL(ARep,locDoc);
strm := TMemoryStream.Create();
@@ -131,7 +131,7 @@ begin
WriteLn(s);
WriteLn('*******************************************************');
finally
- locDoc.Free();
+ ReleaseDomNode(locDoc);
strm.Free();
end;
end;
@@ -160,29 +160,29 @@ begin
wtr := nil;
strm.Position := 0;
- AssertTrue(strm.Size>10);
- AssertEquals('symbol count',2,LoadRepositoryData(strm,rp));
- AssertEquals('unit name','test_unit_name',rp^.Name);
- AssertEquals('services count',2,rp^.ServicesCount);
- AssertNotNull('services pointer',rp^.Services);
+ Check(strm.Size>10);
+ CheckEquals(2,LoadRepositoryData(strm,rp),'symbol count');
+ CheckEquals('test_unit_name',rp^.Name,'unit name');
+ CheckEquals(2,rp^.ServicesCount,'services count');
+ Check( rp^.Services <> nil , 'services pointer');
ps := rp^.Services;
- AssertEquals('service name','service_1',ps^.Name);
- AssertEquals('operations count',2,ps^.OperationsCount);
- AssertNotNull('operations pointer',ps^.Operations);
+ CheckEquals('service_1',ps^.Name,'service name');
+ CheckEquals(2,ps^.OperationsCount,'operations count');
+ Check(ps^.Operations <> nil, 'operations pointer');
po := ps^.Operations;
- AssertEquals('operation name','void_operation_proc',po^.Name);
- AssertEquals('params count',0,po^.ParamsCount);
- AssertNull('params pointer',po^.Params);
+ CheckEquals('void_operation_proc',po^.Name, 'operation name');
+ CheckEquals(0,po^.ParamsCount,'params count');
+ Check( po^.Params = nil ,'params pointer');
Inc(po);
- AssertEquals('operation name','void_operation_func',po^.Name);
- AssertEquals('params count',1,po^.ParamsCount);
- AssertNotNull('params pointer',po^.Params);
+ CheckEquals('void_operation_func',po^.Name, 'operation name');
+ CheckEquals(1,po^.ParamsCount, 'params count');
+ Check( po^.Params <> nil, 'params pointer');
pop := po^.Params;
- AssertEquals('param name','result',pop^.Name);
- AssertEquals('param type name','integer',pop^.TypeName);
- AssertEquals('param modifier',ord(argOut),ord(pop^.Modifier));
-
+ CheckEquals('result',pop^.Name,'param name');
+ CheckEquals('integer',pop^.TypeName,'param type name');
+ CheckEquals(ord(argOut),ord(pop^.Modifier),'param modifier');
+
rp^.NameSpace := 'http://test_name_space/';
//PrintWSDL(rp);
finally
@@ -194,6 +194,6 @@ begin
end;
initialization
- RegisterTest(TTestMetadata);
+ RegisterTest('Metadata', TTestMetadata.Suite);
end.
diff --git a/wst/trunk/tests/test_suite/wst_test_suite.lpi b/wst/trunk/tests/test_suite/wst_test_suite.lpi
index ca849d78c..47d86d603 100644
--- a/wst/trunk/tests/test_suite/wst_test_suite.lpi
+++ b/wst/trunk/tests/test_suite/wst_test_suite.lpi
@@ -7,7 +7,7 @@
-
+
@@ -27,14 +27,16 @@
-
+
-
-
+
+
+
+
@@ -63,7 +65,9 @@
+
+
@@ -77,21 +81,25 @@
-
+
+
+
-
-
+
+
+
+
@@ -99,7 +107,9 @@
+
+
@@ -132,8 +142,8 @@
-
-
+
+
@@ -148,12 +158,14 @@
-
+
+
+
@@ -168,13 +180,13 @@
-
+
-
+
@@ -189,38 +201,38 @@
-
+
-
+
-
+
-
+
-
+
-
+
@@ -229,28 +241,28 @@
-
+
-
+
-
+
-
+
@@ -264,20 +276,20 @@
-
+
-
+
-
+
@@ -285,123 +297,123 @@
-
+
-
+
-
-
-
-
+
+
+
+
-
-
-
+
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -409,20 +421,20 @@
-
+
-
+
-
+
@@ -431,7 +443,7 @@
-
+
@@ -439,60 +451,60 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -502,7 +514,7 @@
-
+
@@ -512,7 +524,7 @@
-
+
@@ -522,7 +534,7 @@
-
+
@@ -532,7 +544,7 @@
-
+
@@ -542,13 +554,13 @@
-
+
-
+
@@ -556,225 +568,222 @@
-
+
-
+
-
+
+
+
-
+
-
+
-
-
+
+
-
+
-
-
-
-
+
+
+
+
-
-
-
+
+
+
+
+
-
+
-
+
-
+
+
+
-
+
-
-
-
-
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
-
+
+
-
-
+
+
-
+
-
-
+
+
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -813,6 +822,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/wst/trunk/tests/test_suite/wst_test_suite.lpr b/wst/trunk/tests/test_suite/wst_test_suite.lpr
index bb7ec9b3e..fa07d484d 100644
--- a/wst/trunk/tests/test_suite/wst_test_suite.lpr
+++ b/wst/trunk/tests/test_suite/wst_test_suite.lpr
@@ -16,7 +16,7 @@ uses
server_binary_formatter, metadata_repository,
metadata_generator, parserdefs, server_service_intf, metadata_wsdl,
test_parserdef, base_xmlrpc_formatter, wst_fpc_xml, test_utilities,
- server_service_xmlrpc, test_parsers;
+ server_service_xmlrpc, test_parsers, wsdl_generator;
Const
ShortOpts = 'alh';
diff --git a/wst/trunk/ws_helper/ws_parser_imp.pas b/wst/trunk/ws_helper/ws_parser_imp.pas
index 91ad6bcdd..0071b2e68 100644
--- a/wst/trunk/ws_helper/ws_parser_imp.pas
+++ b/wst/trunk/ws_helper/ws_parser_imp.pas
@@ -814,7 +814,10 @@ begin
end;
//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;
classDef := nil;
recordType := TPasRecordType(FSymbols.CreateElement(TPasRecordType,tmpClassDef.Name,Self.Module.InterfaceSection,visPublic,'',0));