test_serializer.pas 201 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118
  1. {$INCLUDE sdo_global.inc}
  2. unit test_serializer;
  3. interface
  4. uses
  5. SysUtils, Classes//, Dialogs
  6. {$IFDEF FPC}
  7. ,fpcunit, testutils, testregistry
  8. {$ENDIF}
  9. {$IFNDEF FPC}
  10. ,TestFrameWork
  11. {$ENDIF}
  12. , test_suite_utils, sdo, sdo_types,
  13. sdo_serialization, sdo_serialization_utils, sdo_changesummary ;
  14. type
  15. TListCompareOption = ( lcoCompareOrder );
  16. TListCompareOptions = set of TListCompareOption;
  17. TSDOBaseSerializer_Test = class(TWstBaseTest)
  18. protected
  19. class function CreateSerializerStream() : ISDOSerializerStream; virtual; abstract;
  20. end;
  21. { TSDOSerializer_Test }
  22. TSDOSerializer_Test = class(TSDOBaseSerializer_Test)
  23. private
  24. function CreateSdoTypes() : ISDODataFactory;
  25. function CreateCompanyObject(const AFactory : ISDODataFactory) : ISDODataObject;
  26. procedure Compare(const A, B : ISDOChangedDataObjectListEx; const AOptions : TListCompareOptions = []);overload;
  27. procedure Compare(const A, B : TDataObjectChangeInfo);overload;
  28. procedure Compare(const A, B : TValueBuffer; const ADataType : TSDOTypeKind);overload;
  29. procedure Compare(const A, B : TValueSetting);overload;
  30. procedure Compare(const A, B : TManyValuePropChangesList);overload;
  31. protected
  32. procedure CheckEquals(expected, actual: TSDODate; msg: string = ''; const AStrict : Boolean = True); overload;
  33. //function GetFileName() : string;
  34. procedure CompareTypesInclude(
  35. // A included in B ?
  36. const A,B : ISDOTypeList
  37. );
  38. published
  39. procedure save_to_stream();
  40. procedure save_to_stream_without_name();
  41. procedure save_to_file();
  42. procedure save_to_file_without_name();
  43. procedure save_to_file_null_bool_prop();
  44. procedure save_to_file_null_byte_prop();
  45. procedure save_to_file_null_bytes_prop();
  46. procedure save_to_file_null_char_prop();
  47. procedure save_to_file_null_currency_prop();
  48. procedure save_to_file_null_datetime_prop();
  49. procedure save_to_file_null_double_prop();
  50. procedure save_to_file_null_float_prop();
  51. procedure save_to_file_null_int_prop();
  52. procedure save_to_file_null_long_prop();
  53. procedure save_to_file_null_object_prop();
  54. procedure save_to_file_null_short_prop();
  55. procedure save_to_file_null_string_prop();
  56. procedure load_from_stream_start_with_empty();
  57. procedure load_from_stream_one_object();
  58. procedure load_from_stream_two_object();
  59. procedure load_from_file_start_with_empty();
  60. procedure load_from_file_one_object();
  61. procedure load_from_file_two_object();
  62. // -- tests with ChangeSummary --
  63. procedure save_to_file_changesummary_simple();
  64. procedure save_to_file_changesummary_object_modify_nested();
  65. procedure save_to_file_changesummary_prop_list_bool();
  66. procedure save_to_file_changesummary_prop_list_byte();
  67. {$IFDEF HAS_SDO_BYTES}
  68. procedure save_to_file_changesummary_prop_list_bytes();
  69. {$ENDIF HAS_SDO_BYTES}
  70. {$IFDEF HAS_SDO_CHAR}
  71. procedure save_to_file_changesummary_prop_list_char();
  72. {$ENDIF HAS_SDO_CHAR}
  73. {$IFDEF HAS_SDO_CURRENCY}
  74. procedure save_to_file_changesummary_prop_list_currency();
  75. {$ENDIF HAS_SDO_CURRENCY}
  76. procedure save_to_file_changesummary_prop_list_date();
  77. {$IFDEF HAS_SDO_DOUBLE}
  78. procedure save_to_file_changesummary_prop_list_double();
  79. {$ENDIF HAS_SDO_DOUBLE}
  80. {$IFDEF HAS_SDO_FLOAT}
  81. procedure save_to_file_changesummary_prop_list_float();
  82. {$ENDIF HAS_SDO_FLOAT}
  83. procedure save_to_file_changesummary_prop_list_integer();
  84. {$IFDEF HAS_SDO_LONG}
  85. procedure save_to_file_changesummary_prop_list_long();
  86. {$ENDIF HAS_SDO_LONG}
  87. procedure save_to_file_changesummary_prop_list_object();
  88. procedure save_to_file_changesummary_prop_list_object_nested();
  89. {$IFDEF HAS_SDO_SHORT}
  90. procedure save_to_file_changesummary_prop_list_short();
  91. {$ENDIF HAS_SDO_SHORT}
  92. procedure save_to_file_changesummary_prop_list_string();
  93. procedure save_to_file_changesummary_object_create();
  94. procedure save_to_file_changesummary_object_create_cont_ref();
  95. procedure save_to_file_changesummary_object_delete();
  96. procedure save_to_file_changesummary_object_delete_nested();
  97. procedure save_to_file_changesummary_object_delete_2_objects_same_type();
  98. procedure save_to_file_changesummary_object_2_objects_same_type_del_upd();
  99. procedure load_from_file_changesummary_simple();
  100. procedure load_from_file_changesummary_bool();
  101. procedure load_from_file_changesummary_byte();
  102. {$IFDEF HAS_SDO_BYTES}
  103. procedure load_from_file_changesummary_bytes();
  104. {$ENDIF HAS_SDO_BYTES}
  105. {$IFDEF HAS_SDO_CHAR}
  106. procedure load_from_file_changesummary_char();
  107. {$ENDIF HAS_SDO_CHAR}
  108. {$IFDEF HAS_SDO_CURRENCY}
  109. procedure load_from_file_changesummary_currency();
  110. {$ENDIF HAS_SDO_CURRENCY}
  111. procedure load_from_file_changesummary_date();
  112. {$IFDEF HAS_SDO_DOUBLE}
  113. procedure load_from_file_changesummary_double();
  114. {$ENDIF HAS_SDO_DOUBLE}
  115. procedure load_from_file_changesummary_integer();
  116. {$IFDEF HAS_SDO_LONG}
  117. procedure load_from_file_changesummary_long();
  118. {$ENDIF HAS_SDO_LONG}
  119. {$IFDEF HAS_SDO_FLOAT}
  120. procedure load_from_file_changesummary_float();
  121. {$ENDIF HAS_SDO_FLOAT}
  122. {$IFDEF HAS_SDO_SHORT}
  123. procedure load_from_file_changesummary_short();
  124. {$ENDIF HAS_SDO_SHORT}
  125. procedure load_from_file_changesummary_string();
  126. procedure load_from_file_changesummary_object_create_cont_ref();
  127. procedure load_from_file_changesummary_object_delete();
  128. procedure load_from_file_changesummary_object_delete_nested();
  129. procedure load_from_file_changesummary_object_delete_2_objects_same_type();
  130. procedure load_from_file_changesummary_object_2_objects_same_type_del_upd();
  131. procedure load_from_file_changesummary_prop_list_bool();
  132. procedure load_from_file_changesummary_prop_list_byte();
  133. {$IFDEF HAS_SDO_BYTES}
  134. procedure load_from_file_changesummary_prop_list_bytes();
  135. {$ENDIF HAS_SDO_BYTES}
  136. {$IFDEF HAS_SDO_CHAR}
  137. procedure load_from_file_changesummary_prop_list_char();
  138. {$ENDIF HAS_SDO_CHAR}
  139. {$IFDEF HAS_SDO_CURRENCY}
  140. procedure load_from_file_changesummary_prop_list_currency();
  141. {$ENDIF HAS_SDO_CURRENCY}
  142. procedure load_from_file_changesummary_prop_list_date();
  143. {$IFDEF HAS_SDO_DOUBLE}
  144. procedure load_from_file_changesummary_prop_list_double();
  145. {$ENDIF HAS_SDO_DOUBLE}
  146. {$IFDEF HAS_SDO_FLOAT}
  147. procedure load_from_file_changesummary_prop_list_float();
  148. {$ENDIF HAS_SDO_FLOAT}
  149. procedure load_from_file_changesummary_prop_list_integer();
  150. {$IFDEF HAS_SDO_LONG}
  151. procedure load_from_file_changesummary_prop_list_long();
  152. {$ENDIF HAS_SDO_LONG}
  153. procedure load_from_file_changesummary_prop_list_object();
  154. procedure load_from_file_changesummary_prop_list_object_nested();
  155. {$IFDEF HAS_SDO_SHORT}
  156. procedure load_from_file_changesummary_prop_list_short();
  157. {$ENDIF HAS_SDO_SHORT}
  158. procedure load_from_file_changesummary_prop_list_string();
  159. procedure save_to_and_load_file_ref_prop_crash_1();
  160. procedure save_to_and_load_file_ref_prop_crash_2();
  161. procedure load_from_file_reference_property();
  162. procedure save_object_open_type();
  163. procedure load_object_open_type();
  164. end;
  165. TSDOSerializerXML_Test = class(TSDOSerializer_Test)
  166. protected
  167. class function CreateSerializerStream() : ISDOSerializerStream; override;
  168. end;
  169. implementation
  170. uses
  171. sdo_datafactory,
  172. sdo_serialization_xml, sdo_dataobjectlist, sdo_equalityhelper
  173. {$IFNDEF FPC}
  174. , xmldom, sdo_win_xml
  175. {$ELSE}
  176. , DOM, sdo_fpc_xml, XMLRead, XMLWrite
  177. {$ENDIF}
  178. , sdo_consts, sdo_utils, Math, DateUtils, sdo_date_utils;
  179. const
  180. s_uri = 'company.xsd';
  181. s_Employee = 'Employee';
  182. s_EmployeeType = 'EmployeeType';
  183. s_DepartmentType = 'DepartmentType';
  184. s_CompanyType = 'CompanyType';
  185. s_company = 'company';
  186. s_list_bool = 'list_bool';
  187. s_list_byte = 'list_byte';
  188. s_list_bytes = 'list_bytes';
  189. s_list_char = 'list_char';
  190. s_list_currency = 'list_currency';
  191. s_list_date = 'list_date';
  192. s_list_double = 'list_double';
  193. s_list_float = 'list_float';
  194. s_list_int = 'list_int';
  195. s_list_long = 'list_long';
  196. s_list_object = 'list_object';
  197. s_list_short = 'list_short';
  198. s_list_string = 'list_string';
  199. s_location = 'location';
  200. s_manager = 'manager';
  201. s_name = 'name';
  202. s_number = 'number';
  203. s_sn = 'SN';
  204. s_age = 'age';
  205. s_birthDate = 'birthDate';
  206. s_bool_prop = 'bool_prop';
  207. s_byte_prop = 'byte_prop';
  208. s_bytes_prop = 'bytes_prop';
  209. s_char_prop = 'char_prop';
  210. s_currency_prop = 'currency_prop';
  211. s_datetime_prop = 'datetime_prop';
  212. s_double_prop = 'double_prop';
  213. s_float_prop = 'float_prop';
  214. s_int_prop = 'int_prop';
  215. s_long_prop = 'long_prop';
  216. s_object_prop = 'object_prop';
  217. s_object_type = 'object_type';
  218. s_object_type2 = 'object_type2';
  219. s_short_prop = 'short_prop';
  220. s_string_prop = 'string_prop';
  221. function CompareNodes(const A,B : TDOMNode) : Boolean;overload;
  222. var
  223. ca, cb : TDOMNode;
  224. i : PtrInt;
  225. begin
  226. if ( A = nil ) and ( B = nil ) then begin
  227. Result := True;
  228. end else if ( A <> nil ) and ( B <> nil ) then begin
  229. Result := False;
  230. if ( A.NodeName = B.NodeName ) and
  231. ( A.NodeValue = B.NodeValue )
  232. then begin
  233. if ( ( A.FirstChild = nil ) and ( B.FirstChild = nil ) ) or
  234. ( ( A.FirstChild <> nil ) and ( B.FirstChild <> nil ) )
  235. then begin
  236. ca := a.FirstChild;
  237. cb := b.FirstChild;
  238. while ( ca <> nil ) do begin
  239. if not CompareNodes(ca,cb) then
  240. Exit;
  241. ca := ca.NextSibling;
  242. cb := cb.NextSibling;
  243. end;
  244. if ( ( A.Attributes = nil ) and ( B.Attributes = nil ) ) or
  245. ( ( A.Attributes <> nil ) and ( B.Attributes <> nil ) )
  246. then begin
  247. if ( A.Attributes <> nil ) then begin
  248. if ( A.Attributes.Length <> B.Attributes.Length ) then
  249. Exit;
  250. if ( A.Attributes.Length > 0 ) then begin
  251. for i := 0 to Pred(A.Attributes.Length) do begin
  252. if not CompareNodes(A.Attributes.Item[i],B.Attributes.GetNamedItem(A.Attributes.Item[i].NodeName)) then
  253. Exit;
  254. end;
  255. end;
  256. end;
  257. Result := True;
  258. end;
  259. end;
  260. end;
  261. end else begin
  262. Result := False;
  263. end;
  264. end;
  265. { TSDOSerializer_Test }
  266. procedure TSDOSerializer_Test.CompareTypesInclude(const A, B: ISDOTypeList);
  267. var
  268. i, c : PtrInt;
  269. typA, typB : ISDOType;
  270. begin
  271. if Assigned(A) then begin
  272. Check(Assigned(B),'B = nil');
  273. c := A.getCount();
  274. if ( c > 0 ) then begin
  275. for i := 0 to Pred(c) do begin
  276. typA := A.getItem(i);
  277. typB := B.find(typA.getURI(),typA.getName());
  278. Check(typB.equals(typA),'A.getItem(i) <> B.find(typA.getURI(),typA.getName())');
  279. end;
  280. end;
  281. end;
  282. end;
  283. function TSDOSerializer_Test.CreateCompanyObject(const AFactory : ISDODataFactory): ISDODataObject;
  284. var
  285. locFactory : ISDODataFactory;
  286. compObj, depObj, empObj : ISDODataObject;
  287. depLs, empLs : ISDODataObjectList;
  288. begin
  289. locFactory := AFactory;
  290. compObj := locFactory.createNew(s_uri,s_company);
  291. compObj.setString('name','A Sample company');
  292. compObj.setString('employeeOfTheMonth','Inoussa');
  293. depLs := compObj.getList('departments');
  294. depObj := compObj.createDataObject('departments');
  295. depLs.append(depObj);
  296. depObj.setString('name','RAD Departement');
  297. depObj.setString('location','Moon');
  298. depObj.setInteger('number',2);
  299. empLs := depObj.getList('employees');
  300. empObj := depObj.createDataObject('employees');
  301. empObj.setString('name','inoussa OUEDRAOGO');
  302. empObj.setString('SN','1122334455667');
  303. empObj.setBoolean('manager',True);
  304. empObj.setByte('age',32);
  305. empLs.append(empObj);
  306. empObj := depObj.createDataObject('employees');
  307. empObj.setString('name','SDO man');
  308. empObj.setString('SN','867787667');
  309. empObj.setBoolean('manager',False);
  310. empObj.setByte('age',1);
  311. empLs.append(empObj);
  312. empObj := depObj.createDataObject('employees');
  313. empObj.setString('name','FPC');
  314. empObj.setString('SN','_e-(''');
  315. empObj.setBoolean('manager',False);
  316. empObj.setByte('age',13);
  317. empLs.append(empObj);
  318. depObj := compObj.createDataObject('departments');
  319. depLs.append(depObj);
  320. depObj.setString('name','Sales Departement');
  321. depObj.setString('location','Mars');
  322. depObj.setInteger('number',2);
  323. empLs := depObj.getList('employees');
  324. empObj := depObj.createDataObject('employees');
  325. empObj.setString('name','wst man');
  326. empObj.setString('SN','e"''fsdfdf');
  327. empObj.setBoolean('manager',True);
  328. empObj.setByte('age',2);
  329. empLs.append(empObj);
  330. empObj := depObj.createDataObject('employees');
  331. empObj.setString('name','azerty');
  332. empObj.setString('SN','jkjk_e5679');
  333. empObj.setBoolean('manager',False);
  334. empLs.append(empObj);
  335. empObj := depObj.createDataObject('employees');
  336. empObj.setString('name','qwerty');
  337. empObj.setString('SN','_s-(''');
  338. empObj.setBoolean('manager',False);
  339. empLs.append(empObj);
  340. Result := compObj;
  341. end;
  342. function TSDOSerializer_Test.CreateSdoTypes() : ISDODataFactory;
  343. var
  344. locObj : ISDOType;
  345. begin
  346. Result := TSDODataFactory.Create() as ISDODataFactory;
  347. Result.AddType(s_uri,s_EmployeeType,[]);
  348. locObj := Result.getType(s_uri,s_EmployeeType);
  349. Result.addProperty(locObj,'name',sdo_namespace,'string',[pfIsAttribute]);
  350. Result.addProperty(locObj,'SN',sdo_namespace,'string',[pfIsAttribute]);
  351. Result.addProperty(locObj,'manager',sdo_namespace,'boolean',[pfIsAttribute]);
  352. Result.addProperty(locObj,'age',sdo_namespace,'byte',[pfIsAttribute]);
  353. Result.AddType(s_uri,s_DepartmentType,[]);
  354. locObj := Result.getType(s_uri,s_DepartmentType);
  355. Result.addProperty(locObj,'employees',s_uri,s_EmployeeType,[pfIsMany, pfIsContainment]);
  356. Result.addProperty(locObj,'name',sdo_namespace,'string',[pfIsAttribute]);
  357. Result.addProperty(locObj,'location',sdo_namespace,'string',[pfIsAttribute]);
  358. Result.addProperty(locObj,'number',sdo_namespace,'integer',[pfIsAttribute]);
  359. Result.AddType(s_uri,s_CompanyType,[]);
  360. locObj := Result.getType(s_uri,s_CompanyType);
  361. Result.setAlias(locObj.getURI(),locObj.getName(),s_company);
  362. Result.addProperty(locObj,'departments',s_uri,s_DepartmentType,[pfIsMany, pfIsContainment]);
  363. Result.addProperty(locObj,'name',sdo_namespace,'string',[pfIsAttribute]);
  364. Result.addProperty(locObj,'employeeOfTheMonth',sdo_namespace,'string',[pfIsAttribute]);
  365. Result.setAlias(s_uri,locObj.getName(),s_company);
  366. end;
  367. procedure TSDOSerializer_Test.load_from_stream_one_object();
  368. var
  369. locFactory, tmpFactory : ISDODataFactory;
  370. f : ISDOSerializerStream;
  371. s : ISDOSerializer;
  372. strm : TMemoryStream;
  373. ol : ISDODataObjectList;
  374. locComp : ISDODataObject;
  375. begin
  376. strm := TMemoryStream.Create();
  377. try
  378. strm.LoadFromFile(sdoExpandLocalFileName(TestFilesPath + 'company.one.xml'));
  379. strm.Position := 0;
  380. f := TSDOSerializerStreamXML.Create();
  381. tmpFactory := TSDODataFactory.Create();
  382. s := TSDOSerializer.Create(tmpFactory,f);
  383. ol := TSDODataObjectList.Create(tmpFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[ObjectType]));
  384. s.load(strm,ol);
  385. locFactory := CreateSdoTypes();
  386. CompareTypesInclude(tmpFactory.getTypes(), locFactory.getTypes());
  387. CompareTypesInclude(locFactory.getTypes(), tmpFactory.getTypes());
  388. CheckEquals(1,ol.size(),'loaded objects count');
  389. locComp := CreateCompanyObject(locFactory);
  390. ol.getCursor().MoveFirst();
  391. CheckEquals(True,TSDOEqualityHelper.equalShallow(locComp, ol.getDataObject()),'equalShallow');
  392. CheckEquals(True,TSDOEqualityHelper.equal(locComp, ol.getDataObject()),'equal');
  393. finally
  394. strm.Free();
  395. end;
  396. end;
  397. procedure TSDOSerializer_Test.load_from_stream_start_with_empty();
  398. var
  399. locFactory, tmpFactory : ISDODataFactory;
  400. f : ISDOSerializerStream;
  401. s : ISDOSerializer;
  402. strm : TMemoryStream;
  403. ol : ISDODataObjectList;
  404. begin
  405. strm := TMemoryStream.Create();
  406. try
  407. strm.LoadFromFile(sdoExpandLocalFileName(TestFilesPath + 'company.xml'));
  408. strm.Position := 0;
  409. f := TSDOSerializerStreamXML.Create();
  410. tmpFactory := TSDODataFactory.Create();
  411. s := TSDOSerializer.Create(tmpFactory,f);
  412. ol := TSDODataObjectList.Create(tmpFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[ObjectType]));
  413. s.load(strm,ol);
  414. locFactory := CreateSdoTypes();
  415. CompareTypesInclude(tmpFactory.getTypes(), locFactory.getTypes());
  416. CompareTypesInclude(locFactory.getTypes(), tmpFactory.getTypes());
  417. finally
  418. strm.Free();
  419. end;
  420. end;
  421. procedure TSDOSerializer_Test.load_from_stream_two_object();
  422. var
  423. locFactory, tmpFactory : ISDODataFactory;
  424. f : ISDOSerializerStream;
  425. s : ISDOSerializer;
  426. strm : TMemoryStream;
  427. ol : ISDODataObjectList;
  428. locComp : ISDODataObject;
  429. begin
  430. strm := TMemoryStream.Create();
  431. try
  432. strm.LoadFromFile(sdoExpandLocalFileName(TestFilesPath + 'company.two.xml'));
  433. strm.Position := 0;
  434. f := TSDOSerializerStreamXML.Create();
  435. tmpFactory := TSDODataFactory.Create();
  436. s := TSDOSerializer.Create(tmpFactory,f);
  437. ol := TSDODataObjectList.Create(tmpFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[ObjectType]));
  438. s.load(strm,ol);
  439. locFactory := CreateSdoTypes();
  440. CompareTypesInclude(tmpFactory.getTypes(), locFactory.getTypes());
  441. CompareTypesInclude(locFactory.getTypes(), tmpFactory.getTypes());
  442. CheckEquals(2,ol.size(),'loaded objects count');
  443. locComp := CreateCompanyObject(locFactory);
  444. locComp.setString('name','A Second Sample company');
  445. ol.getCursor().MoveFirst();
  446. CheckEquals(True,TSDOEqualityHelper.equalShallow(locComp, ol.getDataObject()),'equalShallow');
  447. CheckEquals(True,TSDOEqualityHelper.equal(locComp, ol.getDataObject()),'equal');
  448. finally
  449. strm.Free();
  450. end;
  451. end;
  452. procedure TSDOSerializer_Test.save_to_stream();
  453. var
  454. locFactory : ISDODataFactory;
  455. compObj : ISDODataObject;
  456. f : ISDOSerializerStream;
  457. s : ISDOSerializer;
  458. strm : TMemoryStream;
  459. existDoc, serialDoc : TSDOXMLDocument;
  460. begin
  461. locFactory := CreateSdoTypes();
  462. compObj := CreateCompanyObject(locFactory);
  463. f := TSDOSerializerStreamXML.Create();
  464. s := TSDOSerializer.Create(locFactory,f);
  465. strm := TMemoryStream.Create();
  466. try
  467. s.save(s_CompanyType,compObj,strm);
  468. {$IFDEF TEST_GENERATE_FILE}
  469. strm.SaveToFile(sdoExpandLocalFileName('company.soap.xml'));
  470. {$ENDIF TEST_GENERATE_FILE}
  471. strm.Position := 0;
  472. existDoc := nil;
  473. serialDoc := nil;
  474. ReadXMLFile(existDoc,sdoExpandLocalFileName(TestFilesPath + 'company.one.xml'));
  475. try
  476. ReadXMLFile(serialDoc,strm);
  477. CheckEquals(True, CompareNodes(existDoc,serialDoc));
  478. finally
  479. ReleaseDomNode(existDoc);
  480. ReleaseDomNode(serialDoc);
  481. end;
  482. finally
  483. strm.Free();
  484. end;
  485. end;
  486. {procedure TSDOSerializer_Test.save2();
  487. var
  488. locFactory : ISDODataFactory;
  489. compObj, depObj, empObj : ISDODataObject;
  490. depLs, empLs : ISDODataObjectList;
  491. f : ISDOSerializerStream;
  492. s : ISDOSerializer;
  493. strm : TMemoryStream;
  494. i : Integer;
  495. dd, ff : TDateTime;
  496. begin
  497. dd := Now();
  498. locFactory := CreateSdoTypes();
  499. compObj := locFactory.createNew(s_uri,s_company);
  500. compObj.setString('name','A Sample company');
  501. compObj.setString('employeeOfTheMonth','Inoussa');
  502. depLs := compObj.getList('departments');
  503. depObj := compObj.createDataObject('departments');
  504. depLs.append(depObj);
  505. depObj.setString('name','RAD Departement');
  506. depObj.setString('location','Moon');
  507. depObj.setInteger('number',2);
  508. empLs := depObj.getList('employees');
  509. empObj := depObj.createDataObject('employees');
  510. empObj.setString('name','inoussa OUEDRAOGO');
  511. empObj.setString('SN','1122334455667');
  512. empObj.setBoolean('manager',True);
  513. empLs.append(empObj);
  514. empObj := depObj.createDataObject('employees');
  515. empObj.setString('name','SDO man');
  516. empObj.setString('SN','867787667');
  517. empObj.setBoolean('manager',False);
  518. empLs.append(empObj);
  519. empObj := depObj.createDataObject('employees');
  520. empObj.setString('name','FPC');
  521. empObj.setString('SN','_e-(''');
  522. empObj.setBoolean('manager',False);
  523. empLs.append(empObj);
  524. depObj := compObj.createDataObject('departments');
  525. depLs.append(depObj);
  526. depObj.setString('name','Sales Departement');
  527. depObj.setString('location','Mars');
  528. depObj.setInteger('number',2);
  529. empLs := depObj.getList('employees');
  530. empObj := depObj.createDataObject('employees');
  531. empObj.setString('name','wst man');
  532. empObj.setString('SN','e"''fsdfdf');
  533. empObj.setBoolean('manager',True);
  534. empLs.append(empObj);
  535. empObj := depObj.createDataObject('employees');
  536. empObj.setString('name','azerty');
  537. empObj.setString('SN','jkjk_e5679');
  538. empObj.setBoolean('manager',False);
  539. empLs.append(empObj);
  540. for i := 0 to 10000 do begin
  541. empObj := depObj.createDataObject('employees');
  542. empObj.setString('name','Personne N°' + IntToStr(i));
  543. empObj.setString('SN','#'+ IntToStr(i));
  544. empObj.setBoolean('manager',( i mod 3 ) = 0 );
  545. empLs.append(empObj);
  546. end;
  547. f := TSDOSerializerStreamXML.Create();
  548. s := TSDOSerializer.Create(locFactory,f);
  549. strm := TMemoryStream.Create();
  550. s.save('compagnie',compObj,strm);
  551. strm.Position := 0;
  552. f := TSDOSerializerStreamXML.Create();
  553. f.LoadFromStream(strm);
  554. ff := Now();
  555. //ShowMessageFmt('%s'#13'%s'#13'Size=%d',[DateTimeToStr(dd),DateTimeToStr(ff),strm.Size]);
  556. strm.SaveToFile('.' + PathDelim + 'company2.soap.xml');
  557. end; }
  558. procedure TSDOSerializer_Test.save_to_stream_without_name();
  559. var
  560. locFactory : ISDODataFactory;
  561. compObj : ISDODataObject;
  562. f : ISDOSerializerStream;
  563. s : ISDOSerializer;
  564. strm : TMemoryStream;
  565. existDoc, serialDoc : TSDOXMLDocument;
  566. begin
  567. locFactory := CreateSdoTypes();
  568. compObj := CreateCompanyObject(locFactory);
  569. f := TSDOSerializerStreamXML.Create();
  570. s := TSDOSerializer.Create(locFactory,f);
  571. strm := TMemoryStream.Create();
  572. try
  573. s.save(compObj,strm);
  574. strm.Position := 0;
  575. existDoc := nil;
  576. serialDoc := nil;
  577. ReadXMLFile(existDoc,sdoExpandLocalFileName(TestFilesPath + 'company.one.xml'));
  578. try
  579. ReadXMLFile(serialDoc,strm);
  580. CheckEquals(True, CompareNodes(existDoc,serialDoc));
  581. finally
  582. ReleaseDomNode(existDoc);
  583. ReleaseDomNode(serialDoc);
  584. end;
  585. finally
  586. FreeAndNil(strm);
  587. end;
  588. end;
  589. procedure TSDOSerializer_Test.save_to_file();
  590. var
  591. locFactory : ISDODataFactory;
  592. compObj : ISDODataObject;
  593. f : ISDOSerializerStream;
  594. s : ISDOSerializer;
  595. existDoc, serialDoc : TSDOXMLDocument;
  596. localFileName : string;
  597. begin
  598. localFileName := sdoExpandLocalFileName('save_to_file.xml');
  599. locFactory := CreateSdoTypes();
  600. compObj := CreateCompanyObject(locFactory);
  601. f := TSDOSerializerStreamXML.Create();
  602. s := TSDOSerializer.Create(locFactory,f);
  603. s.save(s_CompanyType,compObj,localFileName);
  604. existDoc := nil;
  605. serialDoc := nil;
  606. ReadXMLFile(existDoc,sdoExpandLocalFileName(TestFilesPath + 'company.one.xml'));
  607. try
  608. ReadXMLFile(serialDoc,localFileName);
  609. CheckEquals(True, CompareNodes(existDoc,serialDoc));
  610. finally
  611. ReleaseDomNode(existDoc);
  612. ReleaseDomNode(serialDoc);
  613. end;
  614. end;
  615. procedure TSDOSerializer_Test.save_to_file_without_name();
  616. var
  617. locFactory : ISDODataFactory;
  618. compObj : ISDODataObject;
  619. f : ISDOSerializerStream;
  620. s : ISDOSerializer;
  621. existDoc, serialDoc : TSDOXMLDocument;
  622. localFileName : string;
  623. begin
  624. localFileName := sdoExpandLocalFileName('save_to_file.xml');
  625. locFactory := CreateSdoTypes();
  626. compObj := CreateCompanyObject(locFactory);
  627. f := TSDOSerializerStreamXML.Create();
  628. s := TSDOSerializer.Create(locFactory,f);
  629. s.save(compObj,localFileName);
  630. existDoc := nil;
  631. serialDoc := nil;
  632. ReadXMLFile(existDoc,sdoExpandLocalFileName(TestFilesPath + 'company.one.xml'));
  633. try
  634. ReadXMLFile(serialDoc,localFileName);
  635. CheckEquals(True, CompareNodes(existDoc,serialDoc));
  636. finally
  637. ReleaseDomNode(existDoc);
  638. ReleaseDomNode(serialDoc);
  639. end;
  640. end;
  641. procedure TSDOSerializer_Test.save_to_file_null_bool_prop();
  642. const
  643. TARGET_PROP_NAME = s_bool_prop; TARGET_PROP_TYPE_NAME = 'Boolean';
  644. function CreateFactory() : ISDODataFactory;
  645. var
  646. locObj : ISDOType;
  647. begin
  648. Result := TSDODataFactory.Create() as ISDODataFactory;
  649. Result.AddType(s_uri,s_object_type,[]);
  650. locObj := Result.getType(s_uri,s_object_type);
  651. Result.addProperty(locObj,s_int_prop,sdo_namespace,'Integer',[]);
  652. Result.addProperty(locObj,TARGET_PROP_NAME,sdo_namespace,TARGET_PROP_TYPE_NAME,[]);
  653. end;
  654. var
  655. locFactory : ISDODataFactory;
  656. locInstance, locInstanceLoaded : ISDODataObject;
  657. f : ISDOSerializerStream;
  658. s : ISDOSerializer;
  659. ms : TMemoryStream;
  660. begin
  661. locFactory := CreateFactory();
  662. locInstance := locFactory.createNew(s_uri,s_object_type);
  663. locInstance.setNull(TARGET_PROP_NAME);
  664. locInstance.setInteger(s_int_prop,123);
  665. ms := TMemoryStream.Create();
  666. try
  667. f := TSDOSerializerStreamXML.Create();
  668. s := TSDOSerializer.Create(locFactory,f);
  669. s.save(locInstance,ms);
  670. f := TSDOSerializerStreamXML.Create();
  671. s := TSDOSerializer.Create(locFactory,f);
  672. ms.Position := 0;
  673. locInstanceLoaded := s.load(ms);
  674. CheckEquals(locInstance.isNull(TARGET_PROP_NAME), locInstanceLoaded.isNull(TARGET_PROP_NAME),Format('isNull(%s)',[TARGET_PROP_NAME]));
  675. CheckEquals(locInstance.getInteger(s_int_prop), locInstanceLoaded.getInteger(s_int_prop),s_int_prop);
  676. finally
  677. ms.Free();
  678. end;
  679. end;
  680. procedure TSDOSerializer_Test.save_to_file_null_byte_prop();
  681. const
  682. TARGET_PROP_NAME = s_byte_prop; TARGET_PROP_TYPE_NAME = 'Byte';
  683. function CreateFactory() : ISDODataFactory;
  684. var
  685. locObj : ISDOType;
  686. begin
  687. Result := TSDODataFactory.Create() as ISDODataFactory;
  688. Result.AddType(s_uri,s_object_type,[]);
  689. locObj := Result.getType(s_uri,s_object_type);
  690. Result.addProperty(locObj,s_int_prop,sdo_namespace,'Integer',[]);
  691. Result.addProperty(locObj,TARGET_PROP_NAME,sdo_namespace,TARGET_PROP_TYPE_NAME,[]);
  692. end;
  693. var
  694. locFactory : ISDODataFactory;
  695. locInstance, locInstanceLoaded : ISDODataObject;
  696. f : ISDOSerializerStream;
  697. s : ISDOSerializer;
  698. ms : TMemoryStream;
  699. begin
  700. locFactory := CreateFactory();
  701. locInstance := locFactory.createNew(s_uri,s_object_type);
  702. locInstance.setNull(TARGET_PROP_NAME);
  703. locInstance.setInteger(s_int_prop,123);
  704. ms := TMemoryStream.Create();
  705. try
  706. f := TSDOSerializerStreamXML.Create();
  707. s := TSDOSerializer.Create(locFactory,f);
  708. s.save(locInstance,ms);
  709. f := TSDOSerializerStreamXML.Create();
  710. s := TSDOSerializer.Create(locFactory,f);
  711. ms.Position := 0;
  712. locInstanceLoaded := s.load(ms);
  713. CheckEquals(locInstance.isNull(TARGET_PROP_NAME), locInstanceLoaded.isNull(TARGET_PROP_NAME),Format('isNull(%s)',[TARGET_PROP_NAME]));
  714. CheckEquals(locInstance.getInteger(s_int_prop), locInstanceLoaded.getInteger(s_int_prop),s_int_prop);
  715. finally
  716. ms.Free();
  717. end;
  718. end;
  719. procedure TSDOSerializer_Test.save_to_file_null_bytes_prop();
  720. const
  721. TARGET_PROP_NAME = s_bytes_prop; TARGET_PROP_TYPE_NAME = 'Bytes';
  722. function CreateFactory() : ISDODataFactory;
  723. var
  724. locObj : ISDOType;
  725. begin
  726. Result := TSDODataFactory.Create() as ISDODataFactory;
  727. Result.AddType(s_uri,s_object_type,[]);
  728. locObj := Result.getType(s_uri,s_object_type);
  729. Result.addProperty(locObj,s_int_prop,sdo_namespace,'Integer',[]);
  730. Result.addProperty(locObj,TARGET_PROP_NAME,sdo_namespace,TARGET_PROP_TYPE_NAME,[]);
  731. end;
  732. var
  733. locFactory : ISDODataFactory;
  734. locInstance, locInstanceLoaded : ISDODataObject;
  735. f : ISDOSerializerStream;
  736. s : ISDOSerializer;
  737. ms : TMemoryStream;
  738. begin
  739. locFactory := CreateFactory();
  740. locInstance := locFactory.createNew(s_uri,s_object_type);
  741. locInstance.setNull(TARGET_PROP_NAME);
  742. locInstance.setInteger(s_int_prop,123);
  743. ms := TMemoryStream.Create();
  744. try
  745. f := TSDOSerializerStreamXML.Create();
  746. s := TSDOSerializer.Create(locFactory,f);
  747. s.save(locInstance,ms);
  748. f := TSDOSerializerStreamXML.Create();
  749. s := TSDOSerializer.Create(locFactory,f);
  750. ms.Position := 0;
  751. locInstanceLoaded := s.load(ms);
  752. CheckEquals(locInstance.isNull(TARGET_PROP_NAME), locInstanceLoaded.isNull(TARGET_PROP_NAME),Format('isNull(%s)',[TARGET_PROP_NAME]));
  753. CheckEquals(locInstance.getInteger(s_int_prop), locInstanceLoaded.getInteger(s_int_prop),s_int_prop);
  754. finally
  755. ms.Free();
  756. end;
  757. end;
  758. procedure TSDOSerializer_Test.save_to_file_null_char_prop();
  759. const
  760. TARGET_PROP_NAME = s_char_prop; TARGET_PROP_TYPE_NAME = 'Character';
  761. function CreateFactory() : ISDODataFactory;
  762. var
  763. locObj : ISDOType;
  764. begin
  765. Result := TSDODataFactory.Create() as ISDODataFactory;
  766. Result.AddType(s_uri,s_object_type,[]);
  767. locObj := Result.getType(s_uri,s_object_type);
  768. Result.addProperty(locObj,s_int_prop,sdo_namespace,'Integer',[]);
  769. Result.addProperty(locObj,TARGET_PROP_NAME,sdo_namespace,TARGET_PROP_TYPE_NAME,[]);
  770. end;
  771. var
  772. locFactory : ISDODataFactory;
  773. locInstance, locInstanceLoaded : ISDODataObject;
  774. f : ISDOSerializerStream;
  775. s : ISDOSerializer;
  776. ms : TMemoryStream;
  777. begin
  778. locFactory := CreateFactory();
  779. locInstance := locFactory.createNew(s_uri,s_object_type);
  780. locInstance.setNull(TARGET_PROP_NAME);
  781. locInstance.setInteger(s_int_prop,123);
  782. ms := TMemoryStream.Create();
  783. try
  784. f := TSDOSerializerStreamXML.Create();
  785. s := TSDOSerializer.Create(locFactory,f);
  786. s.save(locInstance,ms);
  787. f := TSDOSerializerStreamXML.Create();
  788. s := TSDOSerializer.Create(locFactory,f);
  789. ms.Position := 0;
  790. locInstanceLoaded := s.load(ms);
  791. CheckEquals(locInstance.isNull(TARGET_PROP_NAME), locInstanceLoaded.isNull(TARGET_PROP_NAME),Format('isNull(%s)',[TARGET_PROP_NAME]));
  792. CheckEquals(locInstance.getInteger(s_int_prop), locInstanceLoaded.getInteger(s_int_prop),s_int_prop);
  793. finally
  794. ms.Free();
  795. end;
  796. end;
  797. procedure TSDOSerializer_Test.save_to_file_null_currency_prop();
  798. const
  799. TARGET_PROP_NAME = s_currency_prop; TARGET_PROP_TYPE_NAME = 'Currency';
  800. function CreateFactory() : ISDODataFactory;
  801. var
  802. locObj : ISDOType;
  803. begin
  804. Result := TSDODataFactory.Create() as ISDODataFactory;
  805. Result.AddType(s_uri,s_object_type,[]);
  806. locObj := Result.getType(s_uri,s_object_type);
  807. Result.addProperty(locObj,s_int_prop,sdo_namespace,'Integer',[]);
  808. Result.addProperty(locObj,TARGET_PROP_NAME,sdo_namespace,TARGET_PROP_TYPE_NAME,[]);
  809. end;
  810. var
  811. locFactory : ISDODataFactory;
  812. locInstance, locInstanceLoaded : ISDODataObject;
  813. f : ISDOSerializerStream;
  814. s : ISDOSerializer;
  815. ms : TMemoryStream;
  816. begin
  817. locFactory := CreateFactory();
  818. locInstance := locFactory.createNew(s_uri,s_object_type);
  819. locInstance.setNull(TARGET_PROP_NAME);
  820. locInstance.setInteger(s_int_prop,123);
  821. ms := TMemoryStream.Create();
  822. try
  823. f := TSDOSerializerStreamXML.Create();
  824. s := TSDOSerializer.Create(locFactory,f);
  825. s.save(locInstance,ms);
  826. f := TSDOSerializerStreamXML.Create();
  827. s := TSDOSerializer.Create(locFactory,f);
  828. ms.Position := 0;
  829. locInstanceLoaded := s.load(ms);
  830. CheckEquals(locInstance.isNull(TARGET_PROP_NAME), locInstanceLoaded.isNull(TARGET_PROP_NAME),Format('isNull(%s)',[TARGET_PROP_NAME]));
  831. CheckEquals(locInstance.getInteger(s_int_prop), locInstanceLoaded.getInteger(s_int_prop),s_int_prop);
  832. finally
  833. ms.Free();
  834. end;
  835. end;
  836. procedure TSDOSerializer_Test.save_to_file_null_datetime_prop();
  837. const
  838. TARGET_PROP_NAME = s_datetime_prop; TARGET_PROP_TYPE_NAME = 'DateTime';
  839. function CreateFactory() : ISDODataFactory;
  840. var
  841. locObj : ISDOType;
  842. begin
  843. Result := TSDODataFactory.Create() as ISDODataFactory;
  844. Result.AddType(s_uri,s_object_type,[]);
  845. locObj := Result.getType(s_uri,s_object_type);
  846. Result.addProperty(locObj,s_int_prop,sdo_namespace,'Integer',[]);
  847. Result.addProperty(locObj,TARGET_PROP_NAME,sdo_namespace,TARGET_PROP_TYPE_NAME,[]);
  848. end;
  849. var
  850. locFactory : ISDODataFactory;
  851. locInstance, locInstanceLoaded : ISDODataObject;
  852. f : ISDOSerializerStream;
  853. s : ISDOSerializer;
  854. ms : TMemoryStream;
  855. begin
  856. locFactory := CreateFactory();
  857. locInstance := locFactory.createNew(s_uri,s_object_type);
  858. locInstance.setNull(TARGET_PROP_NAME);
  859. locInstance.setInteger(s_int_prop,123);
  860. ms := TMemoryStream.Create();
  861. try
  862. f := TSDOSerializerStreamXML.Create();
  863. s := TSDOSerializer.Create(locFactory,f);
  864. s.save(locInstance,ms);
  865. f := TSDOSerializerStreamXML.Create();
  866. s := TSDOSerializer.Create(locFactory,f);
  867. ms.Position := 0;
  868. locInstanceLoaded := s.load(ms);
  869. CheckEquals(locInstance.isNull(TARGET_PROP_NAME), locInstanceLoaded.isNull(TARGET_PROP_NAME),Format('isNull(%s)',[TARGET_PROP_NAME]));
  870. CheckEquals(locInstance.getInteger(s_int_prop), locInstanceLoaded.getInteger(s_int_prop),s_int_prop);
  871. finally
  872. ms.Free();
  873. end;
  874. end;
  875. procedure TSDOSerializer_Test.save_to_file_null_double_prop();
  876. const
  877. TARGET_PROP_NAME = s_double_prop; TARGET_PROP_TYPE_NAME = 'Double';
  878. function CreateFactory() : ISDODataFactory;
  879. var
  880. locObj : ISDOType;
  881. begin
  882. Result := TSDODataFactory.Create() as ISDODataFactory;
  883. Result.AddType(s_uri,s_object_type,[]);
  884. locObj := Result.getType(s_uri,s_object_type);
  885. Result.addProperty(locObj,s_int_prop,sdo_namespace,'Integer',[]);
  886. Result.addProperty(locObj,TARGET_PROP_NAME,sdo_namespace,TARGET_PROP_TYPE_NAME,[]);
  887. end;
  888. var
  889. locFactory : ISDODataFactory;
  890. locInstance, locInstanceLoaded : ISDODataObject;
  891. f : ISDOSerializerStream;
  892. s : ISDOSerializer;
  893. ms : TMemoryStream;
  894. begin
  895. locFactory := CreateFactory();
  896. locInstance := locFactory.createNew(s_uri,s_object_type);
  897. locInstance.setNull(TARGET_PROP_NAME);
  898. locInstance.setInteger(s_int_prop,123);
  899. ms := TMemoryStream.Create();
  900. try
  901. f := TSDOSerializerStreamXML.Create();
  902. s := TSDOSerializer.Create(locFactory,f);
  903. s.save(locInstance,ms);
  904. f := TSDOSerializerStreamXML.Create();
  905. s := TSDOSerializer.Create(locFactory,f);
  906. ms.Position := 0;
  907. locInstanceLoaded := s.load(ms);
  908. CheckEquals(locInstance.isNull(TARGET_PROP_NAME), locInstanceLoaded.isNull(TARGET_PROP_NAME),Format('isNull(%s)',[TARGET_PROP_NAME]));
  909. CheckEquals(locInstance.getInteger(s_int_prop), locInstanceLoaded.getInteger(s_int_prop),s_int_prop);
  910. finally
  911. ms.Free();
  912. end;
  913. end;
  914. procedure TSDOSerializer_Test.save_to_file_null_float_prop();
  915. const
  916. TARGET_PROP_NAME = s_float_prop; TARGET_PROP_TYPE_NAME = 'Float';
  917. function CreateFactory() : ISDODataFactory;
  918. var
  919. locObj : ISDOType;
  920. begin
  921. Result := TSDODataFactory.Create() as ISDODataFactory;
  922. Result.AddType(s_uri,s_object_type,[]);
  923. locObj := Result.getType(s_uri,s_object_type);
  924. Result.addProperty(locObj,s_int_prop,sdo_namespace,'Integer',[]);
  925. Result.addProperty(locObj,TARGET_PROP_NAME,sdo_namespace,TARGET_PROP_TYPE_NAME,[]);
  926. end;
  927. var
  928. locFactory : ISDODataFactory;
  929. locInstance, locInstanceLoaded : ISDODataObject;
  930. f : ISDOSerializerStream;
  931. s : ISDOSerializer;
  932. ms : TMemoryStream;
  933. begin
  934. locFactory := CreateFactory();
  935. locInstance := locFactory.createNew(s_uri,s_object_type);
  936. locInstance.setNull(TARGET_PROP_NAME);
  937. locInstance.setInteger(s_int_prop,123);
  938. ms := TMemoryStream.Create();
  939. try
  940. f := TSDOSerializerStreamXML.Create();
  941. s := TSDOSerializer.Create(locFactory,f);
  942. s.save(locInstance,ms);
  943. f := TSDOSerializerStreamXML.Create();
  944. s := TSDOSerializer.Create(locFactory,f);
  945. ms.Position := 0;
  946. locInstanceLoaded := s.load(ms);
  947. CheckEquals(locInstance.isNull(TARGET_PROP_NAME), locInstanceLoaded.isNull(TARGET_PROP_NAME),Format('isNull(%s)',[TARGET_PROP_NAME]));
  948. CheckEquals(locInstance.getInteger(s_int_prop), locInstanceLoaded.getInteger(s_int_prop),s_int_prop);
  949. finally
  950. ms.Free();
  951. end;
  952. end;
  953. procedure TSDOSerializer_Test.save_to_file_null_int_prop();
  954. const
  955. TARGET_PROP_NAME = s_int_prop; TARGET_PROP_TYPE_NAME = 'Integer';
  956. function CreateFactory() : ISDODataFactory;
  957. var
  958. locObj : ISDOType;
  959. begin
  960. Result := TSDODataFactory.Create() as ISDODataFactory;
  961. Result.AddType(s_uri,s_object_type,[]);
  962. locObj := Result.getType(s_uri,s_object_type);
  963. Result.addProperty(locObj,s_string_prop,sdo_namespace,'String',[]);
  964. Result.addProperty(locObj,TARGET_PROP_NAME,sdo_namespace,TARGET_PROP_TYPE_NAME,[]);
  965. end;
  966. var
  967. locFactory : ISDODataFactory;
  968. locInstance, locInstanceLoaded : ISDODataObject;
  969. f : ISDOSerializerStream;
  970. s : ISDOSerializer;
  971. ms : TMemoryStream;
  972. begin
  973. locFactory := CreateFactory();
  974. locInstance := locFactory.createNew(s_uri,s_object_type);
  975. locInstance.setNull(TARGET_PROP_NAME);
  976. locInstance.setString(s_string_prop,'azerty');
  977. ms := TMemoryStream.Create();
  978. try
  979. f := TSDOSerializerStreamXML.Create();
  980. s := TSDOSerializer.Create(locFactory,f);
  981. s.save(locInstance,ms);
  982. f := TSDOSerializerStreamXML.Create();
  983. s := TSDOSerializer.Create(locFactory,f);
  984. ms.Position := 0;
  985. locInstanceLoaded := s.load(ms);
  986. CheckEquals(locInstance.isNull(TARGET_PROP_NAME), locInstanceLoaded.isNull(TARGET_PROP_NAME),Format('isNull(%s)',[TARGET_PROP_NAME]));
  987. CheckEquals(locInstance.getString(s_string_prop), locInstanceLoaded.getString(s_string_prop),s_string_prop);
  988. finally
  989. ms.Free();
  990. end;
  991. end;
  992. procedure TSDOSerializer_Test.save_to_file_null_long_prop();
  993. const
  994. TARGET_PROP_NAME = s_long_prop; TARGET_PROP_TYPE_NAME = 'Long';
  995. function CreateFactory() : ISDODataFactory;
  996. var
  997. locObj : ISDOType;
  998. begin
  999. Result := TSDODataFactory.Create() as ISDODataFactory;
  1000. Result.AddType(s_uri,s_object_type,[]);
  1001. locObj := Result.getType(s_uri,s_object_type);
  1002. Result.addProperty(locObj,s_int_prop,sdo_namespace,'Integer',[]);
  1003. Result.addProperty(locObj,TARGET_PROP_NAME,sdo_namespace,TARGET_PROP_TYPE_NAME,[]);
  1004. end;
  1005. var
  1006. locFactory : ISDODataFactory;
  1007. locInstance, locInstanceLoaded : ISDODataObject;
  1008. f : ISDOSerializerStream;
  1009. s : ISDOSerializer;
  1010. ms : TMemoryStream;
  1011. begin
  1012. locFactory := CreateFactory();
  1013. locInstance := locFactory.createNew(s_uri,s_object_type);
  1014. locInstance.setNull(TARGET_PROP_NAME);
  1015. locInstance.setInteger(s_int_prop,123);
  1016. ms := TMemoryStream.Create();
  1017. try
  1018. f := TSDOSerializerStreamXML.Create();
  1019. s := TSDOSerializer.Create(locFactory,f);
  1020. s.save(locInstance,ms);
  1021. f := TSDOSerializerStreamXML.Create();
  1022. s := TSDOSerializer.Create(locFactory,f);
  1023. ms.Position := 0;
  1024. locInstanceLoaded := s.load(ms);
  1025. CheckEquals(locInstance.isNull(TARGET_PROP_NAME), locInstanceLoaded.isNull(TARGET_PROP_NAME),Format('isNull(%s)',[TARGET_PROP_NAME]));
  1026. CheckEquals(locInstance.getInteger(s_int_prop), locInstanceLoaded.getInteger(s_int_prop),s_int_prop);
  1027. finally
  1028. ms.Free();
  1029. end;
  1030. end;
  1031. procedure TSDOSerializer_Test.save_to_file_null_object_prop();
  1032. const
  1033. TARGET_PROP_NAME = s_object_prop; TARGET_PROP_TYPE_NAME = s_object_type2;
  1034. function CreateFactory() : ISDODataFactory;
  1035. var
  1036. locObj : ISDOType;
  1037. begin
  1038. Result := TSDODataFactory.Create() as ISDODataFactory;
  1039. Result.AddType(s_uri,s_object_type,[]);
  1040. Result.AddType(s_uri,s_object_type2,[]);
  1041. locObj := Result.getType(s_uri,s_object_type);
  1042. Result.addProperty(locObj,s_int_prop,sdo_namespace,'Integer',[]);
  1043. Result.addProperty(locObj,TARGET_PROP_NAME,s_uri,TARGET_PROP_TYPE_NAME,[pfIsContainment]);
  1044. locObj := Result.getType(s_uri,s_object_type2);
  1045. Result.addProperty(locObj,s_string_prop,sdo_namespace,'String',[]);
  1046. end;
  1047. var
  1048. locFactory : ISDODataFactory;
  1049. locInstance, locInstanceLoaded : ISDODataObject;
  1050. f : ISDOSerializerStream;
  1051. s : ISDOSerializer;
  1052. ms : TMemoryStream;
  1053. begin
  1054. locFactory := CreateFactory();
  1055. locInstance := locFactory.createNew(s_uri,s_object_type);
  1056. locInstance.setNull(TARGET_PROP_NAME);
  1057. locInstance.setInteger(s_int_prop,123);
  1058. ms := TMemoryStream.Create();
  1059. try
  1060. f := TSDOSerializerStreamXML.Create();
  1061. s := TSDOSerializer.Create(locFactory,f);
  1062. s.save(locInstance,ms);
  1063. f := TSDOSerializerStreamXML.Create();
  1064. s := TSDOSerializer.Create(locFactory,f);
  1065. ms.Position := 0;
  1066. locInstanceLoaded := s.load(ms);
  1067. CheckEquals(locInstance.isNull(TARGET_PROP_NAME), locInstanceLoaded.isNull(TARGET_PROP_NAME),Format('isNull(%s)',[TARGET_PROP_NAME]));
  1068. CheckEquals(locInstance.getInteger(s_int_prop), locInstanceLoaded.getInteger(s_int_prop),s_int_prop);
  1069. finally
  1070. ms.Free();
  1071. end;
  1072. end;
  1073. procedure TSDOSerializer_Test.save_to_file_null_short_prop();
  1074. const
  1075. TARGET_PROP_NAME = s_short_prop; TARGET_PROP_TYPE_NAME = 'Short';
  1076. function CreateFactory() : ISDODataFactory;
  1077. var
  1078. locObj : ISDOType;
  1079. begin
  1080. Result := TSDODataFactory.Create() as ISDODataFactory;
  1081. Result.AddType(s_uri,s_object_type,[]);
  1082. locObj := Result.getType(s_uri,s_object_type);
  1083. Result.addProperty(locObj,s_int_prop,sdo_namespace,'Integer',[]);
  1084. Result.addProperty(locObj,TARGET_PROP_NAME,sdo_namespace,TARGET_PROP_TYPE_NAME,[]);
  1085. end;
  1086. var
  1087. locFactory : ISDODataFactory;
  1088. locInstance, locInstanceLoaded : ISDODataObject;
  1089. f : ISDOSerializerStream;
  1090. s : ISDOSerializer;
  1091. ms : TMemoryStream;
  1092. begin
  1093. locFactory := CreateFactory();
  1094. locInstance := locFactory.createNew(s_uri,s_object_type);
  1095. locInstance.setNull(TARGET_PROP_NAME);
  1096. locInstance.setInteger(s_int_prop,123);
  1097. ms := TMemoryStream.Create();
  1098. try
  1099. f := TSDOSerializerStreamXML.Create();
  1100. s := TSDOSerializer.Create(locFactory,f);
  1101. s.save(locInstance,ms);
  1102. f := TSDOSerializerStreamXML.Create();
  1103. s := TSDOSerializer.Create(locFactory,f);
  1104. ms.Position := 0;
  1105. locInstanceLoaded := s.load(ms);
  1106. CheckEquals(locInstance.isNull(TARGET_PROP_NAME), locInstanceLoaded.isNull(TARGET_PROP_NAME),Format('isNull(%s)',[TARGET_PROP_NAME]));
  1107. CheckEquals(locInstance.getInteger(s_int_prop), locInstanceLoaded.getInteger(s_int_prop),s_int_prop);
  1108. finally
  1109. ms.Free();
  1110. end;
  1111. end;
  1112. procedure TSDOSerializer_Test.save_to_file_null_string_prop();
  1113. const
  1114. TARGET_PROP_NAME = s_string_prop; TARGET_PROP_TYPE_NAME = 'String';
  1115. function CreateFactory() : ISDODataFactory;
  1116. var
  1117. locObj : ISDOType;
  1118. begin
  1119. Result := TSDODataFactory.Create() as ISDODataFactory;
  1120. Result.AddType(s_uri,s_object_type,[]);
  1121. locObj := Result.getType(s_uri,s_object_type);
  1122. Result.addProperty(locObj,s_int_prop,sdo_namespace,'Integer',[]);
  1123. Result.addProperty(locObj,TARGET_PROP_NAME,sdo_namespace,TARGET_PROP_TYPE_NAME,[]);
  1124. end;
  1125. var
  1126. locFactory : ISDODataFactory;
  1127. locInstance, locInstanceLoaded : ISDODataObject;
  1128. f : ISDOSerializerStream;
  1129. s : ISDOSerializer;
  1130. ms : TMemoryStream;
  1131. begin
  1132. locFactory := CreateFactory();
  1133. locInstance := locFactory.createNew(s_uri,s_object_type);
  1134. locInstance.setNull(TARGET_PROP_NAME);
  1135. locInstance.setInteger(s_int_prop,123);
  1136. ms := TMemoryStream.Create();
  1137. try
  1138. f := TSDOSerializerStreamXML.Create();
  1139. s := TSDOSerializer.Create(locFactory,f);
  1140. s.save(locInstance,ms);
  1141. f := TSDOSerializerStreamXML.Create();
  1142. s := TSDOSerializer.Create(locFactory,f);
  1143. ms.Position := 0;
  1144. locInstanceLoaded := s.load(ms);
  1145. CheckEquals(locInstance.isNull(TARGET_PROP_NAME), locInstanceLoaded.isNull(TARGET_PROP_NAME),Format('isNull(%s)',[TARGET_PROP_NAME]));
  1146. CheckEquals(locInstance.getInteger(s_int_prop), locInstanceLoaded.getInteger(s_int_prop),s_int_prop);
  1147. finally
  1148. ms.Free();
  1149. end;
  1150. end;
  1151. procedure TSDOSerializer_Test.load_from_file_start_with_empty();
  1152. var
  1153. locFactory, tmpFactory : ISDODataFactory;
  1154. f : ISDOSerializerStream;
  1155. s : ISDOSerializer;
  1156. ol : ISDODataObjectList;
  1157. localFileName : string;
  1158. begin
  1159. localFileName := sdoExpandLocalFileName(TestFilesPath + 'company.xml');
  1160. f := TSDOSerializerStreamXML.Create();
  1161. tmpFactory := TSDODataFactory.Create();
  1162. s := TSDOSerializer.Create(tmpFactory,f);
  1163. ol := TSDODataObjectList.Create(tmpFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[ObjectType]));
  1164. s.load(localFileName,ol);
  1165. locFactory := CreateSdoTypes();
  1166. CompareTypesInclude(tmpFactory.getTypes(), locFactory.getTypes());
  1167. CompareTypesInclude(locFactory.getTypes(), tmpFactory.getTypes());
  1168. end;
  1169. procedure TSDOSerializer_Test.load_from_file_one_object();
  1170. var
  1171. locFactory, tmpFactory : ISDODataFactory;
  1172. f : ISDOSerializerStream;
  1173. s : ISDOSerializer;
  1174. ol : ISDODataObjectList;
  1175. locComp : ISDODataObject;
  1176. localFileName : string;
  1177. begin
  1178. localFileName := sdoExpandLocalFileName(TestFilesPath + 'company.one.xml');
  1179. f := TSDOSerializerStreamXML.Create();
  1180. tmpFactory := TSDODataFactory.Create();
  1181. s := TSDOSerializer.Create(tmpFactory,f);
  1182. ol := TSDODataObjectList.Create(tmpFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[ObjectType]));
  1183. s.load(localFileName,ol);
  1184. locFactory := CreateSdoTypes();
  1185. CompareTypesInclude(tmpFactory.getTypes(), locFactory.getTypes());
  1186. CompareTypesInclude(locFactory.getTypes(), tmpFactory.getTypes());
  1187. CheckEquals(1,ol.size(),'loaded objects count');
  1188. locComp := CreateCompanyObject(locFactory);
  1189. ol.getCursor().MoveFirst();
  1190. CheckEquals(True,TSDOEqualityHelper.equalShallow(locComp, ol.getDataObject()),'equalShallow');
  1191. CheckEquals(True,TSDOEqualityHelper.equal(locComp, ol.getDataObject()),'equal');
  1192. end;
  1193. procedure TSDOSerializer_Test.load_from_file_two_object();
  1194. var
  1195. locFactory, tmpFactory : ISDODataFactory;
  1196. f : ISDOSerializerStream;
  1197. s : ISDOSerializer;
  1198. ol : ISDODataObjectList;
  1199. locComp : ISDODataObject;
  1200. localFileName : string;
  1201. begin
  1202. localFileName := sdoExpandLocalFileName(TestFilesPath + 'company.two.xml');
  1203. f := TSDOSerializerStreamXML.Create();
  1204. tmpFactory := TSDODataFactory.Create();
  1205. s := TSDOSerializer.Create(tmpFactory,f);
  1206. ol := TSDODataObjectList.Create(tmpFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[ObjectType]));
  1207. s.load(localFileName,ol);
  1208. locFactory := CreateSdoTypes();
  1209. CompareTypesInclude(tmpFactory.getTypes(), locFactory.getTypes());
  1210. CompareTypesInclude(locFactory.getTypes(), tmpFactory.getTypes());
  1211. CheckEquals(2,ol.size(),'loaded objects count');
  1212. locComp := CreateCompanyObject(locFactory);
  1213. locComp.setString('name','A Second Sample company');
  1214. ol.getCursor().MoveFirst();
  1215. CheckEquals(True,TSDOEqualityHelper.equalShallow(locComp, ol.getDataObject()),'equalShallow');
  1216. CheckEquals(True,TSDOEqualityHelper.equal(locComp, ol.getDataObject()),'equal');
  1217. end;
  1218. procedure TSDOSerializer_Test.save_to_file_changesummary_simple();
  1219. var
  1220. locFac : ISDODataFactory;
  1221. locEmployee : ISDODataObject;
  1222. locCS : ISDOChangeSummary;
  1223. f : ISDOSerializerStream;
  1224. s : ISDOSerializer;
  1225. localFileName : string;
  1226. existDoc, serialDoc : TSDOXMLDocument;
  1227. begin
  1228. localFileName := sdoExpandLocalFileName('change_summary_simple.xml');
  1229. locFac := TSDODataFactory.Create() as ISDODataFactory;
  1230. locFac.AddType(s_uri,s_Employee,[]);
  1231. locFac.addProperty(s_uri,s_Employee,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  1232. locFac.addProperty(s_uri,s_Employee,s_sn,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  1233. locFac.addProperty(s_uri,s_Employee,s_manager,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType],[pfIsAttribute]);
  1234. locFac.addProperty(s_uri,s_Employee,s_age,sdo_namespace,SDOTypeDefaultTypeNames[ByteType],[pfIsAttribute]);
  1235. locFac.addProperty(s_uri,s_Employee,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  1236. locEmployee := locFac.createNew(s_uri,s_Employee);
  1237. locEmployee.setString(s_name,'Inoussa O.');
  1238. locEmployee.setString(s_sn,'002');
  1239. locEmployee.setBoolean(s_manager,True);
  1240. locEmployee.setByte(s_age,30);
  1241. locCS := locEmployee.getChangeSummary();
  1242. locCS.beginLogging();
  1243. locEmployee.setString(s_name,'Inoussa OUEDRAOGO');
  1244. locEmployee.setString(s_sn,'001');
  1245. locEmployee.setByte(s_age,32);
  1246. f := TSDOSerializerStreamXML.Create();
  1247. s := TSDOSerializer.Create(locFac,f);
  1248. s.save(s_Employee,locEmployee,localFileName);
  1249. existDoc := nil;
  1250. serialDoc := nil;
  1251. ReadXMLFile(existDoc,sdoExpandLocalFileName(TestFilesPath + 'change_summary_simple.xml'));
  1252. try
  1253. ReadXMLFile(serialDoc,localFileName);
  1254. CheckEquals(True, CompareNodes(existDoc,serialDoc));
  1255. finally
  1256. ReleaseDomNode(existDoc);
  1257. ReleaseDomNode(serialDoc);
  1258. end;
  1259. end;
  1260. procedure TSDOSerializer_Test.Compare(const A, B: ISDOChangedDataObjectListEx; const AOptions : TListCompareOptions);
  1261. var
  1262. i, c, j, k : PtrInt;
  1263. tmpObj : ISDODataObject;
  1264. begin
  1265. Check(
  1266. ( ( A = nil ) and ( B = nil ) ) or
  1267. ( ( A <> nil ) and ( B <> nil ) ) ,
  1268. 'nil'
  1269. );
  1270. if ( A <> nil ) then begin
  1271. CheckEquals(A.size(),B.size(), 'size()');
  1272. c := A.size();
  1273. if ( c > 0 ) then begin
  1274. if ( lcoCompareOrder in AOptions ) then begin
  1275. for i := 0 to Pred(c) do begin
  1276. CheckEquals(Ord(A.getType(i)), Ord(B.getType(i)), Format('getType(%d)',[i]));
  1277. Check(TSDOEqualityHelper.equal(A.getDataObject(i),B.getDataObject(i)),Format('A.getDataObject(%d)',[i]));
  1278. Compare(A.getInfo(i),B.getInfo(i));
  1279. end;
  1280. end else begin
  1281. for i := 0 to Pred(c) do begin
  1282. tmpObj := A.getDataObject(i);
  1283. k := -1;
  1284. for j := 0 to Pred(B.size()) do begin
  1285. if TSDOEqualityHelper.equal(tmpObj,B.getDataObject(j)) then begin
  1286. k := j;
  1287. Break;
  1288. end;
  1289. end;
  1290. Check( ( k > -1 ), Format('Object not found : A.getDataObject(%d)',[i]));
  1291. CheckEquals(Ord(A.getType(i)), Ord(B.getType(k)), Format('getType(%d)',[i]));
  1292. Check(TSDOEqualityHelper.equal(A.getDataObject(i),B.getDataObject(k)),Format('A.getDataObject(%d), B.getDataObject(%d)',[i,k]));
  1293. Compare(A.getInfo(i),B.getInfo(k));
  1294. end;
  1295. end;
  1296. end;
  1297. end;
  1298. end;
  1299. procedure TSDOSerializer_Test.load_from_file_changesummary_simple();
  1300. var
  1301. locFac, tmpFactory : ISDODataFactory;
  1302. locEmployee : ISDODataObject;
  1303. locCS : ISDOChangeSummary;
  1304. f : ISDOSerializerStream;
  1305. s : ISDOSerializer;
  1306. localFileName : string;
  1307. ol : ISDODataObjectList;
  1308. begin
  1309. localFileName := sdoExpandLocalFileName(TestFilesPath + 'change_summary_simple.xml');
  1310. locFac := TSDODataFactory.Create() as ISDODataFactory;
  1311. locFac.AddType(s_uri,s_Employee,[]);
  1312. locFac.addProperty(s_uri,s_Employee,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  1313. locFac.addProperty(s_uri,s_Employee,s_sn,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  1314. locFac.addProperty(s_uri,s_Employee,s_manager,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType],[]);
  1315. locFac.addProperty(s_uri,s_Employee,s_age,sdo_namespace,SDOTypeDefaultTypeNames[ByteType],[]);
  1316. locFac.addProperty(s_uri,s_Employee,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  1317. locEmployee := locFac.createNew(s_uri,s_Employee);
  1318. locEmployee.setString(s_name,'Inoussa O.');
  1319. locEmployee.setString(s_sn,'002');
  1320. locEmployee.setBoolean(s_manager,True);
  1321. locEmployee.setByte(s_age,30);
  1322. locCS := locEmployee.getChangeSummary();
  1323. locCS.beginLogging();
  1324. locEmployee.setString(s_name,'Inoussa OUEDRAOGO');
  1325. locEmployee.setString(s_sn,'001');
  1326. locEmployee.setByte(s_age,32);
  1327. f := TSDOSerializerStreamXML.Create();
  1328. tmpFactory := TSDODataFactory.Create();
  1329. s := TSDOSerializer.Create(tmpFactory,f);
  1330. ol := TSDODataObjectList.Create(tmpFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[ObjectType]));
  1331. s.load(localFileName,ol);
  1332. Check(TSDOEqualityHelper.equal(locEmployee,ol.getDataObject(0)));
  1333. Compare(
  1334. locEmployee.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  1335. ol.getDataObject(0).getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  1336. );
  1337. locEmployee.getChangeSummary().undoChanges();
  1338. ol.getDataObject(0).getChangeSummary().undoChanges();
  1339. CheckEquals(0, locEmployee.getChangeSummary().getChangedDataObjects().size());
  1340. CheckEquals(0, ol.getDataObject(0).getChangeSummary().getChangedDataObjects().size());
  1341. Check(TSDOEqualityHelper.equal(locEmployee,ol.getDataObject(0)));
  1342. end;
  1343. procedure TSDOSerializer_Test.Compare(const A, B: TDataObjectChangeInfo);
  1344. var
  1345. i, c, j : PtrInt;
  1346. ok : Boolean;
  1347. x, y : TValueSetting;
  1348. begin
  1349. Check( ( A = nil ) or ( B <> nil ), 'nil');
  1350. if ( A <> nil ) then begin
  1351. A.ExtractPendingOldValues();
  1352. B.ExtractPendingOldValues();
  1353. Check(TSDOEqualityHelper.equal(A.DataObject,B.DataObject));
  1354. CheckEquals(Ord(A.ChangeType), Ord(B.ChangeType), 'ChangeType');
  1355. Check(TSDOEqualityHelper.equal(A.OldContainer,B.OldContainer));
  1356. CheckEquals(A.ChangeList.size(),B.ChangeList.size(),'ChangeList.size()');
  1357. c := A.ChangeList.size();
  1358. if ( c > 0 ) then begin
  1359. y := nil;
  1360. for i := 0 to Pred(c) do begin
  1361. x := A.ChangeList.getItem(i);
  1362. ok := False;
  1363. for j := 0 to ( c - 1 ) do begin
  1364. y := B.ChangeList.getItem(j);
  1365. if ( x.getProperty().getName() = y.getProperty().getName() ) and
  1366. x.getProperty().getType().equals(y.getProperty().getType()) and
  1367. ( x.getIndex() = y.getIndex() )
  1368. then begin
  1369. ok := True;
  1370. Break;
  1371. end;
  1372. end;
  1373. Check(ok, Format('A.ChangeList.getItem(%d) %s, not found.',[i, x.getProperty().getName()]));
  1374. Compare(x,y);
  1375. end;
  1376. end;
  1377. Check(
  1378. ( ( A.ManyValuePropChangesList = nil ) and ( B.ManyValuePropChangesList = nil ) ) or
  1379. ( ( A.ManyValuePropChangesList <> nil ) and ( B.ManyValuePropChangesList <> nil ) ),
  1380. 'ManyValuePropChangesList'
  1381. );
  1382. if ( A.ManyValuePropChangesList <> nil ) then begin
  1383. Compare(A.ManyValuePropChangesList, B.ManyValuePropChangesList);
  1384. end;
  1385. end;
  1386. end;
  1387. procedure TSDOSerializer_Test.Compare(const A, B: TValueSetting);
  1388. begin
  1389. Check( ( A = nil ) or ( B <> nil ), 'nil');
  1390. if ( A <> nil ) then begin
  1391. CheckEquals(A.getProperty().getName(), B.getProperty().getName(), 'getProperty().getName()');
  1392. Check(A.getProperty().getType().equals(B.getProperty().getType()), 'getProperty().getType()');
  1393. CheckEquals(A.isSet, B.isSet, Format('%s.isSet',[A.getProperty().getName()]));
  1394. CheckEquals(A.isNull, B.isNull, 'isNull');
  1395. case A.getProperty.getTypeEnum() of
  1396. BooleanType : CheckEquals(A.getBooleanValue(),B.getBooleanValue(),'getBooleanValue()');
  1397. ByteType : CheckEquals(A.getByteValue(),B.getByteValue(),'getByteValue()');
  1398. {$IFDEF HAS_SDO_BYTES}
  1399. BytesType : CheckEquals(A.getBytesValue(),B.getBytesValue(),'getBytesValue()');
  1400. {$ENDIF HAS_SDO_BYTES}
  1401. {$IFDEF HAS_SDO_CHAR}
  1402. CharacterType : CheckEquals(A.getCharacterValue(),B.getCharacterValue(),'getCharacterValue()');
  1403. {$ENDIF HAS_SDO_CHAR}
  1404. {$IFDEF HAS_SDO_CURRENCY}
  1405. CurrencyType : CheckEquals(A.getCurrencyValue(),B.getCurrencyValue(),'getCurrencyValue()');
  1406. {$ENDIF HAS_SDO_CURRENCY}
  1407. DateType : CheckEquals(A.getDateValue(),B.getDateValue(),'getDateValue()',False);
  1408. {$IFDEF HAS_SDO_DOUBLE}
  1409. DoubleType : CheckEquals(A.getDoubleValue(),B.getDoubleValue(),'getDoubleValue()');
  1410. {$ENDIF HAS_SDO_DOUBLE}
  1411. {$IFDEF HAS_SDO_FLOAT}
  1412. FloatType : CheckEquals(A.getFloatValue(),B.getFloatValue(),'getFloatValue()');
  1413. {$ENDIF HAS_SDO_FLOAT}
  1414. IntegerType : CheckEquals(A.getIntegerValue(),B.getIntegerValue(),'getIntegerValue()');
  1415. {$IFDEF HAS_SDO_LONG}
  1416. LongType : CheckEquals(A.getLongValue(),B.getLongValue(),'getLongValue()');
  1417. {$ENDIF HAS_SDO_LONG}
  1418. {$IFDEF HAS_SDO_SHORT}
  1419. ShortType : CheckEquals(A.getShortValue(),B.getShortValue(),'getShortValue()');
  1420. {$ENDIF HAS_SDO_SHORT}
  1421. ObjectType : Check(TSDOEqualityHelper.equal(A.getDataObjectValue(),B.getDataObjectValue()),'getDataObjectValue()');
  1422. StringType : CheckEquals(A.getStringValue(),B.getStringValue(),'getStringValue()');
  1423. else
  1424. Assert(False);
  1425. end;
  1426. end;
  1427. end;
  1428. procedure TSDOSerializer_Test.save_to_file_changesummary_object_modify_nested();
  1429. var
  1430. locFac : ISDODataFactory;
  1431. locDep, locEmployee : ISDODataObject;
  1432. locCS : ISDOChangeSummary;
  1433. f : ISDOSerializerStream;
  1434. s : ISDOSerializer;
  1435. localFileName : string;
  1436. existDoc, serialDoc : TSDOXMLDocument;
  1437. begin
  1438. localFileName := sdoExpandLocalFileName('change_summary_object_modify_nested.xml');
  1439. locFac := TSDODataFactory.Create() as ISDODataFactory;
  1440. locFac.AddType(s_uri,s_DepartmentType,[]);
  1441. locFac.AddType(s_uri,s_Employee,[]);
  1442. locFac.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  1443. locFac.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  1444. locFac.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[pfIsAttribute]);
  1445. locFac.addProperty(s_uri,s_DepartmentType,s_Employee,s_uri,s_Employee,[pfIsContainment]);
  1446. locFac.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  1447. locFac.addProperty(s_uri,s_Employee,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  1448. locFac.addProperty(s_uri,s_Employee,s_sn,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  1449. locFac.addProperty(s_uri,s_Employee,s_manager,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType],[pfIsAttribute]);
  1450. locFac.addProperty(s_uri,s_Employee,s_age,sdo_namespace,SDOTypeDefaultTypeNames[ByteType],[pfIsAttribute]);
  1451. locDep := locFac.createNew(s_uri,s_DepartmentType);
  1452. locDep.setString(s_name,'R & D');
  1453. locDep.setString(s_location,'Ouaga, BF');
  1454. locDep.setInteger(s_number,1210);
  1455. locEmployee := locDep.createDataObject(s_Employee);
  1456. locEmployee.setString(s_name,'Inoussa O.');
  1457. locEmployee.setString(s_sn,'002');
  1458. locEmployee.setBoolean(s_manager,True);
  1459. locEmployee.setByte(s_age,12);
  1460. locCS := locDep.getChangeSummary();
  1461. locCS.beginLogging();
  1462. locDep.setString(s_name,'R & D Department');
  1463. locDep.setString(s_location,'Ouaga 01, BF');
  1464. locEmployee.setString(s_name,'Inoussa OUEDRAOGO');
  1465. locEmployee.setString(s_sn,'001');
  1466. locEmployee.setByte(s_age,32);
  1467. f := TSDOSerializerStreamXML.Create();
  1468. s := TSDOSerializer.Create(locFac,f);
  1469. s.save(s_DepartmentType,locDep,localFileName);
  1470. existDoc := nil;
  1471. serialDoc := nil;
  1472. ReadXMLFile(existDoc,sdoExpandLocalFileName(TestFilesPath + 'change_summary_object_modify_nested.xml'));
  1473. try
  1474. ReadXMLFile(serialDoc,localFileName);
  1475. CheckEquals(True, CompareNodes(existDoc,serialDoc));
  1476. finally
  1477. ReleaseDomNode(existDoc);
  1478. ReleaseDomNode(serialDoc);
  1479. end;
  1480. end;
  1481. procedure TSDOSerializer_Test.save_to_file_changesummary_prop_list_integer();
  1482. const
  1483. FILE_NAME = 'changesummary_prop_list_integer.xml';
  1484. var
  1485. locFac : ISDODataFactory;
  1486. locDep : ISDODataObject;
  1487. ls : ISDODataObjectList;
  1488. locCS : ISDOChangeSummary;
  1489. f : ISDOSerializerStream;
  1490. s : ISDOSerializer;
  1491. localFileName : string;
  1492. existDoc, serialDoc : TSDOXMLDocument;
  1493. begin
  1494. localFileName := sdoExpandLocalFileName(FILE_NAME);
  1495. locFac := TSDODataFactory.Create() as ISDODataFactory;
  1496. locFac.AddType(s_uri,s_DepartmentType,[]);
  1497. locFac.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  1498. locFac.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  1499. locFac.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[pfIsAttribute]);
  1500. locFac.addProperty(s_uri,s_DepartmentType,s_list_int,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[pfIsMany]);
  1501. locFac.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  1502. locDep := locFac.createNew(s_uri,s_DepartmentType);
  1503. locDep.setString(s_name,'R & D');
  1504. locDep.setString(s_location,'Ouaga, BF');
  1505. locDep.setInteger(s_number,1210);
  1506. ls := locDep.getList(s_list_int);
  1507. ls.append(1);
  1508. ls.append(2);
  1509. ls.append(3);
  1510. locCS := locDep.getChangeSummary();
  1511. locCS.beginLogging();
  1512. locDep.setString(s_name,'R & D Department');
  1513. locDep.setString(s_location,'Ouaga 01, BF');
  1514. ls.setInteger(0,10);
  1515. ls.append(123);
  1516. ls.append(456);
  1517. ls.setInteger(1,20);
  1518. ls.delete(0);
  1519. ls.delete(1);
  1520. ls.insert(2, 1076);
  1521. ls.append(789);
  1522. {$IFDEF TEST_GENERATE_FILE}
  1523. (TSDOSerializer.Create(locFac,TSDOSerializerStreamXML.Create()) as ISDOSerializer).save(locDep,sdoExpandLocalFileName(FILE_NAME));
  1524. {$ENDIF TEST_GENERATE_FILE}
  1525. f := TSDOSerializerStreamXML.Create();
  1526. s := TSDOSerializer.Create(locFac,f);
  1527. s.save(s_DepartmentType,locDep,localFileName);
  1528. existDoc := nil;
  1529. serialDoc := nil;
  1530. ReadXMLFile(existDoc,sdoExpandLocalFileName(TestFilesPath + FILE_NAME));
  1531. try
  1532. ReadXMLFile(serialDoc,localFileName);
  1533. CheckEquals(True, CompareNodes(existDoc,serialDoc));
  1534. finally
  1535. ReleaseDomNode(existDoc);
  1536. ReleaseDomNode(serialDoc);
  1537. end;
  1538. end;
  1539. procedure TSDOSerializer_Test.save_to_file_changesummary_object_create();
  1540. var
  1541. locFac : ISDODataFactory;
  1542. locDep, locEmployee : ISDODataObject;
  1543. locCS : ISDOChangeSummary;
  1544. f : ISDOSerializerStream;
  1545. s : ISDOSerializer;
  1546. localFileName : string;
  1547. existDoc, serialDoc : TSDOXMLDocument;
  1548. begin
  1549. localFileName := sdoExpandLocalFileName('change_summary_object_create.xml');
  1550. locFac := TSDODataFactory.Create() as ISDODataFactory;
  1551. locFac.AddType(s_uri,s_DepartmentType,[]);
  1552. locFac.AddType(s_uri,s_Employee,[]);
  1553. locFac.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  1554. locFac.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  1555. locFac.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[pfIsAttribute]);
  1556. locFac.addProperty(s_uri,s_DepartmentType,s_Employee,s_uri,s_Employee,[pfIsContainment]);
  1557. locFac.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  1558. locFac.addProperty(s_uri,s_Employee,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  1559. locFac.addProperty(s_uri,s_Employee,s_sn,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  1560. locFac.addProperty(s_uri,s_Employee,s_manager,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType],[pfIsAttribute]);
  1561. locDep := locFac.createNew(s_uri,s_DepartmentType);
  1562. locDep.setString(s_name,'R & D');
  1563. locCS := locDep.getChangeSummary();
  1564. locDep.setString(s_location,'Ouaga, BF');
  1565. locCS.beginLogging();
  1566. locDep.setInteger(s_number,1210);
  1567. locEmployee := locDep.createDataObject(s_Employee);
  1568. locEmployee.setString(s_name,'Inoussa O.');
  1569. locEmployee.setString(s_sn,'002');
  1570. locEmployee.setBoolean(s_manager,True);
  1571. locDep.setString(s_name,'R & D Department');
  1572. locDep.setString(s_location,'Ouaga 01, BF');
  1573. locEmployee.setString(s_name,'Inoussa OUEDRAOGO');
  1574. locEmployee.setString(s_sn,'001');
  1575. f := TSDOSerializerStreamXML.Create();
  1576. s := TSDOSerializer.Create(locFac,f);
  1577. s.save(s_DepartmentType,locDep,localFileName);
  1578. existDoc := nil;
  1579. serialDoc := nil;
  1580. ReadXMLFile(existDoc,sdoExpandLocalFileName(TestFilesPath + 'change_summary_object_create.xml'));
  1581. try
  1582. ReadXMLFile(serialDoc,localFileName);
  1583. CheckEquals(True, CompareNodes(existDoc,serialDoc));
  1584. finally
  1585. ReleaseDomNode(existDoc);
  1586. ReleaseDomNode(serialDoc);
  1587. end;
  1588. end;
  1589. procedure TSDOSerializer_Test.save_to_file_changesummary_object_create_cont_ref();
  1590. var
  1591. locFac : ISDODataFactory;
  1592. locDep, locEmployee : ISDODataObject;
  1593. locCS : ISDOChangeSummary;
  1594. f : ISDOSerializerStream;
  1595. s : ISDOSerializer;
  1596. localFileName : string;
  1597. existDoc, serialDoc : TSDOXMLDocument;
  1598. begin
  1599. localFileName := sdoExpandLocalFileName('change_summary_object_create_cont_ref.xml');
  1600. locFac := TSDODataFactory.Create() as ISDODataFactory;
  1601. locFac.AddType(s_uri,s_DepartmentType,[]);
  1602. locFac.AddType(s_uri,s_Employee,[]);
  1603. locFac.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  1604. locFac.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  1605. locFac.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[pfIsAttribute]);
  1606. locFac.addProperty(s_uri,s_DepartmentType,s_Employee,s_uri,s_Employee,[pfIsContainment]);
  1607. locFac.addProperty(s_uri,s_DepartmentType,'employee_ref',s_uri,s_Employee,[]);
  1608. locFac.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  1609. locFac.addProperty(s_uri,s_Employee,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  1610. locFac.addProperty(s_uri,s_Employee,s_sn,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  1611. locFac.addProperty(s_uri,s_Employee,s_manager,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType],[pfIsAttribute]);
  1612. locDep := locFac.createNew(s_uri,s_DepartmentType);
  1613. locDep.setString(s_name,'R & D');
  1614. locCS := locDep.getChangeSummary();
  1615. locDep.setString(s_location,'Ouaga, BF');
  1616. locCS.beginLogging();
  1617. locDep.setInteger(s_number,1210);
  1618. locEmployee := locDep.createDataObject(s_Employee);
  1619. locEmployee.setString(s_name,'Inoussa O.');
  1620. locEmployee.setString(s_sn,'002');
  1621. locEmployee.setBoolean(s_manager,True);
  1622. locDep.setString(s_name,'R & D Department');
  1623. locDep.setString(s_location,'Ouaga 01, BF');
  1624. locDep.setDataObject('employee_ref',locEmployee);
  1625. locEmployee.setString(s_name,'Inoussa OUEDRAOGO');
  1626. locEmployee.setString(s_sn,'001');
  1627. f := TSDOSerializerStreamXML.Create();
  1628. s := TSDOSerializer.Create(locFac,f);
  1629. s.save(s_DepartmentType,locDep,localFileName);
  1630. existDoc := nil;
  1631. serialDoc := nil;
  1632. ReadXMLFile(existDoc,sdoExpandLocalFileName(TestFilesPath + 'change_summary_object_create_cont_ref.xml'));
  1633. try
  1634. ReadXMLFile(serialDoc,localFileName);
  1635. CheckEquals(True, CompareNodes(existDoc,serialDoc));
  1636. finally
  1637. ReleaseDomNode(existDoc);
  1638. ReleaseDomNode(serialDoc);
  1639. end;
  1640. end;
  1641. procedure TSDOSerializer_Test.load_from_file_changesummary_object_create_cont_ref();
  1642. var
  1643. locFac : ISDODataFactory;
  1644. locDep, locEmployee, locLoadedDep : ISDODataObject;
  1645. locCS : ISDOChangeSummary;
  1646. f : ISDOSerializerStream;
  1647. s : ISDOSerializer;
  1648. localFileName : string;
  1649. begin
  1650. localFileName := sdoExpandLocalFileName('change_summary_object_create_cont_ref.xml');
  1651. locFac := TSDODataFactory.Create() as ISDODataFactory;
  1652. locFac.AddType(s_uri,s_DepartmentType,[]);
  1653. locFac.AddType(s_uri,s_Employee,[]);
  1654. locFac.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  1655. locFac.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  1656. locFac.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[pfIsAttribute]);
  1657. locFac.addProperty(s_uri,s_DepartmentType,s_Employee,s_uri,s_Employee,[pfIsContainment]);
  1658. locFac.addProperty(s_uri,s_DepartmentType,'employee_ref',s_uri,s_Employee,[]);
  1659. locFac.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  1660. locFac.addProperty(s_uri,s_Employee,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  1661. locFac.addProperty(s_uri,s_Employee,s_sn,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  1662. locFac.addProperty(s_uri,s_Employee,s_manager,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType],[pfIsAttribute]);
  1663. locDep := locFac.createNew(s_uri,s_DepartmentType);
  1664. locDep.setString(s_name,'R & D');
  1665. locCS := locDep.getChangeSummary();
  1666. locDep.setString(s_location,'Ouaga, BF');
  1667. locCS.beginLogging();
  1668. locDep.setInteger(s_number,1210);
  1669. locEmployee := locDep.createDataObject(s_Employee);
  1670. locEmployee.setString(s_name,'Inoussa O.');
  1671. locEmployee.setString(s_sn,'002');
  1672. locEmployee.setBoolean(s_manager,True);
  1673. locDep.setString(s_name,'R & D Department');
  1674. locDep.setString(s_location,'Ouaga 01, BF');
  1675. locDep.setDataObject('employee_ref',locEmployee);
  1676. locEmployee.setString(s_name,'Inoussa OUEDRAOGO');
  1677. locEmployee.setString(s_sn,'001');
  1678. f := TSDOSerializerStreamXML.Create();
  1679. s := TSDOSerializer.Create(locFac,f);
  1680. locLoadedDep := s.load(sdoExpandLocalFileName(TestFilesPath + 'change_summary_object_create_cont_ref.xml'));
  1681. Check(TSDOEqualityHelper.equal(locLoadedDep,locDep),'Object');
  1682. Compare(
  1683. locDep.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  1684. locLoadedDep.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  1685. );
  1686. locDep.getChangeSummary().undoChanges();
  1687. locLoadedDep.getChangeSummary().undoChanges();
  1688. CheckEquals( 0, locDep.getChangeSummary().getChangedDataObjects().size());
  1689. CheckEquals( 0, locLoadedDep.getChangeSummary().getChangedDataObjects().size());
  1690. Check(TSDOEqualityHelper.equal(locDep, locLoadedDep),'Object');
  1691. end;
  1692. procedure TSDOSerializer_Test.save_to_file_changesummary_object_delete();
  1693. var
  1694. locFac : ISDODataFactory;
  1695. locDep, locEmployee : ISDODataObject;
  1696. locCS : ISDOChangeSummary;
  1697. f : ISDOSerializerStream;
  1698. s : ISDOSerializer;
  1699. localFileName : string;
  1700. existDoc, serialDoc : TSDOXMLDocument;
  1701. begin
  1702. localFileName := sdoExpandLocalFileName('change_summary_object_delete.xml');
  1703. locFac := TSDODataFactory.Create() as ISDODataFactory;
  1704. locFac.AddType(s_uri,s_DepartmentType,[]);
  1705. locFac.AddType(s_uri,s_Employee,[]);
  1706. locFac.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType], [pfIsAttribute]);
  1707. locFac.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType], [pfIsAttribute]);
  1708. locFac.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType], [pfIsAttribute]);
  1709. locFac.addProperty(s_uri,s_DepartmentType,s_Employee,s_uri,s_Employee,[pfIsContainment]);
  1710. locFac.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  1711. locFac.addProperty(s_uri,s_Employee,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType], [pfIsAttribute]);
  1712. locFac.addProperty(s_uri,s_Employee,s_sn,sdo_namespace,SDOTypeDefaultTypeNames[StringType], [pfIsAttribute]);
  1713. locFac.addProperty(s_uri,s_Employee,s_manager,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType], [pfIsAttribute]);
  1714. locDep := locFac.createNew(s_uri,s_DepartmentType);
  1715. locDep.setString(s_name,'R & D');
  1716. locEmployee := locDep.createDataObject(s_Employee);
  1717. locEmployee.setString(s_name,'Inoussa O.');
  1718. locEmployee.setString(s_sn,'002');
  1719. locEmployee.setBoolean(s_manager,True);
  1720. locCS := locDep.getChangeSummary();
  1721. locDep.setString(s_location,'Ouaga, BF');
  1722. locCS.beginLogging();
  1723. locDep.setInteger(s_number,1210);
  1724. locDep.setString(s_name,'R & D Department');
  1725. locDep.setString(s_location,'Ouaga 01, BF');
  1726. locDep.setDataObject(s_Employee,nil);
  1727. f := TSDOSerializerStreamXML.Create();
  1728. s := TSDOSerializer.Create(locFac,f);
  1729. s.save(s_DepartmentType,locDep,localFileName);
  1730. existDoc := nil;
  1731. serialDoc := nil;
  1732. ReadXMLFile(existDoc,sdoExpandLocalFileName(TestFilesPath + 'change_summary_object_delete.xml'));
  1733. try
  1734. ReadXMLFile(serialDoc,localFileName);
  1735. CheckEquals(True, CompareNodes(existDoc,serialDoc));
  1736. finally
  1737. ReleaseDomNode(existDoc);
  1738. ReleaseDomNode(serialDoc);
  1739. end;
  1740. end;
  1741. procedure TSDOSerializer_Test.load_from_file_changesummary_object_delete();
  1742. var
  1743. locFac, tmpFactory : ISDODataFactory;
  1744. locDep, locEmployee, locLoadedDep : ISDODataObject;
  1745. locCS : ISDOChangeSummary;
  1746. f : ISDOSerializerStream;
  1747. s : ISDOSerializer;
  1748. localFileName : string;
  1749. begin
  1750. localFileName := sdoExpandLocalFileName(TestFilesPath + 'change_summary_object_delete.xml');
  1751. locFac := TSDODataFactory.Create() as ISDODataFactory;
  1752. locFac.AddType(s_uri,s_DepartmentType,[]);
  1753. locFac.AddType(s_uri,s_Employee,[]);
  1754. locFac.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType], []);
  1755. locFac.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType], []);
  1756. locFac.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType], []);
  1757. locFac.addProperty(s_uri,s_DepartmentType,s_Employee,s_uri,s_Employee,[pfIsContainment]);
  1758. locFac.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  1759. locFac.addProperty(s_uri,s_Employee,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType], []);
  1760. locFac.addProperty(s_uri,s_Employee,s_sn,sdo_namespace,SDOTypeDefaultTypeNames[StringType], []);
  1761. locFac.addProperty(s_uri,s_Employee,s_manager,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType], []);
  1762. locDep := locFac.createNew(s_uri,s_DepartmentType);
  1763. locDep.setString(s_name,'R & D');
  1764. locEmployee := locDep.createDataObject(s_Employee);
  1765. locEmployee.setString(s_name,'Inoussa O.');
  1766. locEmployee.setString(s_sn,'002');
  1767. locEmployee.setBoolean(s_manager,True);
  1768. locCS := locDep.getChangeSummary();
  1769. locDep.setString(s_location,'Ouaga, BF');
  1770. locCS.beginLogging();
  1771. locDep.setInteger(s_number,1210);
  1772. locDep.setString(s_name,'R & D Department');
  1773. locDep.setString(s_location,'Ouaga 01, BF');
  1774. locDep.setDataObject(s_Employee,nil); (TSDOSerializer.Create(locFac,TSDOSerializerStreamXML.Create()) as ISDOSerializer).save(locDep,'change_summary_object_delete.xml');
  1775. f := TSDOSerializerStreamXML.Create();
  1776. tmpFactory := TSDOBaseDataFactory.Create();
  1777. s := TSDOSerializer.Create(tmpFactory,f);
  1778. locLoadedDep := s.load(localFileName);
  1779. Check(TSDOEqualityHelper.equal(locDep,locLoadedDep),'Object');
  1780. Compare(
  1781. locDep.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  1782. locLoadedDep.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  1783. );
  1784. locDep.getChangeSummary().undoChanges();
  1785. locLoadedDep.getChangeSummary().undoChanges();
  1786. CheckEquals( 0, locDep.getChangeSummary().getChangedDataObjects().size());
  1787. CheckEquals( 0, locLoadedDep.getChangeSummary().getChangedDataObjects().size());
  1788. Check(TSDOEqualityHelper.equal(locDep, locLoadedDep),'Object');
  1789. end;
  1790. procedure TSDOSerializer_Test.save_to_file_changesummary_object_delete_nested();
  1791. var
  1792. locFac : ISDODataFactory;
  1793. locA, locB, locC, locD : ISDODataObject;
  1794. locCS : ISDOChangeSummary;
  1795. f : ISDOSerializerStream;
  1796. s : ISDOSerializer;
  1797. localFileName : string;
  1798. existDoc, serialDoc : TSDOXMLDocument;
  1799. begin
  1800. localFileName := sdoExpandLocalFileName('change_summary_object_delete_nested.xml');
  1801. locFac := TSDODataFactory.Create() as ISDODataFactory;
  1802. locFac.AddType(s_uri,'a',[]);
  1803. locFac.AddType(s_uri,'b',[]);
  1804. locFac.AddType(s_uri,'c',[]);
  1805. locFac.AddType(s_uri,'d',[]);
  1806. locFac.addProperty(s_uri,'a','p_a_str',sdo_namespace,SDOTypeDefaultTypeNames[StringType], [pfIsAttribute]);
  1807. locFac.addProperty(s_uri,'a','p_ab',s_uri,'b',[pfIsContainment]);
  1808. locFac.addProperty(s_uri,'a','p_ac',s_uri,'c',[]);
  1809. locFac.addProperty(s_uri,'a','p_ad',s_uri,'d',[]);
  1810. locFac.addProperty(s_uri,'a',s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  1811. locFac.addProperty(s_uri,'b','p_bc',s_uri,'c',[pfIsContainment]);
  1812. locFac.addProperty(s_uri,'b','p_b_str',sdo_namespace,SDOTypeDefaultTypeNames[StringType], [pfIsAttribute]);
  1813. locFac.addProperty(s_uri,'c','p_cd',s_uri,'d',[pfIsContainment]);
  1814. locFac.addProperty(s_uri,'c','p_c_str',sdo_namespace,SDOTypeDefaultTypeNames[StringType], [pfIsAttribute]);
  1815. locFac.addProperty(s_uri,'d','p_d_str',sdo_namespace,SDOTypeDefaultTypeNames[StringType], [pfIsAttribute]);
  1816. locA := locFac.createNew(s_uri,'a');
  1817. locA.setString('p_a_str','sample A'' property.');
  1818. locB := locA.createDataObject('p_ab');
  1819. locB.setString('p_b_str','Inoussa O.');
  1820. locC := locB.createDataObject('p_bc');
  1821. locC.setString('p_c_str','azerty');
  1822. locD := locC.createDataObject('p_cd');
  1823. locD.setString('p_d_str','D value');
  1824. locA.setDataObject('p_ac',locC);
  1825. locA.setDataObject('p_ad',locD);
  1826. locCS := locA.getChangeSummary();
  1827. locCS.beginLogging();
  1828. locC.setDataObject('p_cd',nil);
  1829. locA.setDataObject('p_ab',nil);
  1830. f := TSDOSerializerStreamXML.Create();
  1831. s := TSDOSerializer.Create(locFac,f);
  1832. s.save('a',locA,localFileName);
  1833. existDoc := nil;
  1834. serialDoc := nil;
  1835. ReadXMLFile(existDoc,sdoExpandLocalFileName(TestFilesPath + 'change_summary_object_delete_nested.xml'));
  1836. try
  1837. ReadXMLFile(serialDoc,localFileName);
  1838. CheckEquals(True, CompareNodes(existDoc,serialDoc));
  1839. finally
  1840. ReleaseDomNode(existDoc);
  1841. ReleaseDomNode(serialDoc);
  1842. end;
  1843. end;
  1844. procedure TSDOSerializer_Test.load_from_file_changesummary_prop_list_integer();
  1845. const
  1846. FILE_NAME = 'changesummary_prop_list_integer.xml';
  1847. var
  1848. locFac, tmpFactory : ISDODataFactory;
  1849. locDep, locLoadedDep : ISDODataObject;
  1850. ls : ISDODataObjectList;
  1851. locCS : ISDOChangeSummary;
  1852. f : ISDOSerializerStream;
  1853. s : ISDOSerializer;
  1854. localFileName : string;
  1855. begin
  1856. locFac := TSDODataFactory.Create() as ISDODataFactory;
  1857. locFac.AddType(s_uri,s_DepartmentType,[]);
  1858. locFac.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  1859. locFac.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  1860. locFac.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[]);
  1861. locFac.addProperty(s_uri,s_DepartmentType,s_list_int,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[pfIsMany]);
  1862. locFac.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  1863. locDep := locFac.createNew(s_uri,s_DepartmentType);
  1864. locDep.setString(s_name,'R & D');
  1865. locDep.setString(s_location,'Ouaga, BF');
  1866. locDep.setInteger(s_number,1210);
  1867. ls := locDep.getList(s_list_int);
  1868. ls.append(1);
  1869. ls.append(2);
  1870. ls.append(3);
  1871. locCS := locDep.getChangeSummary();
  1872. locCS.beginLogging();
  1873. locDep.setString(s_name,'R & D Department');
  1874. locDep.setString(s_location,'Ouaga 01, BF');
  1875. ls.setInteger(0,10);
  1876. ls.append(123);
  1877. ls.append(456);
  1878. ls.setInteger(1,20);
  1879. ls.delete(0);
  1880. ls.delete(1);
  1881. ls.insert(2, 1076);
  1882. ls.append(789);
  1883. {$IFDEF TEST_GENERATE_FILE}
  1884. (TSDOSerializer.Create(locFac,TSDOSerializerStreamXML.Create())as ISDOSerializer).save(locDep,sdoExpandLocalFileName(FILE_NAME));
  1885. {$ENDIF TEST_GENERATE_FILE}
  1886. localFileName := sdoExpandLocalFileName(TestFilesPath + FILE_NAME);
  1887. f := TSDOSerializerStreamXML.Create();
  1888. tmpFactory := TSDOBaseDataFactory.Create();
  1889. s := TSDOSerializer.Create(tmpFactory,f);
  1890. locLoadedDep := s.load(localFileName);
  1891. Check(TSDOEqualityHelper.equal(locDep, locLoadedDep),'Object');
  1892. Compare(
  1893. locDep.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  1894. locLoadedDep.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  1895. );
  1896. end;
  1897. {$IFDEF HAS_SDO_LONG}
  1898. procedure TSDOSerializer_Test.load_from_file_changesummary_prop_list_long();
  1899. const
  1900. PROP_NAME = s_list_long;
  1901. PROP_TYPE = LongType;
  1902. FILE_NAME = 'changesummary_prop_list_long.xml';
  1903. var
  1904. locFac, tmpFactory : ISDODataFactory;
  1905. locDep, locLoadedDep : ISDODataObject;
  1906. ls : ISDODataObjectList;
  1907. locCS : ISDOChangeSummary;
  1908. f : ISDOSerializerStream;
  1909. s : ISDOSerializer;
  1910. localFileName : string;
  1911. begin
  1912. locFac := TSDODataFactory.Create() as ISDODataFactory;
  1913. locFac.AddType(s_uri,s_DepartmentType,[]);
  1914. locFac.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  1915. locFac.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  1916. locFac.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[ByteType],[]);
  1917. locFac.addProperty(s_uri,s_DepartmentType,PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE],[pfIsMany]);
  1918. locFac.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  1919. locDep := locFac.createNew(s_uri,s_DepartmentType);
  1920. locDep.setString(s_name,'R & D');
  1921. locDep.setString(s_location,'Ouaga, BF');
  1922. locDep.setByte(s_number,123);
  1923. ls := locDep.getList(PROP_NAME);
  1924. ls.append(TSDOLong(11111111111111111));
  1925. ls.append(TSDOLong(-2222222222222222));
  1926. ls.append(TSDOLong(333333333333333333));
  1927. locCS := locDep.getChangeSummary();
  1928. locCS.beginLogging();
  1929. locDep.setString(s_name,'R & D Department');
  1930. locDep.setString(s_location,'Ouaga 01, BF');
  1931. ls.setLong(0,4444444444444444444);
  1932. ls.append(TSDOLong(5555555555555555555));
  1933. ls.append(TSDOLong(-6666666666666666666));
  1934. ls.setLong(1,7777777777777777777);
  1935. ls.delete(0);
  1936. ls.delete(1);
  1937. ls.insert(2, TSDOLong(8));
  1938. ls.append(TSDOLong(-9));
  1939. {$IFDEF TEST_GENERATE_FILE}
  1940. (TSDOSerializer.Create(locFac,TSDOSerializerStreamXML.Create())as ISDOSerializer).save(locDep,sdoExpandLocalFileName(FILE_NAME));
  1941. {$ENDIF TEST_GENERATE_FILE}
  1942. localFileName := sdoExpandLocalFileName(TestFilesPath + FILE_NAME);
  1943. f := TSDOSerializerStreamXML.Create();
  1944. tmpFactory := TSDOBaseDataFactory.Create();
  1945. s := TSDOSerializer.Create(tmpFactory,f);
  1946. locLoadedDep := s.load(localFileName);
  1947. Check(TSDOEqualityHelper.equal(locDep, locLoadedDep),'Object');
  1948. Compare(
  1949. locDep.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  1950. locLoadedDep.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  1951. );
  1952. end;
  1953. {$ENDIF HAS_SDO_LONG}
  1954. {$IFDEF HAS_SDO_SHORT}
  1955. procedure TSDOSerializer_Test.load_from_file_changesummary_prop_list_short();
  1956. const
  1957. PROP_NAME = s_list_short;
  1958. PROP_TYPE = ShortType;
  1959. FILE_NAME = 'changesummary_prop_list_short.xml';
  1960. var
  1961. locFac, tmpFactory : ISDODataFactory;
  1962. locDep, locLoadedDep : ISDODataObject;
  1963. ls : ISDODataObjectList;
  1964. locCS : ISDOChangeSummary;
  1965. f : ISDOSerializerStream;
  1966. s : ISDOSerializer;
  1967. localFileName : string;
  1968. begin
  1969. locFac := TSDODataFactory.Create() as ISDODataFactory;
  1970. locFac.AddType(s_uri,s_DepartmentType,[]);
  1971. locFac.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  1972. locFac.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  1973. locFac.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[ByteType],[]);
  1974. locFac.addProperty(s_uri,s_DepartmentType,PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE],[pfIsMany]);
  1975. locFac.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  1976. locDep := locFac.createNew(s_uri,s_DepartmentType);
  1977. locDep.setString(s_name,'R & D');
  1978. locDep.setString(s_location,'Ouaga, BF');
  1979. locDep.setByte(s_number,123);
  1980. ls := locDep.getList(PROP_NAME);
  1981. ls.append(TSDOShort(1));
  1982. ls.append(TSDOShort(2));
  1983. ls.append(TSDOShort(3));
  1984. locCS := locDep.getChangeSummary();
  1985. locCS.beginLogging();
  1986. locDep.setString(s_name,'R & D Department');
  1987. locDep.setString(s_location,'Ouaga 01, BF');
  1988. ls.setShort(0,10);
  1989. ls.append(TSDOShort(12345));
  1990. ls.append(TSDOShort(-5245));
  1991. ls.setShort(1,20);
  1992. ls.delete(0);
  1993. ls.delete(1);
  1994. ls.insert(2, TSDOShort(107));
  1995. ls.append(TSDOShort(89));
  1996. {$IFDEF TEST_GENERATE_FILE}
  1997. (TSDOSerializer.Create(locFac,TSDOSerializerStreamXML.Create())as ISDOSerializer).save(locDep,sdoExpandLocalFileName(FILE_NAME));
  1998. {$ENDIF TEST_GENERATE_FILE}
  1999. localFileName := sdoExpandLocalFileName(TestFilesPath + FILE_NAME);
  2000. f := TSDOSerializerStreamXML.Create();
  2001. tmpFactory := TSDOBaseDataFactory.Create();
  2002. s := TSDOSerializer.Create(tmpFactory,f);
  2003. locLoadedDep := s.load(localFileName);
  2004. Check(TSDOEqualityHelper.equal(locDep, locLoadedDep),'Object');
  2005. Compare(
  2006. locDep.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  2007. locLoadedDep.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  2008. );
  2009. end;
  2010. {$ENDIF HAS_SDO_SHORT}
  2011. procedure TSDOSerializer_Test.Compare(const A, B : TManyValuePropChangesList);
  2012. var
  2013. i, c, q, k : PtrInt;
  2014. x, y : TManyValuePropChanges;
  2015. xd, yd : TManyValuePropRecordData;
  2016. begin
  2017. Check(
  2018. ( ( A = nil ) and ( B = nil ) ) or
  2019. ( ( A <> nil ) and ( B <> nil ) ) ,
  2020. 'nil'
  2021. );
  2022. if ( A <> nil ) then begin
  2023. CheckEquals(A.Count(),B.Count(), 'Count()');
  2024. c := A.Count();
  2025. if ( c > 0 ) then begin
  2026. for i := 0 to Pred(c) do begin
  2027. x := A.Item[i];
  2028. y := B.Item[i];
  2029. CheckEquals(x.Prop.getName(), y.Prop.getName(), Format('item[%d] : Property ( name )',[i]));
  2030. Check(x.Prop.getType().equals(y.Prop.getType()), Format('item[%d] : Property ( type )',[i]));
  2031. CheckEquals(x.Count, y.Count, Format('item[%d] : Count',[i]));
  2032. q := x.Count;
  2033. if ( q > 0 ) then begin
  2034. for k := 0 to Pred(q) do begin
  2035. xd := x.GetItem(i);
  2036. yd := y.GetItem(i);
  2037. CheckEquals(Ord(xd.Action), Ord(yd.Action), Format('item[%d][%d].Action : Count',[i,k]));
  2038. CheckEquals(xd.Index, yd.Index, Format('item[%d][%d].Index : Count',[i,k]));
  2039. Compare(xd.Value, yd.Value, x.Prop.getTypeEnum());
  2040. end;
  2041. end;
  2042. end;
  2043. end;
  2044. end;
  2045. end;
  2046. procedure TSDOSerializer_Test.Compare(const A, B: TValueBuffer; const ADataType : TSDOTypeKind);
  2047. begin
  2048. case ADataType of
  2049. BooleanType : CheckEquals(A.BooleanValue,B.BooleanValue,'BooleanValue');
  2050. ByteType : CheckEquals(A.ByteValue,B.ByteValue,'ByteValue');
  2051. {$IFDEF HAS_SDO_BYTES}
  2052. BytesType : CheckEquals(A.BytesValue^,B.BytesValue^,'BytesValue');
  2053. {$ENDIF HAS_SDO_BYTES}
  2054. {$IFDEF HAS_SDO_CHAR}
  2055. CharacterType : CheckEquals(A.CharValue,B.CharValue,'CharValue');
  2056. {$ENDIF HAS_SDO_CHAR}
  2057. {$IFDEF HAS_SDO_CURRENCY}
  2058. CurrencyType : CheckEquals(A.CurrencyValue,B.CurrencyValue,'CurrencyValue');
  2059. {$ENDIF HAS_SDO_CURRENCY}
  2060. DateTimeType : CheckEquals(A.DateValue,B.DateValue,'DateValue',False);
  2061. {$IFDEF HAS_SDO_DOUBLE}
  2062. DoubleType : CheckEquals(A.DoubleValue,B.DoubleValue,'DoubleValue');
  2063. {$ENDIF HAS_SDO_DOUBLE}
  2064. {$IFDEF HAS_SDO_FLOAT}
  2065. FloatType : CheckEquals(A.FloatValue,B.FloatValue,'FloatValue');
  2066. {$ENDIF HAS_SDO_FLOAT}
  2067. IntegerType : CheckEquals(A.IntegerValue,B.IntegerValue,'IntegerValue');
  2068. {$IFDEF HAS_SDO_LONG}
  2069. LongType : CheckEquals(A.LongValue,B.LongValue,'LongValue');
  2070. {$ENDIF HAS_SDO_LONG}
  2071. {$IFDEF HAS_SDO_SHORT}
  2072. ShortType : CheckEquals(A.ShortValue,B.ShortValue,'ShortValue');
  2073. {$ENDIF HAS_SDO_SHORT}
  2074. ObjectType : Check(TSDOEqualityHelper.equal(A.ObjectValue^,B.ObjectValue^),'ObjectValue');
  2075. StringType : CheckEquals(A.StringValue^,B.StringValue^,'StringValue');
  2076. else
  2077. Assert(False);
  2078. end;
  2079. end;
  2080. procedure TSDOSerializer_Test.load_from_file_changesummary_object_delete_nested();
  2081. var
  2082. locFac, tmpFactory : ISDODataFactory;
  2083. locA, locB, locC, locD, locLoadedA : ISDODataObject;
  2084. locCS : ISDOChangeSummary;
  2085. f : ISDOSerializerStream;
  2086. s : ISDOSerializer;
  2087. localFileName : string;
  2088. begin
  2089. localFileName := sdoExpandLocalFileName(TestFilesPath + 'change_summary_object_delete_nested.xml');
  2090. locFac := TSDODataFactory.Create() as ISDODataFactory;
  2091. locFac.AddType(s_uri,'a',[]);
  2092. locFac.AddType(s_uri,'b',[]);
  2093. locFac.AddType(s_uri,'c',[]);
  2094. locFac.AddType(s_uri,'d',[]);
  2095. locFac.addProperty(s_uri,'a','p_a_str',sdo_namespace,SDOTypeDefaultTypeNames[StringType], []);
  2096. locFac.addProperty(s_uri,'a','p_ab',s_uri,'b',[pfIsContainment]);
  2097. locFac.addProperty(s_uri,'a','p_ac',s_uri,'c',[]);
  2098. locFac.addProperty(s_uri,'a','p_ad',s_uri,'d',[]);
  2099. locFac.addProperty(s_uri,'a',s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  2100. locFac.addProperty(s_uri,'b','p_bc',s_uri,'c',[pfIsContainment]);
  2101. locFac.addProperty(s_uri,'b','p_b_str',sdo_namespace,SDOTypeDefaultTypeNames[StringType], []);
  2102. locFac.addProperty(s_uri,'c','p_cd',s_uri,'d',[pfIsContainment]);
  2103. locFac.addProperty(s_uri,'c','p_c_str',sdo_namespace,SDOTypeDefaultTypeNames[StringType], []);
  2104. locFac.addProperty(s_uri,'d','p_d_str',sdo_namespace,SDOTypeDefaultTypeNames[StringType], []);
  2105. locA := locFac.createNew(s_uri,'a');
  2106. locA.setString('p_a_str','sample A'' property.');
  2107. locB := locA.createDataObject('p_ab');
  2108. locB.setString('p_b_str','Inoussa O.');
  2109. locC := locB.createDataObject('p_bc');
  2110. locC.setString('p_c_str','azerty');
  2111. locD := locC.createDataObject('p_cd');
  2112. locD.setString('p_d_str','D value');
  2113. locA.setDataObject('p_ac',locC);
  2114. locA.setDataObject('p_ad',locD);
  2115. locCS := locA.getChangeSummary();
  2116. locCS.beginLogging();
  2117. locC.setDataObject('p_cd',nil);
  2118. locA.setDataObject('p_ab',nil);
  2119. f := TSDOSerializerStreamXML.Create();
  2120. tmpFactory := TSDOBaseDataFactory.Create();
  2121. s := TSDOSerializer.Create(tmpFactory,f);
  2122. locLoadedA := s.load(localFileName);
  2123. Check(TSDOEqualityHelper.equal(locA,locLoadedA),'Object');
  2124. Compare(
  2125. locA.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  2126. locLoadedA.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  2127. );
  2128. locA.getChangeSummary().undoChanges();
  2129. locLoadedA.getChangeSummary().undoChanges();
  2130. CheckEquals( 0, locA.getChangeSummary().getChangedDataObjects().size());
  2131. CheckEquals( 0, locLoadedA.getChangeSummary().getChangedDataObjects().size());
  2132. Check(TSDOEqualityHelper.equal(locA, locLoadedA),'Object');
  2133. end;
  2134. procedure TSDOSerializer_Test.save_to_file_changesummary_object_delete_2_objects_same_type();
  2135. var
  2136. locFac : ISDODataFactory;
  2137. locA, locB : ISDODataObject;
  2138. locCS : ISDOChangeSummary;
  2139. f : ISDOSerializerStream;
  2140. s : ISDOSerializer;
  2141. localFileName : string;
  2142. existDoc, serialDoc : TSDOXMLDocument;
  2143. begin
  2144. localFileName := sdoExpandLocalFileName('changesummary_object_delete_2_objects_same_type.xml');
  2145. locFac := TSDODataFactory.Create() as ISDODataFactory;
  2146. locFac.AddType(s_uri,'a',[]);
  2147. locFac.AddType(s_uri,'b',[]);
  2148. locFac.addProperty(s_uri,'a','p_a_str',sdo_namespace,SDOTypeDefaultTypeNames[StringType], [pfIsAttribute]);
  2149. locFac.addProperty(s_uri,'a','p_ab1',s_uri,'b',[pfIsContainment]);
  2150. locFac.addProperty(s_uri,'a','p_ab2',s_uri,'b',[pfIsContainment]);
  2151. locFac.addProperty(s_uri,'a',s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  2152. locFac.addProperty(s_uri,'b','p_b_str',sdo_namespace,SDOTypeDefaultTypeNames[StringType], [pfIsAttribute]);
  2153. locA := locFac.createNew(s_uri,'a');
  2154. locA.setString('p_a_str','sample A'' property.');
  2155. locB := locA.createDataObject('p_ab1');
  2156. locB.setString('p_b_str','p_ab1\p_b_str value');
  2157. locB := locA.createDataObject('p_ab2');
  2158. locB.setString('p_b_str','p_ab2\p_b_str value');
  2159. locCS := locA.getChangeSummary();
  2160. locCS.beginLogging();
  2161. locA.setDataObject('p_ab1',nil);
  2162. locA.setDataObject('p_ab2',nil);
  2163. f := TSDOSerializerStreamXML.Create();
  2164. s := TSDOSerializer.Create(locFac,f);
  2165. s.save('a',locA,localFileName);
  2166. existDoc := nil;
  2167. serialDoc := nil;
  2168. ReadXMLFile(existDoc,sdoExpandLocalFileName(TestFilesPath + 'changesummary_object_delete_2_objects_same_type.xml'));
  2169. try
  2170. ReadXMLFile(serialDoc,localFileName);
  2171. CheckEquals(True, CompareNodes(existDoc,serialDoc));
  2172. finally
  2173. ReleaseDomNode(existDoc);
  2174. ReleaseDomNode(serialDoc);
  2175. end;
  2176. end;
  2177. procedure TSDOSerializer_Test.load_from_file_changesummary_object_delete_2_objects_same_type();
  2178. var
  2179. locFac, tmpFactory : ISDODataFactory;
  2180. locA, locB, locLoadedA : ISDODataObject;
  2181. locCS : ISDOChangeSummary;
  2182. f : ISDOSerializerStream;
  2183. s : ISDOSerializer;
  2184. localFileName : string;
  2185. begin
  2186. localFileName := sdoExpandLocalFileName(TestFilesPath + 'changesummary_object_delete_2_objects_same_type.xml');
  2187. locFac := TSDODataFactory.Create() as ISDODataFactory;
  2188. locFac.AddType(s_uri,'a',[]);
  2189. locFac.AddType(s_uri,'b',[]);
  2190. locFac.addProperty(s_uri,'a','p_a_str',sdo_namespace,SDOTypeDefaultTypeNames[StringType], []);
  2191. locFac.addProperty(s_uri,'a','p_ab1',s_uri,'b',[pfIsContainment]);
  2192. locFac.addProperty(s_uri,'a','p_ab2',s_uri,'b',[pfIsContainment]);
  2193. locFac.addProperty(s_uri,'a',s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  2194. locFac.addProperty(s_uri,'b','p_b_str',sdo_namespace,SDOTypeDefaultTypeNames[StringType], []);
  2195. locA := locFac.createNew(s_uri,'a');
  2196. locA.setString('p_a_str','sample A'' property.');
  2197. locB := locA.createDataObject('p_ab1');
  2198. locB.setString('p_b_str','p_ab1\p_b_str value');
  2199. locB := locA.createDataObject('p_ab2');
  2200. locB.setString('p_b_str','p_ab2\p_b_str value');
  2201. locCS := locA.getChangeSummary();
  2202. locCS.beginLogging();
  2203. locA.setDataObject('p_ab1',nil);
  2204. locA.setDataObject('p_ab2',nil);
  2205. f := TSDOSerializerStreamXML.Create();
  2206. tmpFactory := TSDOBaseDataFactory.Create();
  2207. s := TSDOSerializer.Create(tmpFactory,f);
  2208. locLoadedA := s.load(localFileName);
  2209. Check(TSDOEqualityHelper.equal(locA,locLoadedA),'Object');
  2210. Compare(
  2211. locA.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  2212. locLoadedA.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  2213. );
  2214. locA.getChangeSummary().undoChanges();
  2215. locLoadedA.getChangeSummary().undoChanges();
  2216. CheckEquals( 0, locA.getChangeSummary().getChangedDataObjects().size());
  2217. CheckEquals( 0, locLoadedA.getChangeSummary().getChangedDataObjects().size());
  2218. Check(TSDOEqualityHelper.equal(locA, locLoadedA),'Object');
  2219. end;
  2220. procedure TSDOSerializer_Test.save_to_file_changesummary_object_2_objects_same_type_del_upd();
  2221. var
  2222. locFac : ISDODataFactory;
  2223. locA, locB : ISDODataObject;
  2224. locCS : ISDOChangeSummary;
  2225. f : ISDOSerializerStream;
  2226. s : ISDOSerializer;
  2227. localFileName : string;
  2228. existDoc, serialDoc : TSDOXMLDocument;
  2229. begin
  2230. localFileName := sdoExpandLocalFileName('changesummary_object_2_objects_same_type_del_upd.xml');
  2231. locFac := TSDODataFactory.Create() as ISDODataFactory;
  2232. locFac.AddType(s_uri,'a',[]);
  2233. locFac.AddType(s_uri,'b',[]);
  2234. locFac.addProperty(s_uri,'a','p_a_str',sdo_namespace,SDOTypeDefaultTypeNames[StringType], [pfIsAttribute]);
  2235. locFac.addProperty(s_uri,'a','p_ab1',s_uri,'b',[pfIsContainment]);
  2236. locFac.addProperty(s_uri,'a','p_ab2',s_uri,'b',[pfIsContainment]);
  2237. locFac.addProperty(s_uri,'a','p_ab3',s_uri,'b',[pfIsContainment]);
  2238. locFac.addProperty(s_uri,'a',s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  2239. locFac.addProperty(s_uri,'b','p_b_str',sdo_namespace,SDOTypeDefaultTypeNames[StringType], [pfIsAttribute]);
  2240. locA := locFac.createNew(s_uri,'a');
  2241. locA.setString('p_a_str','sample A'' property.');
  2242. locB := locA.createDataObject('p_ab1');
  2243. locB.setString('p_b_str','p_ab1\p_b_str value');
  2244. locB := locA.createDataObject('p_ab2');
  2245. locB.setString('p_b_str','p_ab2\p_b_str value before');
  2246. locB := locA.createDataObject('p_ab3');
  2247. locB.setString('p_b_str','p_ab3\p_b_str value');
  2248. locCS := locA.getChangeSummary();
  2249. locCS.beginLogging();
  2250. locA.setDataObject('p_ab1',nil);
  2251. locA.setString('p_ab2/p_b_str','p_ab3\p_b_str value after');
  2252. locA.setDataObject('p_ab3',nil);
  2253. f := TSDOSerializerStreamXML.Create();
  2254. s := TSDOSerializer.Create(locFac,f);
  2255. s.save('a',locA,localFileName);
  2256. existDoc := nil;
  2257. serialDoc := nil;
  2258. ReadXMLFile(existDoc,sdoExpandLocalFileName(TestFilesPath + 'changesummary_object_2_objects_same_type_del_upd.xml'));
  2259. try
  2260. ReadXMLFile(serialDoc,localFileName);
  2261. CheckEquals(True, CompareNodes(existDoc,serialDoc));
  2262. finally
  2263. ReleaseDomNode(existDoc);
  2264. ReleaseDomNode(serialDoc);
  2265. end;
  2266. end;
  2267. procedure TSDOSerializer_Test.load_from_file_changesummary_object_2_objects_same_type_del_upd();
  2268. var
  2269. locFac, tmpFactory : ISDODataFactory;
  2270. locA, locB, locLoadedA : ISDODataObject;
  2271. locCS : ISDOChangeSummary;
  2272. f : ISDOSerializerStream;
  2273. s : ISDOSerializer;
  2274. localFileName : string;
  2275. begin
  2276. localFileName := sdoExpandLocalFileName(TestFilesPath + 'changesummary_object_2_objects_same_type_del_upd.xml');
  2277. locFac := TSDODataFactory.Create() as ISDODataFactory;
  2278. locFac.AddType(s_uri,'a',[]);
  2279. locFac.AddType(s_uri,'b',[]);
  2280. locFac.addProperty(s_uri,'a','p_a_str',sdo_namespace,SDOTypeDefaultTypeNames[StringType], []);
  2281. locFac.addProperty(s_uri,'a','p_ab1',s_uri,'b',[pfIsContainment]);
  2282. locFac.addProperty(s_uri,'a','p_ab2',s_uri,'b',[pfIsContainment]);
  2283. locFac.addProperty(s_uri,'a','p_ab3',s_uri,'b',[pfIsContainment]);
  2284. locFac.addProperty(s_uri,'a',s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  2285. locFac.addProperty(s_uri,'b','p_b_str',sdo_namespace,SDOTypeDefaultTypeNames[StringType], []);
  2286. locA := locFac.createNew(s_uri,'a');
  2287. locA.setString('p_a_str','sample A'' property.');
  2288. locB := locA.createDataObject('p_ab1');
  2289. locB.setString('p_b_str','p_ab1\p_b_str value');
  2290. locB := locA.createDataObject('p_ab2');
  2291. locB.setString('p_b_str','p_ab2\p_b_str value before');
  2292. locB := locA.createDataObject('p_ab3');
  2293. locB.setString('p_b_str','p_ab3\p_b_str value');
  2294. locCS := locA.getChangeSummary();
  2295. locCS.beginLogging();
  2296. locA.setDataObject('p_ab1',nil);
  2297. locA.setString('p_ab2/p_b_str','p_ab3\p_b_str value after');
  2298. locA.setDataObject('p_ab3',nil);
  2299. f := TSDOSerializerStreamXML.Create();
  2300. tmpFactory := TSDOBaseDataFactory.Create();
  2301. s := TSDOSerializer.Create(tmpFactory,f);
  2302. locLoadedA := s.load(localFileName);
  2303. Check(TSDOEqualityHelper.equal(locA,locLoadedA),'Object');
  2304. Compare(
  2305. locA.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  2306. locLoadedA.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  2307. );
  2308. locA.getChangeSummary().undoChanges();
  2309. locLoadedA.getChangeSummary().undoChanges();
  2310. CheckEquals( 0, locA.getChangeSummary().getChangedDataObjects().size());
  2311. CheckEquals( 0, locLoadedA.getChangeSummary().getChangedDataObjects().size());
  2312. Check(TSDOEqualityHelper.equal(locA, locLoadedA),'Object');
  2313. end;
  2314. procedure TSDOSerializer_Test.save_to_file_changesummary_prop_list_object();
  2315. function create_employee(
  2316. const AFac : ISDODataFactory;
  2317. const AName, ASN : TSDOString;
  2318. const AManager : Boolean
  2319. ) : ISDODataObject;
  2320. begin
  2321. Result := AFac.createNew(s_uri, s_EmployeeType);
  2322. Result.setString(s_name, AName);
  2323. Result.setString(s_sn, ASN);
  2324. Result.setBoolean(s_manager, AManager);
  2325. end;
  2326. var
  2327. locFac : ISDODataFactory;
  2328. locDep, e1, e2 : ISDODataObject;
  2329. ls : ISDODataObjectList;
  2330. locCS : ISDOChangeSummary;
  2331. f : ISDOSerializerStream;
  2332. s : ISDOSerializer;
  2333. localFileName : string;
  2334. existDoc, serialDoc : TSDOXMLDocument;
  2335. begin
  2336. localFileName := sdoExpandLocalFileName('changesummary_prop_list_object.xml');
  2337. locFac := TSDODataFactory.Create() as ISDODataFactory;
  2338. locFac.AddType(s_uri,s_EmployeeType,[]);
  2339. locFac.addProperty(s_uri, s_EmployeeType,'name',sdo_namespace,'string',[pfIsAttribute]);
  2340. locFac.addProperty(s_uri, s_EmployeeType,'SN',sdo_namespace,'string',[pfIsAttribute]);
  2341. locFac.addProperty(s_uri, s_EmployeeType,'manager',sdo_namespace,'boolean',[pfIsAttribute]);
  2342. locFac.AddType(s_uri,s_DepartmentType,[]);
  2343. locFac.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  2344. locFac.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  2345. locFac.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[pfIsAttribute]);
  2346. locFac.addProperty(s_uri,s_DepartmentType,s_list_object,s_uri,s_EmployeeType,[pfIsMany,pfIsContainment]);
  2347. locFac.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  2348. locDep := locFac.createNew(s_uri,s_DepartmentType);
  2349. locDep.setString(s_name,'R & D');
  2350. locDep.setString(s_location,'Ouaga, BF');
  2351. locDep.setInteger(s_number,1210);
  2352. ls := locDep.getList(s_list_object);
  2353. ls.append(create_employee(locFac,'Inoussa O.', '0001', True));
  2354. ls.append(create_employee(locFac,'Kis O.', '0002', False));
  2355. ls.append(create_employee(locFac,'WST', '0003', False));
  2356. locCS := locDep.getChangeSummary();
  2357. locCS.beginLogging();
  2358. locDep.setString(s_name,'R & D Department');
  2359. locDep.setString(s_location,'Ouaga 01, BF');
  2360. e1 := create_employee(locFac,'FPC', '0010', False);
  2361. e2 := create_employee(locFac,'Lazarus', '0011', False);
  2362. ls.setDataObject(0,e1);
  2363. ls.append(create_employee(locFac,'FPC 2 ', '0020', True));
  2364. ls.insert(3,create_employee(locFac,'FPC 5', '0050', False));
  2365. ls.append(create_employee(locFac,'FPC 3', '0030', False));
  2366. ls.setDataObject(1,e2);
  2367. ls.delete(0);
  2368. ls.delete(1);
  2369. ls.append(create_employee(locFac,'FPC 4', '0040', True));
  2370. f := TSDOSerializerStreamXML.Create();
  2371. s := TSDOSerializer.Create(locFac,f);
  2372. s.save(s_DepartmentType,locDep,localFileName);
  2373. existDoc := nil;
  2374. serialDoc := nil;
  2375. ReadXMLFile(existDoc,sdoExpandLocalFileName(TestFilesPath + 'changesummary_prop_list_object.xml'));
  2376. try
  2377. ReadXMLFile(serialDoc,localFileName);
  2378. CheckEquals(True, CompareNodes(existDoc,serialDoc));
  2379. finally
  2380. ReleaseDomNode(existDoc);
  2381. ReleaseDomNode(serialDoc);
  2382. end;
  2383. end;
  2384. procedure TSDOSerializer_Test.load_from_file_changesummary_prop_list_object();
  2385. function create_employee(
  2386. const AFac : ISDODataFactory;
  2387. const AName, ASN : TSDOString;
  2388. const AManager : Boolean
  2389. ) : ISDODataObject;
  2390. begin
  2391. Result := AFac.createNew(s_uri, s_EmployeeType);
  2392. Result.setString(s_name, AName);
  2393. Result.setString(s_sn, ASN);
  2394. Result.setBoolean(s_manager, AManager);
  2395. end;
  2396. var
  2397. locFac, tmpFactory : ISDODataFactory;
  2398. locDep, locLoadedDep, e1, e2 : ISDODataObject;
  2399. ls : ISDODataObjectList;
  2400. locCS : ISDOChangeSummary;
  2401. f : ISDOSerializerStream;
  2402. s : ISDOSerializer;
  2403. localFileName : string;
  2404. begin
  2405. locFac := TSDODataFactory.Create() as ISDODataFactory;
  2406. locFac.AddType(s_uri,s_EmployeeType,[]);
  2407. locFac.addProperty(s_uri, s_EmployeeType,'name',sdo_namespace,'string',[]);
  2408. locFac.addProperty(s_uri, s_EmployeeType,'SN',sdo_namespace,'string',[]);
  2409. locFac.addProperty(s_uri, s_EmployeeType,'manager',sdo_namespace,'boolean',[]);
  2410. locFac.AddType(s_uri,s_DepartmentType,[]);
  2411. locFac.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  2412. locFac.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  2413. locFac.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[]);
  2414. locFac.addProperty(s_uri,s_DepartmentType,s_list_object,s_uri,s_EmployeeType,[pfIsMany,pfIsContainment]);
  2415. locFac.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  2416. locDep := locFac.createNew(s_uri,s_DepartmentType);
  2417. locDep.setString(s_name,'R & D');
  2418. locDep.setString(s_location,'Ouaga, BF');
  2419. locDep.setInteger(s_number,1210);
  2420. ls := locDep.getList(s_list_object);
  2421. ls.append(create_employee(locFac,'Inoussa O.', '0001', True));
  2422. ls.append(create_employee(locFac,'Kis O.', '0002', False));
  2423. ls.append(create_employee(locFac,'WST', '0003', False));
  2424. locCS := locDep.getChangeSummary();
  2425. locCS.beginLogging();
  2426. locDep.setString(s_name,'R & D Department');
  2427. locDep.setString(s_location,'Ouaga 01, BF');
  2428. e1 := create_employee(locFac,'FPC', '0010', False);
  2429. e2 := create_employee(locFac,'Lazarus', '0011', False);
  2430. ls.setDataObject(0,e1);
  2431. ls.append(create_employee(locFac,'FPC 2 ', '0020', True));
  2432. ls.insert(3,create_employee(locFac,'FPC 5', '0050', False));
  2433. ls.append(create_employee(locFac,'FPC 3', '0030', False));
  2434. ls.setDataObject(1,e2);
  2435. ls.delete(0);
  2436. ls.delete(1);
  2437. ls.append(create_employee(locFac,'FPC 4', '0040', True));
  2438. localFileName := sdoExpandLocalFileName(TestFilesPath + 'changesummary_prop_list_object.xml');
  2439. f := TSDOSerializerStreamXML.Create();
  2440. tmpFactory := TSDOBaseDataFactory.Create();
  2441. s := TSDOSerializer.Create(tmpFactory,f);
  2442. locLoadedDep := s.load(localFileName);
  2443. locDep.getChangeSummary().getOldValues(locDep);
  2444. locLoadedDep.getChangeSummary().getOldValues(locLoadedDep);
  2445. Check(TSDOEqualityHelper.equal(locDep,locLoadedDep),'Object');
  2446. {Compare(
  2447. locDep.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  2448. locLoadedDep.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  2449. );}
  2450. locDep.getChangeSummary().undoChanges();
  2451. locLoadedDep.getChangeSummary().undoChanges();
  2452. CheckEquals( 0, locDep.getChangeSummary().getChangedDataObjects().size());
  2453. CheckEquals( 0, locLoadedDep.getChangeSummary().getChangedDataObjects().size());
  2454. Check(TSDOEqualityHelper.equal(locDep, locLoadedDep),'Object');
  2455. end;
  2456. procedure TSDOSerializer_Test.save_to_file_changesummary_prop_list_bool();
  2457. var
  2458. locFac : ISDODataFactory;
  2459. locDep : ISDODataObject;
  2460. ls : ISDODataObjectList;
  2461. locCS : ISDOChangeSummary;
  2462. f : ISDOSerializerStream;
  2463. s : ISDOSerializer;
  2464. localFileName : string;
  2465. existDoc, serialDoc : TSDOXMLDocument;
  2466. begin
  2467. localFileName := sdoExpandLocalFileName('changesummary_prop_list_bool.xml');
  2468. locFac := TSDODataFactory.Create() as ISDODataFactory;
  2469. locFac.AddType(s_uri,s_DepartmentType,[]);
  2470. locFac.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  2471. locFac.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  2472. locFac.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[pfIsAttribute]);
  2473. locFac.addProperty(s_uri,s_DepartmentType,s_list_bool,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType],[pfIsMany]);
  2474. locFac.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  2475. locDep := locFac.createNew(s_uri,s_DepartmentType);
  2476. locDep.setString(s_name,'R & D');
  2477. locDep.setString(s_location,'Ouaga, BF');
  2478. locDep.setInteger(s_number,1210);
  2479. ls := locDep.getList(s_list_bool);
  2480. ls.append(False);
  2481. ls.append(True);
  2482. ls.append(False);
  2483. locCS := locDep.getChangeSummary();
  2484. locCS.beginLogging();
  2485. locDep.setString(s_name,'R & D Department');
  2486. locDep.setString(s_location,'Ouaga 01, BF');
  2487. ls.setBoolean(0,True);
  2488. ls.append(True);
  2489. ls.append(True);
  2490. ls.setBoolean(1,False);
  2491. ls.delete(0);
  2492. ls.delete(1);
  2493. ls.insert(2, False);
  2494. ls.append(False);
  2495. f := TSDOSerializerStreamXML.Create();
  2496. s := TSDOSerializer.Create(locFac,f);
  2497. s.save(s_DepartmentType,locDep,localFileName);
  2498. existDoc := nil;
  2499. serialDoc := nil;
  2500. ReadXMLFile(existDoc,sdoExpandLocalFileName(TestFilesPath + 'changesummary_prop_list_bool.xml'));
  2501. try
  2502. ReadXMLFile(serialDoc,localFileName);
  2503. CheckEquals(True, CompareNodes(existDoc,serialDoc));
  2504. finally
  2505. ReleaseDomNode(existDoc);
  2506. ReleaseDomNode(serialDoc);
  2507. end;
  2508. end;
  2509. procedure TSDOSerializer_Test.load_from_file_changesummary_prop_list_bool();
  2510. var
  2511. locFac, tmpFactory : ISDODataFactory;
  2512. locDep, locLoadedDep : ISDODataObject;
  2513. ls : ISDODataObjectList;
  2514. locCS : ISDOChangeSummary;
  2515. f : ISDOSerializerStream;
  2516. s : ISDOSerializer;
  2517. localFileName : string;
  2518. begin
  2519. locFac := TSDODataFactory.Create() as ISDODataFactory;
  2520. locFac.AddType(s_uri,s_DepartmentType,[]);
  2521. locFac.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  2522. locFac.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  2523. locFac.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[]);
  2524. locFac.addProperty(s_uri,s_DepartmentType,s_list_bool,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType],[pfIsMany]);
  2525. locFac.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  2526. locDep := locFac.createNew(s_uri,s_DepartmentType);
  2527. locDep.setString(s_name,'R & D');
  2528. locDep.setString(s_location,'Ouaga, BF');
  2529. locDep.setInteger(s_number,1210);
  2530. ls := locDep.getList(s_list_bool);
  2531. ls.append(False);
  2532. ls.append(True);
  2533. ls.append(False);
  2534. locCS := locDep.getChangeSummary();
  2535. locCS.beginLogging();
  2536. locDep.setString(s_name,'R & D Department');
  2537. locDep.setString(s_location,'Ouaga 01, BF');
  2538. ls.setBoolean(0,True);
  2539. ls.append(True);
  2540. ls.append(True);
  2541. ls.setBoolean(1,False);
  2542. ls.delete(0);
  2543. ls.delete(1);
  2544. ls.insert(2, False);
  2545. ls.append(False);
  2546. localFileName := sdoExpandLocalFileName(TestFilesPath + 'changesummary_prop_list_bool.xml');
  2547. f := TSDOSerializerStreamXML.Create();
  2548. tmpFactory := TSDOBaseDataFactory.Create();
  2549. s := TSDOSerializer.Create(tmpFactory,f);
  2550. locLoadedDep := s.load(localFileName);
  2551. Check(TSDOEqualityHelper.equal(locDep, locLoadedDep),'Object');
  2552. Compare(
  2553. locDep.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  2554. locLoadedDep.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  2555. );
  2556. end;
  2557. procedure TSDOSerializer_Test.save_to_file_changesummary_prop_list_string();
  2558. var
  2559. locFac : ISDODataFactory;
  2560. locDep : ISDODataObject;
  2561. ls : ISDODataObjectList;
  2562. locCS : ISDOChangeSummary;
  2563. f : ISDOSerializerStream;
  2564. s : ISDOSerializer;
  2565. localFileName : string;
  2566. existDoc, serialDoc : TSDOXMLDocument;
  2567. begin
  2568. localFileName := sdoExpandLocalFileName('changesummary_prop_list_string.xml');
  2569. locFac := TSDODataFactory.Create() as ISDODataFactory;
  2570. locFac.AddType(s_uri,s_DepartmentType,[]);
  2571. locFac.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  2572. locFac.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  2573. locFac.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[pfIsAttribute]);
  2574. locFac.addProperty(s_uri,s_DepartmentType,s_list_string,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsMany]);
  2575. locFac.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  2576. locDep := locFac.createNew(s_uri,s_DepartmentType);
  2577. locDep.setString(s_name,'R & D');
  2578. locDep.setString(s_location,'Ouaga, BF');
  2579. locDep.setInteger(s_number,1210);
  2580. ls := locDep.getList(s_list_string);
  2581. ls.append('wst');
  2582. ls.append('sdo');
  2583. ls.append('fpc-lazarus');
  2584. locCS := locDep.getChangeSummary();
  2585. locCS.beginLogging();
  2586. locDep.setString(s_name,'R & D Department');
  2587. locDep.setString(s_location,'Ouaga 01, BF');
  2588. ls.setString(0,'azerty');
  2589. ls.append('Ouagadougou');
  2590. ls.append('BF');
  2591. ls.setString(1,'kis');
  2592. ls.delete(0);
  2593. ls.delete(1);
  2594. ls.insert(2, '107612');
  2595. ls.append('this is a multi words text. Lets test it!');
  2596. f := TSDOSerializerStreamXML.Create();
  2597. s := TSDOSerializer.Create(locFac,f);
  2598. s.save(s_DepartmentType,locDep,localFileName);
  2599. existDoc := nil;
  2600. serialDoc := nil;
  2601. ReadXMLFile(existDoc,sdoExpandLocalFileName(TestFilesPath + 'changesummary_prop_list_string.xml'));
  2602. try
  2603. ReadXMLFile(serialDoc,localFileName);
  2604. CheckEquals(True, CompareNodes(existDoc,serialDoc));
  2605. finally
  2606. ReleaseDomNode(existDoc);
  2607. ReleaseDomNode(serialDoc);
  2608. end;
  2609. end;
  2610. procedure TSDOSerializer_Test.load_from_file_changesummary_prop_list_string();
  2611. var
  2612. locFac, tmpFactory : ISDODataFactory;
  2613. locDep, locLoadedDep : ISDODataObject;
  2614. ls : ISDODataObjectList;
  2615. locCS : ISDOChangeSummary;
  2616. f : ISDOSerializerStream;
  2617. s : ISDOSerializer;
  2618. localFileName : string;
  2619. begin
  2620. locFac := TSDODataFactory.Create() as ISDODataFactory;
  2621. locFac.AddType(s_uri,s_DepartmentType,[]);
  2622. locFac.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  2623. locFac.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  2624. locFac.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[]);
  2625. locFac.addProperty(s_uri,s_DepartmentType,s_list_string,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsMany]);
  2626. locFac.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  2627. locDep := locFac.createNew(s_uri,s_DepartmentType);
  2628. locDep.setString(s_name,'R & D');
  2629. locDep.setString(s_location,'Ouaga, BF');
  2630. locDep.setInteger(s_number,1210);
  2631. ls := locDep.getList(s_list_string);
  2632. ls.append('wst');
  2633. ls.append('sdo');
  2634. ls.append('fpc-lazarus');
  2635. locCS := locDep.getChangeSummary();
  2636. locCS.beginLogging();
  2637. locDep.setString(s_name,'R & D Department');
  2638. locDep.setString(s_location,'Ouaga 01, BF');
  2639. ls.setString(0,'azerty');
  2640. ls.append('Ouagadougou');
  2641. ls.append('BF');
  2642. ls.setString(1,'kis');
  2643. ls.delete(0);
  2644. ls.delete(1);
  2645. ls.insert(2, '107612');
  2646. ls.append('this is a multi words text. Lets test it!');
  2647. localFileName := sdoExpandLocalFileName(TestFilesPath + 'changesummary_prop_list_string.xml');
  2648. f := TSDOSerializerStreamXML.Create();
  2649. tmpFactory := TSDOBaseDataFactory.Create();
  2650. s := TSDOSerializer.Create(tmpFactory,f);
  2651. locLoadedDep := s.load(localFileName);
  2652. Check(TSDOEqualityHelper.equal(locDep, locLoadedDep),'Object');
  2653. Compare(
  2654. locDep.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  2655. locLoadedDep.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  2656. );
  2657. end;
  2658. procedure TSDOSerializer_Test.save_to_file_changesummary_prop_list_object_nested();
  2659. function create_employee(
  2660. const AFac : ISDODataFactory;
  2661. const AName, ASN : TSDOString;
  2662. const AManager : Boolean;
  2663. const AJobCount : Integer
  2664. ) : ISDODataObject;
  2665. var
  2666. jb : ISDODataObject;
  2667. k : Integer;
  2668. begin
  2669. Result := AFac.createNew(s_uri, s_EmployeeType);
  2670. Result.setString(s_name, AName);
  2671. Result.setString(s_sn, ASN);
  2672. Result.setBoolean(s_manager, AManager);
  2673. for k := 0 to Pred(AJobCount) do begin
  2674. jb := Result.createDataObject('jobs');
  2675. jb.setString('title', Format('%s''s job #%d',[AName,k]));
  2676. jb.setByte('MaxEmployeeCount',( k * AJobCount ) mod High(TSDOByte));
  2677. Result.getList('jobs').append(jb);
  2678. end;
  2679. end;
  2680. var
  2681. locFac : ISDODataFactory;
  2682. locDep, e1, e2 : ISDODataObject;
  2683. ls : ISDODataObjectList;
  2684. locCS : ISDOChangeSummary;
  2685. f : ISDOSerializerStream;
  2686. s : ISDOSerializer;
  2687. localFileName : string;
  2688. existDoc, serialDoc : TSDOXMLDocument;
  2689. begin
  2690. localFileName := sdoExpandLocalFileName('changesummary_prop_list_object_nested.xml');
  2691. locFac := TSDODataFactory.Create() as ISDODataFactory;
  2692. locFac.AddType(s_uri,'job',[]);
  2693. locFac.addProperty(s_uri, 'job','title',sdo_namespace,'string',[pfIsAttribute]);
  2694. locFac.addProperty(s_uri, 'job','MaxEmployeeCount',sdo_namespace,'byte',[pfIsAttribute]);
  2695. locFac.AddType(s_uri,s_EmployeeType,[]);
  2696. locFac.addProperty(s_uri, s_EmployeeType,'name',sdo_namespace,'string',[pfIsAttribute]);
  2697. locFac.addProperty(s_uri, s_EmployeeType,'SN',sdo_namespace,'string',[pfIsAttribute]);
  2698. locFac.addProperty(s_uri, s_EmployeeType,'manager',sdo_namespace,'boolean',[pfIsAttribute]);
  2699. locFac.addProperty(s_uri, s_EmployeeType,'jobs',s_uri,'job',[pfIsMany,pfIsContainment]);
  2700. locFac.AddType(s_uri,s_DepartmentType,[]);
  2701. locFac.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  2702. locFac.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  2703. locFac.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[pfIsAttribute]);
  2704. locFac.addProperty(s_uri,s_DepartmentType,s_list_object,s_uri,s_EmployeeType,[pfIsMany,pfIsContainment]);
  2705. locFac.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  2706. locDep := locFac.createNew(s_uri,s_DepartmentType);
  2707. locDep.setString(s_name,'R & D');
  2708. locDep.setString(s_location,'Ouaga, BF');
  2709. locDep.setInteger(s_number,1210);
  2710. ls := locDep.getList(s_list_object);
  2711. ls.append(create_employee(locFac,'Inoussa O.', '0001', True,3));
  2712. ls.append(create_employee(locFac,'Kis O.', '0002', False,2));
  2713. ls.append(create_employee(locFac,'WST', '0003', False,4));
  2714. locCS := locDep.getChangeSummary();
  2715. locCS.beginLogging();
  2716. locDep.setString(s_name,'R & D Department');
  2717. locDep.setString(s_location,'Ouaga 01, BF');
  2718. e1 := create_employee(locFac,'FPC', '0010', False,1);
  2719. e2 := create_employee(locFac,'Lazarus', '0011', False,3);
  2720. ls.setDataObject(0,e1);
  2721. ls.append(create_employee(locFac,'FPC 2 ', '0020', True,0));
  2722. ls.insert(3,create_employee(locFac,'FPC 5', '0050', False,1));
  2723. ls.append(create_employee(locFac,'FPC 3', '0030', False,0));
  2724. ls.setDataObject(1,e2);
  2725. ls.delete(0);
  2726. ls.delete(1);
  2727. ls.append(create_employee(locFac,'FPC 4', '0040', True,1));
  2728. f := TSDOSerializerStreamXML.Create();
  2729. s := TSDOSerializer.Create(locFac,f);
  2730. s.save(s_DepartmentType,locDep,localFileName);
  2731. existDoc := nil;
  2732. serialDoc := nil;
  2733. ReadXMLFile(existDoc,sdoExpandLocalFileName(TestFilesPath + 'changesummary_prop_list_object_nested.xml'));
  2734. try
  2735. ReadXMLFile(serialDoc,localFileName);
  2736. CheckEquals(True, CompareNodes(existDoc,serialDoc));
  2737. finally
  2738. ReleaseDomNode(existDoc);
  2739. ReleaseDomNode(serialDoc);
  2740. end;
  2741. end;
  2742. procedure TSDOSerializer_Test.load_from_file_changesummary_prop_list_object_nested();
  2743. function create_employee(
  2744. const AFac : ISDODataFactory;
  2745. const AName, ASN : TSDOString;
  2746. const AManager : Boolean;
  2747. const AJobCount : Integer
  2748. ) : ISDODataObject;
  2749. var
  2750. jb : ISDODataObject;
  2751. k : Integer;
  2752. begin
  2753. Result := AFac.createNew(s_uri, s_EmployeeType);
  2754. Result.setString(s_name, AName);
  2755. Result.setString(s_sn, ASN);
  2756. Result.setBoolean(s_manager, AManager);
  2757. for k := 0 to Pred(AJobCount) do begin
  2758. jb := Result.createDataObject('jobs');
  2759. jb.setString('title', Format('%s''s job #%d',[AName,k]));
  2760. jb.setByte('MaxEmployeeCount',( k * AJobCount ) mod High(TSDOByte));
  2761. Result.getList('jobs').append(jb);
  2762. end;
  2763. end;
  2764. var
  2765. locFac, tmpFactory : ISDODataFactory;
  2766. locDep, e1, e2, locLoadedDep : ISDODataObject;
  2767. ls : ISDODataObjectList;
  2768. locCS : ISDOChangeSummary;
  2769. f : ISDOSerializerStream;
  2770. s : ISDOSerializer;
  2771. localFileName : string;
  2772. begin
  2773. locFac := TSDODataFactory.Create() as ISDODataFactory;
  2774. locFac.AddType(s_uri,'job',[]);
  2775. locFac.addProperty(s_uri, 'job','title',sdo_namespace,'string',[]);
  2776. locFac.addProperty(s_uri, 'job','MaxEmployeeCount',sdo_namespace,'byte',[]);
  2777. locFac.AddType(s_uri,s_EmployeeType,[]);
  2778. locFac.addProperty(s_uri, s_EmployeeType,'name',sdo_namespace,'string',[]);
  2779. locFac.addProperty(s_uri, s_EmployeeType,'SN',sdo_namespace,'string',[]);
  2780. locFac.addProperty(s_uri, s_EmployeeType,'manager',sdo_namespace,'boolean',[]);
  2781. locFac.addProperty(s_uri, s_EmployeeType,'jobs',s_uri,'job',[pfIsMany,pfIsContainment]);
  2782. locFac.AddType(s_uri,s_DepartmentType,[]);
  2783. locFac.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  2784. locFac.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  2785. locFac.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[]);
  2786. locFac.addProperty(s_uri,s_DepartmentType,s_list_object,s_uri,s_EmployeeType,[pfIsMany,pfIsContainment]);
  2787. locFac.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  2788. locDep := locFac.createNew(s_uri,s_DepartmentType);
  2789. locDep.setString(s_name,'R & D');
  2790. locDep.setString(s_location,'Ouaga, BF');
  2791. locDep.setInteger(s_number,1210);
  2792. ls := locDep.getList(s_list_object);
  2793. ls.append(create_employee(locFac,'Inoussa O.', '0001', True,3));
  2794. ls.append(create_employee(locFac,'Kis O.', '0002', False,2));
  2795. ls.append(create_employee(locFac,'WST', '0003', False,4));
  2796. locCS := locDep.getChangeSummary();
  2797. locCS.beginLogging();
  2798. locDep.setString(s_name,'R & D Department');
  2799. locDep.setString(s_location,'Ouaga 01, BF');
  2800. e1 := create_employee(locFac,'FPC', '0010', False,1);
  2801. e2 := create_employee(locFac,'Lazarus', '0011', False,3);
  2802. ls.setDataObject(0,e1);
  2803. ls.append(create_employee(locFac,'FPC 2 ', '0020', True,0));
  2804. ls.insert(3,create_employee(locFac,'FPC 5', '0050', False,1));
  2805. ls.append(create_employee(locFac,'FPC 3', '0030', False,0));
  2806. ls.setDataObject(1,e2);
  2807. ls.delete(0);
  2808. ls.delete(1);
  2809. ls.append(create_employee(locFac,'FPC 4', '0040', True,1));
  2810. localFileName := sdoExpandLocalFileName(TestFilesPath + 'changesummary_prop_list_object_nested.xml');
  2811. f := TSDOSerializerStreamXML.Create();
  2812. tmpFactory := TSDOBaseDataFactory.Create();
  2813. s := TSDOSerializer.Create(tmpFactory,f);
  2814. locLoadedDep := s.load(localFileName);
  2815. locDep.getChangeSummary().getOldValues(locDep);
  2816. locLoadedDep.getChangeSummary().getOldValues(locLoadedDep);
  2817. Check(TSDOEqualityHelper.equal(locDep,locLoadedDep),'Object');
  2818. {Compare(
  2819. locDep.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  2820. locLoadedDep.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  2821. );}
  2822. locDep.getChangeSummary().undoChanges();
  2823. locLoadedDep.getChangeSummary().undoChanges();
  2824. CheckEquals( 0, locDep.getChangeSummary().getChangedDataObjects().size());
  2825. CheckEquals( 0, locLoadedDep.getChangeSummary().getChangedDataObjects().size());
  2826. Check(TSDOEqualityHelper.equal(locDep, locLoadedDep),'Object');
  2827. end;
  2828. procedure TSDOSerializer_Test.save_to_and_load_file_ref_prop_crash_1();
  2829. var
  2830. locFac : ISDODataFactory;
  2831. locPL, locPL1, locPJ0, locPJ1, locP1, locP2, locP3 : ISDODataObject;
  2832. locCS : ISDOChangeSummary;
  2833. serializer : ISDOSerializer;
  2834. begin
  2835. locFac := TSDODataFactory.Create() as ISDODataFactory;
  2836. locFac.AddType(s_uri,'ProjectList',[]);
  2837. locFac.AddType(s_uri,'ProjectType',[]);
  2838. locFac.AddType(s_uri,'Person',[]);
  2839. locFac.addProperty(s_uri,'ProjectList','Project',s_uri,'ProjectType',[pfIsContainment,pfIsMany]);
  2840. locFac.addProperty(s_uri,'ProjectList',s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly]);
  2841. locFac.addProperty(s_uri,'ProjectType','Member',s_uri,'Person',[pfIsContainment,pfIsMany]);
  2842. locFac.addProperty(s_uri,'Person','Manager',s_uri,'Person',[]);
  2843. locFac.addProperty(s_uri,'Person','Name',sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  2844. locPL := locFac.createNew(s_uri,'ProjectList');
  2845. locCS := locPL.getChangeSummary();
  2846. locCS.endLogging();
  2847. locPJ0 := locPL.createDataObject('Project');
  2848. locPL.getList('Project').append(locPJ0);
  2849. locPJ1 := locPL.createDataObject('Project');
  2850. locPL.getList('Project').append(locPJ1);
  2851. locP1 := locPJ1.createDataObject('Member');
  2852. locPJ1.getList('Member').append(locP1);
  2853. locP1.setString('Name', 'P1 person');
  2854. locP2 := locPJ1.createDataObject('Member');
  2855. locPJ1.getList('Member').append(locP2);
  2856. locP2.setString('Name', 'P2 person');
  2857. locP2.setDataObject('Manager', locPJ1.getDataObject('Member[Name="P1 person"]'));
  2858. locP3 := locPJ1.createDataObject('Member');
  2859. locPJ1.getList('Member').append(locP3);
  2860. locP3.setString('Name', 'P3 person');
  2861. locP1.setDataObject('Manager', locPJ1.getDataObject('Member[Name="P3 person"]'));
  2862. locCS.beginLogging();
  2863. locPL.getList('Project').delete(1);
  2864. serializer := TSDOSerializer.Create(locFac,TSDOSerializerStreamXML.Create());
  2865. serializer.save('ProjectList',locPL,'save_to_and_load_file_ref_prop_crash_1.xml');
  2866. serializer := TSDOSerializer.Create(locFac,TSDOSerializerStreamXML.Create());
  2867. locPL1 := serializer.load('save_to_and_load_file_ref_prop_crash_1.xml');
  2868. end;
  2869. procedure TSDOSerializer_Test.save_to_and_load_file_ref_prop_crash_2();
  2870. var
  2871. locFac : ISDODataFactory;
  2872. locPL, locPL1, locPJ0, locPJ1, locP1, locP2, locP3 : ISDODataObject;
  2873. locCS : ISDOChangeSummary;
  2874. serializer : ISDOSerializer;
  2875. begin
  2876. locFac := TSDODataFactory.Create() as ISDODataFactory;
  2877. locFac.AddType(s_uri,'ProjectList',[]);
  2878. locFac.AddType(s_uri,'ProjectType',[]);
  2879. locFac.AddType(s_uri,'Person',[]);
  2880. locFac.addProperty(s_uri,'ProjectList','Project',s_uri,'ProjectType',[pfIsContainment,pfIsMany]);
  2881. locFac.addProperty(s_uri,'ProjectList',s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly]);
  2882. locFac.addProperty(s_uri,'ProjectType','Member',s_uri,'Person',[pfIsContainment,pfIsMany]);
  2883. locFac.addProperty(s_uri,'Person','Manager',s_uri,'Person',[]);
  2884. locFac.addProperty(s_uri,'Person','Name',sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  2885. locPL := locFac.createNew(s_uri,'ProjectList');
  2886. locCS := locPL.getChangeSummary();
  2887. locCS.endLogging();
  2888. locPJ0 := locPL.createDataObject('Project');
  2889. locPL.getList('Project').append(locPJ0);
  2890. locPJ1 := locPL.createDataObject('Project');
  2891. locPL.getList('Project').append(locPJ1);
  2892. locP1 := locPJ1.createDataObject('Member');
  2893. locPJ1.getList('Member').append(locP1);
  2894. locP1.setString('Name', 'P1 person');
  2895. locP2 := locPJ1.createDataObject('Member');
  2896. locPJ1.getList('Member').append(locP2);
  2897. locP2.setString('Name', 'P2 person');
  2898. locP2.setDataObject('Manager', locPJ1.getDataObject('Member[Name="P1 person"]'));
  2899. locCS.beginLogging();
  2900. locP3 := locPJ1.createDataObject('Member');
  2901. locPJ1.getList('Member').append(locP3);
  2902. locP3.setString('Name', 'P3 person');
  2903. locP1.setDataObject('Manager', locPJ1.getDataObject('Member[Name="P3 person"]'));
  2904. locPL.getList('Project').delete(1);
  2905. serializer := TSDOSerializer.Create(locFac,TSDOSerializerStreamXML.Create());
  2906. serializer.save('ProjectList',locPL,'save_to_and_load_file_ref_prop_crash_2.xml');
  2907. serializer := TSDOSerializer.Create(locFac,TSDOSerializerStreamXML.Create());
  2908. locPL1 := serializer.load('save_to_and_load_file_ref_prop_crash_2.xml');
  2909. end;
  2910. procedure TSDOSerializer_Test.load_from_file_reference_property();
  2911. var
  2912. locFac : ISDODataFactory;
  2913. locLoadedObj : ISDODataObject;
  2914. s : ISDOSerializer;
  2915. localFileName : string;
  2916. locType : ISDOType;
  2917. p : ISDOProperty;
  2918. projObj, user1, user2, man : ISDODataObject;
  2919. begin
  2920. locFac := TSDODataFactory.Create() as ISDODataFactory;
  2921. localFileName := sdoExpandLocalFileName(TestFilesPath + 'load_from_file_reference_property.xml');
  2922. s := TSDOSerializer.Create(locFac,TSDOSerializerStreamXML.Create());
  2923. locLoadedObj := s.load(localFileName);
  2924. locType := locFac.getType('uri:sample','ProjectType');
  2925. Check(( locType <> nil ),'ProjectType');
  2926. p := locType.getProperty('ProjectLeader');
  2927. Check(p <> nil,'ProjectLeader');
  2928. Check(p.isReference(),'"ProjectLeader" should be a "Reference" property');
  2929. Check(p.getType() = locFac.getType('uri:sample','Person'),'"ProjectLeader" should be a "Person" type property');
  2930. Check(locLoadedObj <> nil,'ProjectList');
  2931. projObj := locLoadedObj.getDataObject('Project[ProjectName="WST"]');
  2932. Check(projObj <> nil,'Project');
  2933. user1 := projObj.getDataObject('Member[Name="wst user 1"]');
  2934. Check(user1 <> nil,'Member[Name="wst user 1"]');
  2935. user2 := projObj.getDataObject('Member[Name="wst user 2"]');
  2936. Check(user1 <> nil,'Member[Name="wst user 2"]');
  2937. man := projObj.getDataObject('Member[Name="Inoussa O."]');
  2938. Check(user1 <> nil,'Member[Name="Inoussa O."]');
  2939. Check( man = projObj.getDataObject('ProjectLeader'), 'ProjectLeader');
  2940. Check( man = user2.getDataObject('Manager'), 'user Manager');
  2941. end;
  2942. procedure TSDOSerializer_Test.save_object_open_type();
  2943. var
  2944. fact : ISDODataFactory;
  2945. dst, row : ISDODataObject;
  2946. ser : ISDOSerializer;
  2947. stream : TMemoryStream;
  2948. existDoc, serialDoc : TSDOXMLDocument;
  2949. begin
  2950. fact := TSDODataFactory.Create() as ISDODataFactory;
  2951. fact.AddType(s_uri,'Datarow',[tfIsOpen]);
  2952. fact.AddType(s_uri,'Dataset',[tfIsOpen]);
  2953. fact.addProperty(s_uri,'Dataset','rows',s_uri,'Datarow',[pfIsMany,pfIsContainment]);
  2954. dst := fact.createNew(s_uri,'Dataset');
  2955. row := dst.createDataObject('rows');
  2956. row.setString('Name','SDO-Pascal');
  2957. row.setString('Description','Object Pascal implementation of SDO');
  2958. row.setInteger('Order',1);
  2959. dst.getList('rows').append(row);
  2960. row := dst.createDataObject('rows');
  2961. row.setString('Name','WST');
  2962. row.setString('Description','Object Pascal Web Services Toolkit');
  2963. row.setInteger('Order',2);
  2964. dst.getList('rows').append(row);
  2965. existDoc := nil;
  2966. serialDoc := nil;
  2967. ser := TSDOSerializer.Create(fact,TSDOSerializerStreamXML.Create());
  2968. stream := TMemoryStream.Create();
  2969. try
  2970. ser.save(dst,stream);
  2971. {$IFDEF TEST_GENERATE_FILE}
  2972. stream.SaveToFile(sdoExpandLocalFileName('open_type.xml'));
  2973. {$ENDIF TEST_GENERATE_FILE}
  2974. stream.Position := 0;
  2975. ReadXMLFile(serialDoc,stream);
  2976. ReadXMLFile(existDoc,sdoExpandLocalFileName(TestFilesPath + 'open_type.xml'));
  2977. CheckEquals(True, CompareNodes(existDoc,serialDoc),'generated document differs from the existent one.');
  2978. finally
  2979. stream.Free();
  2980. ReleaseDomNode(existDoc);
  2981. ReleaseDomNode(serialDoc);
  2982. end;
  2983. end;
  2984. procedure TSDOSerializer_Test.load_object_open_type();
  2985. var
  2986. fact, factGen : ISDODataFactory;
  2987. ser : ISDOSerializer;
  2988. loadedObj, dstGen, row : ISDODataObject;
  2989. begin
  2990. // Load the existing file
  2991. fact := TSDODataFactory.Create();
  2992. ser := TSDOSerializer.Create(fact,TSDOSerializerStreamXML.Create());
  2993. loadedObj := ser.load(sdoExpandLocalFileName(TestFilesPath + 'open_type.xml'));
  2994. Check(( loadedObj <> nil ), 'Root object is NULL.');
  2995. CheckEquals('Dataset',loadedObj.getType().getName());
  2996. CheckEquals(2,loadedObj.getList('rows').size());
  2997. // Generate the object copy
  2998. factGen := TSDODataFactory.Create() as ISDODataFactory;
  2999. factGen.AddType(s_uri,'Datarow',[tfIsOpen]);
  3000. factGen.AddType(s_uri,'Dataset',[tfIsOpen]);
  3001. factGen.addProperty(s_uri,'Dataset','rows',s_uri,'Datarow',[pfIsMany,pfIsContainment]);
  3002. dstGen := factGen.createNew(s_uri,'Dataset');
  3003. row := dstGen.createDataObject('rows');
  3004. row.setString('Name','SDO-Pascal');
  3005. row.setString('Description','Object Pascal implementation of SDO');
  3006. row.setInteger('Order',1);
  3007. dstGen.getList('rows').append(row);
  3008. row := dstGen.createDataObject('rows');
  3009. row.setString('Name','WST');
  3010. row.setString('Description','Object Pascal Web Services Toolkit');
  3011. row.setInteger('Order',2);
  3012. dstGen.getList('rows').append(row);
  3013. // ... compare them now
  3014. Check(TSDOEqualityHelper.equal(dstGen,loadedObj), 'Loaded object differs from generated object');
  3015. end;
  3016. procedure TSDOSerializer_Test.save_to_file_changesummary_prop_list_byte();
  3017. const
  3018. LIST_PROP_NAME = s_list_byte;
  3019. LIST_PROP_TYPE = ByteType;
  3020. FILE_NAME = 'changesummary_prop_list_byte.xml';
  3021. var
  3022. locFac : ISDODataFactory;
  3023. locDep : ISDODataObject;
  3024. ls : ISDODataObjectList;
  3025. locCS : ISDOChangeSummary;
  3026. f : ISDOSerializerStream;
  3027. s : ISDOSerializer;
  3028. localFileName : string;
  3029. existDoc, serialDoc : TSDOXMLDocument;
  3030. begin
  3031. localFileName := sdoExpandLocalFileName(FILE_NAME);
  3032. locFac := TSDODataFactory.Create() as ISDODataFactory;
  3033. locFac.AddType(s_uri,s_DepartmentType,[]);
  3034. locFac.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  3035. locFac.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  3036. locFac.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[ByteType],[pfIsAttribute]);
  3037. locFac.addProperty(s_uri,s_DepartmentType,LIST_PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[LIST_PROP_TYPE],[pfIsMany]);
  3038. locFac.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  3039. locDep := locFac.createNew(s_uri,s_DepartmentType);
  3040. locDep.setString(s_name,'R & D');
  3041. locDep.setString(s_location,'Ouaga, BF');
  3042. locDep.setByte(s_number,123);
  3043. ls := locDep.getList(LIST_PROP_NAME);
  3044. ls.append(TSDOByte(1));
  3045. ls.append(TSDOByte(2));
  3046. ls.append(TSDOByte(3));
  3047. locCS := locDep.getChangeSummary();
  3048. locCS.beginLogging();
  3049. locDep.setString(s_name,'R & D Department');
  3050. locDep.setString(s_location,'Ouaga 01, BF');
  3051. ls.setByte(0,10);
  3052. ls.append(TSDOByte(123));
  3053. ls.append(TSDOByte(45));
  3054. ls.setByte(1,20);
  3055. ls.delete(0);
  3056. ls.delete(1);
  3057. ls.insert(2, TSDOByte(107));
  3058. ls.append(TSDOByte(89));
  3059. f := TSDOSerializerStreamXML.Create();
  3060. s := TSDOSerializer.Create(locFac,f);
  3061. s.save(s_DepartmentType,locDep,localFileName);
  3062. existDoc := nil;
  3063. serialDoc := nil;
  3064. ReadXMLFile(existDoc,sdoExpandLocalFileName(TestFilesPath + FILE_NAME));
  3065. try
  3066. ReadXMLFile(serialDoc,localFileName);
  3067. CheckEquals(True, CompareNodes(existDoc,serialDoc));
  3068. finally
  3069. ReleaseDomNode(existDoc);
  3070. ReleaseDomNode(serialDoc);
  3071. end;
  3072. end;
  3073. procedure TSDOSerializer_Test.save_to_file_changesummary_prop_list_date();
  3074. const VAL_1 : TSDODate = ( Date : 0; HourOffset : 0; MinuteOffset : 0; );
  3075. VAL_2 : TSDODate = ( Date : 0; HourOffset : 0; MinuteOffset : 0; );
  3076. VAL_3 : TSDODate = ( Date : 0; HourOffset : 0; MinuteOffset : 0; );
  3077. VAL_4 : TSDODate = ( Date : 0; HourOffset : 0; MinuteOffset : 0; );
  3078. VAL_5 : TSDODate = ( Date : 0; HourOffset : 0; MinuteOffset : 0; );
  3079. procedure SetConstants();
  3080. var
  3081. d : TSDODate;
  3082. begin
  3083. FillChar(d,SizeOf(TSDODate),#0);
  3084. d.Date := EncodeDateTime(1976,10,12,23,34,45,56);
  3085. d.HourOffset := 5;
  3086. d.MinuteOffset := 6;
  3087. PSDODate(@VAL_1)^ := d;
  3088. FillChar(d,SizeOf(TSDODate),#0);
  3089. d.Date := EncodeDateTime(2008,7,8,9,10,11,12);
  3090. d.HourOffset := 0;
  3091. d.MinuteOffset := 13;
  3092. PSDODate(@VAL_3)^ := d;
  3093. FillChar(d,SizeOf(TSDODate),#0);
  3094. d.Date := EncodeDateTime(2009,9,1,2,3,0,1);
  3095. d.HourOffset := 0;
  3096. d.MinuteOffset := 13;
  3097. PSDODate(@VAL_4)^ := d;
  3098. FillChar(d,SizeOf(TSDODate),#0);
  3099. d.Date := EncodeDateTime(1900,11,8,1,2,0,0);
  3100. d.HourOffset := 0;
  3101. d.MinuteOffset := 13;
  3102. PSDODate(@VAL_5)^ := d;
  3103. end;
  3104. var
  3105. locFac : ISDODataFactory;
  3106. locDep : ISDODataObject;
  3107. ls : ISDODataObjectList;
  3108. locCS : ISDOChangeSummary;
  3109. f : ISDOSerializerStream;
  3110. s : ISDOSerializer;
  3111. localFileName : string;
  3112. existDoc, serialDoc : TSDOXMLDocument;
  3113. begin
  3114. SetConstants();
  3115. localFileName := sdoExpandLocalFileName('changesummary_prop_list_date.xml');
  3116. locFac := TSDODataFactory.Create() as ISDODataFactory;
  3117. locFac.AddType(s_uri,s_DepartmentType,[]);
  3118. locFac.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  3119. locFac.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  3120. locFac.addProperty(s_uri,s_DepartmentType,s_birthDate,sdo_namespace,SDOTypeDefaultTypeNames[DateTimeType],[pfIsAttribute]);
  3121. locFac.addProperty(s_uri,s_DepartmentType,s_list_date,sdo_namespace,SDOTypeDefaultTypeNames[DateTimeType],[pfIsMany]);
  3122. locFac.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  3123. locDep := locFac.createNew(s_uri,s_DepartmentType);
  3124. locDep.setString(s_name,'R & D');
  3125. locDep.setString(s_location,'Ouaga, BF');
  3126. locDep.setDate(s_birthDate,VAL_1);
  3127. ls := locDep.getList(s_list_date);
  3128. ls.append(VAL_1);
  3129. ls.append(VAL_2);
  3130. ls.append(VAL_3);
  3131. locCS := locDep.getChangeSummary();
  3132. locCS.beginLogging();
  3133. locDep.setString(s_name,'R & D Department');
  3134. locDep.setString(s_location,'Ouaga 01, BF');
  3135. ls.setDate(0,VAL_4);
  3136. ls.append(VAL_5);
  3137. ls.append(VAL_1);
  3138. ls.setDate(1,VAL_2);
  3139. ls.delete(0);
  3140. ls.delete(1);
  3141. ls.insert(2, VAL_3);
  3142. ls.append(VAL_4);
  3143. f := TSDOSerializerStreamXML.Create();
  3144. s := TSDOSerializer.Create(locFac,f);
  3145. s.save(s_DepartmentType,locDep,localFileName);
  3146. existDoc := nil;
  3147. serialDoc := nil;
  3148. ReadXMLFile(existDoc,sdoExpandLocalFileName(TestFilesPath + 'changesummary_prop_list_date.xml'));
  3149. try
  3150. ReadXMLFile(serialDoc,localFileName);
  3151. CheckEquals(True, CompareNodes(existDoc,serialDoc));
  3152. finally
  3153. ReleaseDomNode(existDoc);
  3154. ReleaseDomNode(serialDoc);
  3155. end;
  3156. end;
  3157. {$IFDEF HAS_SDO_BYTES}
  3158. procedure TSDOSerializer_Test.save_to_file_changesummary_prop_list_bytes();
  3159. const
  3160. FILE_NAME = 'changesummary_prop_list_bytes.xml';
  3161. LIST_PROP_NAME = s_list_bytes;
  3162. PROP_TYPE = BytesType;
  3163. var
  3164. VAL_1, VAL_2, VAL_3, VAL_4, VAL_5 : TSDOBytes;
  3165. procedure SetConstants();
  3166. var
  3167. v : TSDOBytes;
  3168. k : Integer;
  3169. begin
  3170. SetLength(v,10);
  3171. for k := 0 to High(v) do
  3172. v[k] := k mod High(Byte);
  3173. VAL_1 := v;
  3174. v := nil;
  3175. VAL_2 := nil;
  3176. SetLength(v,20);
  3177. for k := 0 to High(v) do
  3178. v[k] := ( ( 3 * k ) + 1 ) mod High(Byte);
  3179. VAL_3 := v;
  3180. v := nil;
  3181. SetLength(v,30);
  3182. for k := 0 to High(v) do
  3183. v[k] := ( ( 3 * k ) + 1 ) mod High(Byte);
  3184. VAL_4 := v;
  3185. v := nil;
  3186. SetLength(v,40);
  3187. for k := 0 to High(v) do
  3188. v[k] := ( ( 3 * k ) + 1 ) mod High(Byte);
  3189. VAL_5 := v;
  3190. v := nil;
  3191. end;
  3192. var
  3193. locFac : ISDODataFactory;
  3194. locDep : ISDODataObject;
  3195. ls : ISDODataObjectList;
  3196. locCS : ISDOChangeSummary;
  3197. f : ISDOSerializerStream;
  3198. s : ISDOSerializer;
  3199. localFileName : string;
  3200. existDoc, serialDoc : TSDOXMLDocument;
  3201. begin
  3202. SetConstants();
  3203. localFileName := sdoExpandLocalFileName(FILE_NAME);
  3204. locFac := TSDODataFactory.Create() as ISDODataFactory;
  3205. locFac.AddType(s_uri,s_DepartmentType,[]);
  3206. locFac.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  3207. locFac.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  3208. locFac.addProperty(s_uri,s_DepartmentType,s_birthDate,sdo_namespace,SDOTypeDefaultTypeNames[DateTimeType],[pfIsAttribute]);
  3209. locFac.addProperty(s_uri,s_DepartmentType,LIST_PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE],[pfIsMany]);
  3210. locFac.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  3211. locDep := locFac.createNew(s_uri,s_DepartmentType);
  3212. locDep.setString(s_name,'R & D');
  3213. locDep.setString(s_location,'Ouaga, BF');
  3214. //locDep.setBytes(s_birthDate,VAL_1);
  3215. ls := locDep.getList(LIST_PROP_NAME);
  3216. ls.appendBytes(VAL_1);
  3217. ls.appendBytes(VAL_2);
  3218. ls.appendBytes(VAL_3);
  3219. locCS := locDep.getChangeSummary();
  3220. locCS.beginLogging();
  3221. locDep.setString(s_name,'R & D Department');
  3222. locDep.setString(s_location,'Ouaga 01, BF');
  3223. ls.setBytes(0,VAL_4);
  3224. ls.appendBytes(VAL_5);
  3225. ls.appendBytes(VAL_1);
  3226. ls.setBytes(1,VAL_2);
  3227. ls.delete(0);
  3228. ls.delete(1);
  3229. ls.insertBytes(2, VAL_3);
  3230. ls.appendBytes(VAL_4);
  3231. {$IFDEF TEST_GENERATE_FILE}
  3232. (TSDOSerializer.Create(locFac,TSDOSerializerStreamXML.Create()) as ISDOSerializer).save(locDep,sdoExpandLocalFileName(FILE_NAME));
  3233. {$ENDIF TEST_GENERATE_FILE}
  3234. f := TSDOSerializerStreamXML.Create();
  3235. s := TSDOSerializer.Create(locFac,f);
  3236. s.save(s_DepartmentType,locDep,localFileName);
  3237. existDoc := nil;
  3238. serialDoc := nil;
  3239. ReadXMLFile(existDoc,sdoExpandLocalFileName(TestFilesPath + FILE_NAME));
  3240. try
  3241. ReadXMLFile(serialDoc,localFileName);
  3242. CheckEquals(True, CompareNodes(existDoc,serialDoc));
  3243. finally
  3244. ReleaseDomNode(existDoc);
  3245. ReleaseDomNode(serialDoc);
  3246. end;
  3247. end;
  3248. procedure TSDOSerializer_Test.load_from_file_changesummary_bytes();
  3249. const
  3250. PROP_NAME = 'sampleProperty';
  3251. PROP_TYPE = BytesType;
  3252. FILE_NAME = 'change_summary_bytes.xml';
  3253. var
  3254. VAL_1, VAL_2 : TSDOBytes;
  3255. procedure SetConstants();
  3256. var
  3257. v : TSDOBytes;
  3258. k : Integer;
  3259. begin
  3260. SetLength(v,10);
  3261. for k := 0 to High(v) do
  3262. v[k] := k mod High(Byte);
  3263. VAL_1 := v;
  3264. v := nil;
  3265. SetLength(v,20);
  3266. for k := 0 to High(v) do
  3267. v[k] := ( ( 3 * k ) + 1 ) mod High(Byte);
  3268. VAL_2 := v;
  3269. end;
  3270. var
  3271. locFac, tmpFactory : ISDODataFactory;
  3272. locEmployee : ISDODataObject;
  3273. locCS : ISDOChangeSummary;
  3274. f : ISDOSerializerStream;
  3275. s : ISDOSerializer;
  3276. localFileName : string;
  3277. ol : ISDODataObjectList;
  3278. begin
  3279. SetConstants();
  3280. localFileName := sdoExpandLocalFileName(TestFilesPath + FILE_NAME);
  3281. locFac := TSDODataFactory.Create() as ISDODataFactory;
  3282. locFac.AddType(s_uri,s_Employee,[]);
  3283. locFac.addProperty(s_uri,s_Employee,PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE],[]);
  3284. locFac.addProperty(s_uri,s_Employee,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  3285. locEmployee := locFac.createNew(s_uri,s_Employee);
  3286. locEmployee.setBytes(PROP_NAME,VAL_1);
  3287. locCS := locEmployee.getChangeSummary();
  3288. locCS.beginLogging();
  3289. locEmployee.setBytes(PROP_NAME,VAL_2);
  3290. {$IFDEF TEST_GENERATE_FILE}
  3291. (TSDOSerializer.Create(locFac,TSDOSerializerStreamXML.Create()) as ISDOSerializer).save(locEmployee,sdoExpandLocalFileName(FILE_NAME));
  3292. {$ENDIF TEST_GENERATE_FILE}
  3293. f := TSDOSerializerStreamXML.Create();
  3294. tmpFactory := TSDODataFactory.Create();
  3295. s := TSDOSerializer.Create(tmpFactory,f);
  3296. ol := TSDODataObjectList.Create(tmpFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[ObjectType]));
  3297. s.load(localFileName,ol);
  3298. Check(TSDOEqualityHelper.equal(locEmployee,ol.getDataObject(0)));
  3299. Compare(
  3300. locEmployee.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  3301. ol.getDataObject(0).getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  3302. );
  3303. locEmployee.getChangeSummary().undoChanges();
  3304. ol.getDataObject(0).getChangeSummary().undoChanges();
  3305. CheckEquals(0, locEmployee.getChangeSummary().getChangedDataObjects().size());
  3306. CheckEquals(0, ol.getDataObject(0).getChangeSummary().getChangedDataObjects().size());
  3307. Check(TSDOEqualityHelper.equal(locEmployee,ol.getDataObject(0)));
  3308. end;
  3309. procedure TSDOSerializer_Test.load_from_file_changesummary_prop_list_bytes();
  3310. const
  3311. FILE_NAME = 'changesummary_prop_list_bytes.xml';
  3312. LIST_PROP_NAME = s_list_bytes;
  3313. PROP_TYPE = BytesType;
  3314. var
  3315. VAL_1, VAL_2, VAL_3, VAL_4, VAL_5 : TSDOBytes;
  3316. procedure SetConstants();
  3317. var
  3318. v : TSDOBytes;
  3319. k : Integer;
  3320. begin
  3321. SetLength(v,10);
  3322. for k := 0 to High(v) do
  3323. v[k] := k mod High(Byte);
  3324. VAL_1 := v;
  3325. v := nil;
  3326. VAL_2 := nil;
  3327. SetLength(v,20);
  3328. for k := 0 to High(v) do
  3329. v[k] := ( ( 3 * k ) + 1 ) mod High(Byte);
  3330. VAL_3 := v;
  3331. v := nil;
  3332. SetLength(v,30);
  3333. for k := 0 to High(v) do
  3334. v[k] := ( ( 3 * k ) + 1 ) mod High(Byte);
  3335. VAL_4 := v;
  3336. v := nil;
  3337. SetLength(v,40);
  3338. for k := 0 to High(v) do
  3339. v[k] := ( ( 3 * k ) + 1 ) mod High(Byte);
  3340. VAL_5 := v;
  3341. v := nil;
  3342. end;
  3343. var
  3344. locFac, tmpFactory : ISDODataFactory;
  3345. locDep, locLoadedDep : ISDODataObject;
  3346. ls : ISDODataObjectList;
  3347. locCS : ISDOChangeSummary;
  3348. f : ISDOSerializerStream;
  3349. s : ISDOSerializer;
  3350. localFileName : string;
  3351. begin
  3352. SetConstants();
  3353. localFileName := sdoExpandLocalFileName(FILE_NAME);
  3354. locFac := TSDODataFactory.Create() as ISDODataFactory;
  3355. locFac.AddType(s_uri,s_DepartmentType,[]);
  3356. locFac.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  3357. locFac.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  3358. locFac.addProperty(s_uri,s_DepartmentType,s_birthDate,sdo_namespace,SDOTypeDefaultTypeNames[DateTimeType],[]);
  3359. locFac.addProperty(s_uri,s_DepartmentType,LIST_PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE],[pfIsMany]);
  3360. locFac.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  3361. locDep := locFac.createNew(s_uri,s_DepartmentType);
  3362. locDep.setString(s_name,'R & D');
  3363. locDep.setString(s_location,'Ouaga, BF');
  3364. //locDep.setBytes(s_birthDate,VAL_1);
  3365. ls := locDep.getList(LIST_PROP_NAME);
  3366. ls.appendBytes(VAL_1);
  3367. ls.appendBytes(VAL_2);
  3368. ls.appendBytes(VAL_3);
  3369. locCS := locDep.getChangeSummary();
  3370. locCS.beginLogging();
  3371. locDep.setString(s_name,'R & D Department');
  3372. locDep.setString(s_location,'Ouaga 01, BF');
  3373. ls.setBytes(0,VAL_4);
  3374. ls.appendBytes(VAL_5);
  3375. ls.appendBytes(VAL_1);
  3376. ls.setBytes(1,VAL_2);
  3377. ls.delete(0);
  3378. ls.delete(1);
  3379. ls.insertBytes(2, VAL_3);
  3380. ls.appendBytes(VAL_4);
  3381. localFileName := sdoExpandLocalFileName(TestFilesPath + FILE_NAME);
  3382. f := TSDOSerializerStreamXML.Create();
  3383. tmpFactory := TSDOBaseDataFactory.Create();
  3384. s := TSDOSerializer.Create(tmpFactory,f);
  3385. locLoadedDep := s.load(localFileName);
  3386. Check(TSDOEqualityHelper.equal(locDep, locLoadedDep),'Object');
  3387. Compare(
  3388. locDep.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  3389. locLoadedDep.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  3390. );
  3391. end;
  3392. {$ENDIF HAS_SDO_BYTES}
  3393. {$IFDEF HAS_SDO_CHAR}
  3394. procedure TSDOSerializer_Test.save_to_file_changesummary_prop_list_char();
  3395. const
  3396. LIST_PROP_NAME = s_list_char;
  3397. LIST_PROP_TYPE = CharacterType;
  3398. FILE_NAME = 'changesummary_prop_list_char.xml';
  3399. var
  3400. locFac : ISDODataFactory;
  3401. locDep : ISDODataObject;
  3402. ls : ISDODataObjectList;
  3403. locCS : ISDOChangeSummary;
  3404. f : ISDOSerializerStream;
  3405. s : ISDOSerializer;
  3406. localFileName : string;
  3407. existDoc, serialDoc : TSDOXMLDocument;
  3408. begin
  3409. localFileName := sdoExpandLocalFileName(FILE_NAME);
  3410. locFac := TSDODataFactory.Create() as ISDODataFactory;
  3411. locFac.AddType(s_uri,s_DepartmentType,[]);
  3412. locFac.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  3413. locFac.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  3414. locFac.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[ByteType],[pfIsAttribute]);
  3415. locFac.addProperty(s_uri,s_DepartmentType,LIST_PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[LIST_PROP_TYPE],[pfIsMany]);
  3416. locFac.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  3417. locDep := locFac.createNew(s_uri,s_DepartmentType);
  3418. locDep.setString(s_name,'R & D');
  3419. locDep.setString(s_location,'Ouaga, BF');
  3420. locDep.setByte(s_number,123);
  3421. ls := locDep.getList(LIST_PROP_NAME);
  3422. ls.append(TSDOChar('k'));
  3423. ls.append(TSDOChar('y'));
  3424. ls.append(TSDOChar('g'));
  3425. locCS := locDep.getChangeSummary();
  3426. locCS.beginLogging();
  3427. locDep.setString(s_name,'R & D Department');
  3428. locDep.setString(s_location,'Ouaga 01, BF');
  3429. ls.setCharacter(0,TSDOChar('j'));
  3430. ls.append(TSDOChar('a'));
  3431. ls.append(TSDOChar('x'));
  3432. ls.setCharacter(1,TSDOChar('v'));
  3433. ls.delete(0);
  3434. ls.delete(1);
  3435. ls.insert(2, TSDOChar('A'));
  3436. ls.append(TSDOChar('Z'));
  3437. {$IFDEF TEST_GENERATE_FILE}
  3438. (TSDOSerializer.Create(locFac,TSDOSerializerStreamXML.Create()) as ISDOSerializer).save(locDep,sdoExpandLocalFileName(FILE_NAME));
  3439. {$ENDIF TEST_GENERATE_FILE}
  3440. f := TSDOSerializerStreamXML.Create();
  3441. s := TSDOSerializer.Create(locFac,f);
  3442. s.save(s_DepartmentType,locDep,localFileName);
  3443. existDoc := nil;
  3444. serialDoc := nil;
  3445. ReadXMLFile(existDoc,sdoExpandLocalFileName(TestFilesPath + FILE_NAME));
  3446. try
  3447. ReadXMLFile(serialDoc,localFileName);
  3448. CheckEquals(True, CompareNodes(existDoc,serialDoc));
  3449. finally
  3450. ReleaseDomNode(existDoc);
  3451. ReleaseDomNode(serialDoc);
  3452. end;
  3453. end;
  3454. {$ENDIF HAS_SDO_CHAR}
  3455. {$IFDEF HAS_SDO_LONG}
  3456. procedure TSDOSerializer_Test.save_to_file_changesummary_prop_list_long();
  3457. const
  3458. LIST_PROP_NAME = s_list_long;
  3459. LIST_PROP_TYPE = LongType;
  3460. FILE_NAME = 'changesummary_prop_list_long.xml';
  3461. var
  3462. locFac : ISDODataFactory;
  3463. locDep : ISDODataObject;
  3464. ls : ISDODataObjectList;
  3465. locCS : ISDOChangeSummary;
  3466. f : ISDOSerializerStream;
  3467. s : ISDOSerializer;
  3468. localFileName : string;
  3469. existDoc, serialDoc : TSDOXMLDocument;
  3470. begin
  3471. localFileName := sdoExpandLocalFileName(FILE_NAME);
  3472. locFac := TSDODataFactory.Create() as ISDODataFactory;
  3473. locFac.AddType(s_uri,s_DepartmentType,[]);
  3474. locFac.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  3475. locFac.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  3476. locFac.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[ByteType],[pfIsAttribute]);
  3477. locFac.addProperty(s_uri,s_DepartmentType,LIST_PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[LIST_PROP_TYPE],[pfIsMany]);
  3478. locFac.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  3479. locDep := locFac.createNew(s_uri,s_DepartmentType);
  3480. locDep.setString(s_name,'R & D');
  3481. locDep.setString(s_location,'Ouaga, BF');
  3482. locDep.setByte(s_number,123);
  3483. ls := locDep.getList(LIST_PROP_NAME);
  3484. ls.append(TSDOLong(11111111111111111));
  3485. ls.append(TSDOLong(-2222222222222222));
  3486. ls.append(TSDOLong(333333333333333333));
  3487. locCS := locDep.getChangeSummary();
  3488. locCS.beginLogging();
  3489. locDep.setString(s_name,'R & D Department');
  3490. locDep.setString(s_location,'Ouaga 01, BF');
  3491. ls.setLong(0,4444444444444444444);
  3492. ls.append(TSDOLong(5555555555555555555));
  3493. ls.append(TSDOLong(-6666666666666666666));
  3494. ls.setLong(1,7777777777777777777);
  3495. ls.delete(0);
  3496. ls.delete(1);
  3497. ls.insert(2, TSDOLong(8));
  3498. ls.append(TSDOLong(-9));
  3499. {$IFDEF TEST_GENERATE_FILE}
  3500. (TSDOSerializer.Create(locFac,TSDOSerializerStreamXML.Create()) as ISDOSerializer).save(locDep,sdoExpandLocalFileName(FILE_NAME));
  3501. {$ENDIF TEST_GENERATE_FILE}
  3502. f := TSDOSerializerStreamXML.Create();
  3503. s := TSDOSerializer.Create(locFac,f);
  3504. s.save(s_DepartmentType,locDep,localFileName);
  3505. existDoc := nil;
  3506. serialDoc := nil;
  3507. ReadXMLFile(existDoc,sdoExpandLocalFileName(TestFilesPath + FILE_NAME));
  3508. try
  3509. ReadXMLFile(serialDoc,localFileName);
  3510. CheckEquals(True, CompareNodes(existDoc,serialDoc));
  3511. finally
  3512. ReleaseDomNode(existDoc);
  3513. ReleaseDomNode(serialDoc);
  3514. end;
  3515. end;
  3516. {$ENDIF HAS_SDO_LONG}
  3517. {$IFDEF HAS_SDO_SHORT}
  3518. procedure TSDOSerializer_Test.save_to_file_changesummary_prop_list_short();
  3519. const
  3520. LIST_PROP_NAME = s_list_short;
  3521. LIST_PROP_TYPE = ShortType;
  3522. FILE_NAME = 'changesummary_prop_list_short.xml';
  3523. var
  3524. locFac : ISDODataFactory;
  3525. locDep : ISDODataObject;
  3526. ls : ISDODataObjectList;
  3527. locCS : ISDOChangeSummary;
  3528. f : ISDOSerializerStream;
  3529. s : ISDOSerializer;
  3530. localFileName : string;
  3531. existDoc, serialDoc : TSDOXMLDocument;
  3532. begin
  3533. localFileName := sdoExpandLocalFileName(FILE_NAME);
  3534. locFac := TSDODataFactory.Create() as ISDODataFactory;
  3535. locFac.AddType(s_uri,s_DepartmentType,[]);
  3536. locFac.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  3537. locFac.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  3538. locFac.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[ByteType],[pfIsAttribute]);
  3539. locFac.addProperty(s_uri,s_DepartmentType,LIST_PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[LIST_PROP_TYPE],[pfIsMany]);
  3540. locFac.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  3541. locDep := locFac.createNew(s_uri,s_DepartmentType);
  3542. locDep.setString(s_name,'R & D');
  3543. locDep.setString(s_location,'Ouaga, BF');
  3544. locDep.setByte(s_number,123);
  3545. ls := locDep.getList(LIST_PROP_NAME);
  3546. ls.append(TSDOShort(1));
  3547. ls.append(TSDOShort(2));
  3548. ls.append(TSDOShort(3));
  3549. locCS := locDep.getChangeSummary();
  3550. locCS.beginLogging();
  3551. locDep.setString(s_name,'R & D Department');
  3552. locDep.setString(s_location,'Ouaga 01, BF');
  3553. ls.setShort(0,10);
  3554. ls.append(TSDOShort(12345));
  3555. ls.append(TSDOShort(-5245));
  3556. ls.setShort(1,20);
  3557. ls.delete(0);
  3558. ls.delete(1);
  3559. ls.insert(2, TSDOShort(107));
  3560. ls.append(TSDOShort(89));
  3561. {$IFDEF TEST_GENERATE_FILE}
  3562. (TSDOSerializer.Create(locFac,TSDOSerializerStreamXML.Create()) as ISDOSerializer).save(locDep,sdoExpandLocalFileName(FILE_NAME));
  3563. {$ENDIF TEST_GENERATE_FILE}
  3564. f := TSDOSerializerStreamXML.Create();
  3565. s := TSDOSerializer.Create(locFac,f);
  3566. s.save(s_DepartmentType,locDep,localFileName);
  3567. existDoc := nil;
  3568. serialDoc := nil;
  3569. ReadXMLFile(existDoc,sdoExpandLocalFileName(TestFilesPath + FILE_NAME));
  3570. try
  3571. ReadXMLFile(serialDoc,localFileName);
  3572. CheckEquals(True, CompareNodes(existDoc,serialDoc));
  3573. finally
  3574. ReleaseDomNode(existDoc);
  3575. ReleaseDomNode(serialDoc);
  3576. end;
  3577. end;
  3578. {$ENDIF HAS_SDO_SHORT}
  3579. {$IFDEF HAS_SDO_CURRENCY}
  3580. const
  3581. CURRENCY_VALUES_REPEATED_DIGITED : array[0..8] of TSDOCurrency = (
  3582. 1111111111111.1111, -222222222222.2222, 33333333333333.3333, 444444444444444.4444, 555555555555555.5555,
  3583. -666666666666666.6666, 777777777777777.7777, 8, -9
  3584. );
  3585. procedure TSDOSerializer_Test.save_to_file_changesummary_prop_list_currency();
  3586. const
  3587. LIST_PROP_NAME = s_list_currency;
  3588. LIST_PROP_TYPE = CurrencyType;
  3589. FILE_NAME = 'changesummary_prop_list_currency.xml';
  3590. var
  3591. locFac : ISDODataFactory;
  3592. locDep : ISDODataObject;
  3593. ls : ISDODataObjectList;
  3594. locCS : ISDOChangeSummary;
  3595. f : ISDOSerializerStream;
  3596. s : ISDOSerializer;
  3597. localFileName : string;
  3598. existDoc, serialDoc : TSDOXMLDocument;
  3599. begin
  3600. localFileName := sdoExpandLocalFileName(FILE_NAME);
  3601. locFac := TSDODataFactory.Create() as ISDODataFactory;
  3602. locFac.AddType(s_uri,s_DepartmentType,[]);
  3603. locFac.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  3604. locFac.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  3605. locFac.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[ByteType],[pfIsAttribute]);
  3606. locFac.addProperty(s_uri,s_DepartmentType,LIST_PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[LIST_PROP_TYPE],[pfIsMany]);
  3607. locFac.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  3608. locDep := locFac.createNew(s_uri,s_DepartmentType);
  3609. locDep.setString(s_name,'R & D');
  3610. locDep.setString(s_location,'Ouaga, BF');
  3611. locDep.setByte(s_number,123);
  3612. ls := locDep.getList(LIST_PROP_NAME);
  3613. ls.appendCurrency(CURRENCY_VALUES_REPEATED_DIGITED[0]);
  3614. ls.appendCurrency(CURRENCY_VALUES_REPEATED_DIGITED[1]);
  3615. ls.appendCurrency(CURRENCY_VALUES_REPEATED_DIGITED[2]);
  3616. locCS := locDep.getChangeSummary();
  3617. locCS.beginLogging();
  3618. locDep.setString(s_name,'R & D Department');
  3619. locDep.setString(s_location,'Ouaga 01, BF');
  3620. ls.setCurrency(0,CURRENCY_VALUES_REPEATED_DIGITED[3]);
  3621. ls.appendCurrency(CURRENCY_VALUES_REPEATED_DIGITED[4]);
  3622. ls.appendCurrency(CURRENCY_VALUES_REPEATED_DIGITED[5]);
  3623. ls.setCurrency(1,CURRENCY_VALUES_REPEATED_DIGITED[6]);
  3624. ls.delete(0);
  3625. ls.delete(1);
  3626. ls.insertCurrency(2, CURRENCY_VALUES_REPEATED_DIGITED[7]);
  3627. ls.appendCurrency(CURRENCY_VALUES_REPEATED_DIGITED[8]);
  3628. {$IFDEF TEST_GENERATE_FILE}
  3629. (TSDOSerializer.Create(locFac,TSDOSerializerStreamXML.Create()) as ISDOSerializer).save(locDep,sdoExpandLocalFileName(FILE_NAME));
  3630. {$ENDIF TEST_GENERATE_FILE}
  3631. f := TSDOSerializerStreamXML.Create();
  3632. s := TSDOSerializer.Create(locFac,f);
  3633. s.save(s_DepartmentType,locDep,localFileName);
  3634. existDoc := nil;
  3635. serialDoc := nil;
  3636. ReadXMLFile(existDoc,sdoExpandLocalFileName(TestFilesPath + FILE_NAME));
  3637. try
  3638. ReadXMLFile(serialDoc,localFileName);
  3639. CheckEquals(True, CompareNodes(existDoc,serialDoc));
  3640. finally
  3641. ReleaseDomNode(existDoc);
  3642. ReleaseDomNode(serialDoc);
  3643. end;
  3644. end;
  3645. procedure TSDOSerializer_Test.load_from_file_changesummary_currency();
  3646. const
  3647. PROP_NAME = 'sampleProperty';
  3648. PROP_TYPE = CurrencyType;
  3649. FILE_NAME = 'change_summary_currency.xml';
  3650. VAL_1 : TSDOCurrency = 12398745632145.6987;
  3651. VAL_2 : TSDOCurrency = -45821568.7422;
  3652. var
  3653. locFac, tmpFactory : ISDODataFactory;
  3654. locEmployee : ISDODataObject;
  3655. locCS : ISDOChangeSummary;
  3656. f : ISDOSerializerStream;
  3657. s : ISDOSerializer;
  3658. localFileName : string;
  3659. ol : ISDODataObjectList;
  3660. begin
  3661. localFileName := sdoExpandLocalFileName(TestFilesPath + FILE_NAME);
  3662. locFac := TSDODataFactory.Create() as ISDODataFactory;
  3663. locFac.AddType(s_uri,s_Employee,[]);
  3664. locFac.addProperty(s_uri,s_Employee,PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE],[]);
  3665. locFac.addProperty(s_uri,s_Employee,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  3666. locEmployee := locFac.createNew(s_uri,s_Employee);
  3667. locEmployee.setCurrency(PROP_NAME,VAL_1);
  3668. locCS := locEmployee.getChangeSummary();
  3669. locCS.beginLogging();
  3670. locEmployee.setCurrency(PROP_NAME,VAL_2);
  3671. {$IFDEF TEST_GENERATE_FILE}
  3672. (TSDOSerializer.Create(locFac,TSDOSerializerStreamXML.Create())as ISDOSerializer).save(locEmployee,sdoExpandLocalFileName(FILE_NAME));
  3673. {$ENDIF TEST_GENERATE_FILE}
  3674. f := TSDOSerializerStreamXML.Create();
  3675. tmpFactory := TSDODataFactory.Create();
  3676. s := TSDOSerializer.Create(tmpFactory,f);
  3677. ol := TSDODataObjectList.Create(tmpFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[ObjectType]));
  3678. s.load(localFileName,ol);
  3679. Check(TSDOEqualityHelper.equal(locEmployee,ol.getDataObject(0)));
  3680. Compare(
  3681. locEmployee.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  3682. ol.getDataObject(0).getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  3683. );
  3684. locEmployee.getChangeSummary().undoChanges();
  3685. ol.getDataObject(0).getChangeSummary().undoChanges();
  3686. CheckEquals(0, locEmployee.getChangeSummary().getChangedDataObjects().size());
  3687. CheckEquals(0, ol.getDataObject(0).getChangeSummary().getChangedDataObjects().size());
  3688. Check(TSDOEqualityHelper.equal(locEmployee,ol.getDataObject(0)));
  3689. end;
  3690. procedure TSDOSerializer_Test.load_from_file_changesummary_prop_list_currency();
  3691. const
  3692. PROP_NAME = s_list_currency;
  3693. PROP_TYPE = CurrencyType;
  3694. FILE_NAME = 'changesummary_prop_list_currency.xml';
  3695. var
  3696. locFac, tmpFactory : ISDODataFactory;
  3697. locDep, locLoadedDep : ISDODataObject;
  3698. ls : ISDODataObjectList;
  3699. locCS : ISDOChangeSummary;
  3700. f : ISDOSerializerStream;
  3701. s : ISDOSerializer;
  3702. localFileName : string;
  3703. begin
  3704. locFac := TSDODataFactory.Create() as ISDODataFactory;
  3705. locFac.AddType(s_uri,s_DepartmentType,[]);
  3706. locFac.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  3707. locFac.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  3708. locFac.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[ByteType],[]);
  3709. locFac.addProperty(s_uri,s_DepartmentType,PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE],[pfIsMany]);
  3710. locFac.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  3711. locDep := locFac.createNew(s_uri,s_DepartmentType);
  3712. locDep.setString(s_name,'R & D');
  3713. locDep.setString(s_location,'Ouaga, BF');
  3714. locDep.setByte(s_number,123);
  3715. ls := locDep.getList(PROP_NAME);
  3716. ls.appendCurrency(CURRENCY_VALUES_REPEATED_DIGITED[0]);
  3717. ls.appendCurrency(CURRENCY_VALUES_REPEATED_DIGITED[1]);
  3718. ls.appendCurrency(CURRENCY_VALUES_REPEATED_DIGITED[2]);
  3719. locCS := locDep.getChangeSummary();
  3720. locCS.beginLogging();
  3721. locDep.setString(s_name,'R & D Department');
  3722. locDep.setString(s_location,'Ouaga 01, BF');
  3723. ls.setCurrency(0,CURRENCY_VALUES_REPEATED_DIGITED[3]);
  3724. ls.appendCurrency(CURRENCY_VALUES_REPEATED_DIGITED[4]);
  3725. ls.appendCurrency(CURRENCY_VALUES_REPEATED_DIGITED[5]);
  3726. ls.setCurrency(1,CURRENCY_VALUES_REPEATED_DIGITED[6]);
  3727. ls.delete(0);
  3728. ls.delete(1);
  3729. ls.insertCurrency(2, CURRENCY_VALUES_REPEATED_DIGITED[7]);
  3730. ls.appendCurrency(CURRENCY_VALUES_REPEATED_DIGITED[8]);
  3731. {$IFDEF TEST_GENERATE_FILE}
  3732. (TSDOSerializer.Create(locFac,TSDOSerializerStreamXML.Create())as ISDOSerializer).save(locDep,sdoExpandLocalFileName(FILE_NAME));
  3733. {$ENDIF TEST_GENERATE_FILE}
  3734. localFileName := sdoExpandLocalFileName(TestFilesPath + FILE_NAME);
  3735. f := TSDOSerializerStreamXML.Create();
  3736. tmpFactory := TSDOBaseDataFactory.Create();
  3737. s := TSDOSerializer.Create(tmpFactory,f);
  3738. locLoadedDep := s.load(localFileName);
  3739. Check(TSDOEqualityHelper.equal(locDep, locLoadedDep),'Object');
  3740. Compare(
  3741. locDep.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  3742. locLoadedDep.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  3743. );
  3744. end;
  3745. {$ENDIF HAS_SDO_CURRENCY}
  3746. {$IFDEF HAS_SDO_DOUBLE}
  3747. const
  3748. DOUBLE_VALUES_REPEATED_DIGITED : array[0..8] of TSDODouble = (
  3749. 111111111, -22222222, 3333333333, 44444444, 555555555,
  3750. -666666666, 777777777, 8, -9
  3751. );
  3752. procedure TSDOSerializer_Test.save_to_file_changesummary_prop_list_double();
  3753. const
  3754. LIST_PROP_NAME = s_list_double;
  3755. LIST_PROP_TYPE = DoubleType;
  3756. FILE_NAME = 'changesummary_prop_list_double.xml';
  3757. var
  3758. locFac : ISDODataFactory;
  3759. locDep : ISDODataObject;
  3760. ls : ISDODataObjectList;
  3761. locCS : ISDOChangeSummary;
  3762. f : ISDOSerializerStream;
  3763. s : ISDOSerializer;
  3764. localFileName : string;
  3765. existDoc, serialDoc : TSDOXMLDocument;
  3766. begin
  3767. localFileName := sdoExpandLocalFileName(FILE_NAME);
  3768. locFac := TSDODataFactory.Create() as ISDODataFactory;
  3769. locFac.AddType(s_uri,s_DepartmentType,[]);
  3770. locFac.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  3771. locFac.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  3772. locFac.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[ByteType],[pfIsAttribute]);
  3773. locFac.addProperty(s_uri,s_DepartmentType,LIST_PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[LIST_PROP_TYPE],[pfIsMany]);
  3774. locFac.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  3775. locDep := locFac.createNew(s_uri,s_DepartmentType);
  3776. locDep.setString(s_name,'R & D');
  3777. locDep.setString(s_location,'Ouaga, BF');
  3778. locDep.setByte(s_number,123);
  3779. ls := locDep.getList(LIST_PROP_NAME);
  3780. ls.append(DOUBLE_VALUES_REPEATED_DIGITED[0]);
  3781. ls.append(DOUBLE_VALUES_REPEATED_DIGITED[1]);
  3782. ls.append(DOUBLE_VALUES_REPEATED_DIGITED[2]);
  3783. locCS := locDep.getChangeSummary();
  3784. locCS.beginLogging();
  3785. locDep.setString(s_name,'R & D Department');
  3786. locDep.setString(s_location,'Ouaga 01, BF');
  3787. ls.setDouble(0,DOUBLE_VALUES_REPEATED_DIGITED[3]);
  3788. ls.append(DOUBLE_VALUES_REPEATED_DIGITED[4]);
  3789. ls.append(DOUBLE_VALUES_REPEATED_DIGITED[5]);
  3790. ls.setDouble(1,DOUBLE_VALUES_REPEATED_DIGITED[6]);
  3791. ls.delete(0);
  3792. ls.delete(1);
  3793. ls.insert(2, DOUBLE_VALUES_REPEATED_DIGITED[7]);
  3794. ls.append(DOUBLE_VALUES_REPEATED_DIGITED[8]);
  3795. {$IFDEF TEST_GENERATE_FILE}
  3796. (TSDOSerializer.Create(locFac,TSDOSerializerStreamXML.Create()) as ISDOSerializer).save(locDep,sdoExpandLocalFileName(FILE_NAME));
  3797. {$ENDIF TEST_GENERATE_FILE}
  3798. f := TSDOSerializerStreamXML.Create();
  3799. s := TSDOSerializer.Create(locFac,f);
  3800. s.save(s_DepartmentType,locDep,localFileName);
  3801. existDoc := nil;
  3802. serialDoc := nil;
  3803. ReadXMLFile(existDoc,sdoExpandLocalFileName(TestFilesPath + FILE_NAME));
  3804. try
  3805. ReadXMLFile(serialDoc,localFileName);
  3806. CheckEquals(True, CompareNodes(existDoc,serialDoc));
  3807. finally
  3808. ReleaseDomNode(existDoc);
  3809. ReleaseDomNode(serialDoc);
  3810. end;
  3811. end;
  3812. procedure TSDOSerializer_Test.load_from_file_changesummary_double();
  3813. const
  3814. PROP_NAME = 'sampleProperty';
  3815. PROP_TYPE = DoubleType;
  3816. FILE_NAME = 'change_summary_double.xml';
  3817. VAL_1 : TSDODouble = 1239874567;
  3818. VAL_2 : TSDODouble = -4582152;
  3819. var
  3820. locFac, tmpFactory : ISDODataFactory;
  3821. locEmployee : ISDODataObject;
  3822. locCS : ISDOChangeSummary;
  3823. f : ISDOSerializerStream;
  3824. s : ISDOSerializer;
  3825. localFileName : string;
  3826. ol : ISDODataObjectList;
  3827. begin
  3828. localFileName := sdoExpandLocalFileName(TestFilesPath + FILE_NAME);
  3829. locFac := TSDODataFactory.Create() as ISDODataFactory;
  3830. locFac.AddType(s_uri,s_Employee,[]);
  3831. locFac.addProperty(s_uri,s_Employee,PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE],[]);
  3832. locFac.addProperty(s_uri,s_Employee,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  3833. locEmployee := locFac.createNew(s_uri,s_Employee);
  3834. locEmployee.setDouble(PROP_NAME,VAL_1);
  3835. locCS := locEmployee.getChangeSummary();
  3836. locCS.beginLogging();
  3837. locEmployee.setDouble(PROP_NAME,VAL_2);
  3838. {$IFDEF TEST_GENERATE_FILE}
  3839. (TSDOSerializer.Create(locFac,TSDOSerializerStreamXML.Create())as ISDOSerializer).save(locEmployee,sdoExpandLocalFileName(FILE_NAME));
  3840. {$ENDIF TEST_GENERATE_FILE}
  3841. f := TSDOSerializerStreamXML.Create();
  3842. tmpFactory := TSDODataFactory.Create();
  3843. s := TSDOSerializer.Create(tmpFactory,f);
  3844. ol := TSDODataObjectList.Create(tmpFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[ObjectType]));
  3845. s.load(localFileName,ol);
  3846. Check(TSDOEqualityHelper.equal(locEmployee,ol.getDataObject(0)));
  3847. Compare(
  3848. locEmployee.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  3849. ol.getDataObject(0).getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  3850. );
  3851. locEmployee.getChangeSummary().undoChanges();
  3852. ol.getDataObject(0).getChangeSummary().undoChanges();
  3853. CheckEquals(0, locEmployee.getChangeSummary().getChangedDataObjects().size());
  3854. CheckEquals(0, ol.getDataObject(0).getChangeSummary().getChangedDataObjects().size());
  3855. Check(TSDOEqualityHelper.equal(locEmployee,ol.getDataObject(0)));
  3856. end;
  3857. procedure TSDOSerializer_Test.load_from_file_changesummary_prop_list_double();
  3858. const
  3859. PROP_NAME = s_list_double;
  3860. PROP_TYPE = DoubleType;
  3861. FILE_NAME = 'changesummary_prop_list_double.xml';
  3862. var
  3863. locFac, tmpFactory : ISDODataFactory;
  3864. locDep, locLoadedDep : ISDODataObject;
  3865. ls : ISDODataObjectList;
  3866. locCS : ISDOChangeSummary;
  3867. f : ISDOSerializerStream;
  3868. s : ISDOSerializer;
  3869. localFileName : string;
  3870. begin
  3871. locFac := TSDODataFactory.Create() as ISDODataFactory;
  3872. locFac.AddType(s_uri,s_DepartmentType,[]);
  3873. locFac.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  3874. locFac.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  3875. locFac.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[ByteType],[]);
  3876. locFac.addProperty(s_uri,s_DepartmentType,PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE],[pfIsMany]);
  3877. locFac.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  3878. locDep := locFac.createNew(s_uri,s_DepartmentType);
  3879. locDep.setString(s_name,'R & D');
  3880. locDep.setString(s_location,'Ouaga, BF');
  3881. locDep.setByte(s_number,123);
  3882. ls := locDep.getList(PROP_NAME);
  3883. ls.append(DOUBLE_VALUES_REPEATED_DIGITED[0]);
  3884. ls.append(DOUBLE_VALUES_REPEATED_DIGITED[1]);
  3885. ls.append(DOUBLE_VALUES_REPEATED_DIGITED[2]);
  3886. locCS := locDep.getChangeSummary();
  3887. locCS.beginLogging();
  3888. locDep.setString(s_name,'R & D Department');
  3889. locDep.setString(s_location,'Ouaga 01, BF');
  3890. ls.setDouble(0,DOUBLE_VALUES_REPEATED_DIGITED[3]);
  3891. ls.append(DOUBLE_VALUES_REPEATED_DIGITED[4]);
  3892. ls.append(DOUBLE_VALUES_REPEATED_DIGITED[5]);
  3893. ls.setDouble(1,DOUBLE_VALUES_REPEATED_DIGITED[6]);
  3894. ls.delete(0);
  3895. ls.delete(1);
  3896. ls.insert(2, DOUBLE_VALUES_REPEATED_DIGITED[7]);
  3897. ls.append(DOUBLE_VALUES_REPEATED_DIGITED[8]);
  3898. {$IFDEF TEST_GENERATE_FILE}
  3899. (TSDOSerializer.Create(locFac,TSDOSerializerStreamXML.Create())as ISDOSerializer).save(locDep,sdoExpandLocalFileName(FILE_NAME));
  3900. {$ENDIF TEST_GENERATE_FILE}
  3901. localFileName := sdoExpandLocalFileName(TestFilesPath + FILE_NAME);
  3902. f := TSDOSerializerStreamXML.Create();
  3903. tmpFactory := TSDOBaseDataFactory.Create();
  3904. s := TSDOSerializer.Create(tmpFactory,f);
  3905. locLoadedDep := s.load(localFileName);
  3906. Check(TSDOEqualityHelper.equal(locDep, locLoadedDep),'Object');
  3907. Compare(
  3908. locDep.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  3909. locLoadedDep.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  3910. );
  3911. end;
  3912. {$ENDIF HAS_SDO_DOUBLE}
  3913. {$IFDEF HAS_SDO_FLOAT}
  3914. const
  3915. FLOAT_VALUES_REPEATED_DIGITED : array[0..8] of TSDOFloat = (
  3916. 111111111, -222222222, 333333333, 444444444, 5555555555,
  3917. -6666666666, 777777777, 8, -9
  3918. );
  3919. procedure TSDOSerializer_Test.save_to_file_changesummary_prop_list_float();
  3920. const
  3921. LIST_PROP_NAME = s_list_float;
  3922. LIST_PROP_TYPE = FloatType;
  3923. FILE_NAME = 'changesummary_prop_list_float.xml';
  3924. var
  3925. locFac : ISDODataFactory;
  3926. locDep : ISDODataObject;
  3927. ls : ISDODataObjectList;
  3928. locCS : ISDOChangeSummary;
  3929. f : ISDOSerializerStream;
  3930. s : ISDOSerializer;
  3931. localFileName : string;
  3932. existDoc, serialDoc : TSDOXMLDocument;
  3933. begin
  3934. localFileName := sdoExpandLocalFileName(FILE_NAME);
  3935. locFac := TSDODataFactory.Create() as ISDODataFactory;
  3936. locFac.AddType(s_uri,s_DepartmentType,[]);
  3937. locFac.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  3938. locFac.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  3939. locFac.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[ByteType],[pfIsAttribute]);
  3940. locFac.addProperty(s_uri,s_DepartmentType,LIST_PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[LIST_PROP_TYPE],[pfIsMany]);
  3941. locFac.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  3942. locDep := locFac.createNew(s_uri,s_DepartmentType);
  3943. locDep.setString(s_name,'R & D');
  3944. locDep.setString(s_location,'Ouaga, BF');
  3945. locDep.setByte(s_number,123);
  3946. ls := locDep.getList(LIST_PROP_NAME);
  3947. ls.append(FLOAT_VALUES_REPEATED_DIGITED[0]);
  3948. ls.append(FLOAT_VALUES_REPEATED_DIGITED[1]);
  3949. ls.append(FLOAT_VALUES_REPEATED_DIGITED[2]);
  3950. locCS := locDep.getChangeSummary();
  3951. locCS.beginLogging();
  3952. locDep.setString(s_name,'R & D Department');
  3953. locDep.setString(s_location,'Ouaga 01, BF');
  3954. ls.setFloat(0,FLOAT_VALUES_REPEATED_DIGITED[3]);
  3955. ls.append(FLOAT_VALUES_REPEATED_DIGITED[4]);
  3956. ls.append(FLOAT_VALUES_REPEATED_DIGITED[5]);
  3957. ls.setFloat(1,FLOAT_VALUES_REPEATED_DIGITED[6]);
  3958. ls.delete(0);
  3959. ls.delete(1);
  3960. ls.insert(2, FLOAT_VALUES_REPEATED_DIGITED[7]);
  3961. ls.append(FLOAT_VALUES_REPEATED_DIGITED[8]);
  3962. {$IFDEF TEST_GENERATE_FILE}
  3963. (TSDOSerializer.Create(locFac,TSDOSerializerStreamXML.Create()) as ISDOSerializer).save(locDep,sdoExpandLocalFileName(FILE_NAME));
  3964. {$ENDIF TEST_GENERATE_FILE}
  3965. f := TSDOSerializerStreamXML.Create();
  3966. s := TSDOSerializer.Create(locFac,f);
  3967. s.save(s_DepartmentType,locDep,localFileName);
  3968. existDoc := nil;
  3969. serialDoc := nil;
  3970. ReadXMLFile(existDoc,sdoExpandLocalFileName(TestFilesPath + FILE_NAME));
  3971. try
  3972. ReadXMLFile(serialDoc,localFileName);
  3973. CheckEquals(True, CompareNodes(existDoc,serialDoc));
  3974. finally
  3975. ReleaseDomNode(existDoc);
  3976. ReleaseDomNode(serialDoc);
  3977. end;
  3978. end;
  3979. procedure TSDOSerializer_Test.load_from_file_changesummary_float();
  3980. const
  3981. PROP_NAME = 'sampleProperty';
  3982. PROP_TYPE = FloatType;
  3983. FILE_NAME = 'change_summary_float.xml';
  3984. VAL_1 : TSDOFloat = 1239874567;
  3985. VAL_2 : TSDOFloat = -4582152;
  3986. var
  3987. locFac, tmpFactory : ISDODataFactory;
  3988. locEmployee : ISDODataObject;
  3989. locCS : ISDOChangeSummary;
  3990. f : ISDOSerializerStream;
  3991. s : ISDOSerializer;
  3992. localFileName : string;
  3993. ol : ISDODataObjectList;
  3994. begin
  3995. localFileName := sdoExpandLocalFileName(TestFilesPath + FILE_NAME);
  3996. locFac := TSDODataFactory.Create() as ISDODataFactory;
  3997. locFac.AddType(s_uri,s_Employee,[]);
  3998. locFac.addProperty(s_uri,s_Employee,PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE],[]);
  3999. locFac.addProperty(s_uri,s_Employee,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  4000. locEmployee := locFac.createNew(s_uri,s_Employee);
  4001. locEmployee.setFloat(PROP_NAME,VAL_1);
  4002. locCS := locEmployee.getChangeSummary();
  4003. locCS.beginLogging();
  4004. locEmployee.setFloat(PROP_NAME,VAL_2);
  4005. {$IFDEF TEST_GENERATE_FILE}
  4006. (TSDOSerializer.Create(locFac,TSDOSerializerStreamXML.Create())as ISDOSerializer).save(locEmployee,sdoExpandLocalFileName(FILE_NAME));
  4007. {$ENDIF TEST_GENERATE_FILE}
  4008. f := TSDOSerializerStreamXML.Create();
  4009. tmpFactory := TSDODataFactory.Create();
  4010. s := TSDOSerializer.Create(tmpFactory,f);
  4011. ol := TSDODataObjectList.Create(tmpFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[ObjectType]));
  4012. s.load(localFileName,ol);
  4013. Check(TSDOEqualityHelper.equal(locEmployee,ol.getDataObject(0)));
  4014. Compare(
  4015. locEmployee.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  4016. ol.getDataObject(0).getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  4017. );
  4018. locEmployee.getChangeSummary().undoChanges();
  4019. ol.getDataObject(0).getChangeSummary().undoChanges();
  4020. CheckEquals(0, locEmployee.getChangeSummary().getChangedDataObjects().size());
  4021. CheckEquals(0, ol.getDataObject(0).getChangeSummary().getChangedDataObjects().size());
  4022. Check(TSDOEqualityHelper.equal(locEmployee,ol.getDataObject(0)));
  4023. end;
  4024. procedure TSDOSerializer_Test.load_from_file_changesummary_prop_list_float();
  4025. const
  4026. PROP_NAME = s_list_float;
  4027. PROP_TYPE = FloatType;
  4028. FILE_NAME = 'changesummary_prop_list_float.xml';
  4029. var
  4030. locFac, tmpFactory : ISDODataFactory;
  4031. locDep, locLoadedDep : ISDODataObject;
  4032. ls : ISDODataObjectList;
  4033. locCS : ISDOChangeSummary;
  4034. f : ISDOSerializerStream;
  4035. s : ISDOSerializer;
  4036. localFileName : string;
  4037. begin
  4038. locFac := TSDODataFactory.Create() as ISDODataFactory;
  4039. locFac.AddType(s_uri,s_DepartmentType,[]);
  4040. locFac.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  4041. locFac.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  4042. locFac.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[ByteType],[]);
  4043. locFac.addProperty(s_uri,s_DepartmentType,PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE],[pfIsMany]);
  4044. locFac.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  4045. locDep := locFac.createNew(s_uri,s_DepartmentType);
  4046. locDep.setString(s_name,'R & D');
  4047. locDep.setString(s_location,'Ouaga, BF');
  4048. locDep.setByte(s_number,123);
  4049. ls := locDep.getList(PROP_NAME);
  4050. ls.append(FLOAT_VALUES_REPEATED_DIGITED[0]);
  4051. ls.append(FLOAT_VALUES_REPEATED_DIGITED[1]);
  4052. ls.append(FLOAT_VALUES_REPEATED_DIGITED[2]);
  4053. locCS := locDep.getChangeSummary();
  4054. locCS.beginLogging();
  4055. locDep.setString(s_name,'R & D Department');
  4056. locDep.setString(s_location,'Ouaga 01, BF');
  4057. ls.setFloat(0,FLOAT_VALUES_REPEATED_DIGITED[3]);
  4058. ls.append(FLOAT_VALUES_REPEATED_DIGITED[4]);
  4059. ls.append(FLOAT_VALUES_REPEATED_DIGITED[5]);
  4060. ls.setFloat(1,FLOAT_VALUES_REPEATED_DIGITED[6]);
  4061. ls.delete(0);
  4062. ls.delete(1);
  4063. ls.insert(2, FLOAT_VALUES_REPEATED_DIGITED[7]);
  4064. ls.append(FLOAT_VALUES_REPEATED_DIGITED[8]);
  4065. {$IFDEF TEST_GENERATE_FILE}
  4066. (TSDOSerializer.Create(locFac,TSDOSerializerStreamXML.Create())as ISDOSerializer).save(locDep,sdoExpandLocalFileName(FILE_NAME));
  4067. {$ENDIF TEST_GENERATE_FILE}
  4068. localFileName := sdoExpandLocalFileName(TestFilesPath + FILE_NAME);
  4069. f := TSDOSerializerStreamXML.Create();
  4070. tmpFactory := TSDOBaseDataFactory.Create();
  4071. s := TSDOSerializer.Create(tmpFactory,f);
  4072. locLoadedDep := s.load(localFileName);
  4073. Check(TSDOEqualityHelper.equal(locDep, locLoadedDep),'Object');
  4074. Compare(
  4075. locDep.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  4076. locLoadedDep.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  4077. );
  4078. end;
  4079. {$ENDIF HAS_SDO_FLOAT}
  4080. procedure TSDOSerializer_Test.load_from_file_changesummary_bool();
  4081. const
  4082. PROP_NAME = 'sampleProperty';
  4083. PROP_TYPE = BooleanType;
  4084. VAL_1 : TSDOBoolean = True;
  4085. VAL_2 : TSDOBoolean = False;
  4086. var
  4087. locFac, tmpFactory : ISDODataFactory;
  4088. locEmployee : ISDODataObject;
  4089. locCS : ISDOChangeSummary;
  4090. f : ISDOSerializerStream;
  4091. s : ISDOSerializer;
  4092. localFileName : string;
  4093. ol : ISDODataObjectList;
  4094. begin
  4095. localFileName := sdoExpandLocalFileName(TestFilesPath + 'change_summary_bool.xml');
  4096. locFac := TSDODataFactory.Create() as ISDODataFactory;
  4097. locFac.AddType(s_uri,s_Employee,[]);
  4098. locFac.addProperty(s_uri,s_Employee,PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE],[]);
  4099. locFac.addProperty(s_uri,s_Employee,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  4100. locEmployee := locFac.createNew(s_uri,s_Employee);
  4101. locEmployee.setBoolean(PROP_NAME,VAL_1);
  4102. locCS := locEmployee.getChangeSummary();
  4103. locCS.beginLogging();
  4104. locEmployee.setBoolean(PROP_NAME,VAL_2);
  4105. //(TSDOSerializer.Create(locFac,TSDOSerializerStreamXML.Create())as ISDOSerializer).save(locEmployee,sdoExpandLocalFileName('change_summary_bool.xml'));
  4106. f := TSDOSerializerStreamXML.Create();
  4107. tmpFactory := TSDODataFactory.Create();
  4108. s := TSDOSerializer.Create(tmpFactory,f);
  4109. ol := TSDODataObjectList.Create(tmpFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[ObjectType]));
  4110. s.load(localFileName,ol);
  4111. Check(TSDOEqualityHelper.equal(locEmployee,ol.getDataObject(0)));
  4112. Compare(
  4113. locEmployee.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  4114. ol.getDataObject(0).getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  4115. );
  4116. locEmployee.getChangeSummary().undoChanges();
  4117. ol.getDataObject(0).getChangeSummary().undoChanges();
  4118. CheckEquals(0, locEmployee.getChangeSummary().getChangedDataObjects().size());
  4119. CheckEquals(0, ol.getDataObject(0).getChangeSummary().getChangedDataObjects().size());
  4120. Check(TSDOEqualityHelper.equal(locEmployee,ol.getDataObject(0)));
  4121. end;
  4122. procedure TSDOSerializer_Test.load_from_file_changesummary_byte();
  4123. const
  4124. PROP_NAME = 'sampleProperty';
  4125. PROP_TYPE = ByteType;
  4126. FILE_NAME = 'change_summary_byte.xml';
  4127. VAL_1 : TSDOByte = 200;
  4128. VAL_2 : TSDOByte = 123;
  4129. var
  4130. locFac, tmpFactory : ISDODataFactory;
  4131. locEmployee : ISDODataObject;
  4132. locCS : ISDOChangeSummary;
  4133. f : ISDOSerializerStream;
  4134. s : ISDOSerializer;
  4135. localFileName : string;
  4136. ol : ISDODataObjectList;
  4137. begin
  4138. localFileName := sdoExpandLocalFileName(TestFilesPath + FILE_NAME);
  4139. locFac := TSDODataFactory.Create() as ISDODataFactory;
  4140. locFac.AddType(s_uri,s_Employee,[]);
  4141. locFac.addProperty(s_uri,s_Employee,PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE],[]);
  4142. locFac.addProperty(s_uri,s_Employee,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  4143. locEmployee := locFac.createNew(s_uri,s_Employee);
  4144. locEmployee.setByte(PROP_NAME,VAL_1);
  4145. locCS := locEmployee.getChangeSummary();
  4146. locCS.beginLogging();
  4147. locEmployee.setByte(PROP_NAME,VAL_2);
  4148. {$IFDEF TEST_GENERATE_FILE}
  4149. (TSDOSerializer.Create(locFac,TSDOSerializerStreamXML.Create())as ISDOSerializer).save(locEmployee,sdoExpandLocalFileName(FILE_NAME));
  4150. {$ENDIF TEST_GENERATE_FILE}
  4151. f := TSDOSerializerStreamXML.Create();
  4152. tmpFactory := TSDODataFactory.Create();
  4153. s := TSDOSerializer.Create(tmpFactory,f);
  4154. ol := TSDODataObjectList.Create(tmpFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[ObjectType]));
  4155. s.load(localFileName,ol);
  4156. Check(TSDOEqualityHelper.equal(locEmployee,ol.getDataObject(0)));
  4157. Compare(
  4158. locEmployee.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  4159. ol.getDataObject(0).getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  4160. );
  4161. locEmployee.getChangeSummary().undoChanges();
  4162. ol.getDataObject(0).getChangeSummary().undoChanges();
  4163. CheckEquals(0, locEmployee.getChangeSummary().getChangedDataObjects().size());
  4164. CheckEquals(0, ol.getDataObject(0).getChangeSummary().getChangedDataObjects().size());
  4165. Check(TSDOEqualityHelper.equal(locEmployee,ol.getDataObject(0)));
  4166. end;
  4167. {$IFDEF HAS_SDO_CHAR}
  4168. procedure TSDOSerializer_Test.load_from_file_changesummary_char();
  4169. const
  4170. PROP_NAME = 'sampleProperty';
  4171. PROP_TYPE = CharacterType;
  4172. FILE_NAME = 'change_summary_char.xml';
  4173. VAL_1 : TSDOChar = 'a';
  4174. VAL_2 : TSDOChar = 'z';
  4175. var
  4176. locFac, tmpFactory : ISDODataFactory;
  4177. locEmployee : ISDODataObject;
  4178. locCS : ISDOChangeSummary;
  4179. f : ISDOSerializerStream;
  4180. s : ISDOSerializer;
  4181. localFileName : string;
  4182. ol : ISDODataObjectList;
  4183. begin
  4184. localFileName := sdoExpandLocalFileName(TestFilesPath + FILE_NAME);
  4185. locFac := TSDODataFactory.Create() as ISDODataFactory;
  4186. locFac.AddType(s_uri,s_Employee,[]);
  4187. locFac.addProperty(s_uri,s_Employee,PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE],[]);
  4188. locFac.addProperty(s_uri,s_Employee,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  4189. locEmployee := locFac.createNew(s_uri,s_Employee);
  4190. locEmployee.setCharacter(PROP_NAME,VAL_1);
  4191. locCS := locEmployee.getChangeSummary();
  4192. locCS.beginLogging();
  4193. locEmployee.setCharacter(PROP_NAME,VAL_2);
  4194. {$IFDEF TEST_GENERATE_FILE}
  4195. (TSDOSerializer.Create(locFac,TSDOSerializerStreamXML.Create())as ISDOSerializer).save(locEmployee,sdoExpandLocalFileName(FILE_NAME));
  4196. {$ENDIF TEST_GENERATE_FILE}
  4197. f := TSDOSerializerStreamXML.Create();
  4198. tmpFactory := TSDODataFactory.Create();
  4199. s := TSDOSerializer.Create(tmpFactory,f);
  4200. ol := TSDODataObjectList.Create(tmpFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[ObjectType]));
  4201. s.load(localFileName,ol);
  4202. Check(TSDOEqualityHelper.equal(locEmployee,ol.getDataObject(0)));
  4203. Compare(
  4204. locEmployee.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  4205. ol.getDataObject(0).getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  4206. );
  4207. locEmployee.getChangeSummary().undoChanges();
  4208. ol.getDataObject(0).getChangeSummary().undoChanges();
  4209. CheckEquals(0, locEmployee.getChangeSummary().getChangedDataObjects().size());
  4210. CheckEquals(0, ol.getDataObject(0).getChangeSummary().getChangedDataObjects().size());
  4211. Check(TSDOEqualityHelper.equal(locEmployee,ol.getDataObject(0)));
  4212. end;
  4213. {$ENDIF HAS_SDO_CHAR}
  4214. procedure TSDOSerializer_Test.load_from_file_changesummary_date();
  4215. const
  4216. PROP_NAME = 'sampleProperty';
  4217. PROP_TYPE = DateTimeType;
  4218. VAL_1 : TSDODate = ( Date : 45123; HourOffset : 0; MinuteOffset : 5; );
  4219. VAL_2 : TSDODate = ( Date : 39000; HourOffset : -8; MinuteOffset : 0; );
  4220. var
  4221. locFac, tmpFactory : ISDODataFactory;
  4222. locEmployee : ISDODataObject;
  4223. locCS : ISDOChangeSummary;
  4224. f : ISDOSerializerStream;
  4225. s : ISDOSerializer;
  4226. localFileName : string;
  4227. ol : ISDODataObjectList;
  4228. begin
  4229. localFileName := sdoExpandLocalFileName(TestFilesPath + 'change_summary_date.xml');
  4230. locFac := TSDODataFactory.Create() as ISDODataFactory;
  4231. locFac.AddType(s_uri,s_Employee,[]);
  4232. locFac.addProperty(s_uri,s_Employee,PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE],[]);
  4233. locFac.addProperty(s_uri,s_Employee,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  4234. locEmployee := locFac.createNew(s_uri,s_Employee);
  4235. locEmployee.setDate(PROP_NAME,VAL_1);
  4236. locCS := locEmployee.getChangeSummary();
  4237. locCS.beginLogging();
  4238. locEmployee.setDate(PROP_NAME,VAL_2);
  4239. f := TSDOSerializerStreamXML.Create();
  4240. tmpFactory := TSDODataFactory.Create();
  4241. s := TSDOSerializer.Create(tmpFactory,f);
  4242. ol := TSDODataObjectList.Create(tmpFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[ObjectType]));
  4243. s.load(localFileName,ol);
  4244. Check(TSDOEqualityHelper.equal(locEmployee,ol.getDataObject(0)));
  4245. Compare(
  4246. locEmployee.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  4247. ol.getDataObject(0).getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  4248. );
  4249. locEmployee.getChangeSummary().undoChanges();
  4250. ol.getDataObject(0).getChangeSummary().undoChanges();
  4251. CheckEquals(0, locEmployee.getChangeSummary().getChangedDataObjects().size());
  4252. CheckEquals(0, ol.getDataObject(0).getChangeSummary().getChangedDataObjects().size());
  4253. Check(TSDOEqualityHelper.equal(locEmployee,ol.getDataObject(0)));
  4254. end;
  4255. procedure TSDOSerializer_Test.load_from_file_changesummary_integer();
  4256. const
  4257. PROP_NAME = 'sampleProperty';
  4258. PROP_TYPE = IntegerType;
  4259. VAL_1 : TSDOInteger = 12345;
  4260. VAL_2 : TSDOInteger = -789;
  4261. var
  4262. locFac, tmpFactory : ISDODataFactory;
  4263. locEmployee : ISDODataObject;
  4264. locCS : ISDOChangeSummary;
  4265. f : ISDOSerializerStream;
  4266. s : ISDOSerializer;
  4267. localFileName : string;
  4268. ol : ISDODataObjectList;
  4269. begin
  4270. localFileName := sdoExpandLocalFileName(TestFilesPath + 'change_summary_integer.xml');
  4271. locFac := TSDODataFactory.Create() as ISDODataFactory;
  4272. locFac.AddType(s_uri,s_Employee,[]);
  4273. locFac.addProperty(s_uri,s_Employee,PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE],[]);
  4274. locFac.addProperty(s_uri,s_Employee,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  4275. locEmployee := locFac.createNew(s_uri,s_Employee);
  4276. locEmployee.setInteger(PROP_NAME,VAL_1);
  4277. locCS := locEmployee.getChangeSummary();
  4278. locCS.beginLogging();
  4279. locEmployee.setInteger(PROP_NAME,VAL_2);
  4280. //(TSDOSerializer.Create(locFac,TSDOSerializerStreamXML.Create())as ISDOSerializer).save(locEmployee,sdoExpandLocalFileName('change_summary_integer.xml'));
  4281. f := TSDOSerializerStreamXML.Create();
  4282. tmpFactory := TSDODataFactory.Create();
  4283. s := TSDOSerializer.Create(tmpFactory,f);
  4284. ol := TSDODataObjectList.Create(tmpFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[ObjectType]));
  4285. s.load(localFileName,ol);
  4286. Check(TSDOEqualityHelper.equal(locEmployee,ol.getDataObject(0)));
  4287. Compare(
  4288. locEmployee.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  4289. ol.getDataObject(0).getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  4290. );
  4291. locEmployee.getChangeSummary().undoChanges();
  4292. ol.getDataObject(0).getChangeSummary().undoChanges();
  4293. CheckEquals(0, locEmployee.getChangeSummary().getChangedDataObjects().size());
  4294. CheckEquals(0, ol.getDataObject(0).getChangeSummary().getChangedDataObjects().size());
  4295. Check(TSDOEqualityHelper.equal(locEmployee,ol.getDataObject(0)));
  4296. end;
  4297. {$IFDEF HAS_SDO_LONG}
  4298. procedure TSDOSerializer_Test.load_from_file_changesummary_long();
  4299. const
  4300. PROP_NAME = 'sampleProperty';
  4301. PROP_TYPE = LongType;
  4302. FILE_NAME = 'change_summary_long.xml';
  4303. VAL_1 : TSDOLong = 123987456321456987;
  4304. VAL_2 : TSDOLong = -458215687422;
  4305. var
  4306. locFac, tmpFactory : ISDODataFactory;
  4307. locEmployee : ISDODataObject;
  4308. locCS : ISDOChangeSummary;
  4309. f : ISDOSerializerStream;
  4310. s : ISDOSerializer;
  4311. localFileName : string;
  4312. ol : ISDODataObjectList;
  4313. begin
  4314. localFileName := sdoExpandLocalFileName(TestFilesPath + FILE_NAME);
  4315. locFac := TSDODataFactory.Create() as ISDODataFactory;
  4316. locFac.AddType(s_uri,s_Employee,[]);
  4317. locFac.addProperty(s_uri,s_Employee,PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE],[]);
  4318. locFac.addProperty(s_uri,s_Employee,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  4319. locEmployee := locFac.createNew(s_uri,s_Employee);
  4320. locEmployee.setLong(PROP_NAME,VAL_1);
  4321. locCS := locEmployee.getChangeSummary();
  4322. locCS.beginLogging();
  4323. locEmployee.setLong(PROP_NAME,VAL_2);
  4324. {$IFDEF TEST_GENERATE_FILE}
  4325. (TSDOSerializer.Create(locFac,TSDOSerializerStreamXML.Create())as ISDOSerializer).save(locEmployee,sdoExpandLocalFileName(FILE_NAME));
  4326. {$ENDIF TEST_GENERATE_FILE}
  4327. f := TSDOSerializerStreamXML.Create();
  4328. tmpFactory := TSDODataFactory.Create();
  4329. s := TSDOSerializer.Create(tmpFactory,f);
  4330. ol := TSDODataObjectList.Create(tmpFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[ObjectType]));
  4331. s.load(localFileName,ol);
  4332. Check(TSDOEqualityHelper.equal(locEmployee,ol.getDataObject(0)));
  4333. Compare(
  4334. locEmployee.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  4335. ol.getDataObject(0).getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  4336. );
  4337. locEmployee.getChangeSummary().undoChanges();
  4338. ol.getDataObject(0).getChangeSummary().undoChanges();
  4339. CheckEquals(0, locEmployee.getChangeSummary().getChangedDataObjects().size());
  4340. CheckEquals(0, ol.getDataObject(0).getChangeSummary().getChangedDataObjects().size());
  4341. Check(TSDOEqualityHelper.equal(locEmployee,ol.getDataObject(0)));
  4342. end;
  4343. {$ENDIF HAS_SDO_LONG}
  4344. {$IFDEF HAS_SDO_SHORT}
  4345. procedure TSDOSerializer_Test.load_from_file_changesummary_short();
  4346. const
  4347. PROP_NAME = 'sampleProperty';
  4348. PROP_TYPE = ShortType;
  4349. FILE_NAME = 'change_summary_short.xml';
  4350. VAL_1 : TSDOShort = 1592;
  4351. VAL_2 : TSDOShort = -9876;
  4352. var
  4353. locFac, tmpFactory : ISDODataFactory;
  4354. locEmployee : ISDODataObject;
  4355. locCS : ISDOChangeSummary;
  4356. f : ISDOSerializerStream;
  4357. s : ISDOSerializer;
  4358. localFileName : string;
  4359. ol : ISDODataObjectList;
  4360. begin
  4361. localFileName := sdoExpandLocalFileName(TestFilesPath + FILE_NAME);
  4362. locFac := TSDODataFactory.Create() as ISDODataFactory;
  4363. locFac.AddType(s_uri,s_Employee,[]);
  4364. locFac.addProperty(s_uri,s_Employee,PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE],[]);
  4365. locFac.addProperty(s_uri,s_Employee,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  4366. locEmployee := locFac.createNew(s_uri,s_Employee);
  4367. locEmployee.setShort(PROP_NAME,VAL_1);
  4368. locCS := locEmployee.getChangeSummary();
  4369. locCS.beginLogging();
  4370. locEmployee.setShort(PROP_NAME,VAL_2);
  4371. {$IFDEF TEST_GENERATE_FILE}
  4372. (TSDOSerializer.Create(locFac,TSDOSerializerStreamXML.Create())as ISDOSerializer).save(locEmployee,sdoExpandLocalFileName(FILE_NAME));
  4373. {$ENDIF TEST_GENERATE_FILE}
  4374. f := TSDOSerializerStreamXML.Create();
  4375. tmpFactory := TSDODataFactory.Create();
  4376. s := TSDOSerializer.Create(tmpFactory,f);
  4377. ol := TSDODataObjectList.Create(tmpFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[ObjectType]));
  4378. s.load(localFileName,ol);
  4379. Check(TSDOEqualityHelper.equal(locEmployee,ol.getDataObject(0)));
  4380. Compare(
  4381. locEmployee.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  4382. ol.getDataObject(0).getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  4383. );
  4384. locEmployee.getChangeSummary().undoChanges();
  4385. ol.getDataObject(0).getChangeSummary().undoChanges();
  4386. CheckEquals(0, locEmployee.getChangeSummary().getChangedDataObjects().size());
  4387. CheckEquals(0, ol.getDataObject(0).getChangeSummary().getChangedDataObjects().size());
  4388. Check(TSDOEqualityHelper.equal(locEmployee,ol.getDataObject(0)));
  4389. end;
  4390. {$ENDIF HAS_SDO_SHORT}
  4391. procedure TSDOSerializer_Test.load_from_file_changesummary_string();
  4392. const
  4393. PROP_NAME = 'sampleProperty';
  4394. PROP_TYPE = StringType;
  4395. VAL_1 : TSDOString = 'Inoussa.O';
  4396. VAL_2 : TSDOString = 'sdo.fpc.delphi';
  4397. var
  4398. locFac, tmpFactory : ISDODataFactory;
  4399. locEmployee : ISDODataObject;
  4400. locCS : ISDOChangeSummary;
  4401. f : ISDOSerializerStream;
  4402. s : ISDOSerializer;
  4403. localFileName : string;
  4404. ol : ISDODataObjectList;
  4405. begin
  4406. localFileName := sdoExpandLocalFileName(TestFilesPath + 'change_summary_string.xml');
  4407. locFac := TSDODataFactory.Create() as ISDODataFactory;
  4408. locFac.AddType(s_uri,s_Employee,[]);
  4409. locFac.addProperty(s_uri,s_Employee,PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE],[]);
  4410. locFac.addProperty(s_uri,s_Employee,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  4411. locEmployee := locFac.createNew(s_uri,s_Employee);
  4412. locEmployee.setString(PROP_NAME,VAL_1);
  4413. locCS := locEmployee.getChangeSummary();
  4414. locCS.beginLogging();
  4415. locEmployee.setString(PROP_NAME,VAL_2);
  4416. //(TSDOSerializer.Create(locFac,TSDOSerializerStreamXML.Create())as ISDOSerializer).save(locEmployee,sdoExpandLocalFileName('change_summary_string.xml'));
  4417. f := TSDOSerializerStreamXML.Create();
  4418. tmpFactory := TSDODataFactory.Create();
  4419. s := TSDOSerializer.Create(tmpFactory,f);
  4420. ol := TSDODataObjectList.Create(tmpFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[ObjectType]));
  4421. s.load(localFileName,ol);
  4422. Check(TSDOEqualityHelper.equal(locEmployee,ol.getDataObject(0)));
  4423. Compare(
  4424. locEmployee.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  4425. ol.getDataObject(0).getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  4426. );
  4427. locEmployee.getChangeSummary().undoChanges();
  4428. ol.getDataObject(0).getChangeSummary().undoChanges();
  4429. CheckEquals(0, locEmployee.getChangeSummary().getChangedDataObjects().size());
  4430. CheckEquals(0, ol.getDataObject(0).getChangeSummary().getChangedDataObjects().size());
  4431. Check(TSDOEqualityHelper.equal(locEmployee,ol.getDataObject(0)));
  4432. end;
  4433. procedure TSDOSerializer_Test.CheckEquals(expected, actual: TSDODate;
  4434. msg: string; const AStrict: Boolean);
  4435. var
  4436. e, a : TDateTime;
  4437. e_y, e_m, e_d, e_h, e_mn, e_ss, e_ms : Word;
  4438. a_y, a_m, a_d, a_h, a_mn, a_ss, a_ms : Word;
  4439. begin
  4440. if AStrict then begin
  4441. Check(CompareMem(@expected, @actual, SizeOf(TSDODate)), msg);
  4442. end else begin
  4443. e := NormalizeToUTC(expected);
  4444. a := NormalizeToUTC(actual);
  4445. DecodeDateTime(e, e_y, e_m, e_d, e_h, e_mn, e_ss, e_ms);
  4446. DecodeDateTime(a, a_y, a_m, a_d, a_h, a_mn, a_ss, a_ms);
  4447. CheckEquals(e_y,a_y,msg);
  4448. CheckEquals(e_m,a_m,msg);
  4449. CheckEquals(e_d,a_d,msg);
  4450. CheckEquals(e_h,a_h,msg);
  4451. CheckEquals(e_mn,a_mn,msg);
  4452. CheckEquals(e_ss,a_ss,msg);
  4453. CheckEquals(e_ms,a_ms,msg);
  4454. end;
  4455. end;
  4456. procedure TSDOSerializer_Test.load_from_file_changesummary_prop_list_byte();
  4457. const
  4458. PROP_NAME = s_list_byte;
  4459. PROP_TYPE = ByteType;
  4460. FILE_NAME = 'changesummary_prop_list_byte.xml';
  4461. var
  4462. locFac, tmpFactory : ISDODataFactory;
  4463. locDep, locLoadedDep : ISDODataObject;
  4464. ls : ISDODataObjectList;
  4465. locCS : ISDOChangeSummary;
  4466. f : ISDOSerializerStream;
  4467. s : ISDOSerializer;
  4468. localFileName : string;
  4469. begin
  4470. locFac := TSDODataFactory.Create() as ISDODataFactory;
  4471. locFac.AddType(s_uri,s_DepartmentType,[]);
  4472. locFac.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  4473. locFac.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  4474. locFac.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[ByteType],[]);
  4475. locFac.addProperty(s_uri,s_DepartmentType,PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE],[pfIsMany]);
  4476. locFac.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  4477. locDep := locFac.createNew(s_uri,s_DepartmentType);
  4478. locDep.setString(s_name,'R & D');
  4479. locDep.setString(s_location,'Ouaga, BF');
  4480. locDep.setByte(s_number,123);
  4481. ls := locDep.getList(PROP_NAME);
  4482. ls.append(TSDOByte(1));
  4483. ls.append(TSDOByte(2));
  4484. ls.append(TSDOByte(3));
  4485. locCS := locDep.getChangeSummary();
  4486. locCS.beginLogging();
  4487. locDep.setString(s_name,'R & D Department');
  4488. locDep.setString(s_location,'Ouaga 01, BF');
  4489. ls.setByte(0,10);
  4490. ls.append(TSDOByte(123));
  4491. ls.append(TSDOByte(45));
  4492. ls.setByte(1,20);
  4493. ls.delete(0);
  4494. ls.delete(1);
  4495. ls.insert(2, TSDOByte(107));
  4496. ls.append(TSDOByte(89));
  4497. {$IFDEF TEST_GENERATE_FILE}
  4498. (TSDOSerializer.Create(locFac,TSDOSerializerStreamXML.Create())as ISDOSerializer).save(locDep,sdoExpandLocalFileName(FILE_NAME));
  4499. {$ENDIF TEST_GENERATE_FILE}
  4500. localFileName := sdoExpandLocalFileName(TestFilesPath + FILE_NAME);
  4501. f := TSDOSerializerStreamXML.Create();
  4502. tmpFactory := TSDOBaseDataFactory.Create();
  4503. s := TSDOSerializer.Create(tmpFactory,f);
  4504. locLoadedDep := s.load(localFileName);
  4505. Check(TSDOEqualityHelper.equal(locDep, locLoadedDep),'Object');
  4506. Compare(
  4507. locDep.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  4508. locLoadedDep.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  4509. );
  4510. end;
  4511. {$IFDEF HAS_SDO_CHAR}
  4512. procedure TSDOSerializer_Test.load_from_file_changesummary_prop_list_char();
  4513. const
  4514. PROP_NAME = s_list_char;
  4515. PROP_TYPE = CharacterType;
  4516. FILE_NAME = 'changesummary_prop_list_char.xml';
  4517. var
  4518. locFac, tmpFactory : ISDODataFactory;
  4519. locDep, locLoadedDep : ISDODataObject;
  4520. ls : ISDODataObjectList;
  4521. locCS : ISDOChangeSummary;
  4522. f : ISDOSerializerStream;
  4523. s : ISDOSerializer;
  4524. localFileName : string;
  4525. begin
  4526. locFac := TSDODataFactory.Create() as ISDODataFactory;
  4527. locFac.AddType(s_uri,s_DepartmentType,[]);
  4528. locFac.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  4529. locFac.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  4530. locFac.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[ByteType],[]);
  4531. locFac.addProperty(s_uri,s_DepartmentType,PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE],[pfIsMany]);
  4532. locFac.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  4533. locDep := locFac.createNew(s_uri,s_DepartmentType);
  4534. locDep.setString(s_name,'R & D');
  4535. locDep.setString(s_location,'Ouaga, BF');
  4536. locDep.setByte(s_number,123);
  4537. ls := locDep.getList(PROP_NAME);
  4538. ls.append(TSDOChar('k'));
  4539. ls.append(TSDOChar('y'));
  4540. ls.append(TSDOChar('g'));
  4541. locCS := locDep.getChangeSummary();
  4542. locCS.beginLogging();
  4543. locDep.setString(s_name,'R & D Department');
  4544. locDep.setString(s_location,'Ouaga 01, BF');
  4545. ls.setCharacter(0,TSDOChar('j'));
  4546. ls.append(TSDOChar('a'));
  4547. ls.append(TSDOChar('x'));
  4548. ls.setCharacter(1,TSDOChar('v'));
  4549. ls.delete(0);
  4550. ls.delete(1);
  4551. ls.insert(2, TSDOChar('A'));
  4552. ls.append(TSDOChar('Z'));
  4553. {$IFDEF TEST_GENERATE_FILE}
  4554. (TSDOSerializer.Create(locFac,TSDOSerializerStreamXML.Create())as ISDOSerializer).save(locDep,sdoExpandLocalFileName(FILE_NAME));
  4555. {$ENDIF TEST_GENERATE_FILE}
  4556. localFileName := sdoExpandLocalFileName(TestFilesPath + FILE_NAME);
  4557. f := TSDOSerializerStreamXML.Create();
  4558. tmpFactory := TSDOBaseDataFactory.Create();
  4559. s := TSDOSerializer.Create(tmpFactory,f);
  4560. locLoadedDep := s.load(localFileName);
  4561. Check(TSDOEqualityHelper.equal(locDep, locLoadedDep),'Object');
  4562. Compare(
  4563. locDep.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  4564. locLoadedDep.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  4565. );
  4566. end;
  4567. {$ENDIF HAS_SDO_CHAR}
  4568. procedure TSDOSerializer_Test.load_from_file_changesummary_prop_list_date();
  4569. const VAL_1 : TSDODate = ( Date : 0; HourOffset : 0; MinuteOffset : 0; );
  4570. VAL_2 : TSDODate = ( Date : 0; HourOffset : 0; MinuteOffset : 0; );
  4571. VAL_3 : TSDODate = ( Date : 0; HourOffset : 0; MinuteOffset : 0; );
  4572. VAL_4 : TSDODate = ( Date : 0; HourOffset : 0; MinuteOffset : 0; );
  4573. VAL_5 : TSDODate = ( Date : 0; HourOffset : 0; MinuteOffset : 0; );
  4574. procedure SetConstants();
  4575. var
  4576. d : TSDODate;
  4577. begin
  4578. FillChar(d,SizeOf(TSDODate),#0);
  4579. d.Date := EncodeDateTime(1976,10,12,23,34,45,56);
  4580. d.HourOffset := 5;
  4581. d.MinuteOffset := 6;
  4582. PSDODate(@VAL_1)^ := d;
  4583. FillChar(d,SizeOf(TSDODate),#0);
  4584. d.Date := EncodeDateTime(2008,7,8,9,10,11,12);
  4585. d.HourOffset := 0;
  4586. d.MinuteOffset := 13;
  4587. PSDODate(@VAL_3)^ := d;
  4588. FillChar(d,SizeOf(TSDODate),#0);
  4589. d.Date := EncodeDateTime(2009,9,1,2,3,0,1);
  4590. d.HourOffset := 0;
  4591. d.MinuteOffset := 13;
  4592. PSDODate(@VAL_4)^ := d;
  4593. FillChar(d,SizeOf(TSDODate),#0);
  4594. d.Date := EncodeDateTime(1900,11,8,1,2,0,0);
  4595. d.HourOffset := 0;
  4596. d.MinuteOffset := 13;
  4597. PSDODate(@VAL_5)^ := d;
  4598. end;
  4599. var
  4600. locFac, tmpFactory : ISDODataFactory;
  4601. locDep, locLoadedDep : ISDODataObject;
  4602. ls : ISDODataObjectList;
  4603. locCS : ISDOChangeSummary;
  4604. f : ISDOSerializerStream;
  4605. s : ISDOSerializer;
  4606. localFileName : string;
  4607. begin
  4608. SetConstants();
  4609. localFileName := sdoExpandLocalFileName('changesummary_prop_list_date.xml');
  4610. locFac := TSDODataFactory.Create() as ISDODataFactory;
  4611. locFac.AddType(s_uri,s_DepartmentType,[]);
  4612. locFac.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  4613. locFac.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  4614. locFac.addProperty(s_uri,s_DepartmentType,s_birthDate,sdo_namespace,SDOTypeDefaultTypeNames[DateTimeType],[]);
  4615. locFac.addProperty(s_uri,s_DepartmentType,s_list_date,sdo_namespace,SDOTypeDefaultTypeNames[DateTimeType],[pfIsMany]);
  4616. locFac.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  4617. locDep := locFac.createNew(s_uri,s_DepartmentType);
  4618. locDep.setString(s_name,'R & D');
  4619. locDep.setString(s_location,'Ouaga, BF');
  4620. locDep.setDate(s_birthDate,VAL_1);
  4621. ls := locDep.getList(s_list_date);
  4622. ls.append(VAL_1);
  4623. ls.append(VAL_2);
  4624. ls.append(VAL_3);
  4625. locCS := locDep.getChangeSummary();
  4626. locCS.beginLogging();
  4627. locDep.setString(s_name,'R & D Department');
  4628. locDep.setString(s_location,'Ouaga 01, BF');
  4629. ls.setDate(0,VAL_4);
  4630. ls.append(VAL_5);
  4631. ls.append(VAL_1);
  4632. ls.setDate(1,VAL_2);
  4633. ls.delete(0);
  4634. ls.delete(1);
  4635. ls.insert(2, VAL_3);
  4636. ls.append(VAL_4);
  4637. localFileName := sdoExpandLocalFileName(TestFilesPath + 'changesummary_prop_list_date.xml');
  4638. f := TSDOSerializerStreamXML.Create();
  4639. tmpFactory := TSDOBaseDataFactory.Create();
  4640. s := TSDOSerializer.Create(tmpFactory,f);
  4641. locLoadedDep := s.load(localFileName);
  4642. Check(TSDOEqualityHelper.equal(locDep, locLoadedDep),'Object');
  4643. Compare(
  4644. locDep.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  4645. locLoadedDep.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  4646. );
  4647. end;
  4648. { TSDOSerializerXML_Test }
  4649. class function TSDOSerializerXML_Test.CreateSerializerStream: ISDOSerializerStream;
  4650. begin
  4651. Result := TSDOSerializerStreamXML.Create();
  4652. end;
  4653. initialization
  4654. RegisterTest('Helpers',TSDOSerializerXML_Test.Suite);
  4655. end.