123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314 |
- {$INCLUDE sdo_global.inc}
- unit test_xsdparser;
- interface
- uses
- Classes, SysUtils,
- {$IFDEF FPC}
- fpcunit, testutils, testregistry, DOM, XmlRead, sdo_fpc_xml,
- {$ELSE}
- TestFrameWork, xmldom, sdo_win_xml,
- {$ENDIF}
- sdo, sdo_types, sdo_xsdparser;
- type
- { TTest_CustomXsdParser }
- TTest_CustomXsdParser = class(TTestCase)
- protected
- function LoadEmptySchema(var AFactory : ISDODataFactory) : ISDODataObject;virtual;abstract;
- function LoadSimpleType_Enum_Schema(var AFactory : ISDODataFactory) : ISDODataObject;virtual;abstract;
- function LoadSimpleType_Enum_Embedded_Schema(var AFactory : ISDODataFactory) : ISDODataObject;virtual;abstract;
- function LoadSimpleType_AliasToNativeType_Schema(var AFactory : ISDODataFactory) : ISDODataObject;virtual;abstract;
-
- function LoadComplexType_Class_Schema(var AFactory : ISDODataFactory) : ISDODataObject;virtual;abstract;
- function LoadComplexType_Class_default_values(var AFactory : ISDODataFactory) : ISDODataObject;virtual;abstract;
- function LoadComplexType_Class_properties_extended_metadata(var AFactory : ISDODataFactory) : ISDODataObject;virtual;abstract;
- function LoadComplexType_Class_properties_extended_metadata2(var AFactory : ISDODataFactory) : ISDODataObject;virtual;abstract;
- function LoadComplexType_Class_Embedded_Schema(var AFactory : ISDODataFactory) : ISDODataObject;virtual;abstract;
- function LoadComplexType_Class_Extend_Simple_Schema(var AFactory : ISDODataFactory) : ISDODataObject;virtual;abstract;
- function LoadComplexType_Class_OpenType(var AFactory : ISDODataFactory) : ISDODataObject;virtual;abstract;
- function LoadComplexType_Class_FalseArray(var AFactory : ISDODataFactory) : ISDODataObject;virtual;abstract;
- function LoadComplexType_ArraySequence_Schema(var AFactory : ISDODataFactory) : ISDODataObject;virtual;abstract;
- function LoadComplexType_ArraySequence_ItemName_Schema(var AFactory : ISDODataFactory) : ISDODataObject;virtual;abstract;
- function LoadComplexType_ArraySequence_Embedded_Schema(var AFactory : ISDODataFactory) : ISDODataObject;virtual;abstract;
- //function LoadComplexType_Array_soaparray() : ISDODataObject;virtual;abstract;
- function load_class_property_composed_name(var AFactory : ISDODataFactory) : ISDODataObject;virtual;abstract;
- function load_schema_import(var AFactory : ISDODataFactory) : ISDODataObject;virtual;abstract;
- published
- procedure EmptySchema();
- procedure SimpleType_Enum();
- procedure SimpleType_Enum_Embedded();
- procedure SimpleType_AliasToNativeType();
- procedure ComplexType_Class();
- procedure ComplexType_Class_default_values();
- procedure ComplexType_Class_properties_extended_metadata();
- procedure ComplexType_Class_properties_extended_metadata2();
- procedure ComplexType_Class_Embedded();
- procedure ComplexType_Class_Extend_Simple_Schema();
- procedure ComplexType_Class_open_type_any();
- procedure ComplexType_Class_open_extension_type_any();
- 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_ArraySequence();
- procedure ComplexType_ArraySequence_ItemName_Schema();
- procedure ComplexType_ArraySequence_Embedded();
- //procedure ComplexType_Array_soaparray();
- procedure class_property_composed_name();
- procedure schema_import();
- end;
- { TTest_XsdParser }
- TTest_XsdParser = class(TTest_CustomXsdParser)
- private
- function ParseDoc(var AFactory : ISDODataFactory; const ADoc : string) : ISDODataObject;
- protected
- function LoadEmptySchema(var AFactory : ISDODataFactory) : ISDODataObject;override;
- function LoadSimpleType_Enum_Schema(var AFactory : ISDODataFactory) : ISDODataObject;override;
- function LoadSimpleType_Enum_Embedded_Schema(var AFactory : ISDODataFactory) : ISDODataObject;override;
- function LoadSimpleType_AliasToNativeType_Schema(var AFactory : ISDODataFactory) : ISDODataObject;override;
- function LoadComplexType_Class_Schema(var AFactory : ISDODataFactory) : ISDODataObject;override;
- function LoadComplexType_Class_default_values(var AFactory : ISDODataFactory) : ISDODataObject;override;
- function LoadComplexType_Class_properties_extended_metadata(var AFactory : ISDODataFactory) : ISDODataObject;override;
- function LoadComplexType_Class_properties_extended_metadata2(var AFactory : ISDODataFactory) : ISDODataObject;override;
- function LoadComplexType_Class_Embedded_Schema(var AFactory : ISDODataFactory) : ISDODataObject;override;
- function LoadComplexType_Class_Extend_Simple_Schema(var AFactory : ISDODataFactory) : ISDODataObject;override;
- function LoadComplexType_Class_OpenType(var AFactory : ISDODataFactory) : ISDODataObject;override;
- function LoadComplexType_Class_FalseArray(var AFactory : ISDODataFactory) : ISDODataObject;override;
- function LoadComplexType_ArraySequence_Schema(var AFactory : ISDODataFactory) : ISDODataObject;override;
- function LoadComplexType_ArraySequence_ItemName_Schema(var AFactory : ISDODataFactory) : ISDODataObject; override;
- function LoadComplexType_ArraySequence_Embedded_Schema(var AFactory : ISDODataFactory) : ISDODataObject; override;
- //function LoadComplexType_Array_soaparray() : ISDODataObject;override;
- function load_class_property_composed_name(var AFactory : ISDODataFactory) : ISDODataObject;override;
- function load_schema_import(var AFactory : ISDODataFactory) : ISDODataObject;override;
- end;
- implementation
- uses
- xsd_consts, sdo_xsdintf, test_suite_utils, sdo_datafactory, sdo_locators, sdo_imp_utils;
- const
- x_complexType_SampleArrayIntFieldType = 'TArrayIntFieldType';
- x_complexType_SampleArrayItemType = 'TArrayItemType';
-
- x_complexType_SampleCollectionComplexType = 'TComplexType';
- x_complexType_SampleCollectionCollectionComplexType = 'TCollectionComplexType';
- x_complexType_SampleCollectionItemType = 'TCollectionItemType';
- x_complexType_SampleDerivedType = 'TClassSampleDerivedType';
- x_complexType_SampleClassType = 'TClassSampleType';
- x_complexType_SampleClassTypeA = 'TClassSampleTypeA';
- 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_array_sequence_collection = 'complex_array_sequence_collection';
- x_complexType_array_soaparray = 'complex_array_soaparray';
-
- x_complexType_class = 'complex_class';
- x_complexType_class_default = 'complex_class_default';
- x_complexType_class_properties_extended_metadata = 'class_properties_extended_metadata';
- x_complexType_extend_simple = 'complex_class_extend_simple';
- x_complexType_class_embedded = 'complex_class_embedded';
- x_empty = 'empty';
- x_enumSample = 'EnumSample';
- x_enumSampleType = 'EnumSampleType';
- x_enumSampleLIST_COUNT = 7;
- x_enumSampleLIST : array[0..( x_enumSampleLIST_COUNT - 1 )] of string = ( 'esOne', 'esTwo', 'esThree', 'begin', 'finally', 'True', 'False' );
- x_simpleTypeAliasString = 'AliasString';
- x_simpleTypeAliasInt = 'AliasInt';
- x_simpleTypeAliasWideString = 'AliasWideString';
- x_simpleType = 'simpletype';
- x_simpleTypeEmbedded = 'simpletype_embedded';
- x_simpletypeNativeAlias = 'simpletypeNativeAlias';
- x_targetNamespace = 'urn:wst-test';
- x_byteField = 'byteField';
- x_charField = 'charField';
- x_classField = 'classField';
- x_enumField = 'enumField';
- x_field = 'field';
- x_floatField = 'floatField';
- x_intField = 'intField';
- x_longField = 'longField';
- x_strField = 'strField';
- x_intAtt = 'intAtt';
- x_strAtt = 'strAtt';
- x_Item = 'Item';
- function LoadXmlFile(const AFileName : string) : TXMLDocument;
- begin
- Result := nil;
- ReadXMLFile(Result,AFileName);
- end;
- { TTest_CustomXsdParser }
- procedure TTest_CustomXsdParser.EmptySchema();
- var
- fact :ISDODataFactory;
- tr : ISDODataObject;
- mdl : ISDODataObject;
- begin
- tr := LoadEmptySchema(fact);
- mdl := FindModule(tr,x_targetNamespace);
- CheckNotNull(mdl);
- CheckEquals(x_empty,mdl.getString(s_Name));
- CheckEquals(x_targetNamespace,mdl.getString(s_NameSpace));
- CheckEquals(0,mdl.getList(s_Type).size());
- end;
- procedure TTest_CustomXsdParser.SimpleType_Enum();
- var
- fact :ISDODataFactory;
- tr : ISDODataObject;
- mdl : ISDODataObject;
- elt : ISDODataObject;
- i : Integer;
- begin
- tr := LoadSimpleType_Enum_Schema(fact);
- mdl := FindModule(tr,x_targetNamespace);
- CheckNotNull(mdl);
- CheckEquals(x_simpleType,mdl.getString(s_Name));
- CheckEquals(x_targetNamespace,mdl.getString(s_NameSpace));
- CheckEquals(1,mdl.getList(s_Type).size());
- elt := Find(tr,x_enumSampleType);
- CheckNotNull(elt,x_enumSampleType);
- CheckEquals(ELEMENT_KIND_TYPE,elt.getByte(s_ElementKind),s_ElementKind);
- CheckEquals(x_enumSampleType,elt.getString(s_Name));
- Check(elt.getList(s_EnumValue).size() > 0,'Should have enums');
- CheckEquals(x_enumSampleLIST_COUNT,elt.getList(s_EnumValue).size());
- for i := 0 to Pred(x_enumSampleLIST_COUNT) do
- CheckEquals(x_enumSampleLIST[i],elt.getList(s_EnumValue).getString(i));
- elt := Find(tr,x_enumSample);
- CheckNotNull(elt,x_enumSample);
- CheckEquals(x_enumSample,elt.getString(s_Name));
- CheckEquals(ELEMENT_KIND_VARIABLE,elt.getByte(s_ElementKind),s_ElementKind);
- CheckNotNull(elt.getDataObject(s_DataType));
- CheckEquals(x_enumSampleType, elt.getDataObject(s_DataType).getString(s_Name));
- end;
- procedure TTest_CustomXsdParser.SimpleType_Enum_Embedded();
- var
- fact :ISDODataFactory;
- tr : ISDODataObject;
- mdl : ISDODataObject;
- elt : ISDODataObject;
- i : Integer;
- begin
- tr := LoadSimpleType_Enum_Embedded_Schema(fact);
- mdl := FindModule(tr,x_targetNamespace);
- CheckNotNull(mdl);
- CheckEquals(x_simpleTypeEmbedded,mdl.getString(s_Name));
- CheckEquals(x_targetNamespace,mdl.getString(s_NameSpace));
- CheckEquals(1,mdl.getList(s_Type).size());
- elt := Find(tr,x_enumSampleType);
- CheckNotNull(elt,x_enumSampleType);
- CheckEquals(x_enumSampleType,elt.getString(s_Name));
- CheckEquals(ELEMENT_KIND_TYPE,elt.getByte(s_ElementKind),s_ElementKind);
- Check(elt.getList(s_EnumValue).size() > 0,'Should have enums');
- CheckEquals(x_enumSampleLIST_COUNT,elt.getList(s_EnumValue).size());
- for i := 0 to Pred(x_enumSampleLIST_COUNT) do
- CheckEquals(x_enumSampleLIST[i],elt.getList(s_EnumValue).getString(i));
- end;
- procedure TTest_CustomXsdParser.SimpleType_AliasToNativeType();
- var
- fact :ISDODataFactory;
- tr : ISDODataObject;
- mdl : ISDODataObject;
- elt : ISDODataObject;
- begin
- tr := LoadSimpleType_AliasToNativeType_Schema(fact);
- mdl := FindModule(tr,x_targetNamespace);
- CheckNotNull(mdl);
- CheckEquals(x_simpletypeNativeAlias,mdl.getString(s_Name));
- CheckEquals(x_targetNamespace,mdl.getString(s_NameSpace));
- CheckEquals(2,mdl.getList(s_Variable).size());
- elt := Find(tr,x_simpleTypeAliasString);
- CheckNotNull(elt,x_simpleTypeAliasString);
- CheckEquals(x_simpleTypeAliasString,elt.getString(s_Name));
- CheckEquals(ELEMENT_KIND_VARIABLE,elt.getByte(s_ElementKind),s_ElementKind);
- CheckNotNull(elt.getDataObject(s_DataType));
- CheckEquals('string',elt.getDataObject(s_DataType).getString(s_Name));
- elt := Find(tr,x_simpleTypeAliasInt);
- CheckNotNull(elt,x_simpleTypeAliasInt);
- CheckEquals(x_simpleTypeAliasInt,elt.getString(s_Name));
- CheckEquals(ELEMENT_KIND_VARIABLE,elt.getByte(s_ElementKind),s_ElementKind);
- CheckNotNull(elt.getDataObject(s_DataType));
- CheckEquals('int',elt.getDataObject(s_DataType).getString(s_Name));
- end;
- type
- TPropertyType = ( ptField, ptAttribute );
- const
- PropertyType_Att : array[TPropertyType] of Boolean = ( False, True );
- procedure TTest_CustomXsdParser.ComplexType_Class();
- var
- tr : ISDODataObject;
- clsType : ISDODataObject;
- procedure CheckProperty(const AName,ATypeName : string; const AFieldType : TPropertyType);
- var
- prp : ISDODataObject;
- begin
- prp := clsType.getDataObject(Format('%s[%s = %s]',[s_Property,s_Name,QuotedStr(AName)]));
- CheckNotNull(prp);
- CheckEquals(AName,prp.getString(s_Name));
- CheckNotNull(prp.getDataObject(s_DataType));
- CheckEquals(ATypeName,prp.getDataObject(s_DataType).getString(s_Name));
- CheckEquals(PropertyType_Att[AFieldType],prp.getBoolean(s_IsAttribute),Format('%s.%s, %s',[clsType.getString(s_Name),AName,s_IsAttribute]));
- end;
- var
- fact :ISDODataFactory;
- mdl : ISDODataObject;
- elt : ISDODataObject;
- prpLs : ISDODataObjectList;
- begin
- tr := LoadComplexType_Class_Schema(fact);
- mdl := FindModule(tr,x_targetNamespace);
- CheckNotNull(mdl);
- CheckEquals(x_complexType_class,mdl.getString(s_Name));
- CheckEquals(x_targetNamespace,mdl.getString(s_NameSpace));
- CheckEquals(3,mdl.getList(s_Type).size());
- CheckEquals(1,mdl.getList(s_Variable).size());
- elt := Find(tr,x_complexType_SampleClassType);
- CheckNotNull(elt,x_complexType_SampleClassType);
- CheckEquals(x_complexType_SampleClassType,elt.getString(s_Name));
- CheckEquals(ELEMENT_KIND_TYPE,elt.getByte(s_ElementKind),s_ElementKind);
- clsType := elt;
- prpLs := clsType.getList(s_Property);
- CheckEquals(8,prpLs.size());
- 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 := Find(tr,x_complexType_SampleClass);
- CheckNotNull(elt,x_complexType_SampleClass);
- CheckEquals(x_complexType_SampleClass,elt.getString(s_Name));
- CheckEquals(ELEMENT_KIND_VARIABLE,elt.getByte(s_ElementKind),s_ElementKind);
- CheckNotNull(elt.getDataObject(s_DataType));
- CheckEquals(x_complexType_SampleClassType, elt.getDataObject(s_DataType).getString(s_Name));
- elt := Find(tr,x_complexType_SampleClassTypeAll);
- CheckNotNull(elt,x_complexType_SampleClassTypeAll);
- CheckEquals(x_complexType_SampleClassTypeAll,elt.getString(s_Name));
- CheckEquals(ELEMENT_KIND_TYPE,elt.getByte(s_ElementKind),s_ElementKind);
- clsType := elt;
- prpLs := clsType.getList(s_Property);
- CheckEquals(8,prpLs.size());
- 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 := Find(tr,x_complexType_SampleDerivedType);
- CheckNotNull(elt,x_complexType_SampleDerivedType);
- CheckEquals(x_complexType_SampleDerivedType,elt.getString(s_Name));
- CheckEquals(ELEMENT_KIND_TYPE,elt.getByte(s_ElementKind),s_ElementKind);
- clsType := elt;
- CheckNotNull(clsType.getDataObject(s_BaseType));
- CheckEquals(x_complexType_SampleClassType,clsType.getDataObject(s_BaseType).getString(s_Name));
- prpLs := clsType.getList(s_Property);
- CheckEquals(4,prpLs.size());
- CheckProperty(x_intField + 'Ex','int',ptField);
- CheckProperty(x_strField + 'Ex','string',ptField);
- CheckProperty(x_strAtt + 'Ex','string',ptAttribute);
- CheckProperty(x_intAtt + 'Ex','int',ptAttribute);
- end;
- procedure TTest_CustomXsdParser.ComplexType_Class_Embedded();
- var
- tr : ISDODataObject;
- nestedClassName, nestedEnumName : string;
- procedure CheckProperty(
- const AName,ATypeName : string;
- const AFieldType : TPropertyType;
- const AClsType : ISDODataObject
- );
- var
- prp : ISDODataObject;
- begin
- prp := AClsType.getDataObject(Format('%s[%s = %s]',[s_Property,s_Name,QuotedStr(AName)]));
- CheckNotNull(prp);
- CheckEquals(AName,prp.getString(s_Name));
- CheckNotNull(prp.getDataObject(s_DataType));
- CheckEquals(ATypeName,prp.getDataObject(s_DataType).getString(s_Name));
- CheckEquals(PropertyType_Att[AFieldType],prp.getBoolean(s_IsAttribute),Format('%s.%s, %s',[AClsType.getString(s_Name),AName,s_IsAttribute]));
- end;
- procedure CheckEmbeddedClassType();
- var
- e : ISDODataObject;
- prpLst : ISDODataObjectList;
- nestedClsType : ISDODataObject;
- begin
- nestedClassName := Format('%s_%s_Type',[x_complexType_SampleClassType,x_classField]);
- e := Find(tr,nestedClassName);
- CheckNotNull(e,nestedClassName);
- CheckEquals(nestedClassName,e.getString(s_Name));
- CheckEquals(ELEMENT_KIND_TYPE,e.getByte(s_ElementKind),s_ElementKind);
- nestedClsType := e;
- prpLst := nestedClsType.getList(s_Property);
- CheckEquals(4,prpLst.size(),nestedClassName + ' properties count.');
- CheckProperty(x_intField + 'E','int',ptField,nestedClsType);
- CheckProperty(x_strField + 'E','string',ptField,nestedClsType);
- CheckProperty(x_strAtt + 'E','string',ptAttribute,nestedClsType);
- CheckProperty(x_intAtt + 'E','int',ptAttribute,nestedClsType);
- end;
-
- procedure CheckEmbeddedEnum();
- var
- e : ISDODataObject;
- enumType : ISDODataObject;
- k : Integer;
- begin
- nestedEnumName := Format('%s_%s_Type',[x_complexType_SampleClassType,x_enumField]);
- e := Find(tr,nestedEnumName);
- CheckNotNull(e,nestedEnumName);
- CheckEquals(nestedEnumName,e.getString(s_Name));
- CheckEquals(ELEMENT_KIND_TYPE,e.getByte(s_ElementKind),s_ElementKind);
- enumType := e;
- CheckEquals(x_enumSampleLIST_COUNT,enumType.getList(s_EnumValue).size());
- for k := 0 to Pred(x_enumSampleLIST_COUNT) do
- CheckEquals(x_enumSampleLIST[k],enumType.getList(s_EnumValue).getString(k));
- end;
- var
- fact :ISDODataFactory;
- mdl : ISDODataObject;
- clsType : ISDODataObject;
- elt : ISDODataObject;
- prpLs : ISDODataObjectList;
- begin
- tr := LoadComplexType_Class_Embedded_Schema(fact);
- mdl := FindModule(tr,x_targetNamespace);
- CheckNotNull(mdl);
- CheckEquals(x_complexType_class_embedded,mdl.getString(s_Name));
- CheckEquals(x_targetNamespace,mdl.getString(s_NameSpace));
- CheckEquals(3,mdl.getList(s_Type).size());
- CheckEmbeddedClassType();
- CheckEmbeddedEnum();
- elt := Find(tr,x_complexType_SampleClassType);
- CheckNotNull(elt,x_complexType_SampleClassType);
- CheckEquals(x_complexType_SampleClassType,elt.getString(s_Name));
- //CheckIs(elt,TPasClassType);
- clsType := elt;
- prpLs := clsType.getList(s_Property);
- CheckEquals(9,prpLs.size());
- CheckProperty(x_intField,'int',ptField,clsType);
- CheckProperty(x_strField,'string',ptField,clsType);
- CheckProperty(x_floatField,'float',ptField,clsType);
- CheckProperty(x_byteField,'byte',ptField,clsType);
- CheckProperty(x_longField,'long',ptField,clsType);
- CheckProperty(x_strAtt,'string',ptAttribute,clsType);
- CheckProperty(x_intAtt,'int',ptAttribute,clsType);
- CheckProperty(x_classField,nestedClassName,ptField,clsType);
- CheckProperty(x_enumField,nestedEnumName,ptField,clsType);
- end;
- procedure TTest_CustomXsdParser.ComplexType_Class_Extend_Simple_Schema();
- var
- tr : ISDODataObject;
- clsType : ISDODataObject;
- procedure CheckProperty(const AName,ATypeName : string; const AFieldType : TPropertyType);
- var
- prp : ISDODataObject;
- begin
- prp := clsType.getDataObject(Format('%s[%s = %s]',[s_Property,s_Name,QuotedStr(AName)]));
- CheckNotNull(prp);
- CheckEquals(AName,prp.getString(s_Name));
- CheckNotNull(prp.getDataObject(s_DataType));
- CheckEquals(ATypeName,prp.getDataObject(s_DataType).getString(s_Name));
- CheckEquals(PropertyType_Att[AFieldType],prp.getBoolean(s_IsAttribute),Format('%s.%s, %s',[clsType.getString(s_Name),AName,s_IsAttribute]));
- end;
- var
- fact :ISDODataFactory;
- mdl : ISDODataObject;
- elt : ISDODataObject;
- prpLs : ISDODataObjectList;
- begin
- tr := LoadComplexType_Class_Extend_Simple_Schema(fact);
- mdl := FindModule(tr,x_targetNamespace);
- CheckNotNull(mdl);
- CheckEquals(x_complexType_extend_simple,mdl.getString(s_Name));
- CheckEquals(x_targetNamespace,mdl.getString(s_NameSpace));
- CheckEquals(2,mdl.getList(s_Type).size());
- elt := Find(tr,x_complexType_SampleClassType);
- CheckNotNull(elt,x_complexType_SampleClassType);
- CheckEquals(x_complexType_SampleClassType,elt.getString(s_Name));
- CheckEquals(ELEMENT_KIND_TYPE,elt.getByte(s_ElementKind),s_ElementKind);
- clsType := elt;
- CheckNotNull(clsType.getDataObject(s_BaseType),'AncestorType is null');
- Check(Find(tr,XSD_NAME_SPACE,'string') = clsType.getDataObject(s_BaseType));
- prpLs := clsType.getList(s_Property);
- CheckEquals(1,prpLs.size());
- CheckProperty(x_intField,'int',ptAttribute);
- elt := Find(tr,x_complexType_SampleClassTypeA);
- CheckNotNull(elt,x_complexType_SampleClassTypeA);
- CheckEquals(x_complexType_SampleClassTypeA,elt.getString(s_Name));
- CheckEquals(ELEMENT_KIND_TYPE,elt.getByte(s_ElementKind),s_ElementKind);
- clsType := elt;
- CheckNotNull(clsType.getDataObject(s_BaseType),'AncestorType is null');
- Check(Find(tr,XSD_NAME_SPACE,'base64Binary') = clsType.getDataObject(s_BaseType));
- prpLs := clsType.getList(s_Property);
- CheckEquals(1,prpLs.size());
- CheckProperty(x_floatField,'float',ptAttribute);
- end;
- procedure TTest_CustomXsdParser.ComplexType_Class_open_type_any();
- var
- fact :ISDODataFactory;
- tr : ISDODataObject;
- clsType : ISDODataObject;
- mdl : ISDODataObject;
- elt : ISDODataObject;
- strBuffer : string;
- ls : TStringList;
- begin
- tr := LoadComplexType_Class_OpenType(fact);
- mdl := FindModule(tr,x_targetNamespace);
- CheckNotNull(mdl);
- elt := Find(tr,'TClass_1');
- CheckNotNull(elt,'TClass_1');
- CheckEquals(ELEMENT_KIND_TYPE,elt.getByte(s_ElementKind),s_ElementKind);
- clsType := elt;
- strBuffer := FindTag(clsType,Format('%s#%s',[s_xs,s_any]));
- Check(Length(strBuffer) > 0, s_any);
- ls := TStringList.Create();
- try
- ls.Delimiter := ';';
- ls.DelimitedText := strBuffer;
- CheckEquals('lax',ls.Values[s_processContents]);
- CheckEquals('0',ls.Values[s_minOccurs]);
- CheckEquals(s_unbounded,ls.Values[s_maxOccurs]);
- finally
- ls.Free();
- end;
- end;
- procedure TTest_CustomXsdParser.ComplexType_Class_open_extension_type_any();
- var
- fact :ISDODataFactory;
- tr : ISDODataObject;
- clsType : ISDODataObject;
- mdl : ISDODataObject;
- elt : ISDODataObject;
- strBuffer : string;
- ls : TStringList;
- begin
- tr := LoadComplexType_Class_OpenType(fact);
- mdl := FindModule(tr,x_targetNamespace);
- CheckNotNull(mdl);
- elt := Find(tr,'TClassSampleDerivedType');
- CheckNotNull(elt,'TClassSampleDerivedType');
- CheckEquals(ELEMENT_KIND_TYPE,elt.getByte(s_ElementKind),s_ElementKind);
- clsType := elt;
- strBuffer := FindTag(clsType,Format('%s#%s',[s_xs,s_any]));
- Check(Length(strBuffer) > 0, s_any);
- ls := TStringList.Create();
- try
- ls.Delimiter := ';';
- ls.DelimitedText := strBuffer;
- CheckEquals('skip',ls.Values[s_processContents]);
- CheckEquals(s_unbounded,ls.Values[s_maxOccurs]);
- finally
- ls.Free();
- end;
- end;
- procedure TTest_CustomXsdParser.ComplexType_Class_open_extension_type_anyAttribute();
- var
- fact :ISDODataFactory;
- tr : ISDODataObject;
- clsType : ISDODataObject;
- mdl : ISDODataObject;
- elt : ISDODataObject;
- strBuffer : string;
- ls : TStringList;
- begin
- tr := LoadComplexType_Class_OpenType(fact);
- mdl := FindModule(tr,x_targetNamespace);
- CheckNotNull(mdl);
- elt := Find(tr,'TClassSampleDerivedType');
- CheckNotNull(elt,'TClassSampleDerivedType');
- CheckEquals(ELEMENT_KIND_TYPE,elt.getByte(s_ElementKind),s_ElementKind);
- clsType := elt;
- strBuffer := FindTag(clsType,Format('%s#%s',[s_xs,s_anyAttribute]));
- Check(Length(strBuffer) > 0, s_anyAttribute);
- ls := TStringList.Create();
- try
- ls.Delimiter := ';';
- ls.DelimitedText := strBuffer;
- CheckEquals('lax',ls.Values[s_processContents]);
- finally
- ls.Free();
- end;
- end;
- procedure TTest_CustomXsdParser.ComplexType_Class_sequence_open_type_anyAttribute();
- var
- fact :ISDODataFactory;
- tr : ISDODataObject;
- clsType : ISDODataObject;
- mdl : ISDODataObject;
- elt : ISDODataObject;
- strBuffer : string;
- ls : TStringList;
- begin
- tr := LoadComplexType_Class_OpenType(fact);
- mdl := FindModule(tr,x_targetNamespace);
- CheckNotNull(mdl);
- elt := Find(tr,'TClass_1');
- CheckNotNull(elt,'TClass_1');
- CheckEquals(ELEMENT_KIND_TYPE,elt.getByte(s_ElementKind),s_ElementKind);
- clsType := elt;
- strBuffer := FindTag(clsType,Format('%s#%s',[s_xs,s_anyAttribute]));
- Check(Length(strBuffer) > 0, s_anyAttribute);
- ls := TStringList.Create();
- try
- ls.Delimiter := ';';
- ls.DelimitedText := strBuffer;
- CheckEquals('strict',ls.Values[s_processContents]);
- finally
- ls.Free();
- end;
- end;
- procedure TTest_CustomXsdParser.ComplexType_Class_all_open_type_anyAttribute();
- var
- fact :ISDODataFactory;
- tr : ISDODataObject;
- clsType : ISDODataObject;
- mdl : ISDODataObject;
- elt : ISDODataObject;
- strBuffer : string;
- ls : TStringList;
- begin
- tr := LoadComplexType_Class_OpenType(fact);
- mdl := FindModule(tr,x_targetNamespace);
- CheckNotNull(mdl);
- elt := Find(tr,'TClassSampleTypeAll');
- CheckNotNull(elt,'TClassSampleTypeAll');
- CheckEquals(ELEMENT_KIND_TYPE,elt.getByte(s_ElementKind),s_ElementKind);
- clsType := elt;
- strBuffer := FindTag(clsType,Format('%s#%s',[s_xs,s_anyAttribute]));
- Check(Length(strBuffer) > 0, s_anyAttribute);
- ls := TStringList.Create();
- try
- ls.Delimiter := ';';
- ls.DelimitedText := strBuffer;
- CheckEquals('skip',ls.Values[s_processContents]);
- finally
- ls.Free();
- end;
- end;
- procedure TTest_CustomXsdParser.ComplexType_Class_FalseArray();
- var
- tr : ISDODataObject;
- clsType : ISDODataObject;
- procedure CheckProperty(const AName,ATypeName : string; const AFieldType : TPropertyType);
- var
- prp : ISDODataObject;
- begin
- prp := clsType.getDataObject(Format('%s[%s = %s]',[s_Property,s_Name,QuotedStr(AName)]));
- CheckNotNull(prp);
- CheckEquals(AName,prp.getString(s_Name));
- CheckNotNull(prp.getDataObject(s_DataType));
- CheckEquals(ATypeName,prp.getDataObject(s_DataType).getString(s_Name));
- CheckEquals(PropertyType_Att[AFieldType],prp.getBoolean(s_IsAttribute),Format('%s.%s, %s',[clsType.getString(s_Name),AName,s_IsAttribute]));
- end;
- var
- fact :ISDODataFactory;
- mdl : ISDODataObject;
- elt : ISDODataObject;
- prpLs : ISDODataObjectList;
- prp : ISDODataObject;
- begin
- tr := LoadComplexType_Class_FalseArray(fact);
- mdl := FindModule(tr,x_targetNamespace);
- CheckNotNull(mdl);
- CheckEquals('complex_class_false_array',mdl.getString(s_Name));
- CheckEquals(x_targetNamespace,mdl.getString(s_NameSpace));
- CheckEquals(2,mdl.getList(s_Type).size());
- elt := Find(tr,x_complexType_SampleClassType);
- CheckNotNull(elt,x_complexType_SampleClassType);
- CheckEquals(x_complexType_SampleClassType,elt.getString(s_Name));
- CheckEquals(ELEMENT_KIND_TYPE,elt.getByte(s_ElementKind),s_ElementKind);
- clsType := elt;
- prpLs := clsType.getList(s_Property);
- CheckEquals(2,prpLs.size());
- CheckProperty(x_intField,'int',ptField);
- CheckProperty(x_strField,'string',ptField);
- elt := Find(tr,x_complexType_SampleDerivedType);
- CheckNotNull(elt,x_complexType_SampleDerivedType);
- CheckEquals(x_complexType_SampleDerivedType,elt.getString(s_Name));
- CheckEquals(ELEMENT_KIND_TYPE,elt.getByte(s_ElementKind),s_ElementKind);
- clsType := elt;
- CheckNotNull(clsType.getDataObject(s_BaseType));
- CheckEquals(x_complexType_SampleClassType,clsType.getDataObject(s_BaseType).getString(s_Name));
- prpLs := clsType.getList(s_Property);
- CheckEquals(1,prpLs.size());
- prp := prpLs.getDataObject(0);
- Check(prp.getInteger(s_PropertyMaxOccurs) > 1);
- CheckEquals(x_intField + 'Ex', prp.getString(s_Name));
- end;
- procedure TTest_CustomXsdParser.ComplexType_ArraySequence();
- var
- tr : ISDODataObject;
- clsType : ISDODataObject;
- procedure CheckProperty(
- const AName,
- ATypeName : string;
- const AFieldType : TPropertyType;
- const AIsMulti : Boolean = False
- );
- var
- prp : ISDODataObject;
- begin
- prp := clsType.getDataObject(Format('%s[%s = %s]',[s_Property,s_Name,QuotedStr(AName)]));
- CheckNotNull(prp);
- CheckEquals(AName,prp.getString(s_Name));
- CheckNotNull(prp.getDataObject(s_DataType));
- CheckEquals(ATypeName,prp.getDataObject(s_DataType).getString(s_Name));
- CheckEquals(PropertyType_Att[AFieldType],prp.getBoolean(s_IsAttribute),Format('%s.%s, %s',[clsType.getString(s_Name),AName,s_IsAttribute]));
- if AIsMulti then
- Check(prp.getInteger(s_PropertyMaxOccurs) > 1)
- else
- CheckEquals(1, prp.getInteger(s_PropertyMaxOccurs)) ;
- end;
- var
- fact :ISDODataFactory;
- mdl : ISDODataObject;
- elt : ISDODataObject;
- prpLs : ISDODataObjectList;
- nestedClassName : string;
- begin
- tr := LoadComplexType_ArraySequence_Schema(fact);
- mdl := FindModule(tr,x_targetNamespace);
- CheckNotNull(mdl);
- CheckEquals(x_complexType_array_sequence,mdl.getString(s_Name));
- CheckEquals(x_targetNamespace,mdl.getString(s_NameSpace));
- CheckEquals(3,mdl.getList(s_Type).size());
- elt := Find(tr,x_complexType_SampleArrayIntFieldType);
- CheckNotNull(elt,x_complexType_SampleArrayIntFieldType);
- CheckEquals(x_complexType_SampleArrayIntFieldType,elt.getString(s_Name));
- CheckEquals(ELEMENT_KIND_TYPE,elt.getByte(s_ElementKind),s_ElementKind);
- clsType := elt;
- CheckEquals(1,clsType.getList(s_Property).size());
- CheckProperty(x_intField,'int',ptField,True);
- nestedClassName := Format('%s_%s_Type',[x_complexType_SampleArrayItemType,x_Item]);
- elt := Find(tr,nestedClassName);
- CheckNotNull(elt,nestedClassName);
- CheckEquals(nestedClassName,elt.getString(s_Name),'Item Name');
- CheckEquals(ELEMENT_KIND_TYPE,elt.getByte(s_ElementKind),s_ElementKind);
- clsType := elt;
- prpLs := clsType.getList(s_Property);
- CheckEquals(8,prpLs.size());
- 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 := Find(tr,x_complexType_SampleArrayItemType);
- CheckNotNull(elt,x_complexType_SampleArrayItemType);
- CheckEquals(x_complexType_SampleArrayItemType,elt.getString(s_Name), 'Array name');
- CheckEquals(ELEMENT_KIND_TYPE,elt.getByte(s_ElementKind),s_ElementKind);
- clsType := elt;
- CheckProperty(x_Item,nestedClassName,ptField,True);
- end;
- procedure TTest_CustomXsdParser.ComplexType_ArraySequence_ItemName_Schema();
- var
- clsType : ISDODataObject;
- procedure CheckProperty(
- const AName,
- ATypeName : string;
- const AFieldType : TPropertyType;
- const AIsMulti : Boolean = False
- );
- var
- prp : ISDODataObject;
- begin
- prp := clsType.getDataObject(Format('%s[%s = %s]',[s_Property,s_Name,QuotedStr(AName)]));
- CheckNotNull(prp);
- CheckEquals(AName,prp.getString(s_Name));
- CheckNotNull(prp.getDataObject(s_DataType));
- CheckEquals(ATypeName,prp.getDataObject(s_DataType).getString(s_Name));
- CheckEquals(PropertyType_Att[AFieldType],prp.getBoolean(s_IsAttribute),Format('%s.%s, %s',[clsType.getString(s_Name),AName,s_IsAttribute]));
- if AIsMulti then
- Check(prp.getInteger(s_PropertyMaxOccurs) > 1)
- else
- CheckEquals(1, prp.getInteger(s_PropertyMaxOccurs)) ;
- end;
- var
- fact :ISDODataFactory;
- tr : ISDODataObject;
- mdl : ISDODataObject;
- elt : ISDODataObject;
- begin
- tr := LoadComplexType_ArraySequence_ItemName_Schema(fact);
- mdl := FindModule(tr,x_targetNamespace);
- CheckNotNull(mdl);
- CheckEquals('array_sequence_item_name',mdl.getString(s_Name));
- CheckEquals(x_targetNamespace,mdl.getString(s_NameSpace));
- CheckEquals(2,mdl.getList(s_Type).size());
- elt := Find(tr,'ArrayOfEmailAddress');
- CheckNotNull(elt,'ArrayOfEmailAddress');
- CheckEquals('ArrayOfEmailAddress',elt.getString(s_Name));
- CheckEquals(ELEMENT_KIND_TYPE,elt.getByte(s_ElementKind),s_ElementKind);
- clsType := elt;
- CheckProperty('EmailAddress','EmailAddress',ptField,True);
- end;
- procedure TTest_CustomXsdParser.ComplexType_ArraySequence_Embedded();
- var
- tr : ISDODataObject;
- clsType : ISDODataObject;
- procedure CheckProperty(
- const AName,
- ATypeName : string;
- const AFieldType : TPropertyType;
- const AIsMulti : Boolean = False
- );
- var
- prp : ISDODataObject;
- begin
- prp := clsType.getDataObject(Format('%s[%s = %s]',[s_Property,s_Name,QuotedStr(AName)]));
- CheckNotNull(prp);
- CheckEquals(AName,prp.getString(s_Name));
- CheckNotNull(prp.getDataObject(s_DataType));
- CheckEquals(ATypeName,prp.getDataObject(s_DataType).getString(s_Name));
- CheckEquals(PropertyType_Att[AFieldType],prp.getBoolean(s_IsAttribute),Format('%s.%s, %s',[clsType.getString(s_Name),AName,s_IsAttribute]));
- if AIsMulti then
- Check(prp.getInteger(s_PropertyMaxOccurs) > 1)
- else
- CheckEquals(1, prp.getInteger(s_PropertyMaxOccurs)) ;
- end;
- var
- fact :ISDODataFactory;
- mdl : ISDODataObject;
- elt : ISDODataObject;
- nestedClassName : string;
- begin
- tr := LoadComplexType_ArraySequence_Schema(fact);
- mdl := FindModule(tr,x_targetNamespace);
- CheckNotNull(mdl);
- CheckEquals(x_complexType_array_sequence,mdl.getString(s_Name));
- CheckEquals(x_targetNamespace,mdl.getString(s_NameSpace));
- CheckEquals(3,mdl.getList(s_Type).size());
- elt := Find(tr,x_complexType_SampleArrayIntFieldType);
- CheckNotNull(elt,x_complexType_SampleArrayIntFieldType);
- CheckEquals(x_complexType_SampleArrayIntFieldType,elt.getString(s_Name));
- CheckEquals(ELEMENT_KIND_TYPE,elt.getByte(s_ElementKind),s_ElementKind);
- clsType := elt;
- CheckProperty(x_intField,'int',ptField,True);
- nestedClassName := Format('%s_%s_Type',[x_complexType_SampleArrayItemType,x_Item]);
- elt := Find(tr,nestedClassName);
- CheckNotNull(elt,nestedClassName);
- CheckEquals(nestedClassName,elt.getString(s_Name),'Item Name');
- CheckEquals(ELEMENT_KIND_TYPE,elt.getByte(s_ElementKind),s_ElementKind);
- clsType := elt;
- CheckEquals(8,clsType.getList(s_Property).size());
- 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 := Find(tr,x_complexType_SampleArrayItemType);
- CheckNotNull(elt,x_complexType_SampleArrayItemType);
- CheckEquals(x_complexType_SampleArrayItemType,elt.getString(s_Name), 'Array name');
- CheckEquals(ELEMENT_KIND_TYPE,elt.getByte(s_ElementKind),s_ElementKind);
- clsType := elt;
- CheckProperty(x_Item,nestedClassName,ptField,True);
- end;
- {procedure TTest_CustomXsdParser.ComplexType_Array_soaparray();
- var
- tr : ISDODataObject;
- mdl : TPasModule;
- ls : TList;
- elt : TPasElement;
- arrayType : TPasArrayType;
- begin
- tr := LoadComplexType_Array_soaparray();
- try
- mdl := FindModule(tr,x_targetNamespace);
- CheckNotNull(mdl);
- CheckEquals(x_complexType_array_soaparray,mdl.getString(s_Name));
- CheckEquals(x_targetNamespace,mdl.getString(s_NameSpace));
- ls := mdl.InterfaceSection.Declarations;
- CheckEquals(1,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('item',tr.GetArrayItemName(arrayType));
- CheckEquals('item',tr.GetArrayItemExternalName(arrayType));
- CheckNull(tr.FindElementNS('Array','http://schemas.xmlsoap.org/wsdl/'));
- finally
- tr.Free();
- end;
- end;
- procedure TTest_CustomXsdParser.class_widestring_property();
- const s_class_name = 'TSampleClass';
- var
- clsType : TPasClassType;
- tr : ISDODataObject;
- procedure CheckProperty(const AName,ATypeName,ADeclaredTypeName : 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,prp.VarType.Name,'TypeName');
- CheckEquals(ADeclaredTypeName,tr.GetExternalName(prp.VarType),'DeclaredTypeName');
- CheckEquals(PropertyType_Att[AFieldType],tr.IsAttributeProperty(prp));
- end;
- var
- mdl : TPasModule;
- elt : TPasElement;
- begin
- tr := load_class_widestring_property();
- try
- mdl := tr.FindModule('class_widestring_property');
- CheckNotNull(mdl,'class_widestring_property');
- elt := tr.FindElement(s_class_name);
- CheckNotNull(elt,s_class_name);
- CheckEquals(s_class_name,elt.Name);
- CheckEquals(s_class_name,tr.GetExternalName(elt));
- CheckIs(elt,TPasClassType);
- clsType := elt as TPasClassType;
- CheckProperty('elementProp','WideString','string',ptField);
- CheckProperty('elementAtt','WideString','string',ptAttribute);
- finally
- tr.Free();
- end;
- end;}
- procedure TTest_CustomXsdParser.ComplexType_Class_default_values();
- var
- tr : ISDODataObject;
- clsType : ISDODataObject;
- procedure CheckProperty(
- const AName,
- ATypeName : string;
- const AFieldType : TPropertyType;
- const ADefault : string
- );
- var
- prp : ISDODataObject;
- begin
- prp := clsType.getDataObject(Format('%s[%s = %s]',[s_Property,s_Name,QuotedStr(AName)]));
- CheckNotNull(prp);
- CheckEquals(AName,prp.getString(s_Name));
- CheckNotNull(prp.getDataObject(s_DataType));
- CheckEquals(ATypeName,prp.getDataObject(s_DataType).getString(s_Name));
- CheckEquals(PropertyType_Att[AFieldType],prp.getBoolean(s_IsAttribute),Format('%s.%s, %s',[clsType.getString(s_Name),AName,s_IsAttribute]));
- CheckEquals(ADefault,prp.getString(s_DefaultValue),Format('%s.%s, default',[clsType.getString(s_Name),AName]));
- end;
- var
- fact :ISDODataFactory;
- mdl : ISDODataObject;
- elt : ISDODataObject;
- prpLs : ISDODataObjectList;
- begin
- tr := LoadComplexType_Class_default_values(fact);
- mdl := FindModule(tr,x_targetNamespace);
- CheckNotNull(mdl);
- CheckEquals(x_complexType_class_default,mdl.getString(s_Name));
- CheckEquals(x_targetNamespace,mdl.getString(s_NameSpace));
- CheckEquals(1,mdl.getList(s_Type).size());
- elt := Find(tr,x_complexType_SampleClassType);
- CheckNotNull(elt,x_complexType_SampleClassType);
- CheckEquals(x_complexType_SampleClassType,elt.getString(s_Name));
- CheckEquals(ELEMENT_KIND_TYPE,elt.getByte(s_ElementKind),s_ElementKind);
- clsType := elt;
- prpLs := clsType.getList(s_Property);
- CheckEquals(8,prpLs.size());
- CheckProperty(x_intField,'int',ptField,'1210');
- CheckProperty(x_strField,'string',ptField,'azerty');
- CheckProperty(x_floatField,'float',ptField,'1234');
- CheckProperty(x_byteField,'byte',ptField,'23');
- CheckProperty(x_charField,'char',ptField,'i');
- CheckProperty(x_longField,'long',ptField,'567');
- CheckProperty(x_strAtt,'string',ptAttribute,'attribute azerty');
- CheckProperty(x_intAtt,'int',ptAttribute,'789');
- end;
- procedure TTest_CustomXsdParser.ComplexType_Class_properties_extended_metadata();
- var
- tr : ISDODataObject;
- clsType : ISDODataObject;
- procedure CheckProperty(
- const AName,
- ATypeName : string;
- const AFieldType : TPropertyType;
- const ADefault : string;
- const AExtMetaDataNameSpace,
- AExtMetaDataLocalName,
- AExtMetaDataValue : string
- );
- var
- prp : ISDODataObject;
- locExtMeta : string;
- begin
- prp := clsType.getDataObject(Format('%s[%s = %s]',[s_Property,s_Name,QuotedStr(AName)]));
- CheckNotNull(prp);
- CheckEquals(AName,prp.getString(s_Name));
- CheckNotNull(prp.getDataObject(s_DataType));
- CheckEquals(ATypeName,prp.getDataObject(s_DataType).getString(s_Name));
- CheckEquals(PropertyType_Att[AFieldType],prp.getBoolean(s_IsAttribute),Format('%s.%s, %s',[clsType.getString(s_Name),AName,s_IsAttribute]));
- CheckEquals(ADefault,prp.getString(s_DefaultValue),Format('%s.%s, default',[clsType.getString(s_Name),AName]));
- locExtMeta := Format('%s#%s',[AExtMetaDataNameSpace,AExtMetaDataLocalName]);
- if not IsStrEmpty(locExtMeta) then
- CheckEquals(AExtMetaDataValue, FindTag(prp,locExtMeta), 'extended metadata');
- end;
- var
- fact :ISDODataFactory;
- mdl : ISDODataObject;
- elt : ISDODataObject;
- prpLs : ISDODataObjectList;
- begin
- tr := LoadComplexType_Class_properties_extended_metadata(fact);
- mdl := FindModule(tr,x_targetNamespace);
- CheckNotNull(mdl);
- CheckEquals(x_complexType_class_properties_extended_metadata,mdl.getString(s_Name));
- CheckEquals(x_targetNamespace,mdl.getString(s_NameSpace));
- CheckEquals(1,mdl.getList(s_Type).size());
- elt := Find(tr,x_complexType_SampleClassType);
- CheckNotNull(elt,x_complexType_SampleClassType);
- CheckEquals(x_complexType_SampleClassType,elt.getString(s_Name));
- CheckEquals(ELEMENT_KIND_TYPE,elt.getByte(s_ElementKind),s_ElementKind);
- clsType := elt;
- prpLs := clsType.getList(s_Property);
- CheckEquals(5,prpLs.size());
- CheckProperty(x_intField,'int',ptField,'', 'uri-4','a','1210');
- CheckProperty(x_intField,'int',ptField,'', 'uri-4','b','uri-5#xx');
- CheckProperty(x_strField,'string',ptField,'azerty', 'uri-4','a', 'http://www.w3.org/2001/XMLSchema#int');
- CheckProperty(x_strAtt,'string',ptAttribute,'attribute azerty', 'uri-4','a', 'optional');
- CheckProperty(x_intAtt,'int',ptAttribute,'', '', '', '');
- end;
- procedure TTest_CustomXsdParser.ComplexType_Class_properties_extended_metadata2();
- const s_ProjectType = 'ProjectType';
- var
- fact :ISDODataFactory;
- tr : ISDODataObject;
- clsType : ISDODataObject;
- mdl : ISDODataObject;
- elt : ISDODataObject;
- p : ISDODataObject;
- begin
- tr := LoadComplexType_Class_properties_extended_metadata2(fact);
- mdl := FindModule(tr,'uri:sample');
- CheckNotNull(mdl);
- elt := Find(tr,s_ProjectType);
- CheckNotNull(elt,s_ProjectType);
- CheckEquals(ELEMENT_KIND_TYPE,elt.getByte(s_ElementKind),s_ElementKind);
- clsType := elt;
- p := clsType.getDataObject(Format('%s[%s = %s]',[s_Property,s_Name,QuotedStr('ProjectLeader')]));
- CheckNotNull(p,'Property non found : "ProjectLeader"');
- CheckEquals('uri:sample#Person', FindTag(p,'commonj.sdo#propertyType'), 'extended metadata');
- p := clsType.getDataObject(Format('%s[%s = %s]',[s_Property,s_Name,QuotedStr('ProjectLeaderArray')]));
- CheckNotNull(p,'Property non found : "ProjectLeaderArray"');
- CheckEquals('uri:sample#Person', FindTag(p,'commonj.sdo#propertyType'), 'extended metadata');
- end;
- procedure TTest_CustomXsdParser.class_property_composed_name();
- const s_class_name = 'TSampleClass';
- var
- clsType : ISDODataObject;
- tr : ISDODataObject;
- procedure CheckProperty(
- const AName,
- ATypeName : string;
- const AFieldType : TPropertyType
- );
- var
- prp : ISDODataObject;
- begin
- prp := clsType.getDataObject(Format('%s[%s = %s]',[s_Property,s_Name,QuotedStr(AName)]));
- CheckNotNull(prp);
- CheckEquals(AName,prp.getString(s_Name));
- CheckNotNull(prp.getDataObject(s_DataType));
- CheckEquals(ATypeName,prp.getDataObject(s_DataType).getString(s_Name));
- CheckEquals(PropertyType_Att[AFieldType],prp.getBoolean(s_IsAttribute),Format('%s.%s, %s',[clsType.getString(s_Name),AName,s_IsAttribute]));
- end;
- var
- fact :ISDODataFactory;
- mdl : ISDODataObject;
- elt : ISDODataObject;
- begin
- tr := load_class_property_composed_name(fact);
- mdl := FindModule(tr,'urn_sample');
- CheckNotNull(mdl,'urn_sample');
- elt := Find(tr,s_class_name);
- CheckNotNull(elt,s_class_name);
- CheckEquals(ELEMENT_KIND_TYPE,elt.getByte(s_ElementKind),s_ElementKind);
- clsType := elt;
- CheckProperty('one-prop','string',ptField);
- CheckProperty('one-two-prop','string',ptAttribute);
- end;
- procedure TTest_CustomXsdParser.schema_import();
- const
- s_base_namespace = 'urn:base-library';
- s_base_type = 'SampleBase_Type';
- s_second_namespace = 'urn:second-library';
- s_second_type = 'Second_Type';
- var
- fact :ISDODataFactory;
- tr : ISDODataObject;
- mdl : ISDODataObject;
- elt, prpElt : ISDODataObject;
- baseType, scdClass : ISDODataObject;
- begin
- tr := load_schema_import(fact);
- mdl := FindModule(tr,s_base_namespace);
- CheckNotNull(mdl,s_base_namespace);
- CheckEquals(1,mdl.getList(s_Type).size());
- elt := Find(tr,s_base_namespace,s_base_type);
- CheckNotNull(elt,s_base_type);
- CheckEquals(ELEMENT_KIND_TYPE,elt.getByte(s_ElementKind),s_ElementKind);
- baseType := elt;
- mdl := FindModule(tr,s_second_namespace);
- CheckNotNull(mdl,s_second_namespace);
- CheckEquals(1,mdl.getList(s_Type).size());
- elt := Find(tr,s_second_namespace,s_second_type);
- CheckNotNull(elt,s_second_type);
- CheckEquals(ELEMENT_KIND_TYPE,elt.getByte(s_ElementKind),s_ElementKind);
- scdClass := elt;
- prpElt := scdClass.getDataObject(Format('%s[%s = %s]',[s_Property,s_Name,QuotedStr('SampleProperty')]));
- CheckNotNull(prpElt);
- Check(baseType = prpElt.getDataObject(s_DataType));
- end;
- { TTest_XsdParser }
- function TTest_XsdParser.ParseDoc(var AFactory : ISDODataFactory; const ADoc: string): ISDODataObject;
- var
- locDoc : TXMLDocument;
- prs : IXsdParser;
- prsCtx : IParserContext;
- fileName : string;
- begin
- if (AFactory = nil) then begin
- AFactory := TSDODataFactory.Create();
- AddTypeTree(AFactory);
- end;
- fileName := sdoExpandLocalFileName(XsdTestFilesPath + ADoc + '.xsd');
- locDoc := LoadXmlFile(fileName);
- try
- Result := AFactory.CreateNew(s_XsdParserNS,s_TypeTreeType);
- prs := TXsdParser.Create(locDoc,Result,ADoc);
- prsCtx := prs as IParserContext;
- prsCtx.SetDocumentLocator(TFileDocumentLocator.Create(ExtractFilePath(fileName)));
- prs.ParseTypes();
- finally
- ReleaseDomNode(locDoc);
- end;
- end;
- function TTest_XsdParser.LoadEmptySchema(var AFactory : ISDODataFactory): ISDODataObject;
- begin
- Result := ParseDoc(AFactory, x_empty);
- end;
- function TTest_XsdParser.LoadSimpleType_Enum_Schema(var AFactory : ISDODataFactory): ISDODataObject;
- begin
- Result := ParseDoc(AFactory, x_simpleType);
- end;
- function TTest_XsdParser.LoadSimpleType_Enum_Embedded_Schema(var AFactory : ISDODataFactory): ISDODataObject;
- begin
- Result := ParseDoc(AFactory, x_simpleTypeEmbedded);
- end;
- function TTest_XsdParser.LoadSimpleType_AliasToNativeType_Schema(var AFactory : ISDODataFactory) : ISDODataObject;
- begin
- Result := ParseDoc(AFactory, x_simpletypeNativeAlias);
- end;
- function TTest_XsdParser.LoadComplexType_Class_Schema(var AFactory : ISDODataFactory): ISDODataObject;
- begin
- Result := ParseDoc(AFactory, x_complexType_class);
- end;
- function TTest_XsdParser.LoadComplexType_Class_Embedded_Schema(var AFactory : ISDODataFactory): ISDODataObject;
- begin
- Result := ParseDoc(AFactory, x_complexType_class_embedded);
- end;
- function TTest_XsdParser.LoadComplexType_Class_Extend_Simple_Schema(var AFactory : ISDODataFactory) : ISDODataObject;
- begin
- Result := ParseDoc(AFactory, x_complexType_extend_simple);
- end;
- function TTest_XsdParser.LoadComplexType_Class_OpenType(var AFactory : ISDODataFactory): ISDODataObject;
- begin
- Result := ParseDoc(AFactory, 'complex_class_open_type');
- end;
- function TTest_XsdParser.LoadComplexType_ArraySequence_Schema(var AFactory : ISDODataFactory): ISDODataObject;
- begin
- Result := ParseDoc(AFactory, x_complexType_array_sequence);
- end;
- function TTest_XsdParser.LoadComplexType_ArraySequence_Embedded_Schema(var AFactory : ISDODataFactory): ISDODataObject;
- begin
- Result := ParseDoc(AFactory, x_complexType_array_sequence_embedded);
- end;
- {function TTest_XsdParser.LoadComplexType_Array_soaparray() : ISDODataObject;
- begin
- Result := ParseDoc(x_complexType_array_soaparray);
- end; }
- function TTest_XsdParser.LoadComplexType_Class_default_values(var AFactory : ISDODataFactory) : ISDODataObject;
- begin
- Result := ParseDoc(AFactory,x_complexType_class_default);
- end;
- function TTest_XsdParser.LoadComplexType_Class_properties_extended_metadata(var AFactory : ISDODataFactory): ISDODataObject;
- begin
- Result := ParseDoc(AFactory, x_complexType_class_properties_extended_metadata);
- end;
- function TTest_XsdParser.LoadComplexType_Class_properties_extended_metadata2(var AFactory : ISDODataFactory): ISDODataObject;
- begin
- Result := ParseDoc(AFactory, x_complexType_class_properties_extended_metadata + '_2');
- end;
- function TTest_XsdParser.load_class_property_composed_name(var AFactory : ISDODataFactory) : ISDODataObject;
- begin
- Result := ParseDoc(AFactory, 'class_property_composed_name');
- end;
- function TTest_XsdParser.load_schema_import(var AFactory : ISDODataFactory): ISDODataObject;
- begin
- Result := ParseDoc(AFactory, 'import_second_library');
- end;
- function TTest_XsdParser.LoadComplexType_ArraySequence_ItemName_Schema(var AFactory : ISDODataFactory) : ISDODataObject;
- begin
- Result := ParseDoc(AFactory, 'array_sequence_item_name');
- end;
- function TTest_XsdParser.LoadComplexType_Class_FalseArray(var AFactory : ISDODataFactory) : ISDODataObject;
- begin
- Result := ParseDoc(AFactory, 'complex_class_false_array');
- end;
- initialization
- RegisterTest('XSD parser',TTest_XsdParser.Suite);
- end.
|