diff --git a/wst/trunk/tests/test_suite/files/array_sequence_item_name.xsd b/wst/trunk/tests/test_suite/files/array_sequence_item_name.xsd new file mode 100644 index 000000000..79dd3b4c7 --- /dev/null +++ b/wst/trunk/tests/test_suite/files/array_sequence_item_name.xsd @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + diff --git a/wst/trunk/tests/test_suite/files/complex_class_false_array.xsd b/wst/trunk/tests/test_suite/files/complex_class_false_array.xsd new file mode 100644 index 000000000..f7106268e --- /dev/null +++ b/wst/trunk/tests/test_suite/files/complex_class_false_array.xsd @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/wst/trunk/tests/test_suite/test_parsers.pas b/wst/trunk/tests/test_suite/test_parsers.pas index 30ec21dee..a944653da 100644 --- a/wst/trunk/tests/test_suite/test_parsers.pas +++ b/wst/trunk/tests/test_suite/test_parsers.pas @@ -41,11 +41,13 @@ type function LoadComplexType_Class_Embedded_Schema() : TwstPasTreeContainer;virtual;abstract; function LoadComplexType_Class_Extend_Simple_Schema() : TwstPasTreeContainer;virtual;abstract; function LoadComplexType_Class_OpenType() : TwstPasTreeContainer;virtual;abstract; + function LoadComplexType_Class_FalseArray() : TwstPasTreeContainer;virtual;abstract; function LoadComplexType_Record_Schema() : TwstPasTreeContainer;virtual;abstract; function LoadComplexType_Record_Embedded_Schema() : TwstPasTreeContainer;virtual;abstract; function LoadComplexType_ArraySequence_Schema() : TwstPasTreeContainer;virtual;abstract; + function LoadComplexType_ArraySequence_ItemName_Schema() : TwstPasTreeContainer;virtual;abstract; function LoadComplexType_ArraySequence_Embedded_Schema() : TwstPasTreeContainer;virtual;abstract; function LoadComplexType_Array_soaparray() : TwstPasTreeContainer;virtual;abstract; @@ -76,11 +78,13 @@ type procedure ComplexType_Class_open_extension_type_anyAttribute(); procedure ComplexType_Class_sequence_open_type_anyAttribute(); procedure ComplexType_Class_all_open_type_anyAttribute(); + procedure ComplexType_Class_FalseArray(); procedure ComplexType_Record(); procedure ComplexType_Record_Embedded(); procedure ComplexType_ArraySequence(); + procedure ComplexType_ArraySequence_ItemName_Schema(); procedure ComplexType_ArraySequence_Embedded(); procedure ComplexType_Array_soaparray(); @@ -113,11 +117,13 @@ type function LoadComplexType_Class_Embedded_Schema() : TwstPasTreeContainer;override; function LoadComplexType_Class_Extend_Simple_Schema() : TwstPasTreeContainer;override; function LoadComplexType_Class_OpenType() : TwstPasTreeContainer;override; + function LoadComplexType_Class_FalseArray() : TwstPasTreeContainer;override; function LoadComplexType_Record_Schema() : TwstPasTreeContainer;override; function LoadComplexType_Record_Embedded_Schema() : TwstPasTreeContainer;override; function LoadComplexType_ArraySequence_Schema() : TwstPasTreeContainer;override; + function LoadComplexType_ArraySequence_ItemName_Schema() : TwstPasTreeContainer; override; function LoadComplexType_ArraySequence_Embedded_Schema() : TwstPasTreeContainer;override; function LoadComplexType_Array_soaparray() : TwstPasTreeContainer;override; @@ -151,11 +157,13 @@ type function LoadComplexType_Class_Embedded_Schema() : TwstPasTreeContainer;override; function LoadComplexType_Class_Extend_Simple_Schema() : TwstPasTreeContainer;override; function LoadComplexType_Class_OpenType() : TwstPasTreeContainer;override; + function LoadComplexType_Class_FalseArray() : TwstPasTreeContainer;override; function LoadComplexType_Record_Schema() : TwstPasTreeContainer;override; function LoadComplexType_Record_Embedded_Schema() : TwstPasTreeContainer;override; function LoadComplexType_ArraySequence_Schema() : TwstPasTreeContainer;override; + function LoadComplexType_ArraySequence_ItemName_Schema() : TwstPasTreeContainer; override; function LoadComplexType_ArraySequence_Embedded_Schema() : TwstPasTreeContainer;override; function LoadComplexType_Array_soaparray() : TwstPasTreeContainer;override; @@ -857,6 +865,79 @@ begin end; end; +procedure TTest_CustomXsdParser.ComplexType_Class_FalseArray(); +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; + i : Integer; + prpLs : TList; + prp : TPasProperty; +begin + prpLs := TList.Create(); + try + tr := LoadComplexType_Class_FalseArray(); + + mdl := tr.FindModule(x_targetNamespace); + CheckNotNull(mdl); + CheckEquals('complex_class_false_array',mdl.Name); + CheckEquals(x_targetNamespace,tr.GetExternalName(mdl)); + ls := mdl.InterfaceSection.Declarations; + CheckEquals(3,ls.Count); + elt := tr.FindElement(x_complexType_SampleClassType); + CheckNotNull(elt,x_complexType_SampleClassType); + CheckEquals(x_complexType_SampleClassType,elt.Name); + CheckEquals(x_complexType_SampleClassType,tr.GetExternalName(elt)); + 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(2,prpLs.Count); + CheckProperty(x_intField,'int',ptField); + CheckProperty(x_strField,'string',ptField); + + 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(1,prpLs.Count); + prp := TPasProperty(prpLs[0]); + CheckIs(prp.VarType,TPasArrayType); + CheckEquals(x_intField + 'Ex', tr.GetArrayItemExternalName(TPasArrayType(prp.VarType))); + finally + FreeAndNil(prpLs); + end; +end; + procedure TTest_CustomXsdParser.ComplexType_Record(); var tr : TwstPasTreeContainer; @@ -1120,6 +1201,50 @@ begin end; end; +procedure TTest_CustomXsdParser.ComplexType_ArraySequence_ItemName_Schema(); +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; +begin + tr := LoadComplexType_ArraySequence_ItemName_Schema(); + + mdl := tr.FindModule(x_targetNamespace); + CheckNotNull(mdl); + CheckEquals('array_sequence_item_name',mdl.Name); + CheckEquals(x_targetNamespace,tr.GetExternalName(mdl)); + ls := mdl.InterfaceSection.Declarations; + CheckEquals(2,ls.Count); + elt := tr.FindElement('ArrayOfEmailAddress'); + CheckNotNull(elt,'ArrayOfEmailAddress'); + CheckEquals('ArrayOfEmailAddress',elt.Name); + CheckEquals('ArrayOfEmailAddress',tr.GetExternalName(elt)); + CheckIs(elt,TPasArrayType); + arrayType := elt as TPasArrayType; + CheckNotNull(arrayType.ElType); + CheckEquals('EmailAddress',tr.GetExternalName(arrayType.ElType)); + CheckEquals('EmailAddress',tr.GetArrayItemName(arrayType)); + CheckEquals('EmailAddress',tr.GetArrayItemExternalName(arrayType)); +end; + procedure TTest_CustomXsdParser.ComplexType_ArraySequence_Embedded(); var tr : TwstPasTreeContainer; @@ -1849,6 +1974,16 @@ begin Result := ParseDoc('class_widechar_property'); end; +function TTest_XsdParser.LoadComplexType_ArraySequence_ItemName_Schema() : TwstPasTreeContainer; +begin + Result := ParseDoc('array_sequence_item_name'); +end; + +function TTest_XsdParser.LoadComplexType_Class_FalseArray( ) : TwstPasTreeContainer; +begin + Result := ParseDoc('complex_class_false_array'); +end; + { TTest_WsdlParser } function TTest_WsdlParser.ParseDoc(const ADoc: string): TwstPasTreeContainer; @@ -1909,6 +2044,11 @@ begin Result := ParseDoc('complex_class_open_type'); end; +function TTest_WsdlParser.LoadComplexType_Class_FalseArray() : TwstPasTreeContainer; +begin + Result := ParseDoc('complex_class_false_array'); +end; + function TTest_WsdlParser.LoadComplexType_Record_Schema(): TwstPasTreeContainer; begin Result := ParseDoc(x_complexType_record); @@ -1924,6 +2064,11 @@ begin Result := ParseDoc(x_complexType_array_sequence); end; +function TTest_WsdlParser.LoadComplexType_ArraySequence_ItemName_Schema( ) : TwstPasTreeContainer; +begin + Result := ParseDoc('array_sequence_item_name'); +end; + function TTest_WsdlParser.LoadComplexType_ArraySequence_Embedded_Schema(): TwstPasTreeContainer; begin Result := ParseDoc(x_complexType_array_sequence_embedded);