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));