123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163 |
- {$INCLUDE sdo_global.inc}
- unit test_xpathhelper;
- interface
- uses SysUtils
- {$IFDEF FPC}
- ,fpcunit, testutils, testregistry
- {$ENDIF}
- {$IFNDEF FPC}
- ,TestFrameWork
- {$ENDIF}
- , test_suite_utils, sdo, sdo_types, sdo_xpath_helper;
- type
- TXPathScanner_Test = class(TWstBaseTest)
- published
- procedure simple();
- procedure simple_number();
- procedure composed_1();
- end;
- TXPathParser_Test = class(TWstBaseTest)
- published
- procedure parse_1();
- procedure parse_2();
- procedure parse_3();
- procedure parse_4();
- procedure parse_5();
- procedure parse_6();
- procedure parse_7();
- procedure parse_8();
- procedure parse_9();
- procedure parse_10();
- end;
- TXPathProcessor_Test = class(TWstBaseTest)
- published
- procedure Execute_simple_object();
- procedure Execute_simple_value_type();
- procedure Execute_nested_object();
- procedure Execute_equal();
- procedure Execute_equal_bool();
- procedure Execute_equal_byte();
- procedure Execute_equal_date();
- procedure Execute_equal_integer();
- procedure Execute_equal_string();
- {$IFDEF HAS_SDO_BYTES}
- procedure Execute_equal_bytes();
- {$ENDIF HAS_SDO_BYTES}
- {$IFDEF HAS_SDO_CHAR}
- procedure Execute_equal_char();
- {$ENDIF HAS_SDO_CHAR}
- {$IFDEF HAS_SDO_CURRENCY}
- procedure Execute_equal_currency();
- {$ENDIF HAS_SDO_CURRENCY}
- {$IFDEF HAS_SDO_DOUBLE}
- procedure Execute_equal_double();
- {$ENDIF HAS_SDO_DOUBLE}
- {$IFDEF HAS_SDO_FLOAT}
- procedure Execute_equal_float();
- {$ENDIF HAS_SDO_FLOAT}
- {$IFDEF HAS_SDO_LONG}
- procedure Execute_equal_long();
- {$ENDIF HAS_SDO_LONG}
- {$IFDEF HAS_SDO_SHORT}
- procedure Execute_equal_short();
- {$ENDIF HAS_SDO_SHORT}
- end;
- TXPathUtilsFunc_Test = class(TWstBaseTest)
- published
- procedure getXpath_func();
- end;
- implementation
- uses
- sdo_datafactory, sdo_date_utils;
- const
- s_uri = 'urn-test';
- s_type_object_A = 'objectA';
- s_type_object_B = 'objectB';
- s_type_object_C = 'objectC';
- s_type_object_D = 'objectD';
- s_bool_prop = 'bool_prop'; s_bool_propList = 'bool_prop_list';
- s_integer_prop = 'integer_prop'; s_integer_propList = 'integer_prop_list';
- s_string_prop = 'string_prop'; s_string_propList = 'string_prop_list';
- s_object_prop = 'object_prop'; s_object_propList = 'object_prop_list';
- s_object_ref_prop = 'object_ref_prop';
- { TXPathProcessor_Test }
- procedure TXPathProcessor_Test.Execute_equal();
- function CreateFactory() : ISDODataFactory;
- var
- locObj : ISDOType;
- locRes : ISDODataFactory;
- begin
- locRes := TSDODataFactory.Create() as ISDODataFactory;
- locRes.AddType(s_uri,s_type_object_A,[]);
- locRes.AddType(s_uri,s_type_object_B,[]);
- locRes.AddType(s_uri,s_type_object_C,[]);
- locRes.AddType(s_uri,s_type_object_D,[]);
- locObj := locRes.getType(s_uri,s_type_object_A);
- locRes.addProperty(locObj,s_bool_prop,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType], []);
- locRes.addProperty(locObj,s_bool_propList,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType],[pfIsMany]);
- locRes.addProperty(locObj,s_integer_prop,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType], []);
- locRes.addProperty(locObj,s_integer_propList,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[pfIsMany]);
- locRes.addProperty(locObj,s_string_prop,sdo_namespace,SDOTypeDefaultTypeNames[StringType], []);
- locRes.addProperty(locObj,s_string_propList,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsMany]);
- locRes.addProperty(locObj,'p_ab',s_uri,s_type_object_B,[pfIsContainment]);
- locRes.addProperty(locObj,'p_ab_list',s_uri,s_type_object_B,[pfIsMany,pfIsContainment]);
- locRes.addProperty(locObj,'p_ac',s_uri,s_type_object_C,[pfIsContainment]);
- locObj := locRes.getType(s_uri,s_type_object_B);
- locRes.addProperty(locObj,s_bool_prop,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType], []);
- locRes.addProperty(locObj,s_bool_propList,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType],[pfIsMany]);
- locRes.addProperty(locObj,s_integer_prop,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType], []);
- locRes.addProperty(locObj,s_integer_propList,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[pfIsMany]);
- locRes.addProperty(locObj,s_string_prop,sdo_namespace,SDOTypeDefaultTypeNames[StringType], []);
- locRes.addProperty(locObj,s_string_propList,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsMany]);
- locRes.addProperty(locObj,'p_bc',s_uri,s_type_object_C,[pfIsContainment]);
- locRes.addProperty(locObj,'p_bc_list',s_uri,s_type_object_C,[pfIsMany,pfIsContainment]);
- locObj := locRes.getType(s_uri,s_type_object_C);
- locRes.addProperty(locObj,'p_cd',s_uri,s_type_object_D,[pfIsContainment]);
- Result := locRes;
- end;
- procedure fill_p_ab_list(const AList : ISDODataObjectList; const ACount : Integer; const AFac : ISDODataFactory);
- var
- tmp : ISDODataObject;
- k : Integer;
- begin
- for k := 0 to Pred(ACount) do begin
- tmp := AFac.createNew(s_uri, s_type_object_B);
- tmp.setBoolean(s_bool_prop, ( k mod 3 ) = 0 );
- tmp.setString(s_string_prop, Format('string %d',[k]));
- tmp.setInteger(s_integer_prop, k);
- AList.append(tmp);
- end;
- end;
- var
- locFac : ISDODataFactory;
- locExp : TXPathExpression;
- locX : TXPathProcessor;
- locRootObject : ISDODataObject;
- tmpListAB : ISDODataObjectList;
- i : TSDOInteger;
- begin
- locFac := CreateFactory();
- locRootObject := locFac.createNew(s_uri,s_type_object_A);
- tmpListAB := locRootObject.getList('p_ab_list');
- fill_p_ab_list(tmpListAB,100,locFac);
- locX := nil;
- locExp := TXPathExpression.Create();
- try
- locX := TXPathProcessor.Create();
- locX.Context.SetObject(locRootObject,nil);
- i := 12;
- locExp.SetRoot(ParseXPath(Format('p_ab_list[%s=%d]',[s_integer_prop,i])));
- locX.Execute(locExp);
- CheckEquals(Ord(xckObject), Ord(locX.Context.ContentKind));
- CheckEquals(PtrUInt(tmpListAB.getDataObject(i)), PtrUInt(locX.Context.ObjectItem));
- CheckEquals(PtrUInt(locRootObject.getProperty('p_ab_list')), PtrUInt(locX.Context.CurrentProperty));
- CheckEquals(i, tmpListAB.getCursor().GetPosition());
- i := 10;
- locX.Context.SetObject(locRootObject,nil);
- locExp.SetRoot(ParseXPath(Format('p_ab_list[%s=%d]',[s_integer_prop,i])));
- locX.Execute(locExp);
- CheckEquals(Ord(xckObject), Ord(locX.Context.ContentKind));
- CheckEquals(PtrUInt(tmpListAB.getDataObject(i)), PtrUInt(locX.Context.ObjectItem));
- CheckEquals(PtrUInt(locRootObject.getProperty('p_ab_list')), PtrUInt(locX.Context.CurrentProperty));
- CheckEquals(i, tmpListAB.getCursor().GetPosition());
- i := 0;
- locX.Context.SetObject(locRootObject,nil);
- locExp.SetRoot(ParseXPath(Format('p_ab_list[%s=%d]',[s_integer_prop,i])));
- locX.Execute(locExp);
- CheckEquals(Ord(xckObject), Ord(locX.Context.ContentKind));
- CheckEquals(PtrUInt(tmpListAB.getDataObject(i)), PtrUInt(locX.Context.ObjectItem));
- CheckEquals(PtrUInt(locRootObject.getProperty('p_ab_list')), PtrUInt(locX.Context.CurrentProperty));
- CheckEquals(i, tmpListAB.getCursor().GetPosition());
- i := -123;
- locX.Context.SetObject(locRootObject,nil);
- locExp.SetRoot(ParseXPath(Format('p_ab_list[%s=%d]',[s_integer_prop,i])));
- locX.Execute(locExp);
- CheckEquals(Ord(xckNull), Ord(locX.Context.ContentKind));
- finally
- FreeAndNil(locX);
- FreeAndNil(locExp);
- end;
- end;
- procedure TXPathProcessor_Test.Execute_equal_bool();
- const
- SIMPLE_PROP_A = 'simpleProperty_A';
- LIST_PROP_A = 'listProperty_A';
- SIMPLE_PROP_B = 'simpleProperty_B';
- PROP_TYPE = BooleanType;
- function CreateFactory() : ISDODataFactory;
- var
- locObj : ISDOType;
- locRes : ISDODataFactory;
- begin
- locRes := TSDODataFactory.Create() as ISDODataFactory;
- locRes.AddType(s_uri,s_type_object_A,[]);
- locRes.AddType(s_uri,s_type_object_B,[]);
- locObj := locRes.getType(s_uri,s_type_object_A);
- locRes.addProperty(locObj,SIMPLE_PROP_A,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE], []);
- locRes.addProperty(locObj,LIST_PROP_A,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE],[pfIsMany]);
- locRes.addProperty(locObj,'p_ab_list',s_uri,s_type_object_B,[pfIsMany,pfIsContainment]);
- locObj := locRes.getType(s_uri,s_type_object_B);
- locRes.addProperty(locObj,SIMPLE_PROP_B,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE], []);
- Result := locRes;
- end;
- procedure fill_p_ab_list(const AList : ISDODataObjectList; const AFac : ISDODataFactory);
- var
- tmp : ISDODataObject;
- begin
- tmp := AFac.createNew(s_uri, s_type_object_B);
- tmp.setBoolean(SIMPLE_PROP_B,True);
- AList.append(tmp);
- tmp := AFac.createNew(s_uri, s_type_object_B);
- tmp.setBoolean(SIMPLE_PROP_B,False);
- AList.append(tmp);
- end;
- var
- locFac : ISDODataFactory;
- locExp : TXPathExpression;
- locX : TXPathProcessor;
- locRootObject : ISDODataObject;
- tmpListAB : ISDODataObjectList;
- i : Integer;
- begin
- locFac := CreateFactory();
- locRootObject := locFac.createNew(s_uri,s_type_object_A);
- tmpListAB := locRootObject.getList('p_ab_list');
- fill_p_ab_list(tmpListAB,locFac);
- locX := nil;
- locExp := TXPathExpression.Create();
- try
- locX := TXPathProcessor.Create();
- locX.Context.SetObject(locRootObject,nil);
- i := 1;
- locExp.SetRoot(ParseXPath(Format('p_ab_list[%s=false]',[SIMPLE_PROP_B])));
- locX.Execute(locExp);
- CheckEquals(Ord(xckObject), Ord(locX.Context.ContentKind));
- CheckEquals(PtrUInt(tmpListAB.getDataObject(i)), PtrUInt(locX.Context.ObjectItem));
- CheckEquals(PtrUInt(locRootObject.getProperty('p_ab_list')), PtrUInt(locX.Context.CurrentProperty));
- CheckEquals(i, tmpListAB.getCursor().GetPosition());
- i := 0;
- locX.Context.SetObject(locRootObject,nil);
- locExp.SetRoot(ParseXPath(Format('p_ab_list[%s=true]',[SIMPLE_PROP_B])));
- locX.Execute(locExp);
- CheckEquals(Ord(xckObject), Ord(locX.Context.ContentKind));
- CheckEquals(PtrUInt(tmpListAB.getDataObject(i)), PtrUInt(locX.Context.ObjectItem));
- CheckEquals(PtrUInt(locRootObject.getProperty('p_ab_list')), PtrUInt(locX.Context.CurrentProperty));
- CheckEquals(i, tmpListAB.getCursor().GetPosition());
- finally
- FreeAndNil(locX);
- FreeAndNil(locExp);
- end;
- end;
- procedure TXPathProcessor_Test.Execute_equal_byte();
- const
- SIMPLE_PROP_A = 'simpleProperty_A';
- LIST_PROP_A = 'listProperty_A';
- SIMPLE_PROP_B = 'simpleProperty_B';
- PROP_TYPE = ByteType;
- function CreateFactory() : ISDODataFactory;
- var
- locObj : ISDOType;
- locRes : ISDODataFactory;
- begin
- locRes := TSDODataFactory.Create() as ISDODataFactory;
- locRes.AddType(s_uri,s_type_object_A,[]);
- locRes.AddType(s_uri,s_type_object_B,[]);
- locObj := locRes.getType(s_uri,s_type_object_A);
- locRes.addProperty(locObj,SIMPLE_PROP_A,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE], []);
- locRes.addProperty(locObj,LIST_PROP_A,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE],[pfIsMany]);
- locRes.addProperty(locObj,'p_ab_list',s_uri,s_type_object_B,[pfIsMany,pfIsContainment]);
- locObj := locRes.getType(s_uri,s_type_object_B);
- locRes.addProperty(locObj,SIMPLE_PROP_B,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE], []);
- Result := locRes;
- end;
- procedure fill_p_ab_list(const AList : ISDODataObjectList; const ACount : Byte; const AFac : ISDODataFactory);
- var
- tmp : ISDODataObject;
- k : Byte;
- begin
- for k := 0 to Pred(ACount) do begin
- tmp := AFac.createNew(s_uri, s_type_object_B);
- tmp.setByte(SIMPLE_PROP_B,k);
- AList.append(tmp);
- end;
- end;
- var
- locFac : ISDODataFactory;
- locExp : TXPathExpression;
- locX : TXPathProcessor;
- locRootObject : ISDODataObject;
- tmpListAB : ISDODataObjectList;
- i : Byte;
- begin
- locFac := CreateFactory();
- locRootObject := locFac.createNew(s_uri,s_type_object_A);
- tmpListAB := locRootObject.getList('p_ab_list');
- fill_p_ab_list(tmpListAB,100,locFac);
- locX := nil;
- locExp := TXPathExpression.Create();
- try
- locX := TXPathProcessor.Create();
- locX.Context.SetObject(locRootObject,nil);
- i := 12;
- locExp.SetRoot(ParseXPath(Format('p_ab_list[%s=%d]',[SIMPLE_PROP_B,i])));
- locX.Execute(locExp);
- CheckEquals(Ord(xckObject), Ord(locX.Context.ContentKind));
- CheckEquals(PtrUInt(tmpListAB.getDataObject(i)), PtrUInt(locX.Context.ObjectItem));
- CheckEquals(PtrUInt(locRootObject.getProperty('p_ab_list')), PtrUInt(locX.Context.CurrentProperty));
- CheckEquals(i, tmpListAB.getCursor().GetPosition());
- i := 10;
- locX.Context.SetObject(locRootObject,nil);
- locExp.SetRoot(ParseXPath(Format('p_ab_list[%s=%d]',[SIMPLE_PROP_B,i])));
- locX.Execute(locExp);
- CheckEquals(Ord(xckObject), Ord(locX.Context.ContentKind));
- CheckEquals(PtrUInt(tmpListAB.getDataObject(i)), PtrUInt(locX.Context.ObjectItem));
- CheckEquals(PtrUInt(locRootObject.getProperty('p_ab_list')), PtrUInt(locX.Context.CurrentProperty));
- CheckEquals(i, tmpListAB.getCursor().GetPosition());
- i := 0;
- locX.Context.SetObject(locRootObject,nil);
- locExp.SetRoot(ParseXPath(Format('p_ab_list[%s=%d]',[SIMPLE_PROP_B,i])));
- locX.Execute(locExp);
- CheckEquals(Ord(xckObject), Ord(locX.Context.ContentKind));
- CheckEquals(PtrUInt(tmpListAB.getDataObject(i)), PtrUInt(locX.Context.ObjectItem));
- CheckEquals(PtrUInt(locRootObject.getProperty('p_ab_list')), PtrUInt(locX.Context.CurrentProperty));
- CheckEquals(i, tmpListAB.getCursor().GetPosition());
- i := 200;
- locX.Context.SetObject(locRootObject,nil);
- locExp.SetRoot(ParseXPath(Format('p_ab_list[%s=%d]',[SIMPLE_PROP_B,i])));
- locX.Execute(locExp);
- CheckEquals(Ord(xckNull), Ord(locX.Context.ContentKind));
- finally
- FreeAndNil(locX);
- FreeAndNil(locExp);
- end;
- end;
- procedure TXPathProcessor_Test.Execute_equal_date();
- const
- SIMPLE_PROP_A = 'simpleProperty_A';
- LIST_PROP_A = 'listProperty_A';
- SIMPLE_PROP_B = 'simpleProperty_B';
- PROP_TYPE = DateTimeType;
- function CreateFactory() : ISDODataFactory;
- var
- locObj : ISDOType;
- locRes : ISDODataFactory;
- begin
- locRes := TSDODataFactory.Create() as ISDODataFactory;
- locRes.AddType(s_uri,s_type_object_A,[]);
- locRes.AddType(s_uri,s_type_object_B,[]);
- locObj := locRes.getType(s_uri,s_type_object_A);
- locRes.addProperty(locObj,SIMPLE_PROP_A,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE], []);
- locRes.addProperty(locObj,LIST_PROP_A,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE],[pfIsMany]);
- locRes.addProperty(locObj,'p_ab_list',s_uri,s_type_object_B,[pfIsMany,pfIsContainment]);
- locObj := locRes.getType(s_uri,s_type_object_B);
- locRes.addProperty(locObj,SIMPLE_PROP_B,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE], []);
- Result := locRes;
- end;
- function ComputeDate(const AIntValue : TSDOInteger) : TSDODateTime;
- begin
- Result.Date := 39000.0 + ( AIntValue * 100 ) + ( AIntValue * 10 ) + AIntValue;
- Result.HourOffset := ( AIntValue mod 12 );
- Result.MinuteOffset := ( AIntValue mod 60 );
- Result := xsd_StrToDate(xsd_DateTimeToStr(Result,xdkDateTime),xdkDateTime);
- end;
- procedure fill_p_ab_list(const AList : ISDODataObjectList; const ACount : Byte; const AFac : ISDODataFactory);
- var
- tmp : ISDODataObject;
- k : TSDOInteger;
- begin
- for k := 0 to Pred(ACount) do begin
- tmp := AFac.createNew(s_uri, s_type_object_B);
- tmp.setDate(SIMPLE_PROP_B,ComputeDate(k));
- AList.append(tmp);
- end;
- end;
- var
- locFac : ISDODataFactory;
- locExp : TXPathExpression;
- locX : TXPathProcessor;
- locRootObject : ISDODataObject;
- tmpListAB : ISDODataObjectList;
- i : TSDOInteger;
- begin
- locFac := CreateFactory();
- locRootObject := locFac.createNew(s_uri,s_type_object_A);
- tmpListAB := locRootObject.getList('p_ab_list');
- fill_p_ab_list(tmpListAB,100,locFac);
- locX := nil;
- locExp := TXPathExpression.Create();
- try
- locX := TXPathProcessor.Create();
- locX.Context.SetObject(locRootObject,nil);
- i := 12;
- locExp.SetRoot(ParseXPath(Format('p_ab_list[%s="%s"]',[SIMPLE_PROP_B,xsd_DateTimeToStr(ComputeDate(i),xdkDateTime)])));
- locX.Execute(locExp);
- CheckEquals(Ord(xckObject), Ord(locX.Context.ContentKind));
- CheckEquals(PtrUInt(tmpListAB.getDataObject(i)), PtrUInt(locX.Context.ObjectItem));
- CheckEquals(PtrUInt(locRootObject.getProperty('p_ab_list')), PtrUInt(locX.Context.CurrentProperty));
- CheckEquals(i, tmpListAB.getCursor().GetPosition());
- i := 10;
- locX.Context.SetObject(locRootObject,nil);
- locExp.SetRoot(ParseXPath(Format('p_ab_list[%s="%s"]',[SIMPLE_PROP_B,xsd_DateTimeToStr(ComputeDate(i),xdkDateTime)])));
- locX.Execute(locExp);
- CheckEquals(Ord(xckObject), Ord(locX.Context.ContentKind));
- CheckEquals(PtrUInt(tmpListAB.getDataObject(i)), PtrUInt(locX.Context.ObjectItem));
- CheckEquals(PtrUInt(locRootObject.getProperty('p_ab_list')), PtrUInt(locX.Context.CurrentProperty));
- CheckEquals(i, tmpListAB.getCursor().GetPosition());
- i := 56;
- locX.Context.SetObject(locRootObject,nil);
- locExp.SetRoot(ParseXPath(Format('p_ab_list[%s="%s"]',[SIMPLE_PROP_B,xsd_DateTimeToStr(ComputeDate(i),xdkDateTime)])));
- locX.Execute(locExp);
- CheckEquals(Ord(xckObject), Ord(locX.Context.ContentKind));
- CheckEquals(PtrUInt(tmpListAB.getDataObject(i)), PtrUInt(locX.Context.ObjectItem));
- CheckEquals(PtrUInt(locRootObject.getProperty('p_ab_list')), PtrUInt(locX.Context.CurrentProperty));
- CheckEquals(i, tmpListAB.getCursor().GetPosition());
- i := -200;
- locX.Context.SetObject(locRootObject,nil);
- locExp.SetRoot(ParseXPath(Format('p_ab_list[%s="%s"]',[SIMPLE_PROP_B,xsd_DateTimeToStr(ComputeDate(i),xdkDateTime)])));
- locX.Execute(locExp);
- CheckEquals(Ord(xckNull), Ord(locX.Context.ContentKind));
- finally
- FreeAndNil(locX);
- FreeAndNil(locExp);
- end;
- end;
- procedure TXPathProcessor_Test.Execute_equal_integer();
- const
- SIMPLE_PROP_A = 'simpleProperty_A';
- LIST_PROP_A = 'listProperty_A';
- SIMPLE_PROP_B = 'simpleProperty_B';
- PROP_TYPE = IntegerType;
- function CreateFactory() : ISDODataFactory;
- var
- locObj : ISDOType;
- locRes : ISDODataFactory;
- begin
- locRes := TSDODataFactory.Create() as ISDODataFactory;
- locRes.AddType(s_uri,s_type_object_A,[]);
- locRes.AddType(s_uri,s_type_object_B,[]);
- locObj := locRes.getType(s_uri,s_type_object_A);
- locRes.addProperty(locObj,SIMPLE_PROP_A,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE], []);
- locRes.addProperty(locObj,LIST_PROP_A,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE],[pfIsMany]);
- locRes.addProperty(locObj,'p_ab_list',s_uri,s_type_object_B,[pfIsMany,pfIsContainment]);
- locObj := locRes.getType(s_uri,s_type_object_B);
- locRes.addProperty(locObj,SIMPLE_PROP_B,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE], []);
- Result := locRes;
- end;
- procedure fill_p_ab_list(const AList : ISDODataObjectList; const ACount : Byte; const AFac : ISDODataFactory);
- var
- tmp : ISDODataObject;
- k : TSDOInteger;
- begin
- for k := 0 to Pred(ACount) do begin
- tmp := AFac.createNew(s_uri, s_type_object_B);
- tmp.setInteger(SIMPLE_PROP_B,k);
- AList.append(tmp);
- end;
- end;
- var
- locFac : ISDODataFactory;
- locExp : TXPathExpression;
- locX : TXPathProcessor;
- locRootObject : ISDODataObject;
- tmpListAB : ISDODataObjectList;
- i : TSDOInteger;
- begin
- locFac := CreateFactory();
- locRootObject := locFac.createNew(s_uri,s_type_object_A);
- tmpListAB := locRootObject.getList('p_ab_list');
- fill_p_ab_list(tmpListAB,100,locFac);
- locX := nil;
- locExp := TXPathExpression.Create();
- try
- locX := TXPathProcessor.Create();
- locX.Context.SetObject(locRootObject,nil);
- i := 12;
- locExp.SetRoot(ParseXPath(Format('p_ab_list[%s=%d]',[SIMPLE_PROP_B,i])));
- locX.Execute(locExp);
- CheckEquals(Ord(xckObject), Ord(locX.Context.ContentKind));
- CheckEquals(PtrUInt(tmpListAB.getDataObject(i)), PtrUInt(locX.Context.ObjectItem));
- CheckEquals(PtrUInt(locRootObject.getProperty('p_ab_list')), PtrUInt(locX.Context.CurrentProperty));
- CheckEquals(i, tmpListAB.getCursor().GetPosition());
- i := 10;
- locX.Context.SetObject(locRootObject,nil);
- locExp.SetRoot(ParseXPath(Format('p_ab_list[%s=%d]',[SIMPLE_PROP_B,i])));
- locX.Execute(locExp);
- CheckEquals(Ord(xckObject), Ord(locX.Context.ContentKind));
- CheckEquals(PtrUInt(tmpListAB.getDataObject(i)), PtrUInt(locX.Context.ObjectItem));
- CheckEquals(PtrUInt(locRootObject.getProperty('p_ab_list')), PtrUInt(locX.Context.CurrentProperty));
- CheckEquals(i, tmpListAB.getCursor().GetPosition());
- i := 0;
- locX.Context.SetObject(locRootObject,nil);
- locExp.SetRoot(ParseXPath(Format('p_ab_list[%s=%d]',[SIMPLE_PROP_B,i])));
- locX.Execute(locExp);
- CheckEquals(Ord(xckObject), Ord(locX.Context.ContentKind));
- CheckEquals(PtrUInt(tmpListAB.getDataObject(i)), PtrUInt(locX.Context.ObjectItem));
- CheckEquals(PtrUInt(locRootObject.getProperty('p_ab_list')), PtrUInt(locX.Context.CurrentProperty));
- CheckEquals(i, tmpListAB.getCursor().GetPosition());
- i := -200;
- locX.Context.SetObject(locRootObject,nil);
- locExp.SetRoot(ParseXPath(Format('p_ab_list[%s=%d]',[SIMPLE_PROP_B,i])));
- locX.Execute(locExp);
- CheckEquals(Ord(xckNull), Ord(locX.Context.ContentKind));
- finally
- FreeAndNil(locX);
- FreeAndNil(locExp);
- end;
- end;
- procedure TXPathProcessor_Test.Execute_equal_string();
- const
- SIMPLE_PROP_A = 'simpleProperty_A';
- LIST_PROP_A = 'listProperty_A';
- SIMPLE_PROP_B = 'simpleProperty_B';
- PROP_TYPE = StringType;
- function CreateFactory() : ISDODataFactory;
- var
- locObj : ISDOType;
- locRes : ISDODataFactory;
- begin
- locRes := TSDODataFactory.Create() as ISDODataFactory;
- locRes.AddType(s_uri,s_type_object_A,[]);
- locRes.AddType(s_uri,s_type_object_B,[]);
- locObj := locRes.getType(s_uri,s_type_object_A);
- locRes.addProperty(locObj,SIMPLE_PROP_A,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE], []);
- locRes.addProperty(locObj,LIST_PROP_A,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE],[pfIsMany]);
- locRes.addProperty(locObj,'p_ab_list',s_uri,s_type_object_B,[pfIsMany,pfIsContainment]);
- locObj := locRes.getType(s_uri,s_type_object_B);
- locRes.addProperty(locObj,SIMPLE_PROP_B,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE], []);
- Result := locRes;
- end;
- procedure fill_p_ab_list(const AList : ISDODataObjectList; const ACount : Byte; const AFac : ISDODataFactory);
- var
- tmp : ISDODataObject;
- k : TSDOInteger;
- begin
- for k := 0 to Pred(ACount) do begin
- tmp := AFac.createNew(s_uri, s_type_object_B);
- tmp.setString(SIMPLE_PROP_B,Format('a sample string #%d',[k]));
- AList.append(tmp);
- end;
- end;
- var
- locFac : ISDODataFactory;
- locExp : TXPathExpression;
- locX : TXPathProcessor;
- locRootObject : ISDODataObject;
- tmpListAB : ISDODataObjectList;
- i : TSDOInteger;
- begin
- locFac := CreateFactory();
- locRootObject := locFac.createNew(s_uri,s_type_object_A);
- tmpListAB := locRootObject.getList('p_ab_list');
- fill_p_ab_list(tmpListAB,100,locFac);
- locX := nil;
- locExp := TXPathExpression.Create();
- try
- locX := TXPathProcessor.Create();
- locX.Context.SetObject(locRootObject,nil);
- i := 12;
- locExp.SetRoot(ParseXPath(Format('p_ab_list[%s="%s"]',[SIMPLE_PROP_B,Format('a sample string #%d',[i])])));
- locX.Execute(locExp);
- CheckEquals(Ord(xckObject), Ord(locX.Context.ContentKind));
- CheckEquals(PtrUInt(tmpListAB.getDataObject(i)), PtrUInt(locX.Context.ObjectItem));
- CheckEquals(PtrUInt(locRootObject.getProperty('p_ab_list')), PtrUInt(locX.Context.CurrentProperty));
- CheckEquals(i, tmpListAB.getCursor().GetPosition());
- i := 10;
- locX.Context.SetObject(locRootObject,nil);
- locExp.SetRoot(ParseXPath(Format('p_ab_list[%s="%s"]',[SIMPLE_PROP_B,Format('a sample string #%d',[i])])));
- locX.Execute(locExp);
- CheckEquals(Ord(xckObject), Ord(locX.Context.ContentKind));
- CheckEquals(PtrUInt(tmpListAB.getDataObject(i)), PtrUInt(locX.Context.ObjectItem));
- CheckEquals(PtrUInt(locRootObject.getProperty('p_ab_list')), PtrUInt(locX.Context.CurrentProperty));
- CheckEquals(i, tmpListAB.getCursor().GetPosition());
- i := 0;
- locX.Context.SetObject(locRootObject,nil);
- locExp.SetRoot(ParseXPath(Format('p_ab_list[%s="%s"]',[SIMPLE_PROP_B,Format('a sample string #%d',[i])])));
- locX.Execute(locExp);
- CheckEquals(Ord(xckObject), Ord(locX.Context.ContentKind));
- CheckEquals(PtrUInt(tmpListAB.getDataObject(i)), PtrUInt(locX.Context.ObjectItem));
- CheckEquals(PtrUInt(locRootObject.getProperty('p_ab_list')), PtrUInt(locX.Context.CurrentProperty));
- CheckEquals(i, tmpListAB.getCursor().GetPosition());
- i := -200;
- locX.Context.SetObject(locRootObject,nil);
- locExp.SetRoot(ParseXPath(Format('p_ab_list[%s="%s"]',[SIMPLE_PROP_B,Format('a sample string #%d',[i])])));
- locX.Execute(locExp);
- CheckEquals(Ord(xckNull), Ord(locX.Context.ContentKind));
- finally
- FreeAndNil(locX);
- FreeAndNil(locExp);
- end;
- end;
- {$IFDEF HAS_SDO_BYTES}
- procedure TXPathProcessor_Test.Execute_equal_bytes();
- const
- SIMPLE_PROP_A = 'simpleProperty_A';
- LIST_PROP_A = 'listProperty_A';
- SIMPLE_PROP_B = 'simpleProperty_B';
- PROP_TYPE = BytesType;
- function CreateFactory() : ISDODataFactory;
- var
- locObj : ISDOType;
- locRes : ISDODataFactory;
- begin
- locRes := TSDODataFactory.Create() as ISDODataFactory;
- locRes.AddType(s_uri,s_type_object_A,[]);
- locRes.AddType(s_uri,s_type_object_B,[]);
- locObj := locRes.getType(s_uri,s_type_object_A);
- locRes.addProperty(locObj,SIMPLE_PROP_A,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE], []);
- locRes.addProperty(locObj,LIST_PROP_A,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE],[pfIsMany]);
- locRes.addProperty(locObj,'p_ab_list',s_uri,s_type_object_B,[pfIsMany,pfIsContainment]);
- locObj := locRes.getType(s_uri,s_type_object_B);
- locRes.addProperty(locObj,SIMPLE_PROP_B,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE], []);
- Result := locRes;
- end;
- function ComputeValue(const AInput : Byte) : TSDOBytes;
- var
- k : Integer;
- begin
- SetLength(Result,AInput);
- if ( AInput > 0 ) then begin
- for k := 1 to AInput do
- Result[k-1] := k;
- end;
- end;
-
- procedure fill_p_ab_list(const AList : ISDODataObjectList; const ACount : Byte; const AFac : ISDODataFactory);
- var
- tmp : ISDODataObject;
- k : Byte;
- begin
- for k := 0 to Pred(ACount) do begin
- tmp := AFac.createNew(s_uri, s_type_object_B);
- tmp.setBytes(SIMPLE_PROP_B,ComputeValue(k));
- AList.append(tmp);
- end;
- end;
- var
- locFac : ISDODataFactory;
- locExp : TXPathExpression;
- locX : TXPathProcessor;
- locRootObject : ISDODataObject;
- tmpListAB : ISDODataObjectList;
- i : Byte;
- begin
- locFac := CreateFactory();
- locRootObject := locFac.createNew(s_uri,s_type_object_A);
- tmpListAB := locRootObject.getList('p_ab_list');
- fill_p_ab_list(tmpListAB,200,locFac);
- locX := nil;
- locExp := TXPathExpression.Create();
- try
- locX := TXPathProcessor.Create();
- locX.Context.SetObject(locRootObject,nil);
- i := 12;
- locExp.SetRoot(ParseXPath(Format('p_ab_list[%s="%s"]',[SIMPLE_PROP_B,BytesToString(ComputeValue(i))])));
- locX.Execute(locExp);
- CheckEquals(Ord(xckObject), Ord(locX.Context.ContentKind));
- CheckEquals(PtrUInt(tmpListAB.getDataObject(i)), PtrUInt(locX.Context.ObjectItem));
- CheckEquals(PtrUInt(locRootObject.getProperty('p_ab_list')), PtrUInt(locX.Context.CurrentProperty));
- CheckEquals(i, tmpListAB.getCursor().GetPosition());
- i := 10;
- locX.Context.SetObject(locRootObject,nil);
- locExp.SetRoot(ParseXPath(Format('p_ab_list[%s="%s"]',[SIMPLE_PROP_B,BytesToString(ComputeValue(i))])));
- locX.Execute(locExp);
- CheckEquals(Ord(xckObject), Ord(locX.Context.ContentKind));
- CheckEquals(PtrUInt(tmpListAB.getDataObject(i)), PtrUInt(locX.Context.ObjectItem));
- CheckEquals(PtrUInt(locRootObject.getProperty('p_ab_list')), PtrUInt(locX.Context.CurrentProperty));
- CheckEquals(i, tmpListAB.getCursor().GetPosition());
-
- i := 150;
- locX.Context.SetObject(locRootObject,nil);
- locExp.SetRoot(ParseXPath(Format('p_ab_list[%s="%s"]',[SIMPLE_PROP_B,BytesToString(ComputeValue(i))])));
- locX.Execute(locExp);
- CheckEquals(Ord(xckObject), Ord(locX.Context.ContentKind));
- CheckEquals(PtrUInt(tmpListAB.getDataObject(i)), PtrUInt(locX.Context.ObjectItem));
- CheckEquals(PtrUInt(locRootObject.getProperty('p_ab_list')), PtrUInt(locX.Context.CurrentProperty));
- CheckEquals(i, tmpListAB.getCursor().GetPosition());
-
- i := 0;
- locX.Context.SetObject(locRootObject,nil);
- locExp.SetRoot(ParseXPath(Format('p_ab_list[%s="%s"]',[SIMPLE_PROP_B,BytesToString(ComputeValue(i))])));
- locX.Execute(locExp);
- CheckEquals(Ord(xckObject), Ord(locX.Context.ContentKind));
- CheckEquals(PtrUInt(tmpListAB.getDataObject(i)), PtrUInt(locX.Context.ObjectItem));
- CheckEquals(PtrUInt(locRootObject.getProperty('p_ab_list')), PtrUInt(locX.Context.CurrentProperty));
- CheckEquals(i, tmpListAB.getCursor().GetPosition());
- locX.Context.SetObject(locRootObject,nil);
- locExp.SetRoot(ParseXPath(Format('p_ab_list[%s="%s"]',[SIMPLE_PROP_B,'!'])));
- locX.Execute(locExp);
- CheckEquals(Ord(xckNull), Ord(locX.Context.ContentKind));
- finally
- FreeAndNil(locX);
- FreeAndNil(locExp);
- end;
- end;
- {$ENDIF HAS_SDO_BYTES}
- {$IFDEF HAS_SDO_CHAR}
- procedure TXPathProcessor_Test.Execute_equal_char();
- const
- SIMPLE_PROP_A = 'simpleProperty_A';
- LIST_PROP_A = 'listProperty_A';
- SIMPLE_PROP_B = 'simpleProperty_B';
- PROP_TYPE = CharacterType;
- var
- CHAR_LIST : array[0..( (26{a-z} + (26{A-Z}) + (10{0-9})) - 1 )] of TSDOChar;
- procedure PrepareCharList();
- var
- k : Integer;
- begin
- for k := Ord('a') to Ord('z') do
- CHAR_LIST[k - Ord('a')] := TSDOChar(k);
- for k := Ord('A') to Ord('Z') do
- CHAR_LIST[26 + k - Ord('A')] := TSDOChar(k);
- for k := Ord('0') to Ord('9') do
- CHAR_LIST[26 + 26 + k - Ord('0')] := TSDOChar(k);
- end;
- function CreateFactory() : ISDODataFactory;
- var
- locObj : ISDOType;
- locRes : ISDODataFactory;
- begin
- locRes := TSDODataFactory.Create() as ISDODataFactory;
- locRes.AddType(s_uri,s_type_object_A,[]);
- locRes.AddType(s_uri,s_type_object_B,[]);
- locObj := locRes.getType(s_uri,s_type_object_A);
- locRes.addProperty(locObj,SIMPLE_PROP_A,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE], []);
- locRes.addProperty(locObj,LIST_PROP_A,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE],[pfIsMany]);
- locRes.addProperty(locObj,'p_ab_list',s_uri,s_type_object_B,[pfIsMany,pfIsContainment]);
- locObj := locRes.getType(s_uri,s_type_object_B);
- locRes.addProperty(locObj,SIMPLE_PROP_B,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE], []);
- Result := locRes;
- end;
- function ComputeValue(const AInput : Byte) : TSDOChar;
- begin
- Result := CHAR_LIST[AInput];
- end;
-
- procedure fill_p_ab_list(const AList : ISDODataObjectList; const ACount : Byte; const AFac : ISDODataFactory);
- var
- tmp : ISDODataObject;
- k : Byte;
- begin
- for k := 0 to Pred(ACount) do begin
- tmp := AFac.createNew(s_uri, s_type_object_B);
- tmp.setCharacter(SIMPLE_PROP_B,ComputeValue(k));
- AList.append(tmp);
- end;
- end;
- var
- locFac : ISDODataFactory;
- locExp : TXPathExpression;
- locX : TXPathProcessor;
- locRootObject : ISDODataObject;
- tmpListAB : ISDODataObjectList;
- i : Byte;
- begin
- PrepareCharList();
- locFac := CreateFactory();
- locRootObject := locFac.createNew(s_uri,s_type_object_A);
- tmpListAB := locRootObject.getList('p_ab_list');
- fill_p_ab_list(tmpListAB,High(CHAR_LIST),locFac);
- locX := nil;
- locExp := TXPathExpression.Create();
- try
- locX := TXPathProcessor.Create();
- locX.Context.SetObject(locRootObject,nil);
- i := 12;
- locExp.SetRoot(ParseXPath(Format('p_ab_list[%s="%s"]',[SIMPLE_PROP_B,ComputeValue(i)])));
- locX.Execute(locExp);
- CheckEquals(Ord(xckObject), Ord(locX.Context.ContentKind));
- CheckEquals(PtrUInt(tmpListAB.getDataObject(i)), PtrUInt(locX.Context.ObjectItem));
- CheckEquals(PtrUInt(locRootObject.getProperty('p_ab_list')), PtrUInt(locX.Context.CurrentProperty));
- CheckEquals(i, tmpListAB.getCursor().GetPosition());
- i := 10;
- locX.Context.SetObject(locRootObject,nil);
- locExp.SetRoot(ParseXPath(Format('p_ab_list[%s="%s"]',[SIMPLE_PROP_B,ComputeValue(i)])));
- locX.Execute(locExp);
- CheckEquals(Ord(xckObject), Ord(locX.Context.ContentKind));
- CheckEquals(PtrUInt(tmpListAB.getDataObject(i)), PtrUInt(locX.Context.ObjectItem));
- CheckEquals(PtrUInt(locRootObject.getProperty('p_ab_list')), PtrUInt(locX.Context.CurrentProperty));
- CheckEquals(i, tmpListAB.getCursor().GetPosition());
- i := 0;
- locX.Context.SetObject(locRootObject,nil);
- locExp.SetRoot(ParseXPath(Format('p_ab_list[%s="%s"]',[SIMPLE_PROP_B,ComputeValue(i)])));
- locX.Execute(locExp);
- CheckEquals(Ord(xckObject), Ord(locX.Context.ContentKind));
- CheckEquals(PtrUInt(tmpListAB.getDataObject(i)), PtrUInt(locX.Context.ObjectItem));
- CheckEquals(PtrUInt(locRootObject.getProperty('p_ab_list')), PtrUInt(locX.Context.CurrentProperty));
- CheckEquals(i, tmpListAB.getCursor().GetPosition());
- locX.Context.SetObject(locRootObject,nil);
- locExp.SetRoot(ParseXPath(Format('p_ab_list[%s="%s"]',[SIMPLE_PROP_B,'!'])));
- locX.Execute(locExp);
- CheckEquals(Ord(xckNull), Ord(locX.Context.ContentKind));
- finally
- FreeAndNil(locX);
- FreeAndNil(locExp);
- end;
- end;
- {$ENDIF HAS_SDO_CHAR}
- {$IFDEF HAS_SDO_CURRENCY}
- procedure TXPathProcessor_Test.Execute_equal_currency();
- const
- SIMPLE_PROP_A = 'simpleProperty_A';
- LIST_PROP_A = 'listProperty_A';
- SIMPLE_PROP_B = 'simpleProperty_B';
- PROP_TYPE = CurrencyType;
- function CreateFactory() : ISDODataFactory;
- var
- locObj : ISDOType;
- locRes : ISDODataFactory;
- begin
- locRes := TSDODataFactory.Create() as ISDODataFactory;
- locRes.AddType(s_uri,s_type_object_A,[]);
- locRes.AddType(s_uri,s_type_object_B,[]);
- locObj := locRes.getType(s_uri,s_type_object_A);
- locRes.addProperty(locObj,SIMPLE_PROP_A,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE], []);
- locRes.addProperty(locObj,LIST_PROP_A,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE],[pfIsMany]);
- locRes.addProperty(locObj,'p_ab_list',s_uri,s_type_object_B,[pfIsMany,pfIsContainment]);
- locObj := locRes.getType(s_uri,s_type_object_B);
- locRes.addProperty(locObj,SIMPLE_PROP_B,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE], []);
- Result := locRes;
- end;
- function ComputeValue(const AInput : Integer) : TSDOCurrency;
- begin
- Result := AInput * 10000000;
- if ( ( AInput mod 2) = 0 ) then
- Result := -Result;
- end;
-
- procedure fill_p_ab_list(const AList : ISDODataObjectList; const ACount : Byte; const AFac : ISDODataFactory);
- var
- tmp : ISDODataObject;
- k : Byte;
- begin
- for k := 0 to Pred(ACount) do begin
- tmp := AFac.createNew(s_uri, s_type_object_B);
- tmp.setCurrency(SIMPLE_PROP_B,ComputeValue(k));
- AList.append(tmp);
- end;
- end;
- var
- locFac : ISDODataFactory;
- locExp : TXPathExpression;
- locX : TXPathProcessor;
- locRootObject : ISDODataObject;
- tmpListAB : ISDODataObjectList;
- v : TSDOCurrency;
- j : Integer;
- begin
- locFac := CreateFactory();
- locRootObject := locFac.createNew(s_uri,s_type_object_A);
- tmpListAB := locRootObject.getList('p_ab_list');
- fill_p_ab_list(tmpListAB,100,locFac);
- locX := nil;
- locExp := TXPathExpression.Create();
- try
- locX := TXPathProcessor.Create();
- locX.Context.SetObject(locRootObject,nil);
- j := 12; v := j;
- locExp.SetRoot(ParseXPath(Format('p_ab_list[%s=%s]',[SIMPLE_PROP_B,TSDOConvertHelper.CurrencyToString(ComputeValue(j))])));
- locX.Execute(locExp);
- CheckEquals(Ord(xckObject), Ord(locX.Context.ContentKind));
- CheckEquals(PtrUInt(tmpListAB.getDataObject(j)), PtrUInt(locX.Context.ObjectItem));
- CheckEquals(PtrUInt(locRootObject.getProperty('p_ab_list')), PtrUInt(locX.Context.CurrentProperty));
- CheckEquals(v, tmpListAB.getCursor().GetPosition());
- j := 10; v := j;
- locX.Context.SetObject(locRootObject,nil);
- locExp.SetRoot(ParseXPath(Format('p_ab_list[%s=%s]',[SIMPLE_PROP_B,TSDOConvertHelper.CurrencyToString(ComputeValue(j))])));
- locX.Execute(locExp);
- CheckEquals(Ord(xckObject), Ord(locX.Context.ContentKind));
- CheckEquals(PtrUInt(tmpListAB.getDataObject(j)), PtrUInt(locX.Context.ObjectItem));
- CheckEquals(PtrUInt(locRootObject.getProperty('p_ab_list')), PtrUInt(locX.Context.CurrentProperty));
- CheckEquals(v, tmpListAB.getCursor().GetPosition());
- j := 0; v := j;
- locX.Context.SetObject(locRootObject,nil);
- locExp.SetRoot(ParseXPath(Format('p_ab_list[%s=%s]',[SIMPLE_PROP_B,TSDOConvertHelper.CurrencyToString(ComputeValue(j))])));
- locX.Execute(locExp);
- CheckEquals(Ord(xckObject), Ord(locX.Context.ContentKind));
- CheckEquals(PtrUInt(tmpListAB.getDataObject(j)), PtrUInt(locX.Context.ObjectItem));
- CheckEquals(PtrUInt(locRootObject.getProperty('p_ab_list')), PtrUInt(locX.Context.CurrentProperty));
- CheckEquals(v, tmpListAB.getCursor().GetPosition());
- j := 200;
- locX.Context.SetObject(locRootObject,nil);
- locExp.SetRoot(ParseXPath(Format('p_ab_list[%s=%s]',[SIMPLE_PROP_B,TSDOConvertHelper.CurrencyToString(ComputeValue(j))])));
- locX.Execute(locExp);
- CheckEquals(Ord(xckNull), Ord(locX.Context.ContentKind));
- finally
- FreeAndNil(locX);
- FreeAndNil(locExp);
- end;
- end;
- {$ENDIF HAS_SDO_CURRENCY}
- {$IFDEF HAS_SDO_DOUBLE}
- procedure TXPathProcessor_Test.Execute_equal_double();
- const
- SIMPLE_PROP_A = 'simpleProperty_A';
- LIST_PROP_A = 'listProperty_A';
- SIMPLE_PROP_B = 'simpleProperty_B';
- PROP_TYPE = DoubleType;
- function CreateFactory() : ISDODataFactory;
- var
- locObj : ISDOType;
- locRes : ISDODataFactory;
- begin
- locRes := TSDODataFactory.Create() as ISDODataFactory;
- locRes.AddType(s_uri,s_type_object_A,[]);
- locRes.AddType(s_uri,s_type_object_B,[]);
- locObj := locRes.getType(s_uri,s_type_object_A);
- locRes.addProperty(locObj,SIMPLE_PROP_A,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE], []);
- locRes.addProperty(locObj,LIST_PROP_A,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE],[pfIsMany]);
- locRes.addProperty(locObj,'p_ab_list',s_uri,s_type_object_B,[pfIsMany,pfIsContainment]);
- locObj := locRes.getType(s_uri,s_type_object_B);
- locRes.addProperty(locObj,SIMPLE_PROP_B,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE], []);
- Result := locRes;
- end;
- function ComputeValue(const AInput : Integer) : TSDODouble;
- begin
- Result := AInput * 10000000;
- if ( ( AInput mod 2) = 0 ) then
- Result := -Result;
- end;
-
- procedure fill_p_ab_list(const AList : ISDODataObjectList; const ACount : Byte; const AFac : ISDODataFactory);
- var
- tmp : ISDODataObject;
- k : Byte;
- begin
- for k := 0 to Pred(ACount) do begin
- tmp := AFac.createNew(s_uri, s_type_object_B);
- tmp.setDouble(SIMPLE_PROP_B,ComputeValue(k));
- AList.append(tmp);
- end;
- end;
- var
- locFac : ISDODataFactory;
- locExp : TXPathExpression;
- locX : TXPathProcessor;
- locRootObject : ISDODataObject;
- tmpListAB : ISDODataObjectList;
- v : TSDODouble;
- j : Integer;
- begin
- locFac := CreateFactory();
- locRootObject := locFac.createNew(s_uri,s_type_object_A);
- tmpListAB := locRootObject.getList('p_ab_list');
- fill_p_ab_list(tmpListAB,100,locFac);
- locX := nil;
- locExp := TXPathExpression.Create();
- try
- locX := TXPathProcessor.Create();
- locX.Context.SetObject(locRootObject,nil);
- j := 12; v := j;
- locExp.SetRoot(ParseXPath(Format('p_ab_list[%s=%s]',[SIMPLE_PROP_B,TSDOConvertHelper.FloatToString(ComputeValue(j))])));
- locX.Execute(locExp);
- CheckEquals(Ord(xckObject), Ord(locX.Context.ContentKind));
- CheckEquals(PtrUInt(tmpListAB.getDataObject(j)), PtrUInt(locX.Context.ObjectItem));
- CheckEquals(PtrUInt(locRootObject.getProperty('p_ab_list')), PtrUInt(locX.Context.CurrentProperty));
- CheckEquals(v, tmpListAB.getCursor().GetPosition());
- j := 10; v := j;
- locX.Context.SetObject(locRootObject,nil);
- locExp.SetRoot(ParseXPath(Format('p_ab_list[%s=%s]',[SIMPLE_PROP_B,TSDOConvertHelper.FloatToString(ComputeValue(j))])));
- locX.Execute(locExp);
- CheckEquals(Ord(xckObject), Ord(locX.Context.ContentKind));
- CheckEquals(PtrUInt(tmpListAB.getDataObject(j)), PtrUInt(locX.Context.ObjectItem));
- CheckEquals(PtrUInt(locRootObject.getProperty('p_ab_list')), PtrUInt(locX.Context.CurrentProperty));
- CheckEquals(v, tmpListAB.getCursor().GetPosition());
- j := 0; v := j;
- locX.Context.SetObject(locRootObject,nil);
- locExp.SetRoot(ParseXPath(Format('p_ab_list[%s=%s]',[SIMPLE_PROP_B,TSDOConvertHelper.FloatToString(ComputeValue(j))])));
- locX.Execute(locExp);
- CheckEquals(Ord(xckObject), Ord(locX.Context.ContentKind));
- CheckEquals(PtrUInt(tmpListAB.getDataObject(j)), PtrUInt(locX.Context.ObjectItem));
- CheckEquals(PtrUInt(locRootObject.getProperty('p_ab_list')), PtrUInt(locX.Context.CurrentProperty));
- CheckEquals(v, tmpListAB.getCursor().GetPosition());
- j := 200;
- locX.Context.SetObject(locRootObject,nil);
- locExp.SetRoot(ParseXPath(Format('p_ab_list[%s=%s]',[SIMPLE_PROP_B,TSDOConvertHelper.FloatToString(ComputeValue(j))])));
- locX.Execute(locExp);
- CheckEquals(Ord(xckNull), Ord(locX.Context.ContentKind));
- finally
- FreeAndNil(locX);
- FreeAndNil(locExp);
- end;
- end;
- {$ENDIF HAS_SDO_DOUBLE}
- {$IFDEF HAS_SDO_FLOAT}
- procedure TXPathProcessor_Test.Execute_equal_float();
- const
- SIMPLE_PROP_A = 'simpleProperty_A';
- LIST_PROP_A = 'listProperty_A';
- SIMPLE_PROP_B = 'simpleProperty_B';
- PROP_TYPE = FloatType;
- function CreateFactory() : ISDODataFactory;
- var
- locObj : ISDOType;
- locRes : ISDODataFactory;
- begin
- locRes := TSDODataFactory.Create() as ISDODataFactory;
- locRes.AddType(s_uri,s_type_object_A,[]);
- locRes.AddType(s_uri,s_type_object_B,[]);
- locObj := locRes.getType(s_uri,s_type_object_A);
- locRes.addProperty(locObj,SIMPLE_PROP_A,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE], []);
- locRes.addProperty(locObj,LIST_PROP_A,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE],[pfIsMany]);
- locRes.addProperty(locObj,'p_ab_list',s_uri,s_type_object_B,[pfIsMany,pfIsContainment]);
- locObj := locRes.getType(s_uri,s_type_object_B);
- locRes.addProperty(locObj,SIMPLE_PROP_B,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE], []);
- Result := locRes;
- end;
- function ComputeValue(const AInput : Integer) : TSDOFloat;
- begin
- Result := AInput * 10000000;
- if ( ( AInput mod 2) = 0 ) then
- Result := -Result;
- end;
-
- procedure fill_p_ab_list(const AList : ISDODataObjectList; const ACount : Byte; const AFac : ISDODataFactory);
- var
- tmp : ISDODataObject;
- k : Byte;
- begin
- for k := 0 to Pred(ACount) do begin
- tmp := AFac.createNew(s_uri, s_type_object_B);
- tmp.setFloat(SIMPLE_PROP_B,ComputeValue(k));
- AList.append(tmp);
- end;
- end;
- var
- locFac : ISDODataFactory;
- locExp : TXPathExpression;
- locX : TXPathProcessor;
- locRootObject : ISDODataObject;
- tmpListAB : ISDODataObjectList;
- v : TSDOFloat;
- j : Integer;
- begin
- locFac := CreateFactory();
- locRootObject := locFac.createNew(s_uri,s_type_object_A);
- tmpListAB := locRootObject.getList('p_ab_list');
- fill_p_ab_list(tmpListAB,100,locFac);
- locX := nil;
- locExp := TXPathExpression.Create();
- try
- locX := TXPathProcessor.Create();
- locX.Context.SetObject(locRootObject,nil);
- j := 12; v := j;
- locExp.SetRoot(ParseXPath(Format('p_ab_list[%s=%s]',[SIMPLE_PROP_B,TSDOConvertHelper.FloatToString(ComputeValue(j))])));
- locX.Execute(locExp);
- CheckEquals(Ord(xckObject), Ord(locX.Context.ContentKind));
- CheckEquals(PtrUInt(tmpListAB.getDataObject(j)), PtrUInt(locX.Context.ObjectItem));
- CheckEquals(PtrUInt(locRootObject.getProperty('p_ab_list')), PtrUInt(locX.Context.CurrentProperty));
- CheckEquals(v, tmpListAB.getCursor().GetPosition());
- j := 10; v := j;
- locX.Context.SetObject(locRootObject,nil);
- locExp.SetRoot(ParseXPath(Format('p_ab_list[%s=%s]',[SIMPLE_PROP_B,TSDOConvertHelper.FloatToString(ComputeValue(j))])));
- locX.Execute(locExp);
- CheckEquals(Ord(xckObject), Ord(locX.Context.ContentKind));
- CheckEquals(PtrUInt(tmpListAB.getDataObject(j)), PtrUInt(locX.Context.ObjectItem));
- CheckEquals(PtrUInt(locRootObject.getProperty('p_ab_list')), PtrUInt(locX.Context.CurrentProperty));
- CheckEquals(v, tmpListAB.getCursor().GetPosition());
- j := 0; v := j;
- locX.Context.SetObject(locRootObject,nil);
- locExp.SetRoot(ParseXPath(Format('p_ab_list[%s=%s]',[SIMPLE_PROP_B,TSDOConvertHelper.FloatToString(ComputeValue(j))])));
- locX.Execute(locExp);
- CheckEquals(Ord(xckObject), Ord(locX.Context.ContentKind));
- CheckEquals(PtrUInt(tmpListAB.getDataObject(j)), PtrUInt(locX.Context.ObjectItem));
- CheckEquals(PtrUInt(locRootObject.getProperty('p_ab_list')), PtrUInt(locX.Context.CurrentProperty));
- CheckEquals(v, tmpListAB.getCursor().GetPosition());
- j := 200;
- locX.Context.SetObject(locRootObject,nil);
- locExp.SetRoot(ParseXPath(Format('p_ab_list[%s=%s]',[SIMPLE_PROP_B,TSDOConvertHelper.FloatToString(ComputeValue(j))])));
- locX.Execute(locExp);
- CheckEquals(Ord(xckNull), Ord(locX.Context.ContentKind));
- finally
- FreeAndNil(locX);
- FreeAndNil(locExp);
- end;
- end;
- {$ENDIF HAS_SDO_FLOAT}
- {$IFDEF HAS_SDO_LONG}
- procedure TXPathProcessor_Test.Execute_equal_long();
- const
- SIMPLE_PROP_A = 'simpleProperty_A';
- LIST_PROP_A = 'listProperty_A';
- SIMPLE_PROP_B = 'simpleProperty_B';
- PROP_TYPE = LongType;
- function CreateFactory() : ISDODataFactory;
- var
- locObj : ISDOType;
- locRes : ISDODataFactory;
- begin
- locRes := TSDODataFactory.Create() as ISDODataFactory;
- locRes.AddType(s_uri,s_type_object_A,[]);
- locRes.AddType(s_uri,s_type_object_B,[]);
- locObj := locRes.getType(s_uri,s_type_object_A);
- locRes.addProperty(locObj,SIMPLE_PROP_A,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE], []);
- locRes.addProperty(locObj,LIST_PROP_A,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE],[pfIsMany]);
- locRes.addProperty(locObj,'p_ab_list',s_uri,s_type_object_B,[pfIsMany,pfIsContainment]);
- locObj := locRes.getType(s_uri,s_type_object_B);
- locRes.addProperty(locObj,SIMPLE_PROP_B,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE], []);
- Result := locRes;
- end;
- function ComputeValue(const AInput : TSDOLong) : TSDOLong;
- begin
- Result := AInput * 10000000;
- if ( ( AInput mod 2) = 0 ) then
- Result := -Result;
- end;
-
- procedure fill_p_ab_list(const AList : ISDODataObjectList; const ACount : Byte; const AFac : ISDODataFactory);
- var
- tmp : ISDODataObject;
- k : Byte;
- begin
- for k := 0 to Pred(ACount) do begin
- tmp := AFac.createNew(s_uri, s_type_object_B);
- tmp.setLong(SIMPLE_PROP_B,ComputeValue(k));
- AList.append(tmp);
- end;
- end;
- var
- locFac : ISDODataFactory;
- locExp : TXPathExpression;
- locX : TXPathProcessor;
- locRootObject : ISDODataObject;
- tmpListAB : ISDODataObjectList;
- i : TSDOLong;
- begin
- locFac := CreateFactory();
- locRootObject := locFac.createNew(s_uri,s_type_object_A);
- tmpListAB := locRootObject.getList('p_ab_list');
- fill_p_ab_list(tmpListAB,100,locFac);
- locX := nil;
- locExp := TXPathExpression.Create();
- try
- locX := TXPathProcessor.Create();
- locX.Context.SetObject(locRootObject,nil);
- i := 12;
- locExp.SetRoot(ParseXPath(Format('p_ab_list[%s=%d]',[SIMPLE_PROP_B,ComputeValue(i)])));
- locX.Execute(locExp);
- CheckEquals(Ord(xckObject), Ord(locX.Context.ContentKind));
- CheckEquals(PtrUInt(tmpListAB.getDataObject(i)), PtrUInt(locX.Context.ObjectItem));
- CheckEquals(PtrUInt(locRootObject.getProperty('p_ab_list')), PtrUInt(locX.Context.CurrentProperty));
- CheckEquals(i, tmpListAB.getCursor().GetPosition());
- i := 10;
- locX.Context.SetObject(locRootObject,nil);
- locExp.SetRoot(ParseXPath(Format('p_ab_list[%s=%d]',[SIMPLE_PROP_B,ComputeValue(i)])));
- locX.Execute(locExp);
- CheckEquals(Ord(xckObject), Ord(locX.Context.ContentKind));
- CheckEquals(PtrUInt(tmpListAB.getDataObject(i)), PtrUInt(locX.Context.ObjectItem));
- CheckEquals(PtrUInt(locRootObject.getProperty('p_ab_list')), PtrUInt(locX.Context.CurrentProperty));
- CheckEquals(i, tmpListAB.getCursor().GetPosition());
- i := 0;
- locX.Context.SetObject(locRootObject,nil);
- locExp.SetRoot(ParseXPath(Format('p_ab_list[%s=%d]',[SIMPLE_PROP_B,ComputeValue(i)])));
- locX.Execute(locExp);
- CheckEquals(Ord(xckObject), Ord(locX.Context.ContentKind));
- CheckEquals(PtrUInt(tmpListAB.getDataObject(i)), PtrUInt(locX.Context.ObjectItem));
- CheckEquals(PtrUInt(locRootObject.getProperty('p_ab_list')), PtrUInt(locX.Context.CurrentProperty));
- CheckEquals(i, tmpListAB.getCursor().GetPosition());
- i := 200;
- locX.Context.SetObject(locRootObject,nil);
- locExp.SetRoot(ParseXPath(Format('p_ab_list[%s=%d]',[SIMPLE_PROP_B,ComputeValue(i)])));
- locX.Execute(locExp);
- CheckEquals(Ord(xckNull), Ord(locX.Context.ContentKind));
- finally
- FreeAndNil(locX);
- FreeAndNil(locExp);
- end;
- end;
- {$ENDIF HAS_SDO_LONG}
- {$IFDEF HAS_SDO_SHORT}
- procedure TXPathProcessor_Test.Execute_equal_short();
- const
- SIMPLE_PROP_A = 'simpleProperty_A';
- LIST_PROP_A = 'listProperty_A';
- SIMPLE_PROP_B = 'simpleProperty_B';
- PROP_TYPE = ShortType;
- function CreateFactory() : ISDODataFactory;
- var
- locObj : ISDOType;
- locRes : ISDODataFactory;
- begin
- locRes := TSDODataFactory.Create() as ISDODataFactory;
- locRes.AddType(s_uri,s_type_object_A,[]);
- locRes.AddType(s_uri,s_type_object_B,[]);
- locObj := locRes.getType(s_uri,s_type_object_A);
- locRes.addProperty(locObj,SIMPLE_PROP_A,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE], []);
- locRes.addProperty(locObj,LIST_PROP_A,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE],[pfIsMany]);
- locRes.addProperty(locObj,'p_ab_list',s_uri,s_type_object_B,[pfIsMany,pfIsContainment]);
- locObj := locRes.getType(s_uri,s_type_object_B);
- locRes.addProperty(locObj,SIMPLE_PROP_B,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE], []);
- Result := locRes;
- end;
- function ComputeValue(const AInput : TSDOShort) : TSDOShort;
- begin
- Result := AInput * 100 + AInput;
- if ( ( AInput mod 2) = 0 ) then
- Result := -Result;
- end;
-
- procedure fill_p_ab_list(const AList : ISDODataObjectList; const ACount : Byte; const AFac : ISDODataFactory);
- var
- tmp : ISDODataObject;
- k : Byte;
- begin
- for k := 0 to Pred(ACount) do begin
- tmp := AFac.createNew(s_uri, s_type_object_B);
- tmp.setShort(SIMPLE_PROP_B,ComputeValue(k));
- AList.append(tmp);
- end;
- end;
- var
- locFac : ISDODataFactory;
- locExp : TXPathExpression;
- locX : TXPathProcessor;
- locRootObject : ISDODataObject;
- tmpListAB : ISDODataObjectList;
- i : TSDOShort;
- begin
- locFac := CreateFactory();
- locRootObject := locFac.createNew(s_uri,s_type_object_A);
- tmpListAB := locRootObject.getList('p_ab_list');
- fill_p_ab_list(tmpListAB,100,locFac);
- locX := nil;
- locExp := TXPathExpression.Create();
- try
- locX := TXPathProcessor.Create();
- locX.Context.SetObject(locRootObject,nil);
- i := 12;
- locExp.SetRoot(ParseXPath(Format('p_ab_list[%s=%d]',[SIMPLE_PROP_B,ComputeValue(i)])));
- locX.Execute(locExp);
- CheckEquals(Ord(xckObject), Ord(locX.Context.ContentKind));
- CheckEquals(PtrUInt(tmpListAB.getDataObject(i)), PtrUInt(locX.Context.ObjectItem));
- CheckEquals(PtrUInt(locRootObject.getProperty('p_ab_list')), PtrUInt(locX.Context.CurrentProperty));
- CheckEquals(i, tmpListAB.getCursor().GetPosition());
- i := 10;
- locX.Context.SetObject(locRootObject,nil);
- locExp.SetRoot(ParseXPath(Format('p_ab_list[%s=%d]',[SIMPLE_PROP_B,ComputeValue(i)])));
- locX.Execute(locExp);
- CheckEquals(Ord(xckObject), Ord(locX.Context.ContentKind));
- CheckEquals(PtrUInt(tmpListAB.getDataObject(i)), PtrUInt(locX.Context.ObjectItem));
- CheckEquals(PtrUInt(locRootObject.getProperty('p_ab_list')), PtrUInt(locX.Context.CurrentProperty));
- CheckEquals(i, tmpListAB.getCursor().GetPosition());
- i := 0;
- locX.Context.SetObject(locRootObject,nil);
- locExp.SetRoot(ParseXPath(Format('p_ab_list[%s=%d]',[SIMPLE_PROP_B,ComputeValue(i)])));
- locX.Execute(locExp);
- CheckEquals(Ord(xckObject), Ord(locX.Context.ContentKind));
- CheckEquals(PtrUInt(tmpListAB.getDataObject(i)), PtrUInt(locX.Context.ObjectItem));
- CheckEquals(PtrUInt(locRootObject.getProperty('p_ab_list')), PtrUInt(locX.Context.CurrentProperty));
- CheckEquals(i, tmpListAB.getCursor().GetPosition());
- i := 200;
- locX.Context.SetObject(locRootObject,nil);
- locExp.SetRoot(ParseXPath(Format('p_ab_list[%s=%d]',[SIMPLE_PROP_B,ComputeValue(i)])));
- locX.Execute(locExp);
- CheckEquals(Ord(xckNull), Ord(locX.Context.ContentKind));
- finally
- FreeAndNil(locX);
- FreeAndNil(locExp);
- end;
- end;
- {$ENDIF HAS_SDO_SHORT}
- procedure TXPathProcessor_Test.Execute_nested_object;
- function CreateFactory() : ISDODataFactory;
- var
- locObj : ISDOType;
- locRes : ISDODataFactory;
- begin
- locRes := TSDODataFactory.Create() as ISDODataFactory;
- locRes.AddType(s_uri,s_type_object_A,[]);
- locRes.AddType(s_uri,s_type_object_B,[]);
- locRes.AddType(s_uri,s_type_object_C,[]);
- locRes.AddType(s_uri,s_type_object_D,[]);
- locObj := locRes.getType(s_uri,s_type_object_A);
- locRes.addProperty(locObj,s_bool_prop,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType], []);
- locRes.addProperty(locObj,s_bool_propList,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType],[pfIsMany]);
- locRes.addProperty(locObj,s_integer_prop,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType], []);
- locRes.addProperty(locObj,s_integer_propList,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[pfIsMany]);
- locRes.addProperty(locObj,s_string_prop,sdo_namespace,SDOTypeDefaultTypeNames[StringType], []);
- locRes.addProperty(locObj,s_string_propList,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsMany]);
- locRes.addProperty(locObj,'p_ab',s_uri,s_type_object_B,[pfIsContainment]);
- locRes.addProperty(locObj,'p_ab_list',s_uri,s_type_object_B,[pfIsMany,pfIsContainment]);
- locRes.addProperty(locObj,'p_ac',s_uri,s_type_object_C,[pfIsContainment]);
- locObj := locRes.getType(s_uri,s_type_object_B);
- locRes.addProperty(locObj,s_bool_prop,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType], []);
- locRes.addProperty(locObj,s_bool_propList,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType],[pfIsMany]);
- locRes.addProperty(locObj,s_integer_prop,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType], []);
- locRes.addProperty(locObj,s_integer_propList,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[pfIsMany]);
- locRes.addProperty(locObj,s_string_prop,sdo_namespace,SDOTypeDefaultTypeNames[StringType], []);
- locRes.addProperty(locObj,s_string_propList,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsMany]);
- locRes.addProperty(locObj,'p_bc',s_uri,s_type_object_C,[pfIsContainment]);
- locRes.addProperty(locObj,'p_bc_list',s_uri,s_type_object_C,[pfIsMany,pfIsContainment]);
- locObj := locRes.getType(s_uri,s_type_object_C);
- locRes.addProperty(locObj,'p_cd',s_uri,s_type_object_D,[pfIsContainment]);
- Result := locRes;
- end;
- var
- locFac : ISDODataFactory;
- locExp : TXPathExpression;
- locX : TXPathProcessor;
- locRootObject, tmpAB, tmpAC, tmpAB_BC, tmpAB_BC_CD : ISDODataObject;
- begin
- locFac := CreateFactory();
- locRootObject := locFac.createNew(s_uri,s_type_object_A);
- tmpAC := locRootObject.createDataObject('p_ac');
- tmpAB := locRootObject.createDataObject('p_ab');
- tmpAB_BC := tmpAB.createDataObject('p_bc');
- tmpAB_BC_CD := tmpAB_BC.createDataObject('p_cd');
- locX := nil;
- locExp := TXPathExpression.Create();
- try
- locX := TXPathProcessor.Create();
- locX.Context.SetObject(locRootObject,nil);
- locExp.SetRoot(ParseXPath('p_ab/p_bc/p_cd'));
- locX.Execute(locExp);
- CheckEquals(Ord(xckObject), Ord(locX.Context.ContentKind));
- CheckEquals(PtrUInt(tmpAB_BC_CD), PtrUInt(locX.Context.ObjectItem));
- CheckEquals(PtrUInt(tmpAB_BC.getProperty('p_cd')), PtrUInt(locX.Context.CurrentProperty));
- finally
- FreeAndNil(locX);
- FreeAndNil(locExp);
- end;
- locX := nil;
- locExp := TXPathExpression.Create();
- try
- locX := TXPathProcessor.Create();
- locX.Context.SetObject(locRootObject,nil);
- locExp.SetRoot(ParseXPath('p_ab/p_bc'));
- locX.Execute(locExp);
- CheckEquals(Ord(xckObject), Ord(locX.Context.ContentKind));
- CheckEquals(PtrUInt(tmpAB_BC), PtrUInt(locX.Context.ObjectItem));
- CheckEquals(PtrUInt(tmpAB.getProperty('p_bc')), PtrUInt(locX.Context.CurrentProperty));
- finally
- FreeAndNil(locX);
- FreeAndNil(locExp);
- end;
- locRootObject := nil;
- tmpAC := nil;
- tmpAB := nil;
- tmpAB_BC := nil;
- tmpAB_BC_CD := nil;
- locRootObject := locFac.createNew(s_uri,s_type_object_A);
- tmpAC := nil;
- tmpAB := locRootObject.createDataObject('p_ab');
- tmpAB_BC := tmpAB.createDataObject('p_bc');
- tmpAB_BC_CD := nil;
- locX := nil;
- locExp := TXPathExpression.Create();
- try
- locX := TXPathProcessor.Create();
- locX.Context.SetObject(locRootObject,nil);
- locExp.SetRoot(ParseXPath('p_ac'));
- locX.Execute(locExp);
- CheckEquals(Ord(xckNull), Ord(locX.Context.ContentKind));
- CheckEquals(PtrUInt(locRootObject.getProperty('p_ac')), PtrUInt(locX.Context.CurrentProperty));
- locX.Context.SetObject(locRootObject,nil);
- locExp.SetRoot(ParseXPath('p_ab/p_bc'));
- locX.Execute(locExp);
- CheckEquals(Ord(xckObject), Ord(locX.Context.ContentKind));
- CheckEquals(PtrUInt(tmpAB_BC), PtrUInt(locX.Context.ObjectItem));
- CheckEquals(PtrUInt(tmpAB.getProperty('p_bc')), PtrUInt(locX.Context.CurrentProperty));
- locX.Context.SetObject(locRootObject,nil);
- locExp.SetRoot(ParseXPath('p_ab/p_bc/p_cd'));
- locX.Execute(locExp);
- CheckEquals(Ord(xckNull), Ord(locX.Context.ContentKind));
- CheckEquals(PtrUInt(tmpAB_BC.getProperty('p_cd')), PtrUInt(locX.Context.CurrentProperty));
- finally
- FreeAndNil(locX);
- FreeAndNil(locExp);
- end;
- end;
- procedure TXPathProcessor_Test.Execute_simple_object();
- function CreateFactory() : ISDODataFactory;
- var
- locObj : ISDOType;
- locRes : ISDODataFactory;
- begin
- locRes := TSDODataFactory.Create() as ISDODataFactory;
- locRes.AddType(s_uri,s_type_object_A,[]);
- locRes.AddType(s_uri,s_type_object_B,[]);
- locObj := locRes.getType(s_uri,s_type_object_A);
- locRes.addProperty(locObj,s_bool_prop,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType], []);
- locRes.addProperty(locObj,s_bool_propList,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType],[pfIsMany]);
- locRes.addProperty(locObj,s_integer_prop,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType], []);
- locRes.addProperty(locObj,s_integer_propList,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[pfIsMany]);
- locRes.addProperty(locObj,s_string_prop,sdo_namespace,SDOTypeDefaultTypeNames[StringType], []);
- locRes.addProperty(locObj,s_string_propList,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsMany]);
- locRes.addProperty(locObj,s_object_prop,s_uri,s_type_object_B,[pfIsContainment]);
- locRes.addProperty(locObj,s_object_propList,s_uri,s_type_object_B,[pfIsMany,pfIsContainment]);
- Result := locRes;
- end;
- var
- locFac : ISDODataFactory;
- locExp : TXPathExpression;
- locX : TXPathProcessor;
- locRootObject : ISDODataObject;
- begin
- locFac := CreateFactory();
- locRootObject := locFac.createNew(s_uri,s_type_object_A);
- locRootObject.setBoolean(s_bool_prop,False);
- locRootObject.setInteger(s_integer_prop,1210);
- locRootObject.setString(s_string_prop,'sdo-wst-azerty');
- locRootObject.createDataObject(s_object_prop);
- locX := nil;
- locExp := TXPathExpression.Create();
- try
- locX := TXPathProcessor.Create();
- locX.Context.SetObject(locRootObject,nil);
- locExp.SetRoot(ParseXPath(s_object_prop));
- locX.Execute(locExp);
- CheckEquals(Ord(xckObject), Ord(locX.Context.ContentKind));
- CheckEquals(PtrUInt(locRootObject.getDataObject(s_object_prop)), PtrUInt(locX.Context.ObjectItem));
- CheckEquals(PtrUInt(locRootObject.getProperty(s_object_prop)), PtrUInt(locX.Context.CurrentProperty));
- finally
- FreeAndNil(locX);
- FreeAndNil(locExp);
- end;
- end;
- procedure TXPathProcessor_Test.Execute_simple_value_type;
- const SIMPLE_TYPE_PROPS : array[0..2] of string = ( s_bool_prop, s_integer_prop, s_string_prop);
- function CreateFactory() : ISDODataFactory;
- var
- locObj : ISDOType;
- locRes : ISDODataFactory;
- begin
- locRes := TSDODataFactory.Create() as ISDODataFactory;
- locRes.AddType(s_uri,s_type_object_A,[]);
- locObj := locRes.getType(s_uri,s_type_object_A);
- locRes.addProperty(locObj,s_bool_prop,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType], []);
- locRes.addProperty(locObj,s_bool_propList,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType],[pfIsMany]);
- locRes.addProperty(locObj,s_integer_prop,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType], []);
- locRes.addProperty(locObj,s_integer_propList,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[pfIsMany]);
- locRes.addProperty(locObj,s_string_prop,sdo_namespace,SDOTypeDefaultTypeNames[StringType], []);
- locRes.addProperty(locObj,s_string_propList,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsMany]);
- Result := locRes;
- end;
- var
- locFac : ISDODataFactory;
- locExp : TXPathExpression;
- locX : TXPathProcessor;
- locRootObject : ISDODataObject;
- i : PtrInt;
- propName : string;
- begin
- locFac := CreateFactory();
- locRootObject := locFac.createNew(s_uri,s_type_object_A);
- for i := Low(SIMPLE_TYPE_PROPS) to High(SIMPLE_TYPE_PROPS) do begin
- propName := SIMPLE_TYPE_PROPS[i];
- locX := nil;
- locExp := TXPathExpression.Create();
- try
- locX := TXPathProcessor.Create();
- locX.Context.SetObject(locRootObject,nil);
- locExp.SetRoot(ParseXPath(propName));
- locX.Execute(locExp);
- CheckEquals(Ord(xckValue), Ord(locX.Context.ContentKind));
- CheckEquals(PtrUInt(locRootObject), PtrUInt(locX.Context.ObjectItem));
- CheckEquals(PtrUInt(locRootObject.getProperty(propName)), PtrUInt(locX.Context.CurrentProperty));
- finally
- FreeAndNil(locX);
- FreeAndNil(locExp);
- end;
- end;
- end;
- { TXPathScanner_Test }
- procedure TXPathScanner_Test.composed_1();
- var
- locObj : TXPathScanner;
- begin
- locObj := TXPathScanner.Create('object/@prop_a/prop_b[2]/prop_c[prop_d="azerty"]');
- try
- CheckEquals(Ord(xtkSymbol), Ord(locObj.NextToken()));
- CheckEquals(Ord(xtkSymbol), Ord(locObj.Token));
- CheckEquals('object',locObj.TokenString);
- CheckEquals(Ord(xtkSlash), Ord(locObj.NextToken()));
- CheckEquals(Ord(xtkSlash), Ord(locObj.Token));
- CheckEquals('/',locObj.TokenString);
- CheckEquals(Ord(xtkAt), Ord(locObj.NextToken()));
- CheckEquals(Ord(xtkAt), Ord(locObj.Token));
- CheckEquals('@',locObj.TokenString);
- CheckEquals(Ord(xtkSymbol), Ord(locObj.NextToken()));
- CheckEquals(Ord(xtkSymbol), Ord(locObj.Token));
- CheckEquals('prop_a',locObj.TokenString);
- CheckEquals(Ord(xtkSlash), Ord(locObj.NextToken()));
- CheckEquals(Ord(xtkSlash), Ord(locObj.Token));
- CheckEquals('/',locObj.TokenString);
- CheckEquals(Ord(xtkSymbol), Ord(locObj.NextToken()));
- CheckEquals(Ord(xtkSymbol), Ord(locObj.Token));
- CheckEquals('prop_b',locObj.TokenString);
- CheckEquals(Ord(xtkSquaredBraceLeft), Ord(locObj.NextToken()));
- CheckEquals(Ord(xtkSquaredBraceLeft), Ord(locObj.Token));
- CheckEquals('[',locObj.TokenString);
- CheckEquals(Ord(xtkNumber), Ord(locObj.NextToken()));
- CheckEquals(Ord(xtkNumber), Ord(locObj.Token));
- CheckEquals(2,locObj.TokenInt);
- CheckEquals(Ord(xtkSquaredBraceRigth), Ord(locObj.NextToken()));
- CheckEquals(Ord(xtkSquaredBraceRigth), Ord(locObj.Token));
- CheckEquals(']',locObj.TokenString);
- CheckEquals(Ord(xtkSlash), Ord(locObj.NextToken()));
- CheckEquals(Ord(xtkSlash), Ord(locObj.Token));
- CheckEquals('/',locObj.TokenString);
- CheckEquals(Ord(xtkSymbol), Ord(locObj.NextToken()));
- CheckEquals(Ord(xtkSymbol), Ord(locObj.Token));
- CheckEquals('prop_c',locObj.TokenString);
- CheckEquals(Ord(xtkSquaredBraceLeft), Ord(locObj.NextToken()));
- CheckEquals(Ord(xtkSquaredBraceLeft), Ord(locObj.Token));
- CheckEquals('[',locObj.TokenString);
- CheckEquals(Ord(xtkSymbol), Ord(locObj.NextToken()));
- CheckEquals(Ord(xtkSymbol), Ord(locObj.Token));
- CheckEquals('prop_d',locObj.TokenString);
- CheckEquals(Ord(xtkEqual), Ord(locObj.NextToken()));
- CheckEquals(Ord(xtkEqual), Ord(locObj.Token));
- CheckEquals('=',locObj.TokenString);
- CheckEquals(Ord(xtkString), Ord(locObj.NextToken()));
- CheckEquals(Ord(xtkString), Ord(locObj.Token));
- CheckEquals('azerty',locObj.TokenString);
- CheckEquals(Ord(xtkSquaredBraceRigth), Ord(locObj.NextToken()));
- CheckEquals(Ord(xtkSquaredBraceRigth), Ord(locObj.Token));
- CheckEquals(']',locObj.TokenString);
- finally
- FreeAndNil(locObj);
- end;
- end;
- procedure TXPathScanner_Test.simple();
- var
- locObj : TXPathScanner;
- begin
- locObj := TXPathScanner.Create('');
- try
- CheckEquals(Ord(xtkEof), Ord(locObj.NextToken()));
- finally
- FreeAndNil(locObj);
- end;
- locObj := TXPathScanner.Create('null');
- try
- CheckEquals(Ord(xtkNull), Ord(locObj.NextToken()));
- CheckEquals(Ord(xtkNull), Ord(locObj.Token));
- CheckEquals('null', locObj.TokenString);
- CheckEquals(Ord(xtkEof), Ord(locObj.NextToken()));
- finally
- FreeAndNil(locObj);
- end;
- locObj := TXPathScanner.Create('true');
- try
- CheckEquals(Ord(xtkTrue), Ord(locObj.NextToken()));
- CheckEquals(Ord(xtkTrue), Ord(locObj.Token));
- CheckEquals('true', locObj.TokenString);
- CheckEquals(Ord(xtkEof), Ord(locObj.NextToken()));
- finally
- FreeAndNil(locObj);
- end;
- locObj := TXPathScanner.Create('false');
- try
- CheckEquals(Ord(xtkFalse), Ord(locObj.NextToken()));
- CheckEquals(Ord(xtkFalse), Ord(locObj.Token));
- CheckEquals('false', locObj.TokenString);
- CheckEquals(Ord(xtkEof), Ord(locObj.NextToken()));
- finally
- FreeAndNil(locObj);
- end;
- locObj := TXPathScanner.Create('sampleProperty_123');
- try
- CheckEquals(Ord(xtkSymbol), Ord(locObj.NextToken()));
- CheckEquals(Ord(xtkSymbol), Ord(locObj.Token));
- CheckEquals('sampleProperty_123', locObj.TokenString);
- CheckEquals(Ord(xtkEof), Ord(locObj.NextToken()));
- finally
- FreeAndNil(locObj);
- end;
- locObj := TXPathScanner.Create('.');
- try
- CheckEquals(Ord(xtkPeriod), Ord(locObj.NextToken()));
- CheckEquals(Ord(xtkPeriod), Ord(locObj.Token));
- CheckEquals('.', locObj.TokenString);
- CheckEquals(Ord(xtkEof), Ord(locObj.NextToken()));
- finally
- FreeAndNil(locObj);
- end;
- locObj := TXPathScanner.Create('..');
- try
- CheckEquals(Ord(xtkDoublePeriod), Ord(locObj.NextToken()));
- CheckEquals(Ord(xtkDoublePeriod), Ord(locObj.Token));
- CheckEquals('..', locObj.TokenString);
- CheckEquals(Ord(xtkEof), Ord(locObj.NextToken()));
- finally
- FreeAndNil(locObj);
- end;
- locObj := TXPathScanner.Create('/');
- try
- CheckEquals(Ord(xtkSlash), Ord(locObj.NextToken()));
- CheckEquals(Ord(xtkSlash), Ord(locObj.Token));
- CheckEquals('/', locObj.TokenString);
- CheckEquals(Ord(xtkEof), Ord(locObj.NextToken()));
- finally
- FreeAndNil(locObj);
- end;
- locObj := TXPathScanner.Create('[');
- try
- CheckEquals(Ord(xtkSquaredBraceLeft), Ord(locObj.NextToken()));
- CheckEquals(Ord(xtkSquaredBraceLeft), Ord(locObj.Token));
- CheckEquals('[', locObj.TokenString);
- CheckEquals(Ord(xtkEof), Ord(locObj.NextToken()));
- finally
- FreeAndNil(locObj);
- end;
- locObj := TXPathScanner.Create(']');
- try
- CheckEquals(Ord(xtkSquaredBraceRigth), Ord(locObj.NextToken()));
- CheckEquals(Ord(xtkSquaredBraceRigth), Ord(locObj.Token));
- CheckEquals(']', locObj.TokenString);
- CheckEquals(Ord(xtkEof), Ord(locObj.NextToken()));
- finally
- FreeAndNil(locObj);
- end;
- locObj := TXPathScanner.Create('@');
- try
- CheckEquals(Ord(xtkAt), Ord(locObj.NextToken()));
- CheckEquals(Ord(xtkAt), Ord(locObj.Token));
- CheckEquals('@', locObj.TokenString);
- CheckEquals(Ord(xtkEof), Ord(locObj.NextToken()));
- finally
- FreeAndNil(locObj);
- end;
- end;
- procedure TXPathScanner_Test.simple_number();
- var
- locObj : TXPathScanner;
- begin
- locObj := TXPathScanner.Create('0');
- try
- CheckEquals(Ord(xtkNumber), Ord(locObj.NextToken()));
- CheckEquals(Ord(xtkNumber), Ord(locObj.Token));
- CheckEquals('0', locObj.TokenString);
- CheckEquals(0, locObj.TokenInt);
- CheckEquals(0.0, locObj.TokenNumber,0.01);
- CheckEquals(Ord(xtkEof), Ord(locObj.NextToken()));
- finally
- FreeAndNil(locObj);
- end;
- locObj := TXPathScanner.Create('-0');
- try
- CheckEquals(Ord(xtkNumber), Ord(locObj.NextToken()));
- CheckEquals(Ord(xtkNumber), Ord(locObj.Token));
- CheckEquals('-0', locObj.TokenString);
- CheckEquals(0, locObj.TokenInt);
- CheckEquals(0.0, locObj.TokenNumber,0.01);
- CheckEquals(Ord(xtkEof), Ord(locObj.NextToken()));
- finally
- FreeAndNil(locObj);
- end;
- locObj := TXPathScanner.Create('.0');
- try
- CheckEquals(Ord(xtkNumber), Ord(locObj.NextToken()));
- CheckEquals(Ord(xtkNumber), Ord(locObj.Token));
- CheckEquals('0.0', locObj.TokenString);
- CheckEquals(0.0, locObj.TokenNumber,0.01);
- CheckEquals(Ord(xtkEof), Ord(locObj.NextToken()));
- finally
- FreeAndNil(locObj);
- end;
- locObj := TXPathScanner.Create('123');
- try
- CheckEquals(Ord(xtkNumber), Ord(locObj.NextToken()));
- CheckEquals(Ord(xtkNumber), Ord(locObj.Token));
- CheckEquals('123', locObj.TokenString);
- CheckEquals(123, locObj.TokenInt);
- CheckEquals(123.0, locObj.TokenNumber,0.01);
- CheckEquals(Ord(xtkEof), Ord(locObj.NextToken()));
- finally
- FreeAndNil(locObj);
- end;
- locObj := TXPathScanner.Create('1');
- try
- CheckEquals(Ord(xtkNumber), Ord(locObj.NextToken()));
- CheckEquals(Ord(xtkNumber), Ord(locObj.Token));
- CheckEquals('1', locObj.TokenString);
- CheckEquals(1, locObj.TokenInt);
- CheckEquals(1.0, locObj.TokenNumber,0.01);
- CheckEquals(Ord(xtkEof), Ord(locObj.NextToken()));
- finally
- FreeAndNil(locObj);
- end;
- locObj := TXPathScanner.Create('-123');
- try
- CheckEquals(Ord(xtkNumber), Ord(locObj.NextToken()));
- CheckEquals(Ord(xtkNumber), Ord(locObj.Token));
- CheckEquals('-123', locObj.TokenString);
- CheckEquals(-123, locObj.TokenInt);
- CheckEquals(-123.0, locObj.TokenNumber,0.01);
- CheckEquals(Ord(xtkEof), Ord(locObj.NextToken()));
- finally
- FreeAndNil(locObj);
- end;
- locObj := TXPathScanner.Create('-1');
- try
- CheckEquals(Ord(xtkNumber), Ord(locObj.NextToken()));
- CheckEquals(Ord(xtkNumber), Ord(locObj.Token));
- CheckEquals('-1', locObj.TokenString);
- CheckEquals(-1, locObj.TokenInt);
- CheckEquals(-1.0, locObj.TokenNumber,0.01);
- CheckEquals(Ord(xtkEof), Ord(locObj.NextToken()));
- finally
- FreeAndNil(locObj);
- end;
- end;
- { TXPathParser_Test }
- procedure TXPathParser_Test.parse_1();
- var
- locObj : TXPathParser;
- locRootNode, locNode : TXPathNode;
- begin
- locRootNode := nil;
- locObj := TXPathParser.Create('object');
- try
- locRootNode := locObj.Parse();
- CheckNotNull(locRootNode, 'root');
- locNode := locRootNode;
- CheckIs(locNode, TXPathContextStepNode);
- CheckEquals(Ord(xcsProperty), Ord(TXPathContextStepNode(locNode).Switch));
- CheckEquals('object', TXPathContextStepNode(locNode).PropertyName);
- CheckNull(locNode.Next);
- finally
- FreeAndNil(locRootNode);
- FreeAndNil(locObj);
- end;
- end;
- procedure TXPathParser_Test.parse_10();
- var
- locObj : TXPathParser;
- locRootNode, locNode, tmpNode : TXPathNode;
- begin
- locRootNode := nil;
- //locObj := TXPathParser.Create('object/prop_a/prop_b[2]/prop_c[prop_d="azerty"]');
- locObj := TXPathParser.Create('prop_b[2]/prop_c[prop_d="azerty"]');
- try
- locRootNode := locObj.Parse();
- CheckNotNull(locRootNode, 'root');
- locNode := locRootNode;
- CheckNotNull(locNode);
- CheckIs(locNode, TXPathContextStepNode);
- CheckEquals(Ord(xcsProperty), Ord(TXPathContextStepNode(locNode).Switch));
- CheckEquals('prop_b', TXPathContextStepNode(locNode).PropertyName);
- locNode := locNode.Next;
- CheckNotNull(locNode);
- CheckIs(locNode, TXPathMoveInstructionStepNode);
- tmpNode := TXPathMoveInstructionStepNode(locNode).Distance;
- CheckIs(tmpNode,TXPathNumberConstantNode);
- CheckEquals(2, TXPathNumberConstantNode(tmpNode).Value, 0.01);
- locNode := locNode.Next;
- CheckNotNull(locNode);
- CheckIs(locNode, TXPathContextStepNode);
- CheckEquals(Ord(xcsProperty), Ord(TXPathContextStepNode(locNode).Switch));
- CheckEquals('prop_c', TXPathContextStepNode(locNode).PropertyName);
- locNode := locNode.Next;
- CheckNotNull(locNode);
- CheckIs(locNode, TXPathLocateInstructionStepNode);
- locNode := TXPathLocateInstructionStepNode(locNode).Condition;
- tmpNode := TXPathEqualNode(locNode).Left;
- CheckIs(tmpNode, TXPathValueSymbolNode);
- CheckEquals('prop_d', TXPathValueSymbolNode(tmpNode).Symbol);
- tmpNode := TXPathEqualNode(locNode).Right;
- CheckIs(tmpNode, TXPathStringConstantNode);
- CheckEquals('azerty', TXPathStringConstantNode(tmpNode).Value);
- finally
- FreeAndNil(locRootNode);
- FreeAndNil(locObj);
- end;
- end;
- procedure TXPathParser_Test.parse_2();
- var
- locObj : TXPathParser;
- locRootNode, locNode : TXPathNode;
- begin
- locRootNode := nil;
- locObj := TXPathParser.Create('/object');
- try
- locRootNode := locObj.Parse();
- CheckNotNull(locRootNode, 'root');
- locNode := locRootNode;
- CheckIs(locNode, TXPathContextStepNode);
- CheckEquals(Ord(xcsRoot), Ord(TXPathContextStepNode(locNode).Switch));
- CheckEquals('', TXPathContextStepNode(locNode).PropertyName);
- CheckNotNull(locNode.Next);
- locNode := locNode.Next;
- CheckEquals(Ord(xcsProperty), Ord(TXPathContextStepNode(locNode).Switch));
- CheckEquals('object', TXPathContextStepNode(locNode).PropertyName);
- CheckNull(locNode.Next);
- finally
- FreeAndNil(locRootNode);
- FreeAndNil(locObj);
- end;
- end;
- procedure TXPathParser_Test.parse_3();
- var
- locObj : TXPathParser;
- locRootNode, locNode : TXPathNode;
- begin
- locRootNode := nil;
- locObj := TXPathParser.Create('object/prop_a');
- try
- locRootNode := locObj.Parse();
- CheckNotNull(locRootNode, 'root');
- locNode := locRootNode;
- CheckIs(locNode, TXPathContextStepNode);
- CheckEquals(Ord(xcsProperty), Ord(TXPathContextStepNode(locNode).Switch));
- CheckEquals('object', TXPathContextStepNode(locNode).PropertyName);
- locNode := locNode.Next;
- CheckNotNull(locNode);
- CheckIs(locNode, TXPathContextStepNode);
- CheckEquals(Ord(xcsProperty), Ord(TXPathContextStepNode(locNode).Switch));
- CheckEquals('prop_a', TXPathContextStepNode(locNode).PropertyName);
- CheckNull(locNode.Next);
- finally
- FreeAndNil(locRootNode);
- FreeAndNil(locObj);
- end;
- end;
- procedure TXPathParser_Test.parse_4();
- var
- locObj : TXPathParser;
- locRootNode, locNode : TXPathNode;
- begin
- locRootNode := nil;
- locObj := TXPathParser.Create('/');
- try
- locRootNode := locObj.Parse();
- CheckNotNull(locRootNode, 'root');
- locNode := locRootNode;
- CheckIs(locNode, TXPathContextStepNode);
- CheckEquals(Ord(xcsRoot), Ord(TXPathContextStepNode(locNode).Switch));
- CheckEquals('', TXPathContextStepNode(locNode).PropertyName);
- CheckNull(locNode.Next);
- finally
- FreeAndNil(locRootNode);
- FreeAndNil(locObj);
- end;
- end;
- procedure TXPathParser_Test.parse_5();
- var
- locObj : TXPathParser;
- locRootNode, locNode : TXPathNode;
- begin
- locRootNode := nil;
- locObj := TXPathParser.Create('object/prop_a/');
- try
- locRootNode := locObj.Parse();
- CheckNotNull(locRootNode, 'root');
- locNode := locRootNode;
- CheckIs(locNode, TXPathContextStepNode);
- CheckEquals(Ord(xcsProperty), Ord(TXPathContextStepNode(locNode).Switch));
- CheckEquals('object', TXPathContextStepNode(locNode).PropertyName);
- locNode := locNode.Next;
- CheckNotNull(locNode);
- CheckIs(locNode, TXPathContextStepNode);
- CheckEquals(Ord(xcsProperty), Ord(TXPathContextStepNode(locNode).Switch));
- CheckEquals('prop_a', TXPathContextStepNode(locNode).PropertyName);
- CheckNull(locNode.Next);
- finally
- FreeAndNil(locRootNode);
- FreeAndNil(locObj);
- end;
- end;
- procedure TXPathParser_Test.parse_6();
- var
- locObj : TXPathParser;
- locRootNode, locNode, tmpNode : TXPathNode;
- begin
- locRootNode := nil;
- locObj := TXPathParser.Create('object/prop_a/prop_b[2]');
- try
- locRootNode := locObj.Parse();
- CheckNotNull(locRootNode, 'root');
- locNode := locRootNode;
- CheckIs(locNode, TXPathContextStepNode);
- CheckEquals(Ord(xcsProperty), Ord(TXPathContextStepNode(locNode).Switch));
- CheckEquals('object', TXPathContextStepNode(locNode).PropertyName);
- locNode := locNode.Next;
- CheckNotNull(locNode);
- CheckIs(locNode, TXPathContextStepNode);
- CheckEquals(Ord(xcsProperty), Ord(TXPathContextStepNode(locNode).Switch));
- CheckEquals('prop_a', TXPathContextStepNode(locNode).PropertyName);
- locNode := locNode.Next;
- CheckNotNull(locNode);
- CheckIs(locNode, TXPathContextStepNode);
- CheckEquals(Ord(xcsProperty), Ord(TXPathContextStepNode(locNode).Switch));
- CheckEquals('prop_b', TXPathContextStepNode(locNode).PropertyName);
- locNode := locNode.Next;
- CheckNotNull(locNode);
- CheckIs(locNode, TXPathMoveInstructionStepNode);
- tmpNode := TXPathMoveInstructionStepNode(locNode).Distance;
- CheckIs(tmpNode,TXPathNumberConstantNode);
- CheckEquals(2, TXPathNumberConstantNode(tmpNode).Value, 0.01);
- CheckNull(locNode.Next);
- finally
- FreeAndNil(locRootNode);
- FreeAndNil(locObj);
- end;
- end;
- procedure TXPathParser_Test.parse_7();
- var
- locObj : TXPathParser;
- locRootNode, locNode : TXPathNode;
- begin
- locRootNode := nil;
- locObj := TXPathParser.Create('@object');
- try
- locRootNode := locObj.Parse();
- CheckNotNull(locRootNode, 'root');
- locNode := locRootNode;
- CheckIs(locNode, TXPathContextStepNode);
- CheckEquals(Ord(xcsProperty), Ord(TXPathContextStepNode(locNode).Switch));
- CheckEquals('object', TXPathContextStepNode(locNode).PropertyName);
- CheckNull(locNode.Next);
- finally
- FreeAndNil(locRootNode);
- FreeAndNil(locObj);
- end;
- end;
- procedure TXPathParser_Test.parse_8();
- var
- locObj : TXPathParser;
- locRootNode, locNode : TXPathNode;
- begin
- locRootNode := nil;
- locObj := TXPathParser.Create('/@object');
- try
- locRootNode := locObj.Parse();
- CheckNotNull(locRootNode, 'root');
- locNode := locRootNode;
- CheckIs(locNode, TXPathContextStepNode);
- CheckEquals(Ord(xcsRoot), Ord(TXPathContextStepNode(locNode).Switch));
- CheckEquals('', TXPathContextStepNode(locNode).PropertyName);
- CheckNotNull(locNode.Next);
- locNode := locNode.Next;
- CheckEquals(Ord(xcsProperty), Ord(TXPathContextStepNode(locNode).Switch));
- CheckEquals('object', TXPathContextStepNode(locNode).PropertyName);
- CheckNull(locNode.Next);
- finally
- FreeAndNil(locRootNode);
- FreeAndNil(locObj);
- end;
- end;
- procedure TXPathParser_Test.parse_9();
- var
- locObj : TXPathParser;
- locRootNode, locNode : TXPathNode;
- begin
- locRootNode := nil;
- locObj := TXPathParser.Create('object/@prop_a');
- try
- locRootNode := locObj.Parse();
- CheckNotNull(locRootNode, 'root');
- locNode := locRootNode;
- CheckIs(locNode, TXPathContextStepNode);
- CheckEquals(Ord(xcsProperty), Ord(TXPathContextStepNode(locNode).Switch));
- CheckEquals('object', TXPathContextStepNode(locNode).PropertyName);
- locNode := locNode.Next;
- CheckNotNull(locNode);
- CheckIs(locNode, TXPathContextStepNode);
- CheckEquals(Ord(xcsProperty), Ord(TXPathContextStepNode(locNode).Switch));
- CheckEquals('prop_a', TXPathContextStepNode(locNode).PropertyName);
- CheckNull(locNode.Next);
- finally
- FreeAndNil(locRootNode);
- FreeAndNil(locObj);
- end;
- end;
- { TXPathUtilsFunc_Test }
- procedure TXPathUtilsFunc_Test.getXpath_func();
- var
- locFactory : ISDODataFactory;
- procedure Add_Objects(const AUri : string);
- var
- locObj : ISDOType;
- begin
- locFactory.AddType(AUri,s_type_object_C,[]);
- locObj := locFactory.getType(AUri,s_type_object_C);
- locFactory.AddType(AUri,s_type_object_B,[]);
- locObj := locFactory.getType(AUri,s_type_object_B);
- locFactory.addProperty(locObj,'p_bc',s_uri,s_type_object_C,[pfIsContainment]);
- locFactory.addProperty(locObj,'p_bc_multi',s_uri,s_type_object_C,[pfIsContainment,pfIsMany]);
- locFactory.AddType(AUri,s_type_object_A,[]);
- locObj := locFactory.getType(AUri,s_type_object_A);
- locFactory.addProperty(locObj,'p_ab',s_uri,s_type_object_B,[pfIsContainment]);
- locFactory.addProperty(locObj,'p_ac',s_uri,s_type_object_C,[pfIsContainment]);
- end;
- var
- a , b, c0, c1, c2 : ISDODataObject;
- begin
- locFactory := TSDODataFactory.Create() as ISDODataFactory;
- Add_Objects(s_uri);
- a := locFactory.createNew(s_uri,s_type_object_A);
- b := a.createDataObject('p_ab');
- b.createDataObject('p_bc');
- a.createDataObject('p_ac');
- c0 := b.createDataObject('p_bc_multi');
- b.getList('p_bc_multi').append(c0);
- c1 := b.createDataObject('p_bc_multi');
- b.getList('p_bc_multi').append(c1);
- c2 := b.createDataObject('p_bc_multi');
- b.getList('p_bc_multi').append(c2);
- CheckEquals('', getXpath(nil));
- CheckEquals('',getXpath(a));
- CheckEquals('p_ab',getXpath(a.getDataObject('p_ab')));
- CheckEquals('p_ac',getXpath(a.getDataObject('p_ac')));
- CheckEquals('p_ab/p_bc',getXpath(a.getDataObject('p_ab').getDataObject('p_bc')));
- CheckEquals('p_ab/p_bc_multi[1]',getXpath(c1));
- CheckEquals('p_ab/p_bc_multi[0]',getXpath(c0));
- CheckEquals('p_ab/p_bc_multi[2]',getXpath(c2));
- end;
- initialization
- RegisterTest('Helpers',TXPathScanner_Test.Suite);
- RegisterTest('Helpers',TXPathParser_Test.Suite);
- RegisterTest('Helpers',TXPathProcessor_Test.Suite);
- RegisterTest('Helpers',TXPathUtilsFunc_Test.Suite);
- end.
|