test_serializer.pas 295 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915691669176918691969206921692269236924692569266927692869296930693169326933693469356936693769386939694069416942694369446945694669476948694969506951695269536954695569566957695869596960696169626963696469656966696769686969697069716972697369746975697669776978697969806981698269836984698569866987698869896990699169926993699469956996699769986999700070017002700370047005700670077008700970107011701270137014701570167017701870197020702170227023702470257026702770287029703070317032703370347035703670377038703970407041704270437044704570467047704870497050705170527053705470557056705770587059706070617062706370647065706670677068706970707071707270737074707570767077707870797080708170827083708470857086708770887089709070917092709370947095709670977098709971007101710271037104710571067107710871097110711171127113711471157116711771187119712071217122712371247125712671277128712971307131713271337134713571367137713871397140714171427143714471457146714771487149715071517152715371547155715671577158715971607161716271637164716571667167716871697170717171727173717471757176717771787179718071817182718371847185718671877188718971907191719271937194719571967197719871997200720172027203720472057206720772087209721072117212721372147215721672177218721972207221722272237224722572267227722872297230723172327233723472357236723772387239724072417242724372447245724672477248724972507251725272537254725572567257725872597260726172627263726472657266726772687269727072717272727372747275727672777278727972807281728272837284728572867287728872897290729172927293729472957296729772987299730073017302730373047305730673077308730973107311731273137314731573167317731873197320732173227323732473257326732773287329733073317332733373347335733673377338733973407341734273437344734573467347734873497350735173527353735473557356735773587359736073617362736373647365736673677368736973707371737273737374737573767377737873797380738173827383738473857386738773887389739073917392739373947395739673977398739974007401740274037404740574067407740874097410741174127413741474157416741774187419742074217422742374247425742674277428742974307431743274337434743574367437743874397440744174427443744474457446744774487449745074517452745374547455745674577458745974607461746274637464746574667467746874697470747174727473747474757476747774787479748074817482748374847485748674877488748974907491749274937494749574967497749874997500750175027503750475057506750775087509751075117512751375147515751675177518751975207521752275237524752575267527752875297530753175327533753475357536753775387539754075417542754375447545754675477548754975507551
  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 }
  18. TSDOBaseSerializer_Test = class(TWstBaseTest)
  19. protected
  20. class function CreateSerializerStream() : ISDOSerializerStream; virtual; abstract;
  21. procedure Compare(const A, B : ISDOChangedDataObjectListEx; const AOptions : TListCompareOptions = []);overload;
  22. procedure Compare(const A, B : TDataObjectChangeInfo);overload;
  23. procedure Compare(const A, B : TValueBuffer; const ADataType : TSDOTypeKind);overload;
  24. procedure Compare(const A, B : TValueSetting);overload;
  25. procedure Compare(const A, B : TManyValuePropChangesList);overload;
  26. procedure CheckEquals(expected, actual: TSDODate; msg: string = ''; const AStrict : Boolean = True); overload;
  27. protected
  28. function CreateSdoTypes() : ISDODataFactory;
  29. function CreateCompanyObject(const AFactory : ISDODataFactory) : ISDODataObject;
  30. end;
  31. { TSDOSerializer_Test }
  32. TSDOSerializer_Test = class(TSDOBaseSerializer_Test)
  33. protected
  34. //function GetFileName() : string;
  35. procedure CompareTypesInclude(
  36. // A included in B ?
  37. const A,B : ISDOTypeList
  38. );
  39. published
  40. procedure save_to_stream();
  41. procedure save_to_stream_without_name();
  42. procedure save_to_file();
  43. procedure save_to_file_without_name();
  44. procedure save_to_file_null_bool_prop();
  45. procedure save_to_file_null_byte_prop();
  46. procedure save_to_file_null_bytes_prop();
  47. procedure save_to_file_null_char_prop();
  48. procedure save_to_file_null_currency_prop();
  49. procedure save_to_file_null_datetime_prop();
  50. procedure save_to_file_null_double_prop();
  51. procedure save_to_file_null_float_prop();
  52. procedure save_to_file_null_int_prop();
  53. procedure save_to_file_null_long_prop();
  54. procedure save_to_file_null_object_prop();
  55. procedure save_to_file_null_short_prop();
  56. procedure save_to_file_null_string_prop();
  57. procedure load_from_stream_start_with_empty();
  58. procedure load_from_stream_one_object();
  59. procedure load_from_stream_two_object();
  60. procedure load_from_file_start_with_empty();
  61. procedure load_from_file_one_object();
  62. procedure load_from_file_two_object();
  63. // -- tests with ChangeSummary --
  64. procedure save_to_file_changesummary_simple();
  65. procedure save_to_file_changesummary_object_modify_nested();
  66. procedure save_to_file_changesummary_prop_list_bool();
  67. procedure save_to_file_changesummary_prop_list_byte();
  68. {$IFDEF HAS_SDO_BYTES}
  69. procedure save_to_file_changesummary_prop_list_bytes();
  70. {$ENDIF HAS_SDO_BYTES}
  71. {$IFDEF HAS_SDO_CHAR}
  72. procedure save_to_file_changesummary_prop_list_char();
  73. {$ENDIF HAS_SDO_CHAR}
  74. {$IFDEF HAS_SDO_CURRENCY}
  75. procedure save_to_file_changesummary_prop_list_currency();
  76. {$ENDIF HAS_SDO_CURRENCY}
  77. procedure save_to_file_changesummary_prop_list_date();
  78. {$IFDEF HAS_SDO_DOUBLE}
  79. procedure save_to_file_changesummary_prop_list_double();
  80. {$ENDIF HAS_SDO_DOUBLE}
  81. {$IFDEF HAS_SDO_FLOAT}
  82. procedure save_to_file_changesummary_prop_list_float();
  83. {$ENDIF HAS_SDO_FLOAT}
  84. procedure save_to_file_changesummary_prop_list_integer();
  85. {$IFDEF HAS_SDO_LONG}
  86. procedure save_to_file_changesummary_prop_list_long();
  87. {$ENDIF HAS_SDO_LONG}
  88. procedure save_to_file_changesummary_prop_list_object();
  89. procedure save_to_file_changesummary_prop_list_object_nested();
  90. {$IFDEF HAS_SDO_SHORT}
  91. procedure save_to_file_changesummary_prop_list_short();
  92. {$ENDIF HAS_SDO_SHORT}
  93. procedure save_to_file_changesummary_prop_list_string();
  94. procedure save_to_file_changesummary_object_create();
  95. procedure save_to_file_changesummary_object_create_cont_ref();
  96. procedure save_to_file_changesummary_object_delete();
  97. procedure save_to_file_changesummary_object_delete_nested();
  98. procedure save_to_file_changesummary_object_delete_2_objects_same_type();
  99. procedure save_to_file_changesummary_object_2_objects_same_type_del_upd();
  100. procedure load_from_file_changesummary_simple();
  101. procedure load_from_file_changesummary_bool();
  102. procedure load_from_file_changesummary_byte();
  103. {$IFDEF HAS_SDO_BYTES}
  104. procedure load_from_file_changesummary_bytes();
  105. {$ENDIF HAS_SDO_BYTES}
  106. {$IFDEF HAS_SDO_CHAR}
  107. procedure load_from_file_changesummary_char();
  108. {$ENDIF HAS_SDO_CHAR}
  109. {$IFDEF HAS_SDO_CURRENCY}
  110. procedure load_from_file_changesummary_currency();
  111. {$ENDIF HAS_SDO_CURRENCY}
  112. procedure load_from_file_changesummary_date();
  113. {$IFDEF HAS_SDO_DOUBLE}
  114. procedure load_from_file_changesummary_double();
  115. {$ENDIF HAS_SDO_DOUBLE}
  116. procedure load_from_file_changesummary_integer();
  117. {$IFDEF HAS_SDO_LONG}
  118. procedure load_from_file_changesummary_long();
  119. {$ENDIF HAS_SDO_LONG}
  120. {$IFDEF HAS_SDO_FLOAT}
  121. procedure load_from_file_changesummary_float();
  122. {$ENDIF HAS_SDO_FLOAT}
  123. {$IFDEF HAS_SDO_SHORT}
  124. procedure load_from_file_changesummary_short();
  125. {$ENDIF HAS_SDO_SHORT}
  126. procedure load_from_file_changesummary_string();
  127. procedure load_from_file_changesummary_object_create_cont_ref();
  128. procedure load_from_file_changesummary_object_delete();
  129. procedure load_from_file_changesummary_object_delete_nested();
  130. procedure load_from_file_changesummary_object_delete_2_objects_same_type();
  131. procedure load_from_file_changesummary_object_2_objects_same_type_del_upd();
  132. procedure load_from_file_changesummary_prop_list_bool();
  133. procedure load_from_file_changesummary_prop_list_byte();
  134. {$IFDEF HAS_SDO_BYTES}
  135. procedure load_from_file_changesummary_prop_list_bytes();
  136. {$ENDIF HAS_SDO_BYTES}
  137. {$IFDEF HAS_SDO_CHAR}
  138. procedure load_from_file_changesummary_prop_list_char();
  139. {$ENDIF HAS_SDO_CHAR}
  140. {$IFDEF HAS_SDO_CURRENCY}
  141. procedure load_from_file_changesummary_prop_list_currency();
  142. {$ENDIF HAS_SDO_CURRENCY}
  143. procedure load_from_file_changesummary_prop_list_date();
  144. {$IFDEF HAS_SDO_DOUBLE}
  145. procedure load_from_file_changesummary_prop_list_double();
  146. {$ENDIF HAS_SDO_DOUBLE}
  147. {$IFDEF HAS_SDO_FLOAT}
  148. procedure load_from_file_changesummary_prop_list_float();
  149. {$ENDIF HAS_SDO_FLOAT}
  150. procedure load_from_file_changesummary_prop_list_integer();
  151. {$IFDEF HAS_SDO_LONG}
  152. procedure load_from_file_changesummary_prop_list_long();
  153. {$ENDIF HAS_SDO_LONG}
  154. procedure load_from_file_changesummary_prop_list_object();
  155. procedure load_from_file_changesummary_prop_list_object_nested();
  156. {$IFDEF HAS_SDO_SHORT}
  157. procedure load_from_file_changesummary_prop_list_short();
  158. {$ENDIF HAS_SDO_SHORT}
  159. procedure load_from_file_changesummary_prop_list_string();
  160. procedure save_to_and_load_file_ref_prop_crash_1();
  161. procedure save_to_and_load_file_ref_prop_crash_2();
  162. procedure load_from_file_reference_property();
  163. procedure save_object_open_type();
  164. procedure load_object_open_type();
  165. end;
  166. TSDOSerializerXML_Test = class(TSDOSerializer_Test)
  167. protected
  168. class function CreateSerializerStream() : ISDOSerializerStream; override;
  169. end;
  170. { TSDOSerializerBinary_Test }
  171. TSDOSerializerBinary_Test = class(TSDOBaseSerializer_Test)
  172. protected
  173. class function CreateSerializerStream() : ISDOSerializerStream; override;
  174. published
  175. procedure to_stream();
  176. procedure to_stream_without_name();
  177. procedure to_stream_changesummary_object_modify_nested();
  178. procedure to_stream_changesummary_simple();
  179. procedure to_stream_changesummary_prop_list_byte();
  180. procedure to_stream_changesummary_prop_list_bool();
  181. procedure to_stream_changesummary_prop_list_string();
  182. procedure to_stream_changesummary_prop_list_Integer();
  183. procedure to_stream_changesummary_prop_list_long();
  184. procedure to_stream_changesummary_prop_list_double();
  185. procedure to_stream_changesummary_prop_list_float();
  186. procedure to_stream_changesummary_prop_list_short();
  187. procedure to_stream_changesummary_prop_list_char();
  188. procedure to_stream_changesummary_prop_list_date();
  189. procedure to_stream_changesummary_prop_list_currency();
  190. procedure to_stream_changesummary_prop_list_bytes();
  191. procedure to_stream_changesummary_prop_list_objects();
  192. procedure to_stream_changesummary_object_delete();
  193. procedure to_stream_changesummary_object_delete_nested();
  194. procedure to_stream_changesummary_object_create_cont_ref();
  195. procedure null_bool_prop();
  196. procedure null_byte_prop();
  197. procedure null_bytes_prop();
  198. procedure null_char_prop();
  199. procedure null_currency_prop();
  200. procedure null_datetime_prop();
  201. procedure null_double_prop();
  202. procedure null_float_prop();
  203. procedure null_integer_prop();
  204. procedure null_long_prop();
  205. procedure null_object_prop();
  206. procedure null_short_prop();
  207. procedure null_string_prop();
  208. procedure changesummary_object_create();
  209. procedure changesummary_object_create_cont_ref();
  210. procedure changesummary_object_delete();
  211. procedure changesummary_object_delete_nested();
  212. procedure changesummary_object_delete_2_objects_same_type();
  213. end;
  214. implementation
  215. uses
  216. typinfo,
  217. sdo_datafactory, sdo_dataobject,
  218. sdo_serialization_xml, sdo_serialization_binary
  219. {$IFNDEF FPC}
  220. , xmldom, sdo_win_xml
  221. {$ELSE}
  222. , DOM, sdo_fpc_xml, XMLRead, XMLWrite
  223. {$ENDIF}
  224. , sdo_consts, sdo_utils, Math, DateUtils, sdo_date_utils;
  225. const
  226. s_uri = 'company.xsd';
  227. s_Employee = 'Employee';
  228. s_EmployeeType = 'EmployeeType';
  229. s_DepartmentType = 'DepartmentType';
  230. s_CompanyType = 'CompanyType';
  231. s_company = 'company';
  232. s_list_bool = 'list_bool';
  233. s_list_byte = 'list_byte';
  234. s_list_bytes = 'list_bytes';
  235. s_list_char = 'list_char';
  236. s_list_currency = 'list_currency';
  237. s_list_date = 'list_date';
  238. s_list_double = 'list_double';
  239. s_list_float = 'list_float';
  240. s_list_int = 'list_int';
  241. s_list_long = 'list_long';
  242. s_list_object = 'list_object';
  243. s_list_short = 'list_short';
  244. s_list_string = 'list_string';
  245. s_location = 'location';
  246. s_manager = 'manager';
  247. s_name = 'name';
  248. s_number = 'number';
  249. s_sn = 'SN';
  250. s_age = 'age';
  251. s_birthDate = 'birthDate';
  252. s_bool_prop = 'bool_prop';
  253. s_byte_prop = 'byte_prop';
  254. s_bytes_prop = 'bytes_prop';
  255. s_char_prop = 'char_prop';
  256. s_currency_prop = 'currency_prop';
  257. s_datetime_prop = 'datetime_prop';
  258. s_double_prop = 'double_prop';
  259. s_float_prop = 'float_prop';
  260. s_int_prop = 'int_prop';
  261. s_long_prop = 'long_prop';
  262. s_object_prop = 'object_prop';
  263. s_object_type = 'object_type';
  264. s_object_type2 = 'object_type2';
  265. s_short_prop = 'short_prop';
  266. s_string_prop = 'string_prop';
  267. function CompareNodes(const A,B : TDOMNode) : Boolean;overload;
  268. var
  269. ca, cb : TDOMNode;
  270. i : PtrInt;
  271. begin
  272. if ( A = nil ) and ( B = nil ) then begin
  273. Result := True;
  274. end else if ( A <> nil ) and ( B <> nil ) then begin
  275. Result := False;
  276. if ( A.NodeName = B.NodeName ) and
  277. ( A.NodeValue = B.NodeValue )
  278. then begin
  279. if ( ( A.FirstChild = nil ) and ( B.FirstChild = nil ) ) or
  280. ( ( A.FirstChild <> nil ) and ( B.FirstChild <> nil ) )
  281. then begin
  282. ca := a.FirstChild;
  283. cb := b.FirstChild;
  284. while ( ca <> nil ) do begin
  285. if not CompareNodes(ca,cb) then
  286. Exit;
  287. ca := ca.NextSibling;
  288. cb := cb.NextSibling;
  289. end;
  290. if ( ( A.Attributes = nil ) and ( B.Attributes = nil ) ) or
  291. ( ( A.Attributes <> nil ) and ( B.Attributes <> nil ) )
  292. then begin
  293. if ( A.Attributes <> nil ) then begin
  294. if ( A.Attributes.Length <> B.Attributes.Length ) then
  295. Exit;
  296. if ( A.Attributes.Length > 0 ) then begin
  297. for i := 0 to Pred(A.Attributes.Length) do begin
  298. if not CompareNodes(A.Attributes.Item[i],B.Attributes.GetNamedItem(A.Attributes.Item[i].NodeName)) then
  299. Exit;
  300. end;
  301. end;
  302. end;
  303. Result := True;
  304. end;
  305. end;
  306. end;
  307. end else begin
  308. Result := False;
  309. end;
  310. end;
  311. { TSDOSerializerBinary_Test }
  312. class function TSDOSerializerBinary_Test.CreateSerializerStream: ISDOSerializerStream;
  313. begin
  314. Result := TSDOSerializationStreamBinary.Create();
  315. end;
  316. procedure TSDOSerializerBinary_Test.to_stream();
  317. var
  318. locFactoryA, locFactoryB : ISDODataFactory;
  319. objA, objB : ISDODataObject;
  320. objList : ISDODataObjectList;
  321. s : ISDOSerializer;
  322. strm : TMemoryStream;
  323. begin
  324. locFactoryA := CreateSdoTypes();
  325. objA := CreateCompanyObject(locFactoryA);
  326. s := TSDOSerializer.Create(locFactoryA,CreateSerializerStream());
  327. strm := TMemoryStream.Create();
  328. try
  329. s.save(s_CompanyType,objA,strm);
  330. {$IFDEF TEST_GENERATE_FILE}
  331. strm.SaveToFile(sdoExpandLocalFileName('company.soap.binary'));
  332. {$ENDIF TEST_GENERATE_FILE}
  333. locFactoryB := TSDODataFactory.Create();
  334. s := TSDOSerializer.Create(locFactoryB,CreateSerializerStream());
  335. strm.Position := 0;
  336. objList := TSDODataObjectList.Create(
  337. locFactoryB.getType(sdo_namespace,SDOTypeDefaultTypeNames[ObjectType])
  338. ) as ISDODataObjectList;
  339. s.load(strm,objList);
  340. CheckEquals(1,objList.size(),'objCount');
  341. objB := objList.getDataObject(0);
  342. Check(TSDOEqualityHelper.equal(objA,objB),'object');
  343. finally
  344. strm.Free();
  345. end;
  346. end;
  347. procedure TSDOSerializerBinary_Test.to_stream_without_name();
  348. var
  349. locFactoryA, locFactoryB : ISDODataFactory;
  350. objA, objB : ISDODataObject;
  351. objList : ISDODataObjectList;
  352. s : ISDOSerializer;
  353. strm : TMemoryStream;
  354. begin
  355. locFactoryA := CreateSdoTypes();
  356. objA := CreateCompanyObject(locFactoryA);
  357. s := TSDOSerializer.Create(locFactoryA,CreateSerializerStream());
  358. strm := TMemoryStream.Create();
  359. try
  360. s.save(objA,strm);
  361. {$IFDEF TEST_GENERATE_FILE}
  362. strm.SaveToFile(sdoExpandLocalFileName('company.soap.binary'));
  363. {$ENDIF TEST_GENERATE_FILE}
  364. locFactoryB := TSDODataFactory.Create();
  365. s := TSDOSerializer.Create(locFactoryB,CreateSerializerStream());
  366. strm.Position := 0;
  367. objList := TSDODataObjectList.Create(
  368. locFactoryB.getType(sdo_namespace,SDOTypeDefaultTypeNames[ObjectType])
  369. ) as ISDODataObjectList;
  370. s.load(strm,objList);
  371. CheckEquals(1,objList.size(),'objCount');
  372. objB := objList.getDataObject(0);
  373. Check(TSDOEqualityHelper.equal(objA,objB),'object');
  374. finally
  375. strm.Free();
  376. end;
  377. end;
  378. procedure TSDOSerializerBinary_Test.to_stream_changesummary_object_modify_nested();
  379. var
  380. locFactoryA, locFactoryB : ISDODataFactory;
  381. objA, objB, locDep, locEmployee : ISDODataObject;
  382. locCS : ISDOChangeSummary;
  383. objList : ISDODataObjectList;
  384. s : ISDOSerializer;
  385. strm : TMemoryStream;
  386. begin
  387. locFactoryA := TSDODataFactory.Create() as ISDODataFactory;
  388. locFactoryA.AddType(s_uri,s_DepartmentType,[]);
  389. locFactoryA.AddType(s_uri,s_Employee,[]);
  390. locFactoryA.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  391. locFactoryA.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  392. locFactoryA.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[pfIsAttribute]);
  393. locFactoryA.addProperty(s_uri,s_DepartmentType,s_Employee,s_uri,s_Employee,[pfIsContainment]);
  394. locFactoryA.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  395. locFactoryA.addProperty(s_uri,s_Employee,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  396. locFactoryA.addProperty(s_uri,s_Employee,s_sn,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  397. locFactoryA.addProperty(s_uri,s_Employee,s_manager,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType],[pfIsAttribute]);
  398. locFactoryA.addProperty(s_uri,s_Employee,s_age,sdo_namespace,SDOTypeDefaultTypeNames[ByteType],[pfIsAttribute]);
  399. locDep := locFactoryA.createNew(s_uri,s_DepartmentType);
  400. locDep.setString(s_name,'R & D');
  401. locDep.setString(s_location,'Ouaga, BF');
  402. locDep.setInteger(s_number,1210);
  403. locEmployee := locDep.createDataObject(s_Employee);
  404. locEmployee.setString(s_name,'Inoussa O.');
  405. locEmployee.setString(s_sn,'002');
  406. locEmployee.setBoolean(s_manager,True);
  407. locEmployee.setByte(s_age,12);
  408. locCS := locDep.getChangeSummary();
  409. locCS.beginLogging();
  410. locDep.setString(s_name,'R & D Department');
  411. locDep.setString(s_location,'Ouaga 01, BF');
  412. locEmployee.setString(s_name,'Inoussa OUEDRAOGO');
  413. locEmployee.setString(s_sn,'001');
  414. locEmployee.setByte(s_age,32);
  415. objA := locDep;
  416. s := TSDOSerializer.Create(locFactoryA,CreateSerializerStream());
  417. strm := TMemoryStream.Create();
  418. try
  419. s.save(objA,strm);
  420. {$IFDEF TEST_GENERATE_FILE}
  421. strm.SaveToFile(sdoExpandLocalFileName('change_summary_object_modify_nested.binary'));
  422. {$ENDIF TEST_GENERATE_FILE}
  423. locFactoryB := TSDODataFactory.Create();
  424. s := TSDOSerializer.Create(locFactoryB,CreateSerializerStream());
  425. strm.Position := 0;
  426. objList := TSDODataObjectList.Create(
  427. locFactoryB.getType(sdo_namespace,SDOTypeDefaultTypeNames[ObjectType])
  428. ) as ISDODataObjectList;
  429. s.load(strm,objList);
  430. CheckEquals(1,objList.size(),'objCount');
  431. objB := objList.getDataObject(0);
  432. Check(TSDOEqualityHelper.equal(objA,objB),'object');
  433. Compare(
  434. objA.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  435. objB.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  436. );
  437. Compare(
  438. objB.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  439. objA.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  440. );
  441. finally
  442. strm.Free();
  443. end;
  444. end;
  445. procedure TSDOSerializerBinary_Test.to_stream_changesummary_simple();
  446. var
  447. locFactoryA, locFactoryB : ISDODataFactory;
  448. objA, objB : ISDODataObject;
  449. locCS : ISDOChangeSummary;
  450. objList : ISDODataObjectList;
  451. s : ISDOSerializer;
  452. strm : TMemoryStream;
  453. begin
  454. locFactoryA := TSDODataFactory.Create() as ISDODataFactory;
  455. locFactoryA.AddType(s_uri,s_Employee,[]);
  456. locFactoryA.addProperty(s_uri,s_Employee,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  457. locFactoryA.addProperty(s_uri,s_Employee,s_sn,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  458. locFactoryA.addProperty(s_uri,s_Employee,s_manager,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType],[pfIsAttribute]);
  459. locFactoryA.addProperty(s_uri,s_Employee,s_age,sdo_namespace,SDOTypeDefaultTypeNames[ByteType],[pfIsAttribute]);
  460. locFactoryA.addProperty(s_uri,s_Employee,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  461. objA := locFactoryA.createNew(s_uri,s_Employee);
  462. objA.setString(s_name,'Inoussa O.');
  463. objA.setString(s_sn,'002');
  464. objA.setBoolean(s_manager,True);
  465. objA.setByte(s_age,30);
  466. locCS := objA.getChangeSummary();
  467. locCS.beginLogging();
  468. objA.setString(s_name,'Inoussa OUEDRAOGO');
  469. objA.setString(s_sn,'001');
  470. objA.setByte(s_age,32);
  471. s := TSDOSerializer.Create(locFactoryA,CreateSerializerStream());
  472. strm := TMemoryStream.Create();
  473. try
  474. s.save(objA,strm);
  475. {$IFDEF TEST_GENERATE_FILE}
  476. strm.SaveToFile(sdoExpandLocalFileName('change_summary_simple.binary'));
  477. {$ENDIF TEST_GENERATE_FILE}
  478. locFactoryB := TSDODataFactory.Create();
  479. s := TSDOSerializer.Create(locFactoryB,CreateSerializerStream());
  480. strm.Position := 0;
  481. objList := TSDODataObjectList.Create(
  482. locFactoryB.getType(sdo_namespace,SDOTypeDefaultTypeNames[ObjectType])
  483. ) as ISDODataObjectList;
  484. s.load(strm,objList);
  485. CheckEquals(1,objList.size(),'objCount');
  486. objB := objList.getDataObject(0);
  487. Check(TSDOEqualityHelper.equal(objA,objB),'object');
  488. Compare(
  489. objA.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  490. objB.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  491. );
  492. Compare(
  493. objB.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  494. objA.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  495. );
  496. finally
  497. strm.Free();
  498. end;
  499. end;
  500. procedure TSDOSerializerBinary_Test.to_stream_changesummary_prop_list_byte();
  501. const
  502. LIST_PROP_NAME = s_list_byte;
  503. LIST_PROP_TYPE = ByteType;
  504. var
  505. locFactoryA, locFactoryB : ISDODataFactory;
  506. objA, objB : ISDODataObject;
  507. locCS : ISDOChangeSummary;
  508. objList : ISDODataObjectList;
  509. s : ISDOSerializer;
  510. strm : TMemoryStream;
  511. locDep : ISDODataObject;
  512. ls : ISDODataObjectList;
  513. begin
  514. locFactoryA := TSDODataFactory.Create() as ISDODataFactory;
  515. locFactoryA.AddType(s_uri,s_DepartmentType,[]);
  516. locFactoryA.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  517. locFactoryA.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  518. locFactoryA.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[ByteType],[]);
  519. locFactoryA.addProperty(s_uri,s_DepartmentType,LIST_PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[LIST_PROP_TYPE],[pfIsMany]);
  520. locFactoryA.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  521. locDep := locFactoryA.createNew(s_uri,s_DepartmentType);
  522. locDep.setString(s_name,'R & D');
  523. locDep.setString(s_location,'Ouaga, BF');
  524. locDep.setByte(s_number,123);
  525. ls := locDep.getList(LIST_PROP_NAME);
  526. ls.append(TSDOByte(1));
  527. ls.append(TSDOByte(2));
  528. ls.append(TSDOByte(3));
  529. locCS := locDep.getChangeSummary();
  530. locCS.beginLogging();
  531. locDep.setString(s_name,'R & D Department');
  532. locDep.setString(s_location,'Ouaga 01, BF');
  533. ls.setByte(0,10);
  534. ls.append(TSDOByte(123));
  535. ls.append(TSDOByte(45));
  536. ls.setByte(1,20);
  537. ls.delete(0);
  538. ls.delete(1);
  539. ls.insert(2, TSDOByte(107));
  540. ls.append(TSDOByte(89));
  541. objA := locDep;
  542. s := TSDOSerializer.Create(locFactoryA,CreateSerializerStream());
  543. strm := TMemoryStream.Create();
  544. try
  545. s.save(objA,strm);
  546. {$IFDEF TEST_GENERATE_FILE}
  547. strm.SaveToFile(sdoExpandLocalFileName('changesummary_prop_list_byte.binary'));
  548. {$ENDIF TEST_GENERATE_FILE}
  549. locFactoryB := TSDODataFactory.Create();
  550. s := TSDOSerializer.Create(locFactoryB,CreateSerializerStream());
  551. strm.Position := 0;
  552. objList := TSDODataObjectList.Create(
  553. locFactoryB.getType(sdo_namespace,SDOTypeDefaultTypeNames[ObjectType])
  554. ) as ISDODataObjectList;
  555. s.load(strm,objList);
  556. CheckEquals(1,objList.size(),'objCount');
  557. objB := objList.getDataObject(0);
  558. Check(TSDOEqualityHelper.equal(objA,objB),'object');
  559. Compare(
  560. objA.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  561. objB.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  562. );
  563. Compare(
  564. objB.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  565. objA.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  566. );
  567. finally
  568. strm.Free();
  569. end;
  570. end;
  571. procedure TSDOSerializerBinary_Test.to_stream_changesummary_prop_list_bool();
  572. const
  573. LIST_PROP_NAME = s_list_byte;
  574. LIST_PROP_TYPE = ByteType;
  575. var
  576. locFactoryA, locFactoryB : ISDODataFactory;
  577. objA, objB : ISDODataObject;
  578. locCS : ISDOChangeSummary;
  579. objList : ISDODataObjectList;
  580. s : ISDOSerializer;
  581. strm : TMemoryStream;
  582. locDep : ISDODataObject;
  583. ls : ISDODataObjectList;
  584. begin
  585. locFactoryA := TSDODataFactory.Create() as ISDODataFactory;
  586. locFactoryA.AddType(s_uri,s_DepartmentType,[]);
  587. locFactoryA.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  588. locFactoryA.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  589. locFactoryA.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[]);
  590. locFactoryA.addProperty(s_uri,s_DepartmentType,s_list_bool,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType],[pfIsMany]);
  591. locFactoryA.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  592. locDep := locFactoryA.createNew(s_uri,s_DepartmentType);
  593. locDep.setString(s_name,'R & D');
  594. locDep.setString(s_location,'Ouaga, BF');
  595. locDep.setInteger(s_number,1210);
  596. ls := locDep.getList(s_list_bool);
  597. ls.append(False);
  598. ls.append(True);
  599. ls.append(False);
  600. locCS := locDep.getChangeSummary();
  601. locCS.beginLogging();
  602. locDep.setString(s_name,'R & D Department');
  603. locDep.setString(s_location,'Ouaga 01, BF');
  604. ls.setBoolean(0,True);
  605. ls.append(True);
  606. ls.append(True);
  607. ls.setBoolean(1,False);
  608. ls.delete(0);
  609. ls.delete(1);
  610. ls.insert(2, False);
  611. ls.append(False);
  612. objA := locDep;
  613. s := TSDOSerializer.Create(locFactoryA,CreateSerializerStream());
  614. strm := TMemoryStream.Create();
  615. try
  616. s.save(objA,strm);
  617. {$IFDEF TEST_GENERATE_FILE}
  618. strm.SaveToFile(sdoExpandLocalFileName('changesummary_prop_list_bool.binary'));
  619. {$ENDIF TEST_GENERATE_FILE}
  620. locFactoryB := TSDODataFactory.Create();
  621. s := TSDOSerializer.Create(locFactoryB,CreateSerializerStream());
  622. strm.Position := 0;
  623. objList := TSDODataObjectList.Create(
  624. locFactoryB.getType(sdo_namespace,SDOTypeDefaultTypeNames[ObjectType])
  625. ) as ISDODataObjectList;
  626. s.load(strm,objList);
  627. CheckEquals(1,objList.size(),'objCount');
  628. objB := objList.getDataObject(0);
  629. Check(TSDOEqualityHelper.equal(objA,objB),'object');
  630. Compare(
  631. objA.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  632. objB.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  633. );
  634. Compare(
  635. objB.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  636. objA.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  637. );
  638. finally
  639. strm.Free();
  640. end;
  641. end;
  642. procedure TSDOSerializerBinary_Test.to_stream_changesummary_prop_list_string();
  643. var
  644. locFactoryA, locFactoryB : ISDODataFactory;
  645. objA, objB : ISDODataObject;
  646. locCS : ISDOChangeSummary;
  647. objList : ISDODataObjectList;
  648. s : ISDOSerializer;
  649. strm : TMemoryStream;
  650. locDep : ISDODataObject;
  651. ls : ISDODataObjectList;
  652. begin
  653. locFactoryA := TSDODataFactory.Create() as ISDODataFactory;
  654. locFactoryA.AddType(s_uri,s_DepartmentType,[]);
  655. locFactoryA.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  656. locFactoryA.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  657. locFactoryA.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[]);
  658. locFactoryA.addProperty(s_uri,s_DepartmentType,s_list_string,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsMany]);
  659. locFactoryA.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  660. locDep := locFactoryA.createNew(s_uri,s_DepartmentType);
  661. locDep.setString(s_name,'R & D');
  662. locDep.setString(s_location,'Ouaga, BF');
  663. locDep.setInteger(s_number,1210);
  664. ls := locDep.getList(s_list_string);
  665. ls.append('wst');
  666. ls.append('sdo');
  667. ls.append('fpc-lazarus');
  668. locCS := locDep.getChangeSummary();
  669. locCS.beginLogging();
  670. locDep.setString(s_name,'R & D Department');
  671. locDep.setString(s_location,'Ouaga 01, BF');
  672. ls.setString(0,'azerty');
  673. ls.append('Ouagadougou');
  674. ls.append('BF');
  675. ls.setString(1,'kis');
  676. ls.delete(0);
  677. ls.delete(1);
  678. ls.insert(2, '107612');
  679. ls.append('this is a multi words text. Lets test it!');
  680. objA := locDep;
  681. s := TSDOSerializer.Create(locFactoryA,CreateSerializerStream());
  682. strm := TMemoryStream.Create();
  683. try
  684. s.save(objA,strm);
  685. {$IFDEF TEST_GENERATE_FILE}
  686. strm.SaveToFile(sdoExpandLocalFileName('changesummary_prop_list_string.binary'));
  687. {$ENDIF TEST_GENERATE_FILE}
  688. locFactoryB := TSDODataFactory.Create();
  689. s := TSDOSerializer.Create(locFactoryB,CreateSerializerStream());
  690. strm.Position := 0;
  691. objList := TSDODataObjectList.Create(
  692. locFactoryB.getType(sdo_namespace,SDOTypeDefaultTypeNames[ObjectType])
  693. ) as ISDODataObjectList;
  694. s.load(strm,objList);
  695. CheckEquals(1,objList.size(),'objCount');
  696. objB := objList.getDataObject(0);
  697. Check(TSDOEqualityHelper.equal(objA,objB),'object');
  698. Compare(
  699. objA.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  700. objB.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  701. );
  702. Compare(
  703. objB.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  704. objA.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  705. );
  706. finally
  707. strm.Free();
  708. end;
  709. end;
  710. procedure TSDOSerializerBinary_Test.to_stream_changesummary_prop_list_Integer();
  711. var
  712. locFactoryA, locFactoryB : ISDODataFactory;
  713. objA, objB : ISDODataObject;
  714. locCS : ISDOChangeSummary;
  715. objList : ISDODataObjectList;
  716. s : ISDOSerializer;
  717. strm : TMemoryStream;
  718. locDep : ISDODataObject;
  719. ls : ISDODataObjectList;
  720. begin
  721. locFactoryA := TSDODataFactory.Create() as ISDODataFactory;
  722. locFactoryA.AddType(s_uri,s_DepartmentType,[]);
  723. locFactoryA.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  724. locFactoryA.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  725. locFactoryA.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[]);
  726. locFactoryA.addProperty(s_uri,s_DepartmentType,s_list_int,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[pfIsMany]);
  727. locFactoryA.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  728. locDep := locFactoryA.createNew(s_uri,s_DepartmentType);
  729. locDep.setString(s_name,'R & D');
  730. locDep.setString(s_location,'Ouaga, BF');
  731. locDep.setInteger(s_number,1210);
  732. ls := locDep.getList(s_list_int);
  733. ls.append(1);
  734. ls.append(2);
  735. ls.append(3);
  736. locCS := locDep.getChangeSummary();
  737. locCS.beginLogging();
  738. locDep.setString(s_name,'R & D Department');
  739. locDep.setString(s_location,'Ouaga 01, BF');
  740. ls.setInteger(0,10);
  741. ls.append(123);
  742. ls.append(456);
  743. ls.setInteger(1,20);
  744. ls.delete(0);
  745. ls.delete(1);
  746. ls.insert(2, 1076);
  747. ls.append(789);
  748. objA := locDep;
  749. s := TSDOSerializer.Create(locFactoryA,CreateSerializerStream());
  750. strm := TMemoryStream.Create();
  751. try
  752. s.save(objA,strm);
  753. {$IFDEF TEST_GENERATE_FILE}
  754. strm.SaveToFile(sdoExpandLocalFileName('changesummary_prop_list_integer.binary'));
  755. {$ENDIF TEST_GENERATE_FILE}
  756. locFactoryB := TSDODataFactory.Create();
  757. s := TSDOSerializer.Create(locFactoryB,CreateSerializerStream());
  758. strm.Position := 0;
  759. objList := TSDODataObjectList.Create(
  760. locFactoryB.getType(sdo_namespace,SDOTypeDefaultTypeNames[ObjectType])
  761. ) as ISDODataObjectList;
  762. s.load(strm,objList);
  763. CheckEquals(1,objList.size(),'objCount');
  764. objB := objList.getDataObject(0);
  765. Check(TSDOEqualityHelper.equal(objA,objB),'object');
  766. Compare(
  767. objA.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  768. objB.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  769. );
  770. Compare(
  771. objB.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  772. objA.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  773. );
  774. finally
  775. strm.Free();
  776. end;
  777. end;
  778. procedure TSDOSerializerBinary_Test.to_stream_changesummary_prop_list_long();
  779. const
  780. LIST_PROP_NAME = s_list_long;
  781. LIST_PROP_TYPE = LongType;
  782. var
  783. locFactoryA, locFactoryB : ISDODataFactory;
  784. objA, objB : ISDODataObject;
  785. locCS : ISDOChangeSummary;
  786. objList : ISDODataObjectList;
  787. s : ISDOSerializer;
  788. strm : TMemoryStream;
  789. locDep : ISDODataObject;
  790. ls : ISDODataObjectList;
  791. begin
  792. locFactoryA := TSDODataFactory.Create() as ISDODataFactory;
  793. locFactoryA.AddType(s_uri,s_DepartmentType,[]);
  794. locFactoryA.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  795. locFactoryA.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  796. locFactoryA.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[ByteType],[]);
  797. locFactoryA.addProperty(s_uri,s_DepartmentType,LIST_PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[LIST_PROP_TYPE],[pfIsMany]);
  798. locFactoryA.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  799. locDep := locFactoryA.createNew(s_uri,s_DepartmentType);
  800. locDep.setString(s_name,'R & D');
  801. locDep.setString(s_location,'Ouaga, BF');
  802. locDep.setByte(s_number,123);
  803. ls := locDep.getList(LIST_PROP_NAME);
  804. ls.append(TSDOLong(11111111111111111));
  805. ls.append(TSDOLong(-2222222222222222));
  806. ls.append(TSDOLong(333333333333333333));
  807. locCS := locDep.getChangeSummary();
  808. locCS.beginLogging();
  809. locDep.setString(s_name,'R & D Department');
  810. locDep.setString(s_location,'Ouaga 01, BF');
  811. ls.setLong(0,4444444444444444444);
  812. ls.append(TSDOLong(5555555555555555555));
  813. ls.append(TSDOLong(-6666666666666666666));
  814. ls.setLong(1,7777777777777777777);
  815. ls.delete(0);
  816. ls.delete(1);
  817. ls.insert(2, TSDOLong(8));
  818. ls.append(TSDOLong(-9));
  819. objA := locDep;
  820. s := TSDOSerializer.Create(locFactoryA,CreateSerializerStream());
  821. strm := TMemoryStream.Create();
  822. try
  823. s.save(objA,strm);
  824. {$IFDEF TEST_GENERATE_FILE}
  825. strm.SaveToFile(sdoExpandLocalFileName('changesummary_prop_list_long.binary'));
  826. {$ENDIF TEST_GENERATE_FILE}
  827. locFactoryB := TSDODataFactory.Create();
  828. s := TSDOSerializer.Create(locFactoryB,CreateSerializerStream());
  829. strm.Position := 0;
  830. objList := TSDODataObjectList.Create(
  831. locFactoryB.getType(sdo_namespace,SDOTypeDefaultTypeNames[ObjectType])
  832. ) as ISDODataObjectList;
  833. s.load(strm,objList);
  834. CheckEquals(1,objList.size(),'objCount');
  835. objB := objList.getDataObject(0);
  836. Check(TSDOEqualityHelper.equal(objA,objB),'object');
  837. Compare(
  838. objA.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  839. objB.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  840. );
  841. Compare(
  842. objB.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  843. objA.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  844. );
  845. finally
  846. strm.Free();
  847. end;
  848. end;
  849. const
  850. DOUBLE_VALUES_REPEATED_DIGITED : array[0..8] of TSDODouble = (
  851. 111111111, -22222222, 3333333333, 44444444, 555555555,
  852. -666666666, 777777777, 8, -9
  853. );
  854. procedure TSDOSerializerBinary_Test.to_stream_changesummary_prop_list_double();
  855. const
  856. LIST_PROP_NAME = s_list_double;
  857. LIST_PROP_TYPE = DoubleType;
  858. var
  859. locFactoryA, locFactoryB : ISDODataFactory;
  860. objA, objB : ISDODataObject;
  861. locCS : ISDOChangeSummary;
  862. objList : ISDODataObjectList;
  863. s : ISDOSerializer;
  864. strm : TMemoryStream;
  865. locDep : ISDODataObject;
  866. ls : ISDODataObjectList;
  867. begin
  868. locFactoryA := TSDODataFactory.Create() as ISDODataFactory;
  869. locFactoryA.AddType(s_uri,s_DepartmentType,[]);
  870. locFactoryA.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  871. locFactoryA.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  872. locFactoryA.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[ByteType],[]);
  873. locFactoryA.addProperty(s_uri,s_DepartmentType,LIST_PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[LIST_PROP_TYPE],[pfIsMany]);
  874. locFactoryA.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  875. locDep := locFactoryA.createNew(s_uri,s_DepartmentType);
  876. locDep.setString(s_name,'R & D');
  877. locDep.setString(s_location,'Ouaga, BF');
  878. locDep.setByte(s_number,123);
  879. ls := locDep.getList(LIST_PROP_NAME);
  880. ls.append(DOUBLE_VALUES_REPEATED_DIGITED[0]);
  881. ls.append(DOUBLE_VALUES_REPEATED_DIGITED[1]);
  882. ls.append(DOUBLE_VALUES_REPEATED_DIGITED[2]);
  883. locCS := locDep.getChangeSummary();
  884. locCS.beginLogging();
  885. locDep.setString(s_name,'R & D Department');
  886. locDep.setString(s_location,'Ouaga 01, BF');
  887. ls.setDouble(0,DOUBLE_VALUES_REPEATED_DIGITED[3]);
  888. ls.append(DOUBLE_VALUES_REPEATED_DIGITED[4]);
  889. ls.append(DOUBLE_VALUES_REPEATED_DIGITED[5]);
  890. ls.setDouble(1,DOUBLE_VALUES_REPEATED_DIGITED[6]);
  891. ls.delete(0);
  892. ls.delete(1);
  893. ls.insert(2, DOUBLE_VALUES_REPEATED_DIGITED[7]);
  894. ls.append(DOUBLE_VALUES_REPEATED_DIGITED[8]);
  895. objA := locDep;
  896. s := TSDOSerializer.Create(locFactoryA,CreateSerializerStream());
  897. strm := TMemoryStream.Create();
  898. try
  899. s.save(objA,strm);
  900. {$IFDEF TEST_GENERATE_FILE}
  901. strm.SaveToFile(sdoExpandLocalFileName('changesummary_prop_list_double.binary'));
  902. {$ENDIF TEST_GENERATE_FILE}
  903. locFactoryB := TSDODataFactory.Create();
  904. s := TSDOSerializer.Create(locFactoryB,CreateSerializerStream());
  905. strm.Position := 0;
  906. objList := TSDODataObjectList.Create(
  907. locFactoryB.getType(sdo_namespace,SDOTypeDefaultTypeNames[ObjectType])
  908. ) as ISDODataObjectList;
  909. s.load(strm,objList);
  910. CheckEquals(1,objList.size(),'objCount');
  911. objB := objList.getDataObject(0);
  912. Check(TSDOEqualityHelper.equal(objA,objB),'object');
  913. Compare(
  914. objA.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  915. objB.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  916. );
  917. Compare(
  918. objB.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  919. objA.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  920. );
  921. finally
  922. strm.Free();
  923. end;
  924. end;
  925. const
  926. FLOAT_VALUES_REPEATED_DIGITED : array[0..8] of TSDOFloat = (
  927. 111111111, -222222222, 333333333, 444444444, 5555555555,
  928. -6666666666, 777777777, 8, -9
  929. );
  930. procedure TSDOSerializerBinary_Test.to_stream_changesummary_prop_list_float();
  931. const
  932. LIST_PROP_NAME = s_list_float;
  933. LIST_PROP_TYPE = FloatType;
  934. var
  935. locFactoryA, locFactoryB : ISDODataFactory;
  936. objA, objB : ISDODataObject;
  937. locCS : ISDOChangeSummary;
  938. objList : ISDODataObjectList;
  939. s : ISDOSerializer;
  940. strm : TMemoryStream;
  941. locDep : ISDODataObject;
  942. ls : ISDODataObjectList;
  943. begin
  944. locFactoryA := TSDODataFactory.Create() as ISDODataFactory;
  945. locFactoryA.AddType(s_uri,s_DepartmentType,[]);
  946. locFactoryA.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  947. locFactoryA.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  948. locFactoryA.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[ByteType],[]);
  949. locFactoryA.addProperty(s_uri,s_DepartmentType,LIST_PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[LIST_PROP_TYPE],[pfIsMany]);
  950. locFactoryA.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  951. locDep := locFactoryA.createNew(s_uri,s_DepartmentType);
  952. locDep.setString(s_name,'R & D');
  953. locDep.setString(s_location,'Ouaga, BF');
  954. locDep.setByte(s_number,123);
  955. ls := locDep.getList(LIST_PROP_NAME);
  956. ls.append(FLOAT_VALUES_REPEATED_DIGITED[0]);
  957. ls.append(FLOAT_VALUES_REPEATED_DIGITED[1]);
  958. ls.append(FLOAT_VALUES_REPEATED_DIGITED[2]);
  959. locCS := locDep.getChangeSummary();
  960. locCS.beginLogging();
  961. locDep.setString(s_name,'R & D Department');
  962. locDep.setString(s_location,'Ouaga 01, BF');
  963. ls.setFloat(0,FLOAT_VALUES_REPEATED_DIGITED[3]);
  964. ls.append(FLOAT_VALUES_REPEATED_DIGITED[4]);
  965. ls.append(FLOAT_VALUES_REPEATED_DIGITED[5]);
  966. ls.setFloat(1,FLOAT_VALUES_REPEATED_DIGITED[6]);
  967. ls.delete(0);
  968. ls.delete(1);
  969. ls.insert(2, FLOAT_VALUES_REPEATED_DIGITED[7]);
  970. ls.append(FLOAT_VALUES_REPEATED_DIGITED[8]);
  971. objA := locDep;
  972. s := TSDOSerializer.Create(locFactoryA,CreateSerializerStream());
  973. strm := TMemoryStream.Create();
  974. try
  975. s.save(objA,strm);
  976. {$IFDEF TEST_GENERATE_FILE}
  977. strm.SaveToFile(sdoExpandLocalFileName('changesummary_prop_list_float.binary'));
  978. {$ENDIF TEST_GENERATE_FILE}
  979. locFactoryB := TSDODataFactory.Create();
  980. s := TSDOSerializer.Create(locFactoryB,CreateSerializerStream());
  981. strm.Position := 0;
  982. objList := TSDODataObjectList.Create(
  983. locFactoryB.getType(sdo_namespace,SDOTypeDefaultTypeNames[ObjectType])
  984. ) as ISDODataObjectList;
  985. s.load(strm,objList);
  986. CheckEquals(1,objList.size(),'objCount');
  987. objB := objList.getDataObject(0);
  988. Check(TSDOEqualityHelper.equal(objA,objB),'object');
  989. Compare(
  990. objA.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  991. objB.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  992. );
  993. Compare(
  994. objB.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  995. objA.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  996. );
  997. finally
  998. strm.Free();
  999. end;
  1000. end;
  1001. procedure TSDOSerializerBinary_Test.to_stream_changesummary_prop_list_short();
  1002. const
  1003. LIST_PROP_NAME = s_list_short;
  1004. LIST_PROP_TYPE = ShortType;
  1005. var
  1006. locFactoryA, locFactoryB : ISDODataFactory;
  1007. objA, objB : ISDODataObject;
  1008. locCS : ISDOChangeSummary;
  1009. objList : ISDODataObjectList;
  1010. s : ISDOSerializer;
  1011. strm : TMemoryStream;
  1012. locDep : ISDODataObject;
  1013. ls : ISDODataObjectList;
  1014. begin
  1015. locFactoryA := TSDODataFactory.Create() as ISDODataFactory;
  1016. locFactoryA.AddType(s_uri,s_DepartmentType,[]);
  1017. locFactoryA.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  1018. locFactoryA.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  1019. locFactoryA.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[ByteType],[]);
  1020. locFactoryA.addProperty(s_uri,s_DepartmentType,LIST_PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[LIST_PROP_TYPE],[pfIsMany]);
  1021. locFactoryA.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  1022. locDep := locFactoryA.createNew(s_uri,s_DepartmentType);
  1023. locDep.setString(s_name,'R & D');
  1024. locDep.setString(s_location,'Ouaga, BF');
  1025. locDep.setByte(s_number,123);
  1026. ls := locDep.getList(LIST_PROP_NAME);
  1027. ls.append(TSDOShort(1));
  1028. ls.append(TSDOShort(2));
  1029. ls.append(TSDOShort(3));
  1030. locCS := locDep.getChangeSummary();
  1031. locCS.beginLogging();
  1032. locDep.setString(s_name,'R & D Department');
  1033. locDep.setString(s_location,'Ouaga 01, BF');
  1034. ls.setShort(0,10);
  1035. ls.append(TSDOShort(12345));
  1036. ls.append(TSDOShort(-5245));
  1037. ls.setShort(1,20);
  1038. ls.delete(0);
  1039. ls.delete(1);
  1040. ls.insert(2, TSDOShort(107));
  1041. ls.append(TSDOShort(89));
  1042. objA := locDep;
  1043. s := TSDOSerializer.Create(locFactoryA,CreateSerializerStream());
  1044. strm := TMemoryStream.Create();
  1045. try
  1046. s.save(objA,strm);
  1047. {$IFDEF TEST_GENERATE_FILE}
  1048. strm.SaveToFile(sdoExpandLocalFileName('changesummary_prop_list_short.binary'));
  1049. {$ENDIF TEST_GENERATE_FILE}
  1050. locFactoryB := TSDODataFactory.Create();
  1051. s := TSDOSerializer.Create(locFactoryB,CreateSerializerStream());
  1052. strm.Position := 0;
  1053. objList := TSDODataObjectList.Create(
  1054. locFactoryB.getType(sdo_namespace,SDOTypeDefaultTypeNames[ObjectType])
  1055. ) as ISDODataObjectList;
  1056. s.load(strm,objList);
  1057. CheckEquals(1,objList.size(),'objCount');
  1058. objB := objList.getDataObject(0);
  1059. Check(TSDOEqualityHelper.equal(objA,objB),'object');
  1060. Compare(
  1061. objA.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  1062. objB.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  1063. );
  1064. Compare(
  1065. objB.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  1066. objA.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  1067. );
  1068. finally
  1069. strm.Free();
  1070. end;
  1071. end;
  1072. procedure TSDOSerializerBinary_Test.to_stream_changesummary_prop_list_char();
  1073. const
  1074. LIST_PROP_NAME = s_list_char;
  1075. LIST_PROP_TYPE = CharacterType;
  1076. var
  1077. locFactoryA, locFactoryB : ISDODataFactory;
  1078. objA, objB : ISDODataObject;
  1079. locCS : ISDOChangeSummary;
  1080. objList : ISDODataObjectList;
  1081. s : ISDOSerializer;
  1082. strm : TMemoryStream;
  1083. locDep : ISDODataObject;
  1084. ls : ISDODataObjectList;
  1085. begin
  1086. locFactoryA := TSDODataFactory.Create() as ISDODataFactory;
  1087. locFactoryA.AddType(s_uri,s_DepartmentType,[]);
  1088. locFactoryA.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  1089. locFactoryA.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  1090. locFactoryA.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[ByteType],[]);
  1091. locFactoryA.addProperty(s_uri,s_DepartmentType,LIST_PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[LIST_PROP_TYPE],[pfIsMany]);
  1092. locFactoryA.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  1093. locDep := locFactoryA.createNew(s_uri,s_DepartmentType);
  1094. locDep.setString(s_name,'R & D');
  1095. locDep.setString(s_location,'Ouaga, BF');
  1096. locDep.setByte(s_number,123);
  1097. ls := locDep.getList(LIST_PROP_NAME);
  1098. ls.append(TSDOChar('k'));
  1099. ls.append(TSDOChar('y'));
  1100. ls.append(TSDOChar('g'));
  1101. locCS := locDep.getChangeSummary();
  1102. locCS.beginLogging();
  1103. locDep.setString(s_name,'R & D Department');
  1104. locDep.setString(s_location,'Ouaga 01, BF');
  1105. ls.setCharacter(0,TSDOChar('j'));
  1106. ls.append(TSDOChar('a'));
  1107. ls.append(TSDOChar('x'));
  1108. ls.setCharacter(1,TSDOChar('v'));
  1109. ls.delete(0);
  1110. ls.delete(1);
  1111. ls.insert(2, TSDOChar('A'));
  1112. ls.append(TSDOChar('Z'));
  1113. objA := locDep;
  1114. s := TSDOSerializer.Create(locFactoryA,CreateSerializerStream());
  1115. strm := TMemoryStream.Create();
  1116. try
  1117. s.save(objA,strm);
  1118. {$IFDEF TEST_GENERATE_FILE}
  1119. strm.SaveToFile(sdoExpandLocalFileName('changesummary_prop_list_char.binary'));
  1120. {$ENDIF TEST_GENERATE_FILE}
  1121. locFactoryB := TSDODataFactory.Create();
  1122. s := TSDOSerializer.Create(locFactoryB,CreateSerializerStream());
  1123. strm.Position := 0;
  1124. objList := TSDODataObjectList.Create(
  1125. locFactoryB.getType(sdo_namespace,SDOTypeDefaultTypeNames[ObjectType])
  1126. ) as ISDODataObjectList;
  1127. s.load(strm,objList);
  1128. CheckEquals(1,objList.size(),'objCount');
  1129. objB := objList.getDataObject(0);
  1130. Check(TSDOEqualityHelper.equal(objA,objB),'object');
  1131. Compare(
  1132. objA.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  1133. objB.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  1134. );
  1135. Compare(
  1136. objB.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  1137. objA.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  1138. );
  1139. finally
  1140. strm.Free();
  1141. end;
  1142. end;
  1143. procedure TSDOSerializerBinary_Test.to_stream_changesummary_prop_list_date();
  1144. const
  1145. LIST_PROP_NAME = s_list_date;
  1146. LIST_PROP_TYPE = DateTimeType;
  1147. const VAL_1 : TSDODate = ( Date : 0; HourOffset : 0; MinuteOffset : 0; );
  1148. VAL_2 : TSDODate = ( Date : 0; HourOffset : 0; MinuteOffset : 0; );
  1149. VAL_3 : TSDODate = ( Date : 0; HourOffset : 0; MinuteOffset : 0; );
  1150. VAL_4 : TSDODate = ( Date : 0; HourOffset : 0; MinuteOffset : 0; );
  1151. VAL_5 : TSDODate = ( Date : 0; HourOffset : 0; MinuteOffset : 0; );
  1152. procedure SetConstants();
  1153. var
  1154. d : TSDODate;
  1155. begin
  1156. FillChar(d,SizeOf(TSDODate),#0);
  1157. d.Date := EncodeDateTime(1976,10,12,23,34,45,56);
  1158. d.HourOffset := 5;
  1159. d.MinuteOffset := 6;
  1160. PSDODate(@VAL_1)^ := d;
  1161. FillChar(d,SizeOf(TSDODate),#0);
  1162. d.Date := EncodeDateTime(2008,7,8,9,10,11,12);
  1163. d.HourOffset := 0;
  1164. d.MinuteOffset := 13;
  1165. PSDODate(@VAL_3)^ := d;
  1166. FillChar(d,SizeOf(TSDODate),#0);
  1167. d.Date := EncodeDateTime(2009,9,1,2,3,0,1);
  1168. d.HourOffset := 0;
  1169. d.MinuteOffset := 13;
  1170. PSDODate(@VAL_4)^ := d;
  1171. FillChar(d,SizeOf(TSDODate),#0);
  1172. d.Date := EncodeDateTime(1900,11,8,1,2,0,0);
  1173. d.HourOffset := 0;
  1174. d.MinuteOffset := 13;
  1175. PSDODate(@VAL_5)^ := d;
  1176. end;
  1177. var
  1178. locFactoryA, locFactoryB : ISDODataFactory;
  1179. objA, objB : ISDODataObject;
  1180. locCS : ISDOChangeSummary;
  1181. objList : ISDODataObjectList;
  1182. s : ISDOSerializer;
  1183. strm : TMemoryStream;
  1184. locDep : ISDODataObject;
  1185. ls : ISDODataObjectList;
  1186. begin
  1187. locFactoryA := TSDODataFactory.Create() as ISDODataFactory;
  1188. locFactoryA.AddType(s_uri,s_DepartmentType,[]);
  1189. locFactoryA.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  1190. locFactoryA.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  1191. locFactoryA.addProperty(s_uri,s_DepartmentType,s_birthDate,sdo_namespace,SDOTypeDefaultTypeNames[DateTimeType],[]);
  1192. locFactoryA.addProperty(s_uri,s_DepartmentType,s_list_date,sdo_namespace,SDOTypeDefaultTypeNames[DateTimeType],[pfIsMany]);
  1193. locFactoryA.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  1194. locDep := locFactoryA.createNew(s_uri,s_DepartmentType);
  1195. locDep.setString(s_name,'R & D');
  1196. locDep.setString(s_location,'Ouaga, BF');
  1197. locDep.setDate(s_birthDate,VAL_1);
  1198. ls := locDep.getList(s_list_date);
  1199. ls.append(VAL_1);
  1200. ls.append(VAL_2);
  1201. ls.append(VAL_3);
  1202. locCS := locDep.getChangeSummary();
  1203. locCS.beginLogging();
  1204. locDep.setString(s_name,'R & D Department');
  1205. locDep.setString(s_location,'Ouaga 01, BF');
  1206. ls.setDate(0,VAL_4);
  1207. ls.append(VAL_5);
  1208. ls.append(VAL_1);
  1209. ls.setDate(1,VAL_2);
  1210. ls.delete(0);
  1211. ls.delete(1);
  1212. ls.insert(2, VAL_3);
  1213. ls.append(VAL_4);
  1214. objA := locDep;
  1215. s := TSDOSerializer.Create(locFactoryA,CreateSerializerStream());
  1216. strm := TMemoryStream.Create();
  1217. try
  1218. s.save(objA,strm);
  1219. {$IFDEF TEST_GENERATE_FILE}
  1220. strm.SaveToFile(sdoExpandLocalFileName('changesummary_prop_list_date.binary'));
  1221. {$ENDIF TEST_GENERATE_FILE}
  1222. locFactoryB := TSDODataFactory.Create();
  1223. s := TSDOSerializer.Create(locFactoryB,CreateSerializerStream());
  1224. strm.Position := 0;
  1225. objList := TSDODataObjectList.Create(
  1226. locFactoryB.getType(sdo_namespace,SDOTypeDefaultTypeNames[ObjectType])
  1227. ) as ISDODataObjectList;
  1228. s.load(strm,objList);
  1229. CheckEquals(1,objList.size(),'objCount');
  1230. objB := objList.getDataObject(0);
  1231. Check(TSDOEqualityHelper.equal(objA,objB),'object');
  1232. Compare(
  1233. objA.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  1234. objB.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  1235. );
  1236. Compare(
  1237. objB.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  1238. objA.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  1239. );
  1240. finally
  1241. strm.Free();
  1242. end;
  1243. end;
  1244. const
  1245. CURRENCY_VALUES_REPEATED_DIGITED : array[0..8] of TSDOCurrency = (
  1246. 1111111111111.1111, -222222222222.2222, 33333333333333.3333, 444444444444444.4444, 555555555555555.5555,
  1247. -666666666666666.6666, 777777777777777.7777, 8, -9
  1248. );
  1249. procedure TSDOSerializerBinary_Test.to_stream_changesummary_prop_list_currency();
  1250. const
  1251. LIST_PROP_NAME = s_list_currency;
  1252. LIST_PROP_TYPE = CurrencyType;
  1253. var
  1254. locFactoryA, locFactoryB : ISDODataFactory;
  1255. objA, objB : ISDODataObject;
  1256. locCS : ISDOChangeSummary;
  1257. objList : ISDODataObjectList;
  1258. s : ISDOSerializer;
  1259. strm : TMemoryStream;
  1260. locDep : ISDODataObject;
  1261. ls : ISDODataObjectList;
  1262. begin
  1263. locFactoryA := TSDODataFactory.Create() as ISDODataFactory;
  1264. locFactoryA.AddType(s_uri,s_DepartmentType,[]);
  1265. locFactoryA.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  1266. locFactoryA.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  1267. locFactoryA.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[ByteType],[]);
  1268. locFactoryA.addProperty(s_uri,s_DepartmentType,LIST_PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[LIST_PROP_TYPE],[pfIsMany]);
  1269. locFactoryA.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  1270. locDep := locFactoryA.createNew(s_uri,s_DepartmentType);
  1271. locDep.setString(s_name,'R & D');
  1272. locDep.setString(s_location,'Ouaga, BF');
  1273. locDep.setByte(s_number,123);
  1274. ls := locDep.getList(LIST_PROP_NAME);
  1275. ls.appendCurrency(CURRENCY_VALUES_REPEATED_DIGITED[0]);
  1276. ls.appendCurrency(CURRENCY_VALUES_REPEATED_DIGITED[1]);
  1277. ls.appendCurrency(CURRENCY_VALUES_REPEATED_DIGITED[2]);
  1278. locCS := locDep.getChangeSummary();
  1279. locCS.beginLogging();
  1280. locDep.setString(s_name,'R & D Department');
  1281. locDep.setString(s_location,'Ouaga 01, BF');
  1282. ls.setCurrency(0,CURRENCY_VALUES_REPEATED_DIGITED[3]);
  1283. ls.appendCurrency(CURRENCY_VALUES_REPEATED_DIGITED[4]);
  1284. ls.appendCurrency(CURRENCY_VALUES_REPEATED_DIGITED[5]);
  1285. ls.setCurrency(1,CURRENCY_VALUES_REPEATED_DIGITED[6]);
  1286. ls.delete(0);
  1287. ls.delete(1);
  1288. ls.insertCurrency(2, CURRENCY_VALUES_REPEATED_DIGITED[7]);
  1289. ls.appendCurrency(CURRENCY_VALUES_REPEATED_DIGITED[8]);
  1290. objA := locDep;
  1291. s := TSDOSerializer.Create(locFactoryA,CreateSerializerStream());
  1292. strm := TMemoryStream.Create();
  1293. try
  1294. s.save(objA,strm);
  1295. {$IFDEF TEST_GENERATE_FILE}
  1296. strm.SaveToFile(sdoExpandLocalFileName('changesummary_prop_list_currency.binary'));
  1297. {$ENDIF TEST_GENERATE_FILE}
  1298. locFactoryB := TSDODataFactory.Create();
  1299. s := TSDOSerializer.Create(locFactoryB,CreateSerializerStream());
  1300. strm.Position := 0;
  1301. objList := TSDODataObjectList.Create(
  1302. locFactoryB.getType(sdo_namespace,SDOTypeDefaultTypeNames[ObjectType])
  1303. ) as ISDODataObjectList;
  1304. s.load(strm,objList);
  1305. CheckEquals(1,objList.size(),'objCount');
  1306. objB := objList.getDataObject(0);
  1307. Check(TSDOEqualityHelper.equal(objA,objB),'object');
  1308. Compare(
  1309. objA.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  1310. objB.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  1311. );
  1312. Compare(
  1313. objB.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  1314. objA.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  1315. );
  1316. finally
  1317. strm.Free();
  1318. end;
  1319. end;
  1320. procedure TSDOSerializerBinary_Test.to_stream_changesummary_prop_list_bytes();
  1321. const
  1322. LIST_PROP_NAME = s_list_bytes;
  1323. LIST_PROP_TYPE = BytesType;
  1324. var
  1325. VAL_1, VAL_2, VAL_3, VAL_4, VAL_5 : TSDOBytes;
  1326. procedure SetConstants();
  1327. var
  1328. v : TSDOBytes;
  1329. k : Integer;
  1330. begin
  1331. SetLength(v,10);
  1332. for k := 0 to High(v) do
  1333. v[k] := k mod High(Byte);
  1334. VAL_1 := v;
  1335. v := nil;
  1336. VAL_2 := nil;
  1337. SetLength(v,20);
  1338. for k := 0 to High(v) do
  1339. v[k] := ( ( 3 * k ) + 1 ) mod High(Byte);
  1340. VAL_3 := v;
  1341. v := nil;
  1342. SetLength(v,30);
  1343. for k := 0 to High(v) do
  1344. v[k] := ( ( 3 * k ) + 1 ) mod High(Byte);
  1345. VAL_4 := v;
  1346. v := nil;
  1347. SetLength(v,40);
  1348. for k := 0 to High(v) do
  1349. v[k] := ( ( 3 * k ) + 1 ) mod High(Byte);
  1350. VAL_5 := v;
  1351. v := nil;
  1352. end;
  1353. var
  1354. locFactoryA, locFactoryB : ISDODataFactory;
  1355. objA, objB : ISDODataObject;
  1356. locCS : ISDOChangeSummary;
  1357. objList : ISDODataObjectList;
  1358. s : ISDOSerializer;
  1359. strm : TMemoryStream;
  1360. locDep : ISDODataObject;
  1361. ls : ISDODataObjectList;
  1362. begin
  1363. locFactoryA := TSDODataFactory.Create() as ISDODataFactory;
  1364. locFactoryA.AddType(s_uri,s_DepartmentType,[]);
  1365. locFactoryA.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  1366. locFactoryA.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  1367. locFactoryA.addProperty(s_uri,s_DepartmentType,s_birthDate,sdo_namespace,SDOTypeDefaultTypeNames[DateTimeType],[]);
  1368. locFactoryA.addProperty(s_uri,s_DepartmentType,LIST_PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[LIST_PROP_TYPE],[pfIsMany]);
  1369. locFactoryA.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  1370. locDep := locFactoryA.createNew(s_uri,s_DepartmentType);
  1371. locDep.setString(s_name,'R & D');
  1372. locDep.setString(s_location,'Ouaga, BF');
  1373. //locDep.setBytes(s_birthDate,VAL_1);
  1374. ls := locDep.getList(LIST_PROP_NAME);
  1375. ls.appendBytes(VAL_1);
  1376. ls.appendBytes(VAL_2);
  1377. ls.appendBytes(VAL_3);
  1378. locCS := locDep.getChangeSummary();
  1379. locCS.beginLogging();
  1380. locDep.setString(s_name,'R & D Department');
  1381. locDep.setString(s_location,'Ouaga 01, BF');
  1382. ls.setBytes(0,VAL_4);
  1383. ls.appendBytes(VAL_5);
  1384. ls.appendBytes(VAL_1);
  1385. ls.setBytes(1,VAL_2);
  1386. ls.delete(0);
  1387. ls.delete(1);
  1388. ls.insertBytes(2, VAL_3);
  1389. ls.appendBytes(VAL_4);
  1390. objA := locDep;
  1391. s := TSDOSerializer.Create(locFactoryA,CreateSerializerStream());
  1392. strm := TMemoryStream.Create();
  1393. try
  1394. s.save(objA,strm);
  1395. {$IFDEF TEST_GENERATE_FILE}
  1396. strm.SaveToFile(sdoExpandLocalFileName('changesummary_prop_list_bytes.binary'));
  1397. {$ENDIF TEST_GENERATE_FILE}
  1398. locFactoryB := TSDODataFactory.Create();
  1399. s := TSDOSerializer.Create(locFactoryB,CreateSerializerStream());
  1400. strm.Position := 0;
  1401. objList := TSDODataObjectList.Create(
  1402. locFactoryB.getType(sdo_namespace,SDOTypeDefaultTypeNames[ObjectType])
  1403. ) as ISDODataObjectList;
  1404. s.load(strm,objList);
  1405. CheckEquals(1,objList.size(),'objCount');
  1406. objB := objList.getDataObject(0);
  1407. Check(TSDOEqualityHelper.equal(objA,objB),'object');
  1408. Compare(
  1409. objA.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  1410. objB.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  1411. );
  1412. Compare(
  1413. objB.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  1414. objA.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  1415. );
  1416. finally
  1417. strm.Free();
  1418. end;
  1419. end;
  1420. procedure TSDOSerializerBinary_Test.to_stream_changesummary_prop_list_objects();
  1421. function create_employee(
  1422. const AFac : ISDODataFactory;
  1423. const AName, ASN : TSDOString;
  1424. const AManager : Boolean
  1425. ) : ISDODataObject;
  1426. begin
  1427. Result := AFac.createNew(s_uri, s_EmployeeType);
  1428. Result.setString(s_name, AName);
  1429. Result.setString(s_sn, ASN);
  1430. Result.setBoolean(s_manager, AManager);
  1431. end;
  1432. var
  1433. locFactoryA, locFactoryB : ISDODataFactory;
  1434. locDep, e1, e2 : ISDODataObject;
  1435. objA, objB : ISDODataObject;
  1436. locCS : ISDOChangeSummary;
  1437. objList : ISDODataObjectList;
  1438. s : ISDOSerializer;
  1439. strm , x: TMemoryStream;
  1440. ls : ISDODataObjectList;
  1441. begin
  1442. locFactoryA := TSDODataFactory.Create() as ISDODataFactory;
  1443. locFactoryA.AddType(s_uri,s_EmployeeType,[]);
  1444. locFactoryA.addProperty(s_uri, s_EmployeeType,'name',sdo_namespace,'string',[]);
  1445. locFactoryA.addProperty(s_uri, s_EmployeeType,'SN',sdo_namespace,'string',[]);
  1446. locFactoryA.addProperty(s_uri, s_EmployeeType,'manager',sdo_namespace,'boolean',[]);
  1447. locFactoryA.AddType(s_uri,s_DepartmentType,[]);
  1448. locFactoryA.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  1449. locFactoryA.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  1450. locFactoryA.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[]);
  1451. locFactoryA.addProperty(s_uri,s_DepartmentType,s_list_object,s_uri,s_EmployeeType,[pfIsMany,pfIsContainment]);
  1452. locFactoryA.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  1453. locDep := locFactoryA.createNew(s_uri,s_DepartmentType);
  1454. locDep.setString(s_name,'R & D');
  1455. locDep.setString(s_location,'Ouaga, BF');
  1456. locDep.setInteger(s_number,1210);
  1457. ls := locDep.getList(s_list_object);
  1458. ls.append(create_employee(locFactoryA,'Inoussa O.', '0001', True));
  1459. ls.append(create_employee(locFactoryA,'Kis O.', '0002', False));
  1460. ls.append(create_employee(locFactoryA,'WST', '0003', False));
  1461. locCS := locDep.getChangeSummary();
  1462. locCS.beginLogging();
  1463. locDep.setString(s_name,'R & D Department');
  1464. locDep.setString(s_location,'Ouaga 01, BF');
  1465. e1 := create_employee(locFactoryA,'FPC', '0010', False);
  1466. e2 := create_employee(locFactoryA,'Lazarus', '0011', False);
  1467. ls.setDataObject(0,e1);
  1468. ls.append(create_employee(locFactoryA,'FPC 2 ', '0020', True));
  1469. ls.insert(3,create_employee(locFactoryA,'FPC 5', '0050', False));
  1470. ls.append(create_employee(locFactoryA,'FPC 3', '0030', False));
  1471. ls.setDataObject(1,e2);
  1472. ls.delete(0);
  1473. ls.delete(1);
  1474. ls.append(create_employee(locFactoryA,'FPC 4', '0040', True));
  1475. objA := locDep;
  1476. s := TSDOSerializer.Create(locFactoryA,CreateSerializerStream());
  1477. strm := TMemoryStream.Create();
  1478. try
  1479. s.save(objA,strm);
  1480. {$IFDEF TEST_GENERATE_FILE}
  1481. strm.SaveToFile(sdoExpandLocalFileName('changesummary_prop_list_object.binary'));
  1482. {$ENDIF TEST_GENERATE_FILE}
  1483. locFactoryB := TSDODataFactory.Create();
  1484. s := TSDOSerializer.Create(locFactoryB,CreateSerializerStream());
  1485. strm.Position := 0;
  1486. objList := TSDODataObjectList.Create(
  1487. locFactoryB.getType(sdo_namespace,SDOTypeDefaultTypeNames[ObjectType])
  1488. ) as ISDODataObjectList;
  1489. s.load(strm,objList);
  1490. CheckEquals(1,objList.size(),'objCount');
  1491. objB := objList.getDataObject(0);
  1492. x := TMemoryStream.Create();
  1493. s := TSDOSerializer.Create(locFactoryB,TSDOSerializerStreamXML.Create());
  1494. s.save(objB,x);
  1495. x.SaveToFile(sdoExpandLocalFileName('changesummary_prop_list_object.xxx.xml'));
  1496. x.Free();
  1497. Check(TSDOEqualityHelper.equal(objA,objB),'object');
  1498. Compare(
  1499. objA.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  1500. objB.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  1501. );
  1502. Compare(
  1503. objB.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  1504. objA.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  1505. );
  1506. finally
  1507. strm.Free();
  1508. end;
  1509. end;
  1510. procedure TSDOSerializerBinary_Test.to_stream_changesummary_object_delete();
  1511. var
  1512. locFactoryA, locFactoryB : ISDODataFactory;
  1513. objA, objB : ISDODataObject;
  1514. locCS : ISDOChangeSummary;
  1515. objList : ISDODataObjectList;
  1516. s : ISDOSerializer;
  1517. strm : TMemoryStream;
  1518. locDep, locEmployee : ISDODataObject;
  1519. begin
  1520. locFactoryA := TSDODataFactory.Create() as ISDODataFactory;
  1521. locFactoryA.AddType(s_uri,s_DepartmentType,[]);
  1522. locFactoryA.AddType(s_uri,s_Employee,[]);
  1523. locFactoryA.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType], [pfIsAttribute]);
  1524. locFactoryA.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType], [pfIsAttribute]);
  1525. locFactoryA.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType], [pfIsAttribute]);
  1526. locFactoryA.addProperty(s_uri,s_DepartmentType,s_Employee,s_uri,s_Employee,[pfIsContainment]);
  1527. locFactoryA.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  1528. locFactoryA.addProperty(s_uri,s_Employee,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType], [pfIsAttribute]);
  1529. locFactoryA.addProperty(s_uri,s_Employee,s_sn,sdo_namespace,SDOTypeDefaultTypeNames[StringType], [pfIsAttribute]);
  1530. locFactoryA.addProperty(s_uri,s_Employee,s_manager,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType], [pfIsAttribute]);
  1531. locDep := locFactoryA.createNew(s_uri,s_DepartmentType);
  1532. locDep.setString(s_name,'R & D');
  1533. locEmployee := locDep.createDataObject(s_Employee);
  1534. locEmployee.setString(s_name,'Inoussa O.');
  1535. locEmployee.setString(s_sn,'002');
  1536. locEmployee.setBoolean(s_manager,True);
  1537. locCS := locDep.getChangeSummary();
  1538. locDep.setString(s_location,'Ouaga, BF');
  1539. locCS.beginLogging();
  1540. locDep.setInteger(s_number,1210);
  1541. locDep.setString(s_name,'R & D Department');
  1542. locDep.setString(s_location,'Ouaga 01, BF');
  1543. locDep.setDataObject(s_Employee,nil);
  1544. objA := locDep;
  1545. s := TSDOSerializer.Create(locFactoryA,CreateSerializerStream());
  1546. strm := TMemoryStream.Create();
  1547. try
  1548. s.save(objA,strm);
  1549. {$IFDEF TEST_GENERATE_FILE}
  1550. strm.SaveToFile(sdoExpandLocalFileName('changesummary_object_delete.binary'));
  1551. {$ENDIF TEST_GENERATE_FILE}
  1552. locFactoryB := TSDODataFactory.Create();
  1553. s := TSDOSerializer.Create(locFactoryB,CreateSerializerStream());
  1554. strm.Position := 0;
  1555. objList := TSDODataObjectList.Create(
  1556. locFactoryB.getType(sdo_namespace,SDOTypeDefaultTypeNames[ObjectType])
  1557. ) as ISDODataObjectList;
  1558. s.load(strm,objList);
  1559. CheckEquals(1,objList.size(),'objCount');
  1560. objB := objList.getDataObject(0);
  1561. Check(TSDOEqualityHelper.equal(objA,objB),'object');
  1562. Compare(
  1563. objA.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  1564. objB.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  1565. );
  1566. Compare(
  1567. objB.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  1568. objA.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  1569. );
  1570. finally
  1571. strm.Free();
  1572. end;
  1573. end;
  1574. procedure TSDOSerializerBinary_Test.to_stream_changesummary_object_delete_nested;
  1575. var
  1576. locFactoryA, locFactoryB : ISDODataFactory;
  1577. objA, objB : ISDODataObject;
  1578. locCS : ISDOChangeSummary;
  1579. objList : ISDODataObjectList;
  1580. s : ISDOSerializer;
  1581. strm : TMemoryStream;
  1582. locA, locB, locC, locD : ISDODataObject;
  1583. begin
  1584. locFactoryA := TSDODataFactory.Create() as ISDODataFactory;
  1585. locFactoryA.AddType(s_uri,'a',[]);
  1586. locFactoryA.AddType(s_uri,'b',[]);
  1587. locFactoryA.AddType(s_uri,'c',[]);
  1588. locFactoryA.AddType(s_uri,'d',[]);
  1589. locFactoryA.addProperty(s_uri,'a','p_a_str',sdo_namespace,SDOTypeDefaultTypeNames[StringType], [pfIsAttribute]);
  1590. locFactoryA.addProperty(s_uri,'a','p_ab',s_uri,'b',[pfIsContainment]);
  1591. locFactoryA.addProperty(s_uri,'a','p_ac',s_uri,'c',[]);
  1592. locFactoryA.addProperty(s_uri,'a','p_ad',s_uri,'d',[]);
  1593. locFactoryA.addProperty(s_uri,'a',s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  1594. locFactoryA.addProperty(s_uri,'b','p_bc',s_uri,'c',[pfIsContainment]);
  1595. locFactoryA.addProperty(s_uri,'b','p_b_str',sdo_namespace,SDOTypeDefaultTypeNames[StringType], [pfIsAttribute]);
  1596. locFactoryA.addProperty(s_uri,'c','p_cd',s_uri,'d',[pfIsContainment]);
  1597. locFactoryA.addProperty(s_uri,'c','p_c_str',sdo_namespace,SDOTypeDefaultTypeNames[StringType], [pfIsAttribute]);
  1598. locFactoryA.addProperty(s_uri,'d','p_d_str',sdo_namespace,SDOTypeDefaultTypeNames[StringType], [pfIsAttribute]);
  1599. locA := locFactoryA.createNew(s_uri,'a');
  1600. locA.setString('p_a_str','sample A'' property.');
  1601. locB := locA.createDataObject('p_ab');
  1602. locB.setString('p_b_str','Inoussa O.');
  1603. locC := locB.createDataObject('p_bc');
  1604. locC.setString('p_c_str','azerty');
  1605. locD := locC.createDataObject('p_cd');
  1606. locD.setString('p_d_str','D value');
  1607. locA.setDataObject('p_ac',locC);
  1608. locA.setDataObject('p_ad',locD);
  1609. locCS := locA.getChangeSummary();
  1610. locCS.beginLogging();
  1611. locC.setDataObject('p_cd',nil);
  1612. locA.setDataObject('p_ab',nil);
  1613. objA := locA;
  1614. s := TSDOSerializer.Create(locFactoryA,CreateSerializerStream());
  1615. strm := TMemoryStream.Create();
  1616. try
  1617. s.save(objA,strm);
  1618. {$IFDEF TEST_GENERATE_FILE}
  1619. strm.SaveToFile(sdoExpandLocalFileName('changesummary_object_delete_nested.binary'));
  1620. {$ENDIF TEST_GENERATE_FILE}
  1621. locFactoryB := TSDODataFactory.Create();
  1622. s := TSDOSerializer.Create(locFactoryB,CreateSerializerStream());
  1623. strm.Position := 0;
  1624. objList := TSDODataObjectList.Create(
  1625. locFactoryB.getType(sdo_namespace,SDOTypeDefaultTypeNames[ObjectType])
  1626. ) as ISDODataObjectList;
  1627. s.load(strm,objList);
  1628. CheckEquals(1,objList.size(),'objCount');
  1629. objB := objList.getDataObject(0);
  1630. Check(TSDOEqualityHelper.equal(objA,objB),'object');
  1631. Compare(
  1632. objA.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  1633. objB.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  1634. );
  1635. Compare(
  1636. objB.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  1637. objA.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  1638. );
  1639. finally
  1640. strm.Free();
  1641. end;
  1642. end;
  1643. procedure TSDOSerializerBinary_Test.to_stream_changesummary_object_create_cont_ref();
  1644. var
  1645. locFac : ISDODataFactory;
  1646. locDep, locEmployee, locLoadedDep : ISDODataObject;
  1647. locCS : ISDOChangeSummary;
  1648. s : ISDOSerializer;
  1649. localFileName : string;
  1650. begin
  1651. localFileName := sdoExpandLocalFileName('change_summary_object_create_cont_ref.binary');
  1652. locFac := TSDODataFactory.Create() as ISDODataFactory;
  1653. locFac.AddType(s_uri,s_DepartmentType,[]);
  1654. locFac.AddType(s_uri,s_Employee,[]);
  1655. locFac.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  1656. locFac.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  1657. locFac.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[pfIsAttribute]);
  1658. locFac.addProperty(s_uri,s_DepartmentType,s_Employee,s_uri,s_Employee,[pfIsContainment]);
  1659. locFac.addProperty(s_uri,s_DepartmentType,'employee_ref',s_uri,s_Employee,[]);
  1660. locFac.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  1661. locFac.addProperty(s_uri,s_Employee,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  1662. locFac.addProperty(s_uri,s_Employee,s_sn,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  1663. locFac.addProperty(s_uri,s_Employee,s_manager,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType],[pfIsAttribute]);
  1664. locDep := locFac.createNew(s_uri,s_DepartmentType);
  1665. locDep.setString(s_name,'R & D');
  1666. locCS := locDep.getChangeSummary();
  1667. locDep.setString(s_location,'Ouaga, BF');
  1668. locCS.beginLogging();
  1669. locDep.setInteger(s_number,1210);
  1670. locEmployee := locDep.createDataObject(s_Employee);
  1671. locEmployee.setString(s_name,'Inoussa O.');
  1672. locEmployee.setString(s_sn,'002');
  1673. locEmployee.setBoolean(s_manager,True);
  1674. locDep.setString(s_name,'R & D Department');
  1675. locDep.setString(s_location,'Ouaga 01, BF');
  1676. locDep.setDataObject('employee_ref',locEmployee);
  1677. locEmployee.setString(s_name,'Inoussa OUEDRAOGO');
  1678. locEmployee.setString(s_sn,'001');
  1679. s := TSDOSerializer.Create(locFac,CreateSerializerStream());
  1680. s.Save(locDep,localFileName);
  1681. s := TSDOSerializer.Create(locFac,CreateSerializerStream());
  1682. locLoadedDep := s.load(localFileName);
  1683. Check(TSDOEqualityHelper.equal(locLoadedDep,locDep),'Object');
  1684. Compare(
  1685. locDep.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  1686. locLoadedDep.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  1687. );
  1688. locDep.getChangeSummary().undoChanges();
  1689. locLoadedDep.getChangeSummary().undoChanges();
  1690. CheckEquals( 0, locDep.getChangeSummary().getChangedDataObjects().size());
  1691. CheckEquals( 0, locLoadedDep.getChangeSummary().getChangedDataObjects().size());
  1692. Check(TSDOEqualityHelper.equal(locDep, locLoadedDep),'Object');
  1693. end;
  1694. procedure TSDOSerializerBinary_Test.null_bool_prop();
  1695. const
  1696. TARGET_PROP_NAME = s_bool_prop; TARGET_PROP_TYPE = BooleanType;
  1697. function CreateFactory() : ISDODataFactory;
  1698. var
  1699. locObj : ISDOType;
  1700. begin
  1701. Result := TSDODataFactory.Create() as ISDODataFactory;
  1702. Result.AddType(s_uri,s_object_type,[]);
  1703. locObj := Result.getType(s_uri,s_object_type);
  1704. Result.addProperty(locObj,s_int_prop,sdo_namespace,'Integer',[]);
  1705. Result.addProperty(locObj,TARGET_PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[TARGET_PROP_TYPE],[]);
  1706. end;
  1707. var
  1708. locFactory : ISDODataFactory;
  1709. locInstance, locInstanceLoaded : ISDODataObject;
  1710. s : ISDOSerializer;
  1711. ms : TMemoryStream;
  1712. begin
  1713. locFactory := CreateFactory();
  1714. locInstance := locFactory.createNew(s_uri,s_object_type);
  1715. locInstance.setNull(TARGET_PROP_NAME);
  1716. locInstance.setInteger(s_int_prop,123);
  1717. ms := TMemoryStream.Create();
  1718. try
  1719. s := TSDOSerializer.Create(locFactory,CreateSerializerStream());
  1720. s.save(locInstance,ms);
  1721. s := TSDOSerializer.Create(locFactory,CreateSerializerStream());
  1722. ms.Position := 0;
  1723. locInstanceLoaded := s.load(ms);
  1724. CheckEquals(locInstance.isNull(TARGET_PROP_NAME), locInstanceLoaded.isNull(TARGET_PROP_NAME),Format('isNull(%s)',[TARGET_PROP_NAME]));
  1725. CheckEquals(locInstance.getInteger(s_int_prop), locInstanceLoaded.getInteger(s_int_prop),s_int_prop);
  1726. finally
  1727. ms.Free();
  1728. end;
  1729. end;
  1730. procedure TSDOSerializerBinary_Test.null_byte_prop();
  1731. const
  1732. TARGET_PROP_NAME = s_byte_prop; TARGET_PROP_TYPE = ByteType;
  1733. function CreateFactory() : ISDODataFactory;
  1734. var
  1735. locObj : ISDOType;
  1736. begin
  1737. Result := TSDODataFactory.Create() as ISDODataFactory;
  1738. Result.AddType(s_uri,s_object_type,[]);
  1739. locObj := Result.getType(s_uri,s_object_type);
  1740. Result.addProperty(locObj,s_int_prop,sdo_namespace,'Integer',[]);
  1741. Result.addProperty(locObj,TARGET_PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[TARGET_PROP_TYPE],[]);
  1742. end;
  1743. var
  1744. locFactory : ISDODataFactory;
  1745. locInstance, locInstanceLoaded : ISDODataObject;
  1746. s : ISDOSerializer;
  1747. ms : TMemoryStream;
  1748. begin
  1749. locFactory := CreateFactory();
  1750. locInstance := locFactory.createNew(s_uri,s_object_type);
  1751. locInstance.setNull(TARGET_PROP_NAME);
  1752. locInstance.setInteger(s_int_prop,123);
  1753. ms := TMemoryStream.Create();
  1754. try
  1755. s := TSDOSerializer.Create(locFactory,CreateSerializerStream());
  1756. s.save(locInstance,ms);
  1757. s := TSDOSerializer.Create(locFactory,CreateSerializerStream());
  1758. ms.Position := 0;
  1759. locInstanceLoaded := s.load(ms);
  1760. CheckEquals(locInstance.isNull(TARGET_PROP_NAME), locInstanceLoaded.isNull(TARGET_PROP_NAME),Format('isNull(%s)',[TARGET_PROP_NAME]));
  1761. CheckEquals(locInstance.getInteger(s_int_prop), locInstanceLoaded.getInteger(s_int_prop),s_int_prop);
  1762. finally
  1763. ms.Free();
  1764. end;
  1765. end;
  1766. procedure TSDOSerializerBinary_Test.null_bytes_prop();
  1767. const
  1768. TARGET_PROP_NAME = s_bytes_prop; TARGET_PROP_TYPE = BytesType;
  1769. function CreateFactory() : ISDODataFactory;
  1770. var
  1771. locObj : ISDOType;
  1772. begin
  1773. Result := TSDODataFactory.Create() as ISDODataFactory;
  1774. Result.AddType(s_uri,s_object_type,[]);
  1775. locObj := Result.getType(s_uri,s_object_type);
  1776. Result.addProperty(locObj,s_int_prop,sdo_namespace,'Integer',[]);
  1777. Result.addProperty(locObj,TARGET_PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[TARGET_PROP_TYPE],[]);
  1778. end;
  1779. var
  1780. locFactory : ISDODataFactory;
  1781. locInstance, locInstanceLoaded : ISDODataObject;
  1782. s : ISDOSerializer;
  1783. ms : TMemoryStream;
  1784. begin
  1785. locFactory := CreateFactory();
  1786. locInstance := locFactory.createNew(s_uri,s_object_type);
  1787. locInstance.setNull(TARGET_PROP_NAME);
  1788. locInstance.setInteger(s_int_prop,123);
  1789. ms := TMemoryStream.Create();
  1790. try
  1791. s := TSDOSerializer.Create(locFactory,CreateSerializerStream());
  1792. s.save(locInstance,ms);
  1793. s := TSDOSerializer.Create(locFactory,CreateSerializerStream());
  1794. ms.Position := 0;
  1795. locInstanceLoaded := s.load(ms);
  1796. CheckEquals(locInstance.isNull(TARGET_PROP_NAME), locInstanceLoaded.isNull(TARGET_PROP_NAME),Format('isNull(%s)',[TARGET_PROP_NAME]));
  1797. CheckEquals(locInstance.getInteger(s_int_prop), locInstanceLoaded.getInteger(s_int_prop),s_int_prop);
  1798. finally
  1799. ms.Free();
  1800. end;
  1801. end;
  1802. procedure TSDOSerializerBinary_Test.null_char_prop();
  1803. const
  1804. TARGET_PROP_NAME = s_char_prop; TARGET_PROP_TYPE = CharacterType;
  1805. function CreateFactory() : ISDODataFactory;
  1806. var
  1807. locObj : ISDOType;
  1808. begin
  1809. Result := TSDODataFactory.Create() as ISDODataFactory;
  1810. Result.AddType(s_uri,s_object_type,[]);
  1811. locObj := Result.getType(s_uri,s_object_type);
  1812. Result.addProperty(locObj,s_int_prop,sdo_namespace,'Integer',[]);
  1813. Result.addProperty(locObj,TARGET_PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[TARGET_PROP_TYPE],[]);
  1814. end;
  1815. var
  1816. locFactory : ISDODataFactory;
  1817. locInstance, locInstanceLoaded : ISDODataObject;
  1818. s : ISDOSerializer;
  1819. ms : TMemoryStream;
  1820. begin
  1821. locFactory := CreateFactory();
  1822. locInstance := locFactory.createNew(s_uri,s_object_type);
  1823. locInstance.setNull(TARGET_PROP_NAME);
  1824. locInstance.setInteger(s_int_prop,123);
  1825. ms := TMemoryStream.Create();
  1826. try
  1827. s := TSDOSerializer.Create(locFactory,CreateSerializerStream());
  1828. s.save(locInstance,ms);
  1829. s := TSDOSerializer.Create(locFactory,CreateSerializerStream());
  1830. ms.Position := 0;
  1831. locInstanceLoaded := s.load(ms);
  1832. CheckEquals(locInstance.isNull(TARGET_PROP_NAME), locInstanceLoaded.isNull(TARGET_PROP_NAME),Format('isNull(%s)',[TARGET_PROP_NAME]));
  1833. CheckEquals(locInstance.getInteger(s_int_prop), locInstanceLoaded.getInteger(s_int_prop),s_int_prop);
  1834. finally
  1835. ms.Free();
  1836. end;
  1837. end;
  1838. procedure TSDOSerializerBinary_Test.null_currency_prop();
  1839. const
  1840. TARGET_PROP_NAME = s_currency_prop; TARGET_PROP_TYPE = CurrencyType;
  1841. function CreateFactory() : ISDODataFactory;
  1842. var
  1843. locObj : ISDOType;
  1844. begin
  1845. Result := TSDODataFactory.Create() as ISDODataFactory;
  1846. Result.AddType(s_uri,s_object_type,[]);
  1847. locObj := Result.getType(s_uri,s_object_type);
  1848. Result.addProperty(locObj,s_int_prop,sdo_namespace,'Integer',[]);
  1849. Result.addProperty(locObj,TARGET_PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[TARGET_PROP_TYPE],[]);
  1850. end;
  1851. var
  1852. locFactory : ISDODataFactory;
  1853. locInstance, locInstanceLoaded : ISDODataObject;
  1854. s : ISDOSerializer;
  1855. ms : TMemoryStream;
  1856. begin
  1857. locFactory := CreateFactory();
  1858. locInstance := locFactory.createNew(s_uri,s_object_type);
  1859. locInstance.setNull(TARGET_PROP_NAME);
  1860. locInstance.setInteger(s_int_prop,123);
  1861. ms := TMemoryStream.Create();
  1862. try
  1863. s := TSDOSerializer.Create(locFactory,CreateSerializerStream());
  1864. s.save(locInstance,ms);
  1865. s := TSDOSerializer.Create(locFactory,CreateSerializerStream());
  1866. ms.Position := 0;
  1867. locInstanceLoaded := s.load(ms);
  1868. CheckEquals(locInstance.isNull(TARGET_PROP_NAME), locInstanceLoaded.isNull(TARGET_PROP_NAME),Format('isNull(%s)',[TARGET_PROP_NAME]));
  1869. CheckEquals(locInstance.getInteger(s_int_prop), locInstanceLoaded.getInteger(s_int_prop),s_int_prop);
  1870. finally
  1871. ms.Free();
  1872. end;
  1873. end;
  1874. procedure TSDOSerializerBinary_Test.null_datetime_prop();
  1875. const
  1876. TARGET_PROP_NAME = s_datetime_prop; TARGET_PROP_TYPE = DateTimeType;
  1877. function CreateFactory() : ISDODataFactory;
  1878. var
  1879. locObj : ISDOType;
  1880. begin
  1881. Result := TSDODataFactory.Create() as ISDODataFactory;
  1882. Result.AddType(s_uri,s_object_type,[]);
  1883. locObj := Result.getType(s_uri,s_object_type);
  1884. Result.addProperty(locObj,s_int_prop,sdo_namespace,'Integer',[]);
  1885. Result.addProperty(locObj,TARGET_PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[TARGET_PROP_TYPE],[]);
  1886. end;
  1887. var
  1888. locFactory : ISDODataFactory;
  1889. locInstance, locInstanceLoaded : ISDODataObject;
  1890. s : ISDOSerializer;
  1891. ms : TMemoryStream;
  1892. begin
  1893. locFactory := CreateFactory();
  1894. locInstance := locFactory.createNew(s_uri,s_object_type);
  1895. locInstance.setNull(TARGET_PROP_NAME);
  1896. locInstance.setInteger(s_int_prop,123);
  1897. ms := TMemoryStream.Create();
  1898. try
  1899. s := TSDOSerializer.Create(locFactory,CreateSerializerStream());
  1900. s.save(locInstance,ms);
  1901. s := TSDOSerializer.Create(locFactory,CreateSerializerStream());
  1902. ms.Position := 0;
  1903. locInstanceLoaded := s.load(ms);
  1904. CheckEquals(locInstance.isNull(TARGET_PROP_NAME), locInstanceLoaded.isNull(TARGET_PROP_NAME),Format('isNull(%s)',[TARGET_PROP_NAME]));
  1905. CheckEquals(locInstance.getInteger(s_int_prop), locInstanceLoaded.getInteger(s_int_prop),s_int_prop);
  1906. finally
  1907. ms.Free();
  1908. end;
  1909. end;
  1910. procedure TSDOSerializerBinary_Test.null_double_prop();
  1911. const
  1912. TARGET_PROP_NAME = s_double_prop; TARGET_PROP_TYPE = DoubleType;
  1913. function CreateFactory() : ISDODataFactory;
  1914. var
  1915. locObj : ISDOType;
  1916. begin
  1917. Result := TSDODataFactory.Create() as ISDODataFactory;
  1918. Result.AddType(s_uri,s_object_type,[]);
  1919. locObj := Result.getType(s_uri,s_object_type);
  1920. Result.addProperty(locObj,s_int_prop,sdo_namespace,'Integer',[]);
  1921. Result.addProperty(locObj,TARGET_PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[TARGET_PROP_TYPE],[]);
  1922. end;
  1923. var
  1924. locFactory : ISDODataFactory;
  1925. locInstance, locInstanceLoaded : ISDODataObject;
  1926. s : ISDOSerializer;
  1927. ms : TMemoryStream;
  1928. begin
  1929. locFactory := CreateFactory();
  1930. locInstance := locFactory.createNew(s_uri,s_object_type);
  1931. locInstance.setNull(TARGET_PROP_NAME);
  1932. locInstance.setInteger(s_int_prop,123);
  1933. ms := TMemoryStream.Create();
  1934. try
  1935. s := TSDOSerializer.Create(locFactory,CreateSerializerStream());
  1936. s.save(locInstance,ms);
  1937. s := TSDOSerializer.Create(locFactory,CreateSerializerStream());
  1938. ms.Position := 0;
  1939. locInstanceLoaded := s.load(ms);
  1940. CheckEquals(locInstance.isNull(TARGET_PROP_NAME), locInstanceLoaded.isNull(TARGET_PROP_NAME),Format('isNull(%s)',[TARGET_PROP_NAME]));
  1941. CheckEquals(locInstance.getInteger(s_int_prop), locInstanceLoaded.getInteger(s_int_prop),s_int_prop);
  1942. finally
  1943. ms.Free();
  1944. end;
  1945. end;
  1946. procedure TSDOSerializerBinary_Test.null_float_prop();
  1947. const
  1948. TARGET_PROP_NAME = s_float_prop; TARGET_PROP_TYPE = FloatType;
  1949. function CreateFactory() : ISDODataFactory;
  1950. var
  1951. locObj : ISDOType;
  1952. begin
  1953. Result := TSDODataFactory.Create() as ISDODataFactory;
  1954. Result.AddType(s_uri,s_object_type,[]);
  1955. locObj := Result.getType(s_uri,s_object_type);
  1956. Result.addProperty(locObj,s_int_prop,sdo_namespace,'Integer',[]);
  1957. Result.addProperty(locObj,TARGET_PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[TARGET_PROP_TYPE],[]);
  1958. end;
  1959. var
  1960. locFactory : ISDODataFactory;
  1961. locInstance, locInstanceLoaded : ISDODataObject;
  1962. s : ISDOSerializer;
  1963. ms : TMemoryStream;
  1964. begin
  1965. locFactory := CreateFactory();
  1966. locInstance := locFactory.createNew(s_uri,s_object_type);
  1967. locInstance.setNull(TARGET_PROP_NAME);
  1968. locInstance.setInteger(s_int_prop,123);
  1969. ms := TMemoryStream.Create();
  1970. try
  1971. s := TSDOSerializer.Create(locFactory,CreateSerializerStream());
  1972. s.save(locInstance,ms);
  1973. s := TSDOSerializer.Create(locFactory,CreateSerializerStream());
  1974. ms.Position := 0;
  1975. locInstanceLoaded := s.load(ms);
  1976. CheckEquals(locInstance.isNull(TARGET_PROP_NAME), locInstanceLoaded.isNull(TARGET_PROP_NAME),Format('isNull(%s)',[TARGET_PROP_NAME]));
  1977. CheckEquals(locInstance.getInteger(s_int_prop), locInstanceLoaded.getInteger(s_int_prop),s_int_prop);
  1978. finally
  1979. ms.Free();
  1980. end;
  1981. end;
  1982. procedure TSDOSerializerBinary_Test.null_integer_prop();
  1983. const
  1984. TARGET_PROP_NAME = s_int_prop; TARGET_PROP_TYPE = IntegerType;
  1985. function CreateFactory() : ISDODataFactory;
  1986. var
  1987. locObj : ISDOType;
  1988. begin
  1989. Result := TSDODataFactory.Create() as ISDODataFactory;
  1990. Result.AddType(s_uri,s_object_type,[]);
  1991. locObj := Result.getType(s_uri,s_object_type);
  1992. Result.addProperty(locObj,s_string_prop,sdo_namespace,'String',[]);
  1993. Result.addProperty(locObj,TARGET_PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[TARGET_PROP_TYPE],[]);
  1994. end;
  1995. var
  1996. locFactory : ISDODataFactory;
  1997. locInstance, locInstanceLoaded : ISDODataObject;
  1998. f : ISDOSerializerStream;
  1999. s : ISDOSerializer;
  2000. ms : TMemoryStream;
  2001. begin
  2002. locFactory := CreateFactory();
  2003. locInstance := locFactory.createNew(s_uri,s_object_type);
  2004. locInstance.setNull(TARGET_PROP_NAME);
  2005. locInstance.setString(s_string_prop,'azerty');
  2006. ms := TMemoryStream.Create();
  2007. try
  2008. f := TSDOSerializerStreamXML.Create();
  2009. s := TSDOSerializer.Create(locFactory,f);
  2010. s.save(locInstance,ms);
  2011. f := TSDOSerializerStreamXML.Create();
  2012. s := TSDOSerializer.Create(locFactory,f);
  2013. ms.Position := 0;
  2014. locInstanceLoaded := s.load(ms);
  2015. CheckEquals(locInstance.isNull(TARGET_PROP_NAME), locInstanceLoaded.isNull(TARGET_PROP_NAME),Format('isNull(%s)',[TARGET_PROP_NAME]));
  2016. CheckEquals(locInstance.getString(s_string_prop), locInstanceLoaded.getString(s_string_prop),s_string_prop);
  2017. finally
  2018. ms.Free();
  2019. end;
  2020. end;
  2021. procedure TSDOSerializerBinary_Test.null_long_prop();
  2022. const
  2023. TARGET_PROP_NAME = s_long_prop; TARGET_PROP_TYPE = LongType;
  2024. function CreateFactory() : ISDODataFactory;
  2025. var
  2026. locObj : ISDOType;
  2027. begin
  2028. Result := TSDODataFactory.Create() as ISDODataFactory;
  2029. Result.AddType(s_uri,s_object_type,[]);
  2030. locObj := Result.getType(s_uri,s_object_type);
  2031. Result.addProperty(locObj,s_int_prop,sdo_namespace,'Integer',[]);
  2032. Result.addProperty(locObj,TARGET_PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[TARGET_PROP_TYPE],[]);
  2033. end;
  2034. var
  2035. locFactory : ISDODataFactory;
  2036. locInstance, locInstanceLoaded : ISDODataObject;
  2037. s : ISDOSerializer;
  2038. ms : TMemoryStream;
  2039. begin
  2040. locFactory := CreateFactory();
  2041. locInstance := locFactory.createNew(s_uri,s_object_type);
  2042. locInstance.setNull(TARGET_PROP_NAME);
  2043. locInstance.setInteger(s_int_prop,123);
  2044. ms := TMemoryStream.Create();
  2045. try
  2046. s := TSDOSerializer.Create(locFactory,CreateSerializerStream());
  2047. s.save(locInstance,ms);
  2048. s := TSDOSerializer.Create(locFactory,CreateSerializerStream());
  2049. ms.Position := 0;
  2050. locInstanceLoaded := s.load(ms);
  2051. CheckEquals(locInstance.isNull(TARGET_PROP_NAME), locInstanceLoaded.isNull(TARGET_PROP_NAME),Format('isNull(%s)',[TARGET_PROP_NAME]));
  2052. CheckEquals(locInstance.getInteger(s_int_prop), locInstanceLoaded.getInteger(s_int_prop),s_int_prop);
  2053. finally
  2054. ms.Free();
  2055. end;
  2056. end;
  2057. procedure TSDOSerializerBinary_Test.null_object_prop();
  2058. const
  2059. TARGET_PROP_NAME = s_object_prop; TARGET_PROP_TYPE_NAME = s_object_type2;
  2060. function CreateFactory() : ISDODataFactory;
  2061. var
  2062. locObj : ISDOType;
  2063. begin
  2064. Result := TSDODataFactory.Create() as ISDODataFactory;
  2065. Result.AddType(s_uri,s_object_type,[]);
  2066. Result.AddType(s_uri,s_object_type2,[]);
  2067. locObj := Result.getType(s_uri,s_object_type);
  2068. Result.addProperty(locObj,s_int_prop,sdo_namespace,'Integer',[]);
  2069. Result.addProperty(locObj,TARGET_PROP_NAME,s_uri,TARGET_PROP_TYPE_NAME,[pfIsContainment]);
  2070. locObj := Result.getType(s_uri,s_object_type2);
  2071. Result.addProperty(locObj,s_string_prop,sdo_namespace,'String',[]);
  2072. end;
  2073. var
  2074. locFactory : ISDODataFactory;
  2075. locInstance, locInstanceLoaded : ISDODataObject;
  2076. s : ISDOSerializer;
  2077. ms : TMemoryStream;
  2078. begin
  2079. locFactory := CreateFactory();
  2080. locInstance := locFactory.createNew(s_uri,s_object_type);
  2081. locInstance.setNull(TARGET_PROP_NAME);
  2082. locInstance.setInteger(s_int_prop,123);
  2083. ms := TMemoryStream.Create();
  2084. try
  2085. s := TSDOSerializer.Create(locFactory,CreateSerializerStream());
  2086. s.save(locInstance,ms);
  2087. s := TSDOSerializer.Create(locFactory,CreateSerializerStream());
  2088. ms.Position := 0;
  2089. locInstanceLoaded := s.load(ms);
  2090. CheckEquals(locInstance.isNull(TARGET_PROP_NAME), locInstanceLoaded.isNull(TARGET_PROP_NAME),Format('isNull(%s)',[TARGET_PROP_NAME]));
  2091. CheckEquals(locInstance.getInteger(s_int_prop), locInstanceLoaded.getInteger(s_int_prop),s_int_prop);
  2092. finally
  2093. ms.Free();
  2094. end;
  2095. end;
  2096. procedure TSDOSerializerBinary_Test.null_short_prop();
  2097. const
  2098. TARGET_PROP_NAME = s_short_prop; TARGET_PROP_TYPE = ShortType;
  2099. function CreateFactory() : ISDODataFactory;
  2100. var
  2101. locObj : ISDOType;
  2102. begin
  2103. Result := TSDODataFactory.Create() as ISDODataFactory;
  2104. Result.AddType(s_uri,s_object_type,[]);
  2105. locObj := Result.getType(s_uri,s_object_type);
  2106. Result.addProperty(locObj,s_int_prop,sdo_namespace,'Integer',[]);
  2107. Result.addProperty(locObj,TARGET_PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[TARGET_PROP_TYPE],[]);
  2108. end;
  2109. var
  2110. locFactory : ISDODataFactory;
  2111. locInstance, locInstanceLoaded : ISDODataObject;
  2112. s : ISDOSerializer;
  2113. ms : TMemoryStream;
  2114. begin
  2115. locFactory := CreateFactory();
  2116. locInstance := locFactory.createNew(s_uri,s_object_type);
  2117. locInstance.setNull(TARGET_PROP_NAME);
  2118. locInstance.setInteger(s_int_prop,123);
  2119. ms := TMemoryStream.Create();
  2120. try
  2121. s := TSDOSerializer.Create(locFactory,CreateSerializerStream());
  2122. s.save(locInstance,ms);
  2123. s := TSDOSerializer.Create(locFactory,CreateSerializerStream());
  2124. ms.Position := 0;
  2125. locInstanceLoaded := s.load(ms);
  2126. CheckEquals(locInstance.isNull(TARGET_PROP_NAME), locInstanceLoaded.isNull(TARGET_PROP_NAME),Format('isNull(%s)',[TARGET_PROP_NAME]));
  2127. CheckEquals(locInstance.getInteger(s_int_prop), locInstanceLoaded.getInteger(s_int_prop),s_int_prop);
  2128. finally
  2129. ms.Free();
  2130. end;
  2131. end;
  2132. procedure TSDOSerializerBinary_Test.null_string_prop();
  2133. const
  2134. TARGET_PROP_NAME = s_string_prop; TARGET_PROP_TYPE = stringType;
  2135. function CreateFactory() : ISDODataFactory;
  2136. var
  2137. locObj : ISDOType;
  2138. begin
  2139. Result := TSDODataFactory.Create() as ISDODataFactory;
  2140. Result.AddType(s_uri,s_object_type,[]);
  2141. locObj := Result.getType(s_uri,s_object_type);
  2142. Result.addProperty(locObj,s_int_prop,sdo_namespace,'Integer',[]);
  2143. Result.addProperty(locObj,TARGET_PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[TARGET_PROP_TYPE],[]);
  2144. end;
  2145. var
  2146. locFactory : ISDODataFactory;
  2147. locInstance, locInstanceLoaded : ISDODataObject;
  2148. s : ISDOSerializer;
  2149. ms : TMemoryStream;
  2150. begin
  2151. locFactory := CreateFactory();
  2152. locInstance := locFactory.createNew(s_uri,s_object_type);
  2153. locInstance.setNull(TARGET_PROP_NAME);
  2154. locInstance.setInteger(s_int_prop,123);
  2155. ms := TMemoryStream.Create();
  2156. try
  2157. s := TSDOSerializer.Create(locFactory,CreateSerializerStream());
  2158. s.save(locInstance,ms);
  2159. s := TSDOSerializer.Create(locFactory,CreateSerializerStream());
  2160. ms.Position := 0;
  2161. locInstanceLoaded := s.load(ms);
  2162. CheckEquals(locInstance.isNull(TARGET_PROP_NAME), locInstanceLoaded.isNull(TARGET_PROP_NAME),Format('isNull(%s)',[TARGET_PROP_NAME]));
  2163. CheckEquals(locInstance.getInteger(s_int_prop), locInstanceLoaded.getInteger(s_int_prop),s_int_prop);
  2164. finally
  2165. ms.Free();
  2166. end;
  2167. end;
  2168. procedure TSDOSerializerBinary_Test.changesummary_object_create();
  2169. var
  2170. locFactoryA, locFactoryB : ISDODataFactory;
  2171. objA, objB : ISDODataObject;
  2172. locCS : ISDOChangeSummary;
  2173. objList : ISDODataObjectList;
  2174. s : ISDOSerializer;
  2175. strm : TMemoryStream;
  2176. locDep, locEmployee : ISDODataObject;
  2177. ls : ISDODataObjectList;
  2178. begin
  2179. locFactoryA := TSDODataFactory.Create() as ISDODataFactory;
  2180. locFactoryA.AddType(s_uri,s_DepartmentType,[]);
  2181. locFactoryA.AddType(s_uri,s_Employee,[]);
  2182. locFactoryA.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  2183. locFactoryA.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  2184. locFactoryA.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[pfIsAttribute]);
  2185. locFactoryA.addProperty(s_uri,s_DepartmentType,s_Employee,s_uri,s_Employee,[pfIsContainment]);
  2186. locFactoryA.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  2187. locFactoryA.addProperty(s_uri,s_Employee,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  2188. locFactoryA.addProperty(s_uri,s_Employee,s_sn,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  2189. locFactoryA.addProperty(s_uri,s_Employee,s_manager,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType],[pfIsAttribute]);
  2190. locDep := locFactoryA.createNew(s_uri,s_DepartmentType);
  2191. locDep.setString(s_name,'R & D');
  2192. locCS := locDep.getChangeSummary();
  2193. locDep.setString(s_location,'Ouaga, BF');
  2194. locCS.beginLogging();
  2195. locDep.setInteger(s_number,1210);
  2196. locEmployee := locDep.createDataObject(s_Employee);
  2197. locEmployee.setString(s_name,'Inoussa O.');
  2198. locEmployee.setString(s_sn,'002');
  2199. locEmployee.setBoolean(s_manager,True);
  2200. locDep.setString(s_name,'R & D Department');
  2201. locDep.setString(s_location,'Ouaga 01, BF');
  2202. locEmployee.setString(s_name,'Inoussa OUEDRAOGO');
  2203. locEmployee.setString(s_sn,'001');
  2204. objA := locDep;
  2205. s := TSDOSerializer.Create(locFactoryA,CreateSerializerStream());
  2206. strm := TMemoryStream.Create();
  2207. try
  2208. s.save(objA,strm);
  2209. {$IFDEF TEST_GENERATE_FILE}
  2210. strm.SaveToFile(sdoExpandLocalFileName('changesummary_object_create.binary'));
  2211. {$ENDIF TEST_GENERATE_FILE}
  2212. locFactoryB := TSDODataFactory.Create();
  2213. s := TSDOSerializer.Create(locFactoryB,CreateSerializerStream());
  2214. strm.Position := 0;
  2215. objList := TSDODataObjectList.Create(
  2216. locFactoryB.getType(sdo_namespace,SDOTypeDefaultTypeNames[ObjectType])
  2217. ) as ISDODataObjectList;
  2218. s.load(strm,objList);
  2219. CheckEquals(1,objList.size(),'objCount');
  2220. objB := objList.getDataObject(0);
  2221. Check(TSDOEqualityHelper.equal(objA,objB),'object');
  2222. Compare(
  2223. objA.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  2224. objB.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  2225. );
  2226. Compare(
  2227. objB.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  2228. objA.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  2229. );
  2230. finally
  2231. strm.Free();
  2232. end;
  2233. end;
  2234. procedure TSDOSerializerBinary_Test.changesummary_object_create_cont_ref();
  2235. var
  2236. locFactoryA, locFactoryB : ISDODataFactory;
  2237. objA, objB : ISDODataObject;
  2238. locCS : ISDOChangeSummary;
  2239. objList : ISDODataObjectList;
  2240. s : ISDOSerializer;
  2241. strm : TMemoryStream;
  2242. locDep, locEmployee : ISDODataObject;
  2243. ls : ISDODataObjectList;
  2244. begin
  2245. locFactoryA := TSDODataFactory.Create() as ISDODataFactory;
  2246. locFactoryA.AddType(s_uri,s_DepartmentType,[]);
  2247. locFactoryA.AddType(s_uri,s_Employee,[]);
  2248. locFactoryA.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  2249. locFactoryA.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  2250. locFactoryA.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[pfIsAttribute]);
  2251. locFactoryA.addProperty(s_uri,s_DepartmentType,s_Employee,s_uri,s_Employee,[pfIsContainment]);
  2252. locFactoryA.addProperty(s_uri,s_DepartmentType,'employee_ref',s_uri,s_Employee,[]);
  2253. locFactoryA.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  2254. locFactoryA.addProperty(s_uri,s_Employee,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  2255. locFactoryA.addProperty(s_uri,s_Employee,s_sn,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  2256. locFactoryA.addProperty(s_uri,s_Employee,s_manager,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType],[pfIsAttribute]);
  2257. locDep := locFactoryA.createNew(s_uri,s_DepartmentType);
  2258. locDep.setString(s_name,'R & D');
  2259. locCS := locDep.getChangeSummary();
  2260. locDep.setString(s_location,'Ouaga, BF');
  2261. locCS.beginLogging();
  2262. locDep.setInteger(s_number,1210);
  2263. locEmployee := locDep.createDataObject(s_Employee);
  2264. locEmployee.setString(s_name,'Inoussa O.');
  2265. locEmployee.setString(s_sn,'002');
  2266. locEmployee.setBoolean(s_manager,True);
  2267. locDep.setString(s_name,'R & D Department');
  2268. locDep.setString(s_location,'Ouaga 01, BF');
  2269. locDep.setDataObject('employee_ref',locEmployee);
  2270. locEmployee.setString(s_name,'Inoussa OUEDRAOGO');
  2271. locEmployee.setString(s_sn,'001');
  2272. objA := locDep;
  2273. s := TSDOSerializer.Create(locFactoryA,CreateSerializerStream());
  2274. strm := TMemoryStream.Create();
  2275. try
  2276. s.save(objA,strm);
  2277. {$IFDEF TEST_GENERATE_FILE}
  2278. strm.SaveToFile(sdoExpandLocalFileName('changesummary_object_create_cont_ref.binary'));
  2279. {$ENDIF TEST_GENERATE_FILE}
  2280. locFactoryB := TSDODataFactory.Create();
  2281. s := TSDOSerializer.Create(locFactoryB,CreateSerializerStream());
  2282. strm.Position := 0;
  2283. objList := TSDODataObjectList.Create(
  2284. locFactoryB.getType(sdo_namespace,SDOTypeDefaultTypeNames[ObjectType])
  2285. ) as ISDODataObjectList;
  2286. s.load(strm,objList);
  2287. CheckEquals(1,objList.size(),'objCount');
  2288. objB := objList.getDataObject(0);
  2289. Check(TSDOEqualityHelper.equal(objA,objB),'object');
  2290. Compare(
  2291. objA.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  2292. objB.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  2293. );
  2294. Compare(
  2295. objB.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  2296. objA.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  2297. );
  2298. finally
  2299. strm.Free();
  2300. end;
  2301. end;
  2302. procedure TSDOSerializerBinary_Test.changesummary_object_delete();
  2303. var
  2304. locFactoryA, locFactoryB : ISDODataFactory;
  2305. objA, objB : ISDODataObject;
  2306. locCS : ISDOChangeSummary;
  2307. objList : ISDODataObjectList;
  2308. s : ISDOSerializer;
  2309. strm : TMemoryStream;
  2310. locDep, locEmployee : ISDODataObject;
  2311. ls : ISDODataObjectList;
  2312. begin
  2313. locFactoryA := TSDODataFactory.Create() as ISDODataFactory;
  2314. locFactoryA.AddType(s_uri,s_DepartmentType,[]);
  2315. locFactoryA.AddType(s_uri,s_Employee,[]);
  2316. locFactoryA.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType], [pfIsAttribute]);
  2317. locFactoryA.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType], [pfIsAttribute]);
  2318. locFactoryA.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType], [pfIsAttribute]);
  2319. locFactoryA.addProperty(s_uri,s_DepartmentType,s_Employee,s_uri,s_Employee,[pfIsContainment]);
  2320. locFactoryA.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  2321. locFactoryA.addProperty(s_uri,s_Employee,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType], [pfIsAttribute]);
  2322. locFactoryA.addProperty(s_uri,s_Employee,s_sn,sdo_namespace,SDOTypeDefaultTypeNames[StringType], [pfIsAttribute]);
  2323. locFactoryA.addProperty(s_uri,s_Employee,s_manager,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType], [pfIsAttribute]);
  2324. locDep := locFactoryA.createNew(s_uri,s_DepartmentType);
  2325. locDep.setString(s_name,'R & D');
  2326. locEmployee := locDep.createDataObject(s_Employee);
  2327. locEmployee.setString(s_name,'Inoussa O.');
  2328. locEmployee.setString(s_sn,'002');
  2329. locEmployee.setBoolean(s_manager,True);
  2330. locCS := locDep.getChangeSummary();
  2331. locDep.setString(s_location,'Ouaga, BF');
  2332. locCS.beginLogging();
  2333. locDep.setInteger(s_number,1210);
  2334. locDep.setString(s_name,'R & D Department');
  2335. locDep.setString(s_location,'Ouaga 01, BF');
  2336. locDep.setDataObject(s_Employee,nil);
  2337. objA := locDep;
  2338. s := TSDOSerializer.Create(locFactoryA,CreateSerializerStream());
  2339. strm := TMemoryStream.Create();
  2340. try
  2341. s.save(objA,strm);
  2342. {$IFDEF TEST_GENERATE_FILE}
  2343. strm.SaveToFile(sdoExpandLocalFileName('changesummary_object_delete.binary'));
  2344. {$ENDIF TEST_GENERATE_FILE}
  2345. locFactoryB := TSDODataFactory.Create();
  2346. s := TSDOSerializer.Create(locFactoryB,CreateSerializerStream());
  2347. strm.Position := 0;
  2348. objList := TSDODataObjectList.Create(
  2349. locFactoryB.getType(sdo_namespace,SDOTypeDefaultTypeNames[ObjectType])
  2350. ) as ISDODataObjectList;
  2351. s.load(strm,objList);
  2352. CheckEquals(1,objList.size(),'objCount');
  2353. objB := objList.getDataObject(0);
  2354. Check(TSDOEqualityHelper.equal(objA,objB),'object');
  2355. Compare(
  2356. objA.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  2357. objB.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  2358. );
  2359. Compare(
  2360. objB.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  2361. objA.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  2362. );
  2363. finally
  2364. strm.Free();
  2365. end;
  2366. end;
  2367. procedure TSDOSerializerBinary_Test.changesummary_object_delete_nested();
  2368. var
  2369. locFactoryA, locFactoryB : ISDODataFactory;
  2370. objA, objB : ISDODataObject;
  2371. locCS : ISDOChangeSummary;
  2372. objList : ISDODataObjectList;
  2373. s : ISDOSerializer;
  2374. strm : TMemoryStream;
  2375. locA, locB, locC, locD : ISDODataObject;
  2376. ls : ISDODataObjectList;
  2377. begin
  2378. locFactoryA := TSDODataFactory.Create() as ISDODataFactory;
  2379. locFactoryA.AddType(s_uri,'a',[]);
  2380. locFactoryA.AddType(s_uri,'b',[]);
  2381. locFactoryA.AddType(s_uri,'c',[]);
  2382. locFactoryA.AddType(s_uri,'d',[]);
  2383. locFactoryA.addProperty(s_uri,'a','p_a_str',sdo_namespace,SDOTypeDefaultTypeNames[StringType], [pfIsAttribute]);
  2384. locFactoryA.addProperty(s_uri,'a','p_ab',s_uri,'b',[pfIsContainment]);
  2385. locFactoryA.addProperty(s_uri,'a','p_ac',s_uri,'c',[]);
  2386. locFactoryA.addProperty(s_uri,'a','p_ad',s_uri,'d',[]);
  2387. locFactoryA.addProperty(s_uri,'a',s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  2388. locFactoryA.addProperty(s_uri,'b','p_bc',s_uri,'c',[pfIsContainment]);
  2389. locFactoryA.addProperty(s_uri,'b','p_b_str',sdo_namespace,SDOTypeDefaultTypeNames[StringType], [pfIsAttribute]);
  2390. locFactoryA.addProperty(s_uri,'c','p_cd',s_uri,'d',[pfIsContainment]);
  2391. locFactoryA.addProperty(s_uri,'c','p_c_str',sdo_namespace,SDOTypeDefaultTypeNames[StringType], [pfIsAttribute]);
  2392. locFactoryA.addProperty(s_uri,'d','p_d_str',sdo_namespace,SDOTypeDefaultTypeNames[StringType], [pfIsAttribute]);
  2393. locA := locFactoryA.createNew(s_uri,'a');
  2394. locA.setString('p_a_str','sample A'' property.');
  2395. locB := locA.createDataObject('p_ab');
  2396. locB.setString('p_b_str','Inoussa O.');
  2397. locC := locB.createDataObject('p_bc');
  2398. locC.setString('p_c_str','azerty');
  2399. locD := locC.createDataObject('p_cd');
  2400. locD.setString('p_d_str','D value');
  2401. locA.setDataObject('p_ac',locC);
  2402. locA.setDataObject('p_ad',locD);
  2403. locCS := locA.getChangeSummary();
  2404. locCS.beginLogging();
  2405. locC.setDataObject('p_cd',nil);
  2406. locA.setDataObject('p_ab',nil);
  2407. objA := locA;
  2408. s := TSDOSerializer.Create(locFactoryA,CreateSerializerStream());
  2409. strm := TMemoryStream.Create();
  2410. try
  2411. s.save(objA,strm);
  2412. {$IFDEF TEST_GENERATE_FILE}
  2413. strm.SaveToFile(sdoExpandLocalFileName('changesummary_object_delete_nested.binary'));
  2414. {$ENDIF TEST_GENERATE_FILE}
  2415. locFactoryB := TSDODataFactory.Create();
  2416. s := TSDOSerializer.Create(locFactoryB,CreateSerializerStream());
  2417. strm.Position := 0;
  2418. objList := TSDODataObjectList.Create(
  2419. locFactoryB.getType(sdo_namespace,SDOTypeDefaultTypeNames[ObjectType])
  2420. ) as ISDODataObjectList;
  2421. s.load(strm,objList);
  2422. CheckEquals(1,objList.size(),'objCount');
  2423. objB := objList.getDataObject(0);
  2424. Check(TSDOEqualityHelper.equal(objA,objB),'object');
  2425. Compare(
  2426. objA.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  2427. objB.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  2428. );
  2429. Compare(
  2430. objB.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  2431. objA.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  2432. );
  2433. finally
  2434. strm.Free();
  2435. end;
  2436. end;
  2437. procedure TSDOSerializerBinary_Test.changesummary_object_delete_2_objects_same_type();
  2438. var
  2439. locFactoryA, locFactoryB : ISDODataFactory;
  2440. objA, objB : ISDODataObject;
  2441. locCS : ISDOChangeSummary;
  2442. objList : ISDODataObjectList;
  2443. s : ISDOSerializer;
  2444. strm : TMemoryStream;
  2445. locA, locB : ISDODataObject;
  2446. ls : ISDODataObjectList;
  2447. begin
  2448. locFactoryA := TSDODataFactory.Create() as ISDODataFactory;
  2449. locFactoryA.AddType(s_uri,'a',[]);
  2450. locFactoryA.AddType(s_uri,'b',[]);
  2451. locFactoryA.addProperty(s_uri,'a','p_a_str',sdo_namespace,SDOTypeDefaultTypeNames[StringType], []);
  2452. locFactoryA.addProperty(s_uri,'a','p_ab1',s_uri,'b',[pfIsContainment]);
  2453. locFactoryA.addProperty(s_uri,'a','p_ab2',s_uri,'b',[pfIsContainment]);
  2454. locFactoryA.addProperty(s_uri,'a',s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  2455. locFactoryA.addProperty(s_uri,'b','p_b_str',sdo_namespace,SDOTypeDefaultTypeNames[StringType], []);
  2456. locA := locFactoryA.createNew(s_uri,'a');
  2457. locA.setString('p_a_str','sample A'' property.');
  2458. locB := locA.createDataObject('p_ab1');
  2459. locB.setString('p_b_str','p_ab1\p_b_str value');
  2460. locB := locA.createDataObject('p_ab2');
  2461. locB.setString('p_b_str','p_ab2\p_b_str value');
  2462. locCS := locA.getChangeSummary();
  2463. locCS.beginLogging();
  2464. locA.setDataObject('p_ab1',nil);
  2465. locA.setDataObject('p_ab2',nil);
  2466. objA := locA;
  2467. s := TSDOSerializer.Create(locFactoryA,CreateSerializerStream());
  2468. strm := TMemoryStream.Create();
  2469. try
  2470. s.save(objA,strm);
  2471. {$IFDEF TEST_GENERATE_FILE}
  2472. strm.SaveToFile(sdoExpandLocalFileName('changesummary_object_delete_2_objects_same_type.binary'));
  2473. {$ENDIF TEST_GENERATE_FILE}
  2474. locFactoryB := TSDODataFactory.Create();
  2475. s := TSDOSerializer.Create(locFactoryB,CreateSerializerStream());
  2476. strm.Position := 0;
  2477. objList := TSDODataObjectList.Create(
  2478. locFactoryB.getType(sdo_namespace,SDOTypeDefaultTypeNames[ObjectType])
  2479. ) as ISDODataObjectList;
  2480. s.load(strm,objList);
  2481. CheckEquals(1,objList.size(),'objCount');
  2482. objB := objList.getDataObject(0);
  2483. Check(TSDOEqualityHelper.equal(objA,objB),'object');
  2484. Compare(
  2485. objA.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  2486. objB.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  2487. );
  2488. Compare(
  2489. objB.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  2490. objA.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  2491. );
  2492. finally
  2493. strm.Free();
  2494. end;
  2495. end;
  2496. { TSDOBaseSerializer_Test }
  2497. procedure TSDOBaseSerializer_Test.Compare(
  2498. const A, B: ISDOChangedDataObjectListEx;
  2499. const AOptions : TListCompareOptions
  2500. );
  2501. var
  2502. i, c, j, k : PtrInt;
  2503. tmpObj : ISDODataObject;
  2504. begin
  2505. Check(
  2506. ( ( A = nil ) and ( B = nil ) ) or
  2507. ( ( A <> nil ) and ( B <> nil ) ) ,
  2508. 'nil'
  2509. );
  2510. if ( A <> nil ) then begin
  2511. CheckEquals(A.size(),B.size(), 'size()');
  2512. c := A.size();
  2513. if ( c > 0 ) then begin
  2514. if ( lcoCompareOrder in AOptions ) then begin
  2515. for i := 0 to Pred(c) do begin
  2516. CheckEquals(Ord(A.getType(i)), Ord(B.getType(i)), Format('getType(%d)',[i]));
  2517. Check(TSDOEqualityHelper.equal(A.getDataObject(i),B.getDataObject(i)),Format('A.getDataObject(%d)',[i]));
  2518. Compare(A.getInfo(i),B.getInfo(i));
  2519. end;
  2520. end else begin
  2521. for i := 0 to Pred(c) do begin
  2522. tmpObj := A.getDataObject(i);
  2523. k := -1;
  2524. for j := 0 to Pred(B.size()) do begin
  2525. if TSDOEqualityHelper.equal(tmpObj,B.getDataObject(j)) then begin
  2526. k := j;
  2527. Break;
  2528. end;
  2529. end;
  2530. Check( ( k > -1 ), Format('Object not found : A.getDataObject(%d)',[i]));
  2531. CheckEquals(Ord(A.getType(i)), Ord(B.getType(k)), Format('getType(%d)',[i]));
  2532. Check(TSDOEqualityHelper.equal(A.getDataObject(i),B.getDataObject(k)),Format('A.getDataObject(%d), B.getDataObject(%d)',[i,k]));
  2533. Compare(A.getInfo(i),B.getInfo(k));
  2534. end;
  2535. end;
  2536. end;
  2537. end;
  2538. end;
  2539. procedure TSDOBaseSerializer_Test.Compare(const A, B: TDataObjectChangeInfo);
  2540. var
  2541. i, c, j : PtrInt;
  2542. ok : Boolean;
  2543. x, y : TValueSetting;
  2544. begin
  2545. Check( ( A = nil ) or ( B <> nil ), 'nil');
  2546. if ( A <> nil ) then begin
  2547. A.ExtractPendingOldValues();
  2548. B.ExtractPendingOldValues();
  2549. Check(TSDOEqualityHelper.equal(A.DataObject,B.DataObject));
  2550. CheckEquals(Ord(A.ChangeType), Ord(B.ChangeType), 'ChangeType');
  2551. Check(TSDOEqualityHelper.equal(A.OldContainer,B.OldContainer));
  2552. CheckEquals(A.ChangeList.size(),B.ChangeList.size(),'ChangeList.size(), Type='+GetEnumName(TypeInfo(TChangeType),Ord(A.ChangeType)));
  2553. c := A.ChangeList.size();
  2554. if ( c > 0 ) then begin
  2555. y := nil;
  2556. for i := 0 to Pred(c) do begin
  2557. x := A.ChangeList.getItem(i);
  2558. ok := False;
  2559. for j := 0 to ( c - 1 ) do begin
  2560. y := B.ChangeList.getItem(j);
  2561. if ( x.getProperty().getName() = y.getProperty().getName() ) and
  2562. x.getProperty().getType().equals(y.getProperty().getType()) and
  2563. ( x.getIndex() = y.getIndex() )
  2564. then begin
  2565. ok := True;
  2566. Break;
  2567. end;
  2568. end;
  2569. Check(ok, Format('A.ChangeList.getItem(%d) %s, not found.',[i, x.getProperty().getName()]));
  2570. Compare(x,y);
  2571. end;
  2572. end;
  2573. Check(
  2574. ( ( A.ManyValuePropChangesList = nil ) and ( B.ManyValuePropChangesList = nil ) ) or
  2575. ( ( A.ManyValuePropChangesList <> nil ) and ( B.ManyValuePropChangesList <> nil ) ),
  2576. 'ManyValuePropChangesList'
  2577. );
  2578. if ( A.ManyValuePropChangesList <> nil ) then begin
  2579. Compare(A.ManyValuePropChangesList, B.ManyValuePropChangesList);
  2580. end;
  2581. end;
  2582. end;
  2583. procedure TSDOBaseSerializer_Test.Compare(
  2584. const A, B: TValueBuffer; const ADataType: TSDOTypeKind
  2585. );
  2586. begin
  2587. case ADataType of
  2588. BooleanType : CheckEquals(A.BooleanValue,B.BooleanValue,'BooleanValue');
  2589. ByteType : CheckEquals(A.ByteValue,B.ByteValue,'ByteValue');
  2590. {$IFDEF HAS_SDO_BYTES}
  2591. BytesType : CheckEquals(A.BytesValue^,B.BytesValue^,'BytesValue');
  2592. {$ENDIF HAS_SDO_BYTES}
  2593. {$IFDEF HAS_SDO_CHAR}
  2594. CharacterType : CheckEquals(A.CharValue,B.CharValue,'CharValue');
  2595. {$ENDIF HAS_SDO_CHAR}
  2596. {$IFDEF HAS_SDO_CURRENCY}
  2597. CurrencyType : CheckEquals(A.CurrencyValue,B.CurrencyValue,'CurrencyValue');
  2598. {$ENDIF HAS_SDO_CURRENCY}
  2599. DateTimeType : CheckEquals(A.DateValue,B.DateValue,'DateValue',False);
  2600. {$IFDEF HAS_SDO_DOUBLE}
  2601. DoubleType : CheckEquals(A.DoubleValue,B.DoubleValue,'DoubleValue');
  2602. {$ENDIF HAS_SDO_DOUBLE}
  2603. {$IFDEF HAS_SDO_FLOAT}
  2604. FloatType : CheckEquals(A.FloatValue,B.FloatValue,'FloatValue');
  2605. {$ENDIF HAS_SDO_FLOAT}
  2606. IntegerType : CheckEquals(A.IntegerValue,B.IntegerValue,'IntegerValue');
  2607. {$IFDEF HAS_SDO_LONG}
  2608. LongType : CheckEquals(A.LongValue,B.LongValue,'LongValue');
  2609. {$ENDIF HAS_SDO_LONG}
  2610. {$IFDEF HAS_SDO_SHORT}
  2611. ShortType : CheckEquals(A.ShortValue,B.ShortValue,'ShortValue');
  2612. {$ENDIF HAS_SDO_SHORT}
  2613. ObjectType : Check(TSDOEqualityHelper.equal(A.ObjectValue^,B.ObjectValue^),'ObjectValue');
  2614. StringType : CheckEquals(A.StringValue^,B.StringValue^,'StringValue');
  2615. else
  2616. Assert(False);
  2617. end;
  2618. end;
  2619. procedure TSDOBaseSerializer_Test.Compare(const A, B: TValueSetting);
  2620. begin
  2621. Check( ( A = nil ) or ( B <> nil ), 'nil');
  2622. if ( A <> nil ) then begin
  2623. CheckEquals(A.getProperty().getName(), B.getProperty().getName(), 'getProperty().getName()');
  2624. Check(A.getProperty().getType().equals(B.getProperty().getType()), 'getProperty().getType()');
  2625. CheckEquals(A.isSet, B.isSet, Format('%s.isSet',[A.getProperty().getName()]));
  2626. CheckEquals(A.isNull, B.isNull, 'isNull');
  2627. case A.getProperty.getTypeEnum() of
  2628. BooleanType : CheckEquals(A.getBooleanValue(),B.getBooleanValue(),'getBooleanValue()');
  2629. ByteType : CheckEquals(A.getByteValue(),B.getByteValue(),'getByteValue()');
  2630. {$IFDEF HAS_SDO_BYTES}
  2631. BytesType : CheckEquals(A.getBytesValue(),B.getBytesValue(),'getBytesValue()');
  2632. {$ENDIF HAS_SDO_BYTES}
  2633. {$IFDEF HAS_SDO_CHAR}
  2634. CharacterType : CheckEquals(A.getCharacterValue(),B.getCharacterValue(),'getCharacterValue()');
  2635. {$ENDIF HAS_SDO_CHAR}
  2636. {$IFDEF HAS_SDO_CURRENCY}
  2637. CurrencyType : CheckEquals(A.getCurrencyValue(),B.getCurrencyValue(),'getCurrencyValue()');
  2638. {$ENDIF HAS_SDO_CURRENCY}
  2639. DateType : CheckEquals(A.getDateValue(),B.getDateValue(),'getDateValue()',False);
  2640. {$IFDEF HAS_SDO_DOUBLE}
  2641. DoubleType : CheckEquals(A.getDoubleValue(),B.getDoubleValue(),'getDoubleValue()');
  2642. {$ENDIF HAS_SDO_DOUBLE}
  2643. {$IFDEF HAS_SDO_FLOAT}
  2644. FloatType : CheckEquals(A.getFloatValue(),B.getFloatValue(),'getFloatValue()');
  2645. {$ENDIF HAS_SDO_FLOAT}
  2646. IntegerType : CheckEquals(A.getIntegerValue(),B.getIntegerValue(),'getIntegerValue()');
  2647. {$IFDEF HAS_SDO_LONG}
  2648. LongType : CheckEquals(A.getLongValue(),B.getLongValue(),'getLongValue()');
  2649. {$ENDIF HAS_SDO_LONG}
  2650. {$IFDEF HAS_SDO_SHORT}
  2651. ShortType : CheckEquals(A.getShortValue(),B.getShortValue(),'getShortValue()');
  2652. {$ENDIF HAS_SDO_SHORT}
  2653. ObjectType : Check(TSDOEqualityHelper.equal(A.getDataObjectValue(),B.getDataObjectValue()),'getDataObjectValue()');
  2654. StringType : CheckEquals(A.getStringValue(),B.getStringValue(),'getStringValue()');
  2655. else
  2656. Assert(False);
  2657. end;
  2658. end;
  2659. end;
  2660. procedure TSDOBaseSerializer_Test.Compare(const A, B: TManyValuePropChangesList);
  2661. var
  2662. i, c, q, k : PtrInt;
  2663. x, y : TManyValuePropChanges;
  2664. xd, yd : TManyValuePropRecordData;
  2665. begin
  2666. Check(
  2667. ( ( A = nil ) and ( B = nil ) ) or
  2668. ( ( A <> nil ) and ( B <> nil ) ) ,
  2669. 'nil'
  2670. );
  2671. if ( A <> nil ) then begin
  2672. CheckEquals(A.Count(),B.Count(), 'Count()');
  2673. c := A.Count();
  2674. if ( c > 0 ) then begin
  2675. for i := 0 to Pred(c) do begin
  2676. x := A.Item[i];
  2677. y := B.Item[i];
  2678. CheckEquals(x.Prop.getName(), y.Prop.getName(), Format('item[%d] : Property ( name )',[i]));
  2679. Check(x.Prop.getType().equals(y.Prop.getType()), Format('item[%d] : Property ( type )',[i]));
  2680. CheckEquals(x.Count, y.Count, Format('item[%d] : Count',[i]));
  2681. q := x.Count;
  2682. if ( q > 0 ) then begin
  2683. for k := 0 to Pred(q) do begin
  2684. xd := x.GetItem(i);
  2685. yd := y.GetItem(i);
  2686. CheckEquals(Ord(xd.Action), Ord(yd.Action), Format('item[%d][%d].Action : Count',[i,k]));
  2687. CheckEquals(xd.Index, yd.Index, Format('item[%d][%d].Index : Count',[i,k]));
  2688. Compare(xd.Value, yd.Value, x.Prop.getTypeEnum());
  2689. end;
  2690. end;
  2691. end;
  2692. end;
  2693. end;
  2694. end;
  2695. procedure TSDOBaseSerializer_Test.CheckEquals(expected, actual: TSDODate;
  2696. msg: string; const AStrict: Boolean);
  2697. var
  2698. e, a : TDateTime;
  2699. e_y, e_m, e_d, e_h, e_mn, e_ss, e_ms : Word;
  2700. a_y, a_m, a_d, a_h, a_mn, a_ss, a_ms : Word;
  2701. begin
  2702. if AStrict then begin
  2703. Check(CompareMem(@expected, @actual, SizeOf(TSDODate)), msg);
  2704. end else begin
  2705. e := NormalizeToUTC(expected);
  2706. a := NormalizeToUTC(actual);
  2707. DecodeDateTime(e, e_y, e_m, e_d, e_h, e_mn, e_ss, e_ms);
  2708. DecodeDateTime(a, a_y, a_m, a_d, a_h, a_mn, a_ss, a_ms);
  2709. CheckEquals(e_y,a_y,msg);
  2710. CheckEquals(e_m,a_m,msg);
  2711. CheckEquals(e_d,a_d,msg);
  2712. CheckEquals(e_h,a_h,msg);
  2713. CheckEquals(e_mn,a_mn,msg);
  2714. CheckEquals(e_ss,a_ss,msg);
  2715. CheckEquals(e_ms,a_ms,msg);
  2716. end;
  2717. end;
  2718. function TSDOBaseSerializer_Test.CreateSdoTypes() : ISDODataFactory;
  2719. var
  2720. locObj : ISDOType;
  2721. begin
  2722. Result := TSDODataFactory.Create() as ISDODataFactory;
  2723. Result.AddType(s_uri,s_EmployeeType,[]);
  2724. locObj := Result.getType(s_uri,s_EmployeeType);
  2725. Result.addProperty(locObj,'name',sdo_namespace,'string',[pfIsAttribute]);
  2726. Result.addProperty(locObj,'SN',sdo_namespace,'string',[pfIsAttribute]);
  2727. Result.addProperty(locObj,'manager',sdo_namespace,'boolean',[pfIsAttribute]);
  2728. Result.addProperty(locObj,'age',sdo_namespace,'byte',[pfIsAttribute]);
  2729. Result.AddType(s_uri,s_DepartmentType,[]);
  2730. locObj := Result.getType(s_uri,s_DepartmentType);
  2731. Result.addProperty(locObj,'employees',s_uri,s_EmployeeType,[pfIsMany, pfIsContainment]);
  2732. Result.addProperty(locObj,'name',sdo_namespace,'string',[pfIsAttribute]);
  2733. Result.addProperty(locObj,'location',sdo_namespace,'string',[pfIsAttribute]);
  2734. Result.addProperty(locObj,'number',sdo_namespace,'integer',[pfIsAttribute]);
  2735. Result.AddType(s_uri,s_CompanyType,[]);
  2736. locObj := Result.getType(s_uri,s_CompanyType);
  2737. Result.setAlias(locObj.getURI(),locObj.getName(),s_company);
  2738. Result.addProperty(locObj,'departments',s_uri,s_DepartmentType,[pfIsMany, pfIsContainment]);
  2739. Result.addProperty(locObj,'name',sdo_namespace,'string',[pfIsAttribute]);
  2740. Result.addProperty(locObj,'employeeOfTheMonth',sdo_namespace,'string',[pfIsAttribute]);
  2741. Result.setAlias(s_uri,locObj.getName(),s_company);
  2742. end;
  2743. function TSDOBaseSerializer_Test.CreateCompanyObject(
  2744. const AFactory : ISDODataFactory
  2745. ) : ISDODataObject;
  2746. var
  2747. locFactory : ISDODataFactory;
  2748. compObj, depObj, empObj : ISDODataObject;
  2749. depLs, empLs : ISDODataObjectList;
  2750. begin
  2751. locFactory := AFactory;
  2752. compObj := locFactory.createNew(s_uri,s_company);
  2753. compObj.setString('name','A Sample company');
  2754. compObj.setString('employeeOfTheMonth','Inoussa');
  2755. depLs := compObj.getList('departments');
  2756. depObj := compObj.createDataObject('departments');
  2757. depLs.append(depObj);
  2758. depObj.setString('name','RAD Departement');
  2759. depObj.setString('location','Moon');
  2760. depObj.setInteger('number',2);
  2761. empLs := depObj.getList('employees');
  2762. empObj := depObj.createDataObject('employees');
  2763. empObj.setString('name','inoussa OUEDRAOGO');
  2764. empObj.setString('SN','1122334455667');
  2765. empObj.setBoolean('manager',True);
  2766. empObj.setByte('age',32);
  2767. empLs.append(empObj);
  2768. empObj := depObj.createDataObject('employees');
  2769. empObj.setString('name','SDO man');
  2770. empObj.setString('SN','867787667');
  2771. empObj.setBoolean('manager',False);
  2772. empObj.setByte('age',1);
  2773. empLs.append(empObj);
  2774. empObj := depObj.createDataObject('employees');
  2775. empObj.setString('name','FPC');
  2776. empObj.setString('SN','_e-(''');
  2777. empObj.setBoolean('manager',False);
  2778. empObj.setByte('age',13);
  2779. empLs.append(empObj);
  2780. depObj := compObj.createDataObject('departments');
  2781. depLs.append(depObj);
  2782. depObj.setString('name','Sales Departement');
  2783. depObj.setString('location','Mars');
  2784. depObj.setInteger('number',2);
  2785. empLs := depObj.getList('employees');
  2786. empObj := depObj.createDataObject('employees');
  2787. empObj.setString('name','wst man');
  2788. empObj.setString('SN','e"''fsdfdf');
  2789. empObj.setBoolean('manager',True);
  2790. empObj.setByte('age',2);
  2791. empLs.append(empObj);
  2792. empObj := depObj.createDataObject('employees');
  2793. empObj.setString('name','azerty');
  2794. empObj.setString('SN','jkjk_e5679');
  2795. empObj.setBoolean('manager',False);
  2796. empLs.append(empObj);
  2797. empObj := depObj.createDataObject('employees');
  2798. empObj.setString('name','qwerty');
  2799. empObj.setString('SN','_s-(''');
  2800. empObj.setBoolean('manager',False);
  2801. empLs.append(empObj);
  2802. Result := compObj;
  2803. end;
  2804. { TSDOSerializer_Test }
  2805. procedure TSDOSerializer_Test.CompareTypesInclude(const A, B: ISDOTypeList);
  2806. var
  2807. i, c : PtrInt;
  2808. typA, typB : ISDOType;
  2809. begin
  2810. if Assigned(A) then begin
  2811. Check(Assigned(B),'B = nil');
  2812. c := A.getCount();
  2813. if ( c > 0 ) then begin
  2814. for i := 0 to Pred(c) do begin
  2815. typA := A.getItem(i);
  2816. typB := B.find(typA.getURI(),typA.getName());
  2817. Check(typB.equals(typA),'A.getItem(i) <> B.find(typA.getURI(),typA.getName())');
  2818. end;
  2819. end;
  2820. end;
  2821. end;
  2822. procedure TSDOSerializer_Test.load_from_stream_one_object();
  2823. var
  2824. locFactory, tmpFactory : ISDODataFactory;
  2825. f : ISDOSerializerStream;
  2826. s : ISDOSerializer;
  2827. strm : TMemoryStream;
  2828. ol : ISDODataObjectList;
  2829. locComp : ISDODataObject;
  2830. begin
  2831. strm := TMemoryStream.Create();
  2832. try
  2833. strm.LoadFromFile(sdoExpandLocalFileName(TestFilesPath + 'company.one.xml'));
  2834. strm.Position := 0;
  2835. f := TSDOSerializerStreamXML.Create();
  2836. tmpFactory := TSDODataFactory.Create();
  2837. s := TSDOSerializer.Create(tmpFactory,f);
  2838. ol := TSDODataObjectList.Create(tmpFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[ObjectType]));
  2839. s.load(strm,ol);
  2840. locFactory := CreateSdoTypes();
  2841. CompareTypesInclude(tmpFactory.getTypes(), locFactory.getTypes());
  2842. CompareTypesInclude(locFactory.getTypes(), tmpFactory.getTypes());
  2843. CheckEquals(1,ol.size(),'loaded objects count');
  2844. locComp := CreateCompanyObject(locFactory);
  2845. ol.getCursor().MoveFirst();
  2846. CheckEquals(True,TSDOEqualityHelper.equalShallow(locComp, ol.getDataObject()),'equalShallow');
  2847. CheckEquals(True,TSDOEqualityHelper.equal(locComp, ol.getDataObject()),'equal');
  2848. finally
  2849. strm.Free();
  2850. end;
  2851. end;
  2852. procedure TSDOSerializer_Test.load_from_stream_start_with_empty();
  2853. var
  2854. locFactory, tmpFactory : ISDODataFactory;
  2855. f : ISDOSerializerStream;
  2856. s : ISDOSerializer;
  2857. strm : TMemoryStream;
  2858. ol : ISDODataObjectList;
  2859. begin
  2860. strm := TMemoryStream.Create();
  2861. try
  2862. strm.LoadFromFile(sdoExpandLocalFileName(TestFilesPath + 'company.xml'));
  2863. strm.Position := 0;
  2864. f := TSDOSerializerStreamXML.Create();
  2865. tmpFactory := TSDODataFactory.Create();
  2866. s := TSDOSerializer.Create(tmpFactory,f);
  2867. ol := TSDODataObjectList.Create(tmpFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[ObjectType]));
  2868. s.load(strm,ol);
  2869. locFactory := CreateSdoTypes();
  2870. CompareTypesInclude(tmpFactory.getTypes(), locFactory.getTypes());
  2871. CompareTypesInclude(locFactory.getTypes(), tmpFactory.getTypes());
  2872. finally
  2873. strm.Free();
  2874. end;
  2875. end;
  2876. procedure TSDOSerializer_Test.load_from_stream_two_object();
  2877. var
  2878. locFactory, tmpFactory : ISDODataFactory;
  2879. f : ISDOSerializerStream;
  2880. s : ISDOSerializer;
  2881. strm : TMemoryStream;
  2882. ol : ISDODataObjectList;
  2883. locComp : ISDODataObject;
  2884. begin
  2885. strm := TMemoryStream.Create();
  2886. try
  2887. strm.LoadFromFile(sdoExpandLocalFileName(TestFilesPath + 'company.two.xml'));
  2888. strm.Position := 0;
  2889. f := TSDOSerializerStreamXML.Create();
  2890. tmpFactory := TSDODataFactory.Create();
  2891. s := TSDOSerializer.Create(tmpFactory,f);
  2892. ol := TSDODataObjectList.Create(tmpFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[ObjectType]));
  2893. s.load(strm,ol);
  2894. locFactory := CreateSdoTypes();
  2895. CompareTypesInclude(tmpFactory.getTypes(), locFactory.getTypes());
  2896. CompareTypesInclude(locFactory.getTypes(), tmpFactory.getTypes());
  2897. CheckEquals(2,ol.size(),'loaded objects count');
  2898. locComp := CreateCompanyObject(locFactory);
  2899. locComp.setString('name','A Second Sample company');
  2900. ol.getCursor().MoveFirst();
  2901. CheckEquals(True,TSDOEqualityHelper.equalShallow(locComp, ol.getDataObject()),'equalShallow');
  2902. CheckEquals(True,TSDOEqualityHelper.equal(locComp, ol.getDataObject()),'equal');
  2903. finally
  2904. strm.Free();
  2905. end;
  2906. end;
  2907. procedure TSDOSerializer_Test.save_to_stream();
  2908. var
  2909. locFactory : ISDODataFactory;
  2910. compObj : ISDODataObject;
  2911. f : ISDOSerializerStream;
  2912. s : ISDOSerializer;
  2913. strm : TMemoryStream;
  2914. existDoc, serialDoc : TSDOXMLDocument;
  2915. begin
  2916. locFactory := CreateSdoTypes();
  2917. compObj := CreateCompanyObject(locFactory);
  2918. f := TSDOSerializerStreamXML.Create();
  2919. s := TSDOSerializer.Create(locFactory,f);
  2920. strm := TMemoryStream.Create();
  2921. try
  2922. s.save(s_CompanyType,compObj,strm);
  2923. {$IFDEF TEST_GENERATE_FILE}
  2924. strm.SaveToFile(sdoExpandLocalFileName('company.soap.xml'));
  2925. {$ENDIF TEST_GENERATE_FILE}
  2926. strm.Position := 0;
  2927. existDoc := nil;
  2928. serialDoc := nil;
  2929. ReadXMLFile(existDoc,sdoExpandLocalFileName(TestFilesPath + 'company.one.xml'));
  2930. try
  2931. ReadXMLFile(serialDoc,strm);
  2932. CheckEquals(True, CompareNodes(existDoc,serialDoc));
  2933. finally
  2934. ReleaseDomNode(existDoc);
  2935. ReleaseDomNode(serialDoc);
  2936. end;
  2937. finally
  2938. strm.Free();
  2939. end;
  2940. end;
  2941. {procedure TSDOSerializer_Test.save2();
  2942. var
  2943. locFactory : ISDODataFactory;
  2944. compObj, depObj, empObj : ISDODataObject;
  2945. depLs, empLs : ISDODataObjectList;
  2946. f : ISDOSerializerStream;
  2947. s : ISDOSerializer;
  2948. strm : TMemoryStream;
  2949. i : Integer;
  2950. dd, ff : TDateTime;
  2951. begin
  2952. dd := Now();
  2953. locFactory := CreateSdoTypes();
  2954. compObj := locFactory.createNew(s_uri,s_company);
  2955. compObj.setString('name','A Sample company');
  2956. compObj.setString('employeeOfTheMonth','Inoussa');
  2957. depLs := compObj.getList('departments');
  2958. depObj := compObj.createDataObject('departments');
  2959. depLs.append(depObj);
  2960. depObj.setString('name','RAD Departement');
  2961. depObj.setString('location','Moon');
  2962. depObj.setInteger('number',2);
  2963. empLs := depObj.getList('employees');
  2964. empObj := depObj.createDataObject('employees');
  2965. empObj.setString('name','inoussa OUEDRAOGO');
  2966. empObj.setString('SN','1122334455667');
  2967. empObj.setBoolean('manager',True);
  2968. empLs.append(empObj);
  2969. empObj := depObj.createDataObject('employees');
  2970. empObj.setString('name','SDO man');
  2971. empObj.setString('SN','867787667');
  2972. empObj.setBoolean('manager',False);
  2973. empLs.append(empObj);
  2974. empObj := depObj.createDataObject('employees');
  2975. empObj.setString('name','FPC');
  2976. empObj.setString('SN','_e-(''');
  2977. empObj.setBoolean('manager',False);
  2978. empLs.append(empObj);
  2979. depObj := compObj.createDataObject('departments');
  2980. depLs.append(depObj);
  2981. depObj.setString('name','Sales Departement');
  2982. depObj.setString('location','Mars');
  2983. depObj.setInteger('number',2);
  2984. empLs := depObj.getList('employees');
  2985. empObj := depObj.createDataObject('employees');
  2986. empObj.setString('name','wst man');
  2987. empObj.setString('SN','e"''fsdfdf');
  2988. empObj.setBoolean('manager',True);
  2989. empLs.append(empObj);
  2990. empObj := depObj.createDataObject('employees');
  2991. empObj.setString('name','azerty');
  2992. empObj.setString('SN','jkjk_e5679');
  2993. empObj.setBoolean('manager',False);
  2994. empLs.append(empObj);
  2995. for i := 0 to 10000 do begin
  2996. empObj := depObj.createDataObject('employees');
  2997. empObj.setString('name','Personne N°' + IntToStr(i));
  2998. empObj.setString('SN','#'+ IntToStr(i));
  2999. empObj.setBoolean('manager',( i mod 3 ) = 0 );
  3000. empLs.append(empObj);
  3001. end;
  3002. f := TSDOSerializerStreamXML.Create();
  3003. s := TSDOSerializer.Create(locFactory,f);
  3004. strm := TMemoryStream.Create();
  3005. s.save('compagnie',compObj,strm);
  3006. strm.Position := 0;
  3007. f := TSDOSerializerStreamXML.Create();
  3008. f.LoadFromStream(strm);
  3009. ff := Now();
  3010. //ShowMessageFmt('%s'#13'%s'#13'Size=%d',[DateTimeToStr(dd),DateTimeToStr(ff),strm.Size]);
  3011. strm.SaveToFile('.' + PathDelim + 'company2.soap.xml');
  3012. end; }
  3013. procedure TSDOSerializer_Test.save_to_stream_without_name();
  3014. var
  3015. locFactory : ISDODataFactory;
  3016. compObj : ISDODataObject;
  3017. f : ISDOSerializerStream;
  3018. s : ISDOSerializer;
  3019. strm : TMemoryStream;
  3020. existDoc, serialDoc : TSDOXMLDocument;
  3021. begin
  3022. locFactory := CreateSdoTypes();
  3023. compObj := CreateCompanyObject(locFactory);
  3024. f := TSDOSerializerStreamXML.Create();
  3025. s := TSDOSerializer.Create(locFactory,f);
  3026. strm := TMemoryStream.Create();
  3027. try
  3028. s.save(compObj,strm);
  3029. strm.Position := 0;
  3030. existDoc := nil;
  3031. serialDoc := nil;
  3032. ReadXMLFile(existDoc,sdoExpandLocalFileName(TestFilesPath + 'company.one.xml'));
  3033. try
  3034. ReadXMLFile(serialDoc,strm);
  3035. CheckEquals(True, CompareNodes(existDoc,serialDoc));
  3036. finally
  3037. ReleaseDomNode(existDoc);
  3038. ReleaseDomNode(serialDoc);
  3039. end;
  3040. finally
  3041. FreeAndNil(strm);
  3042. end;
  3043. end;
  3044. procedure TSDOSerializer_Test.save_to_file();
  3045. var
  3046. locFactory : ISDODataFactory;
  3047. compObj : ISDODataObject;
  3048. f : ISDOSerializerStream;
  3049. s : ISDOSerializer;
  3050. existDoc, serialDoc : TSDOXMLDocument;
  3051. localFileName : string;
  3052. begin
  3053. localFileName := sdoExpandLocalFileName('save_to_file.xml');
  3054. locFactory := CreateSdoTypes();
  3055. compObj := CreateCompanyObject(locFactory);
  3056. f := TSDOSerializerStreamXML.Create();
  3057. s := TSDOSerializer.Create(locFactory,f);
  3058. s.save(s_CompanyType,compObj,localFileName);
  3059. existDoc := nil;
  3060. serialDoc := nil;
  3061. ReadXMLFile(existDoc,sdoExpandLocalFileName(TestFilesPath + 'company.one.xml'));
  3062. try
  3063. ReadXMLFile(serialDoc,localFileName);
  3064. CheckEquals(True, CompareNodes(existDoc,serialDoc));
  3065. finally
  3066. ReleaseDomNode(existDoc);
  3067. ReleaseDomNode(serialDoc);
  3068. end;
  3069. end;
  3070. procedure TSDOSerializer_Test.save_to_file_without_name();
  3071. var
  3072. locFactory : ISDODataFactory;
  3073. compObj : ISDODataObject;
  3074. f : ISDOSerializerStream;
  3075. s : ISDOSerializer;
  3076. existDoc, serialDoc : TSDOXMLDocument;
  3077. localFileName : string;
  3078. begin
  3079. localFileName := sdoExpandLocalFileName('save_to_file.xml');
  3080. locFactory := CreateSdoTypes();
  3081. compObj := CreateCompanyObject(locFactory);
  3082. f := TSDOSerializerStreamXML.Create();
  3083. s := TSDOSerializer.Create(locFactory,f);
  3084. s.save(compObj,localFileName);
  3085. existDoc := nil;
  3086. serialDoc := nil;
  3087. ReadXMLFile(existDoc,sdoExpandLocalFileName(TestFilesPath + 'company.one.xml'));
  3088. try
  3089. ReadXMLFile(serialDoc,localFileName);
  3090. CheckEquals(True, CompareNodes(existDoc,serialDoc));
  3091. finally
  3092. ReleaseDomNode(existDoc);
  3093. ReleaseDomNode(serialDoc);
  3094. end;
  3095. end;
  3096. procedure TSDOSerializer_Test.save_to_file_null_bool_prop();
  3097. const
  3098. TARGET_PROP_NAME = s_bool_prop; TARGET_PROP_TYPE_NAME = 'Boolean';
  3099. function CreateFactory() : ISDODataFactory;
  3100. var
  3101. locObj : ISDOType;
  3102. begin
  3103. Result := TSDODataFactory.Create() as ISDODataFactory;
  3104. Result.AddType(s_uri,s_object_type,[]);
  3105. locObj := Result.getType(s_uri,s_object_type);
  3106. Result.addProperty(locObj,s_int_prop,sdo_namespace,'Integer',[]);
  3107. Result.addProperty(locObj,TARGET_PROP_NAME,sdo_namespace,TARGET_PROP_TYPE_NAME,[]);
  3108. end;
  3109. var
  3110. locFactory : ISDODataFactory;
  3111. locInstance, locInstanceLoaded : ISDODataObject;
  3112. f : ISDOSerializerStream;
  3113. s : ISDOSerializer;
  3114. ms : TMemoryStream;
  3115. begin
  3116. locFactory := CreateFactory();
  3117. locInstance := locFactory.createNew(s_uri,s_object_type);
  3118. locInstance.setNull(TARGET_PROP_NAME);
  3119. locInstance.setInteger(s_int_prop,123);
  3120. ms := TMemoryStream.Create();
  3121. try
  3122. f := TSDOSerializerStreamXML.Create();
  3123. s := TSDOSerializer.Create(locFactory,f);
  3124. s.save(locInstance,ms);
  3125. f := TSDOSerializerStreamXML.Create();
  3126. s := TSDOSerializer.Create(locFactory,f);
  3127. ms.Position := 0;
  3128. locInstanceLoaded := s.load(ms);
  3129. CheckEquals(locInstance.isNull(TARGET_PROP_NAME), locInstanceLoaded.isNull(TARGET_PROP_NAME),Format('isNull(%s)',[TARGET_PROP_NAME]));
  3130. CheckEquals(locInstance.getInteger(s_int_prop), locInstanceLoaded.getInteger(s_int_prop),s_int_prop);
  3131. finally
  3132. ms.Free();
  3133. end;
  3134. end;
  3135. procedure TSDOSerializer_Test.save_to_file_null_byte_prop();
  3136. const
  3137. TARGET_PROP_NAME = s_byte_prop; TARGET_PROP_TYPE_NAME = 'Byte';
  3138. function CreateFactory() : ISDODataFactory;
  3139. var
  3140. locObj : ISDOType;
  3141. begin
  3142. Result := TSDODataFactory.Create() as ISDODataFactory;
  3143. Result.AddType(s_uri,s_object_type,[]);
  3144. locObj := Result.getType(s_uri,s_object_type);
  3145. Result.addProperty(locObj,s_int_prop,sdo_namespace,'Integer',[]);
  3146. Result.addProperty(locObj,TARGET_PROP_NAME,sdo_namespace,TARGET_PROP_TYPE_NAME,[]);
  3147. end;
  3148. var
  3149. locFactory : ISDODataFactory;
  3150. locInstance, locInstanceLoaded : ISDODataObject;
  3151. f : ISDOSerializerStream;
  3152. s : ISDOSerializer;
  3153. ms : TMemoryStream;
  3154. begin
  3155. locFactory := CreateFactory();
  3156. locInstance := locFactory.createNew(s_uri,s_object_type);
  3157. locInstance.setNull(TARGET_PROP_NAME);
  3158. locInstance.setInteger(s_int_prop,123);
  3159. ms := TMemoryStream.Create();
  3160. try
  3161. f := TSDOSerializerStreamXML.Create();
  3162. s := TSDOSerializer.Create(locFactory,f);
  3163. s.save(locInstance,ms);
  3164. f := TSDOSerializerStreamXML.Create();
  3165. s := TSDOSerializer.Create(locFactory,f);
  3166. ms.Position := 0;
  3167. locInstanceLoaded := s.load(ms);
  3168. CheckEquals(locInstance.isNull(TARGET_PROP_NAME), locInstanceLoaded.isNull(TARGET_PROP_NAME),Format('isNull(%s)',[TARGET_PROP_NAME]));
  3169. CheckEquals(locInstance.getInteger(s_int_prop), locInstanceLoaded.getInteger(s_int_prop),s_int_prop);
  3170. finally
  3171. ms.Free();
  3172. end;
  3173. end;
  3174. procedure TSDOSerializer_Test.save_to_file_null_bytes_prop();
  3175. const
  3176. TARGET_PROP_NAME = s_bytes_prop; TARGET_PROP_TYPE_NAME = 'Bytes';
  3177. function CreateFactory() : ISDODataFactory;
  3178. var
  3179. locObj : ISDOType;
  3180. begin
  3181. Result := TSDODataFactory.Create() as ISDODataFactory;
  3182. Result.AddType(s_uri,s_object_type,[]);
  3183. locObj := Result.getType(s_uri,s_object_type);
  3184. Result.addProperty(locObj,s_int_prop,sdo_namespace,'Integer',[]);
  3185. Result.addProperty(locObj,TARGET_PROP_NAME,sdo_namespace,TARGET_PROP_TYPE_NAME,[]);
  3186. end;
  3187. var
  3188. locFactory : ISDODataFactory;
  3189. locInstance, locInstanceLoaded : ISDODataObject;
  3190. f : ISDOSerializerStream;
  3191. s : ISDOSerializer;
  3192. ms : TMemoryStream;
  3193. begin
  3194. locFactory := CreateFactory();
  3195. locInstance := locFactory.createNew(s_uri,s_object_type);
  3196. locInstance.setNull(TARGET_PROP_NAME);
  3197. locInstance.setInteger(s_int_prop,123);
  3198. ms := TMemoryStream.Create();
  3199. try
  3200. f := TSDOSerializerStreamXML.Create();
  3201. s := TSDOSerializer.Create(locFactory,f);
  3202. s.save(locInstance,ms);
  3203. f := TSDOSerializerStreamXML.Create();
  3204. s := TSDOSerializer.Create(locFactory,f);
  3205. ms.Position := 0;
  3206. locInstanceLoaded := s.load(ms);
  3207. CheckEquals(locInstance.isNull(TARGET_PROP_NAME), locInstanceLoaded.isNull(TARGET_PROP_NAME),Format('isNull(%s)',[TARGET_PROP_NAME]));
  3208. CheckEquals(locInstance.getInteger(s_int_prop), locInstanceLoaded.getInteger(s_int_prop),s_int_prop);
  3209. finally
  3210. ms.Free();
  3211. end;
  3212. end;
  3213. procedure TSDOSerializer_Test.save_to_file_null_char_prop();
  3214. const
  3215. TARGET_PROP_NAME = s_char_prop; TARGET_PROP_TYPE_NAME = 'Character';
  3216. function CreateFactory() : ISDODataFactory;
  3217. var
  3218. locObj : ISDOType;
  3219. begin
  3220. Result := TSDODataFactory.Create() as ISDODataFactory;
  3221. Result.AddType(s_uri,s_object_type,[]);
  3222. locObj := Result.getType(s_uri,s_object_type);
  3223. Result.addProperty(locObj,s_int_prop,sdo_namespace,'Integer',[]);
  3224. Result.addProperty(locObj,TARGET_PROP_NAME,sdo_namespace,TARGET_PROP_TYPE_NAME,[]);
  3225. end;
  3226. var
  3227. locFactory : ISDODataFactory;
  3228. locInstance, locInstanceLoaded : ISDODataObject;
  3229. f : ISDOSerializerStream;
  3230. s : ISDOSerializer;
  3231. ms : TMemoryStream;
  3232. begin
  3233. locFactory := CreateFactory();
  3234. locInstance := locFactory.createNew(s_uri,s_object_type);
  3235. locInstance.setNull(TARGET_PROP_NAME);
  3236. locInstance.setInteger(s_int_prop,123);
  3237. ms := TMemoryStream.Create();
  3238. try
  3239. f := TSDOSerializerStreamXML.Create();
  3240. s := TSDOSerializer.Create(locFactory,f);
  3241. s.save(locInstance,ms);
  3242. f := TSDOSerializerStreamXML.Create();
  3243. s := TSDOSerializer.Create(locFactory,f);
  3244. ms.Position := 0;
  3245. locInstanceLoaded := s.load(ms);
  3246. CheckEquals(locInstance.isNull(TARGET_PROP_NAME), locInstanceLoaded.isNull(TARGET_PROP_NAME),Format('isNull(%s)',[TARGET_PROP_NAME]));
  3247. CheckEquals(locInstance.getInteger(s_int_prop), locInstanceLoaded.getInteger(s_int_prop),s_int_prop);
  3248. finally
  3249. ms.Free();
  3250. end;
  3251. end;
  3252. procedure TSDOSerializer_Test.save_to_file_null_currency_prop();
  3253. const
  3254. TARGET_PROP_NAME = s_currency_prop; TARGET_PROP_TYPE_NAME = 'Currency';
  3255. function CreateFactory() : ISDODataFactory;
  3256. var
  3257. locObj : ISDOType;
  3258. begin
  3259. Result := TSDODataFactory.Create() as ISDODataFactory;
  3260. Result.AddType(s_uri,s_object_type,[]);
  3261. locObj := Result.getType(s_uri,s_object_type);
  3262. Result.addProperty(locObj,s_int_prop,sdo_namespace,'Integer',[]);
  3263. Result.addProperty(locObj,TARGET_PROP_NAME,sdo_namespace,TARGET_PROP_TYPE_NAME,[]);
  3264. end;
  3265. var
  3266. locFactory : ISDODataFactory;
  3267. locInstance, locInstanceLoaded : ISDODataObject;
  3268. f : ISDOSerializerStream;
  3269. s : ISDOSerializer;
  3270. ms : TMemoryStream;
  3271. begin
  3272. locFactory := CreateFactory();
  3273. locInstance := locFactory.createNew(s_uri,s_object_type);
  3274. locInstance.setNull(TARGET_PROP_NAME);
  3275. locInstance.setInteger(s_int_prop,123);
  3276. ms := TMemoryStream.Create();
  3277. try
  3278. f := TSDOSerializerStreamXML.Create();
  3279. s := TSDOSerializer.Create(locFactory,f);
  3280. s.save(locInstance,ms);
  3281. f := TSDOSerializerStreamXML.Create();
  3282. s := TSDOSerializer.Create(locFactory,f);
  3283. ms.Position := 0;
  3284. locInstanceLoaded := s.load(ms);
  3285. CheckEquals(locInstance.isNull(TARGET_PROP_NAME), locInstanceLoaded.isNull(TARGET_PROP_NAME),Format('isNull(%s)',[TARGET_PROP_NAME]));
  3286. CheckEquals(locInstance.getInteger(s_int_prop), locInstanceLoaded.getInteger(s_int_prop),s_int_prop);
  3287. finally
  3288. ms.Free();
  3289. end;
  3290. end;
  3291. procedure TSDOSerializer_Test.save_to_file_null_datetime_prop();
  3292. const
  3293. TARGET_PROP_NAME = s_datetime_prop; TARGET_PROP_TYPE_NAME = 'DateTime';
  3294. function CreateFactory() : ISDODataFactory;
  3295. var
  3296. locObj : ISDOType;
  3297. begin
  3298. Result := TSDODataFactory.Create() as ISDODataFactory;
  3299. Result.AddType(s_uri,s_object_type,[]);
  3300. locObj := Result.getType(s_uri,s_object_type);
  3301. Result.addProperty(locObj,s_int_prop,sdo_namespace,'Integer',[]);
  3302. Result.addProperty(locObj,TARGET_PROP_NAME,sdo_namespace,TARGET_PROP_TYPE_NAME,[]);
  3303. end;
  3304. var
  3305. locFactory : ISDODataFactory;
  3306. locInstance, locInstanceLoaded : ISDODataObject;
  3307. f : ISDOSerializerStream;
  3308. s : ISDOSerializer;
  3309. ms : TMemoryStream;
  3310. begin
  3311. locFactory := CreateFactory();
  3312. locInstance := locFactory.createNew(s_uri,s_object_type);
  3313. locInstance.setNull(TARGET_PROP_NAME);
  3314. locInstance.setInteger(s_int_prop,123);
  3315. ms := TMemoryStream.Create();
  3316. try
  3317. f := TSDOSerializerStreamXML.Create();
  3318. s := TSDOSerializer.Create(locFactory,f);
  3319. s.save(locInstance,ms);
  3320. f := TSDOSerializerStreamXML.Create();
  3321. s := TSDOSerializer.Create(locFactory,f);
  3322. ms.Position := 0;
  3323. locInstanceLoaded := s.load(ms);
  3324. CheckEquals(locInstance.isNull(TARGET_PROP_NAME), locInstanceLoaded.isNull(TARGET_PROP_NAME),Format('isNull(%s)',[TARGET_PROP_NAME]));
  3325. CheckEquals(locInstance.getInteger(s_int_prop), locInstanceLoaded.getInteger(s_int_prop),s_int_prop);
  3326. finally
  3327. ms.Free();
  3328. end;
  3329. end;
  3330. procedure TSDOSerializer_Test.save_to_file_null_double_prop();
  3331. const
  3332. TARGET_PROP_NAME = s_double_prop; TARGET_PROP_TYPE_NAME = 'Double';
  3333. function CreateFactory() : ISDODataFactory;
  3334. var
  3335. locObj : ISDOType;
  3336. begin
  3337. Result := TSDODataFactory.Create() as ISDODataFactory;
  3338. Result.AddType(s_uri,s_object_type,[]);
  3339. locObj := Result.getType(s_uri,s_object_type);
  3340. Result.addProperty(locObj,s_int_prop,sdo_namespace,'Integer',[]);
  3341. Result.addProperty(locObj,TARGET_PROP_NAME,sdo_namespace,TARGET_PROP_TYPE_NAME,[]);
  3342. end;
  3343. var
  3344. locFactory : ISDODataFactory;
  3345. locInstance, locInstanceLoaded : ISDODataObject;
  3346. f : ISDOSerializerStream;
  3347. s : ISDOSerializer;
  3348. ms : TMemoryStream;
  3349. begin
  3350. locFactory := CreateFactory();
  3351. locInstance := locFactory.createNew(s_uri,s_object_type);
  3352. locInstance.setNull(TARGET_PROP_NAME);
  3353. locInstance.setInteger(s_int_prop,123);
  3354. ms := TMemoryStream.Create();
  3355. try
  3356. f := TSDOSerializerStreamXML.Create();
  3357. s := TSDOSerializer.Create(locFactory,f);
  3358. s.save(locInstance,ms);
  3359. f := TSDOSerializerStreamXML.Create();
  3360. s := TSDOSerializer.Create(locFactory,f);
  3361. ms.Position := 0;
  3362. locInstanceLoaded := s.load(ms);
  3363. CheckEquals(locInstance.isNull(TARGET_PROP_NAME), locInstanceLoaded.isNull(TARGET_PROP_NAME),Format('isNull(%s)',[TARGET_PROP_NAME]));
  3364. CheckEquals(locInstance.getInteger(s_int_prop), locInstanceLoaded.getInteger(s_int_prop),s_int_prop);
  3365. finally
  3366. ms.Free();
  3367. end;
  3368. end;
  3369. procedure TSDOSerializer_Test.save_to_file_null_float_prop();
  3370. const
  3371. TARGET_PROP_NAME = s_float_prop; TARGET_PROP_TYPE_NAME = 'Float';
  3372. function CreateFactory() : ISDODataFactory;
  3373. var
  3374. locObj : ISDOType;
  3375. begin
  3376. Result := TSDODataFactory.Create() as ISDODataFactory;
  3377. Result.AddType(s_uri,s_object_type,[]);
  3378. locObj := Result.getType(s_uri,s_object_type);
  3379. Result.addProperty(locObj,s_int_prop,sdo_namespace,'Integer',[]);
  3380. Result.addProperty(locObj,TARGET_PROP_NAME,sdo_namespace,TARGET_PROP_TYPE_NAME,[]);
  3381. end;
  3382. var
  3383. locFactory : ISDODataFactory;
  3384. locInstance, locInstanceLoaded : ISDODataObject;
  3385. f : ISDOSerializerStream;
  3386. s : ISDOSerializer;
  3387. ms : TMemoryStream;
  3388. begin
  3389. locFactory := CreateFactory();
  3390. locInstance := locFactory.createNew(s_uri,s_object_type);
  3391. locInstance.setNull(TARGET_PROP_NAME);
  3392. locInstance.setInteger(s_int_prop,123);
  3393. ms := TMemoryStream.Create();
  3394. try
  3395. f := TSDOSerializerStreamXML.Create();
  3396. s := TSDOSerializer.Create(locFactory,f);
  3397. s.save(locInstance,ms);
  3398. f := TSDOSerializerStreamXML.Create();
  3399. s := TSDOSerializer.Create(locFactory,f);
  3400. ms.Position := 0;
  3401. locInstanceLoaded := s.load(ms);
  3402. CheckEquals(locInstance.isNull(TARGET_PROP_NAME), locInstanceLoaded.isNull(TARGET_PROP_NAME),Format('isNull(%s)',[TARGET_PROP_NAME]));
  3403. CheckEquals(locInstance.getInteger(s_int_prop), locInstanceLoaded.getInteger(s_int_prop),s_int_prop);
  3404. finally
  3405. ms.Free();
  3406. end;
  3407. end;
  3408. procedure TSDOSerializer_Test.save_to_file_null_int_prop();
  3409. const
  3410. TARGET_PROP_NAME = s_int_prop; TARGET_PROP_TYPE_NAME = 'Integer';
  3411. function CreateFactory() : ISDODataFactory;
  3412. var
  3413. locObj : ISDOType;
  3414. begin
  3415. Result := TSDODataFactory.Create() as ISDODataFactory;
  3416. Result.AddType(s_uri,s_object_type,[]);
  3417. locObj := Result.getType(s_uri,s_object_type);
  3418. Result.addProperty(locObj,s_string_prop,sdo_namespace,'String',[]);
  3419. Result.addProperty(locObj,TARGET_PROP_NAME,sdo_namespace,TARGET_PROP_TYPE_NAME,[]);
  3420. end;
  3421. var
  3422. locFactory : ISDODataFactory;
  3423. locInstance, locInstanceLoaded : ISDODataObject;
  3424. f : ISDOSerializerStream;
  3425. s : ISDOSerializer;
  3426. ms : TMemoryStream;
  3427. begin
  3428. locFactory := CreateFactory();
  3429. locInstance := locFactory.createNew(s_uri,s_object_type);
  3430. locInstance.setNull(TARGET_PROP_NAME);
  3431. locInstance.setString(s_string_prop,'azerty');
  3432. ms := TMemoryStream.Create();
  3433. try
  3434. f := TSDOSerializerStreamXML.Create();
  3435. s := TSDOSerializer.Create(locFactory,f);
  3436. s.save(locInstance,ms);
  3437. f := TSDOSerializerStreamXML.Create();
  3438. s := TSDOSerializer.Create(locFactory,f);
  3439. ms.Position := 0;
  3440. locInstanceLoaded := s.load(ms);
  3441. CheckEquals(locInstance.isNull(TARGET_PROP_NAME), locInstanceLoaded.isNull(TARGET_PROP_NAME),Format('isNull(%s)',[TARGET_PROP_NAME]));
  3442. CheckEquals(locInstance.getString(s_string_prop), locInstanceLoaded.getString(s_string_prop),s_string_prop);
  3443. finally
  3444. ms.Free();
  3445. end;
  3446. end;
  3447. procedure TSDOSerializer_Test.save_to_file_null_long_prop();
  3448. const
  3449. TARGET_PROP_NAME = s_long_prop; TARGET_PROP_TYPE_NAME = 'Long';
  3450. function CreateFactory() : ISDODataFactory;
  3451. var
  3452. locObj : ISDOType;
  3453. begin
  3454. Result := TSDODataFactory.Create() as ISDODataFactory;
  3455. Result.AddType(s_uri,s_object_type,[]);
  3456. locObj := Result.getType(s_uri,s_object_type);
  3457. Result.addProperty(locObj,s_int_prop,sdo_namespace,'Integer',[]);
  3458. Result.addProperty(locObj,TARGET_PROP_NAME,sdo_namespace,TARGET_PROP_TYPE_NAME,[]);
  3459. end;
  3460. var
  3461. locFactory : ISDODataFactory;
  3462. locInstance, locInstanceLoaded : ISDODataObject;
  3463. f : ISDOSerializerStream;
  3464. s : ISDOSerializer;
  3465. ms : TMemoryStream;
  3466. begin
  3467. locFactory := CreateFactory();
  3468. locInstance := locFactory.createNew(s_uri,s_object_type);
  3469. locInstance.setNull(TARGET_PROP_NAME);
  3470. locInstance.setInteger(s_int_prop,123);
  3471. ms := TMemoryStream.Create();
  3472. try
  3473. f := TSDOSerializerStreamXML.Create();
  3474. s := TSDOSerializer.Create(locFactory,f);
  3475. s.save(locInstance,ms);
  3476. f := TSDOSerializerStreamXML.Create();
  3477. s := TSDOSerializer.Create(locFactory,f);
  3478. ms.Position := 0;
  3479. locInstanceLoaded := s.load(ms);
  3480. CheckEquals(locInstance.isNull(TARGET_PROP_NAME), locInstanceLoaded.isNull(TARGET_PROP_NAME),Format('isNull(%s)',[TARGET_PROP_NAME]));
  3481. CheckEquals(locInstance.getInteger(s_int_prop), locInstanceLoaded.getInteger(s_int_prop),s_int_prop);
  3482. finally
  3483. ms.Free();
  3484. end;
  3485. end;
  3486. procedure TSDOSerializer_Test.save_to_file_null_object_prop();
  3487. const
  3488. TARGET_PROP_NAME = s_object_prop; TARGET_PROP_TYPE_NAME = s_object_type2;
  3489. function CreateFactory() : ISDODataFactory;
  3490. var
  3491. locObj : ISDOType;
  3492. begin
  3493. Result := TSDODataFactory.Create() as ISDODataFactory;
  3494. Result.AddType(s_uri,s_object_type,[]);
  3495. Result.AddType(s_uri,s_object_type2,[]);
  3496. locObj := Result.getType(s_uri,s_object_type);
  3497. Result.addProperty(locObj,s_int_prop,sdo_namespace,'Integer',[]);
  3498. Result.addProperty(locObj,TARGET_PROP_NAME,s_uri,TARGET_PROP_TYPE_NAME,[pfIsContainment]);
  3499. locObj := Result.getType(s_uri,s_object_type2);
  3500. Result.addProperty(locObj,s_string_prop,sdo_namespace,'String',[]);
  3501. end;
  3502. var
  3503. locFactory : ISDODataFactory;
  3504. locInstance, locInstanceLoaded : ISDODataObject;
  3505. f : ISDOSerializerStream;
  3506. s : ISDOSerializer;
  3507. ms : TMemoryStream;
  3508. begin
  3509. locFactory := CreateFactory();
  3510. locInstance := locFactory.createNew(s_uri,s_object_type);
  3511. locInstance.setNull(TARGET_PROP_NAME);
  3512. locInstance.setInteger(s_int_prop,123);
  3513. ms := TMemoryStream.Create();
  3514. try
  3515. f := TSDOSerializerStreamXML.Create();
  3516. s := TSDOSerializer.Create(locFactory,f);
  3517. s.save(locInstance,ms);
  3518. f := TSDOSerializerStreamXML.Create();
  3519. s := TSDOSerializer.Create(locFactory,f);
  3520. ms.Position := 0;
  3521. locInstanceLoaded := s.load(ms);
  3522. CheckEquals(locInstance.isNull(TARGET_PROP_NAME), locInstanceLoaded.isNull(TARGET_PROP_NAME),Format('isNull(%s)',[TARGET_PROP_NAME]));
  3523. CheckEquals(locInstance.getInteger(s_int_prop), locInstanceLoaded.getInteger(s_int_prop),s_int_prop);
  3524. finally
  3525. ms.Free();
  3526. end;
  3527. end;
  3528. procedure TSDOSerializer_Test.save_to_file_null_short_prop();
  3529. const
  3530. TARGET_PROP_NAME = s_short_prop; TARGET_PROP_TYPE_NAME = 'Short';
  3531. function CreateFactory() : ISDODataFactory;
  3532. var
  3533. locObj : ISDOType;
  3534. begin
  3535. Result := TSDODataFactory.Create() as ISDODataFactory;
  3536. Result.AddType(s_uri,s_object_type,[]);
  3537. locObj := Result.getType(s_uri,s_object_type);
  3538. Result.addProperty(locObj,s_int_prop,sdo_namespace,'Integer',[]);
  3539. Result.addProperty(locObj,TARGET_PROP_NAME,sdo_namespace,TARGET_PROP_TYPE_NAME,[]);
  3540. end;
  3541. var
  3542. locFactory : ISDODataFactory;
  3543. locInstance, locInstanceLoaded : ISDODataObject;
  3544. f : ISDOSerializerStream;
  3545. s : ISDOSerializer;
  3546. ms : TMemoryStream;
  3547. begin
  3548. locFactory := CreateFactory();
  3549. locInstance := locFactory.createNew(s_uri,s_object_type);
  3550. locInstance.setNull(TARGET_PROP_NAME);
  3551. locInstance.setInteger(s_int_prop,123);
  3552. ms := TMemoryStream.Create();
  3553. try
  3554. f := TSDOSerializerStreamXML.Create();
  3555. s := TSDOSerializer.Create(locFactory,f);
  3556. s.save(locInstance,ms);
  3557. f := TSDOSerializerStreamXML.Create();
  3558. s := TSDOSerializer.Create(locFactory,f);
  3559. ms.Position := 0;
  3560. locInstanceLoaded := s.load(ms);
  3561. CheckEquals(locInstance.isNull(TARGET_PROP_NAME), locInstanceLoaded.isNull(TARGET_PROP_NAME),Format('isNull(%s)',[TARGET_PROP_NAME]));
  3562. CheckEquals(locInstance.getInteger(s_int_prop), locInstanceLoaded.getInteger(s_int_prop),s_int_prop);
  3563. finally
  3564. ms.Free();
  3565. end;
  3566. end;
  3567. procedure TSDOSerializer_Test.save_to_file_null_string_prop();
  3568. const
  3569. TARGET_PROP_NAME = s_string_prop; TARGET_PROP_TYPE_NAME = 'String';
  3570. function CreateFactory() : ISDODataFactory;
  3571. var
  3572. locObj : ISDOType;
  3573. begin
  3574. Result := TSDODataFactory.Create() as ISDODataFactory;
  3575. Result.AddType(s_uri,s_object_type,[]);
  3576. locObj := Result.getType(s_uri,s_object_type);
  3577. Result.addProperty(locObj,s_int_prop,sdo_namespace,'Integer',[]);
  3578. Result.addProperty(locObj,TARGET_PROP_NAME,sdo_namespace,TARGET_PROP_TYPE_NAME,[]);
  3579. end;
  3580. var
  3581. locFactory : ISDODataFactory;
  3582. locInstance, locInstanceLoaded : ISDODataObject;
  3583. f : ISDOSerializerStream;
  3584. s : ISDOSerializer;
  3585. ms : TMemoryStream;
  3586. begin
  3587. locFactory := CreateFactory();
  3588. locInstance := locFactory.createNew(s_uri,s_object_type);
  3589. locInstance.setNull(TARGET_PROP_NAME);
  3590. locInstance.setInteger(s_int_prop,123);
  3591. ms := TMemoryStream.Create();
  3592. try
  3593. f := TSDOSerializerStreamXML.Create();
  3594. s := TSDOSerializer.Create(locFactory,f);
  3595. s.save(locInstance,ms);
  3596. f := TSDOSerializerStreamXML.Create();
  3597. s := TSDOSerializer.Create(locFactory,f);
  3598. ms.Position := 0;
  3599. locInstanceLoaded := s.load(ms);
  3600. CheckEquals(locInstance.isNull(TARGET_PROP_NAME), locInstanceLoaded.isNull(TARGET_PROP_NAME),Format('isNull(%s)',[TARGET_PROP_NAME]));
  3601. CheckEquals(locInstance.getInteger(s_int_prop), locInstanceLoaded.getInteger(s_int_prop),s_int_prop);
  3602. finally
  3603. ms.Free();
  3604. end;
  3605. end;
  3606. procedure TSDOSerializer_Test.load_from_file_start_with_empty();
  3607. var
  3608. locFactory, tmpFactory : ISDODataFactory;
  3609. f : ISDOSerializerStream;
  3610. s : ISDOSerializer;
  3611. ol : ISDODataObjectList;
  3612. localFileName : string;
  3613. begin
  3614. localFileName := sdoExpandLocalFileName(TestFilesPath + 'company.xml');
  3615. f := TSDOSerializerStreamXML.Create();
  3616. tmpFactory := TSDODataFactory.Create();
  3617. s := TSDOSerializer.Create(tmpFactory,f);
  3618. ol := TSDODataObjectList.Create(tmpFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[ObjectType]));
  3619. s.load(localFileName,ol);
  3620. locFactory := CreateSdoTypes();
  3621. CompareTypesInclude(tmpFactory.getTypes(), locFactory.getTypes());
  3622. CompareTypesInclude(locFactory.getTypes(), tmpFactory.getTypes());
  3623. end;
  3624. procedure TSDOSerializer_Test.load_from_file_one_object();
  3625. var
  3626. locFactory, tmpFactory : ISDODataFactory;
  3627. f : ISDOSerializerStream;
  3628. s : ISDOSerializer;
  3629. ol : ISDODataObjectList;
  3630. locComp : ISDODataObject;
  3631. localFileName : string;
  3632. begin
  3633. localFileName := sdoExpandLocalFileName(TestFilesPath + 'company.one.xml');
  3634. f := TSDOSerializerStreamXML.Create();
  3635. tmpFactory := TSDODataFactory.Create();
  3636. s := TSDOSerializer.Create(tmpFactory,f);
  3637. ol := TSDODataObjectList.Create(tmpFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[ObjectType]));
  3638. s.load(localFileName,ol);
  3639. locFactory := CreateSdoTypes();
  3640. CompareTypesInclude(tmpFactory.getTypes(), locFactory.getTypes());
  3641. CompareTypesInclude(locFactory.getTypes(), tmpFactory.getTypes());
  3642. CheckEquals(1,ol.size(),'loaded objects count');
  3643. locComp := CreateCompanyObject(locFactory);
  3644. ol.getCursor().MoveFirst();
  3645. CheckEquals(True,TSDOEqualityHelper.equalShallow(locComp, ol.getDataObject()),'equalShallow');
  3646. CheckEquals(True,TSDOEqualityHelper.equal(locComp, ol.getDataObject()),'equal');
  3647. end;
  3648. procedure TSDOSerializer_Test.load_from_file_two_object();
  3649. var
  3650. locFactory, tmpFactory : ISDODataFactory;
  3651. f : ISDOSerializerStream;
  3652. s : ISDOSerializer;
  3653. ol : ISDODataObjectList;
  3654. locComp : ISDODataObject;
  3655. localFileName : string;
  3656. begin
  3657. localFileName := sdoExpandLocalFileName(TestFilesPath + 'company.two.xml');
  3658. f := TSDOSerializerStreamXML.Create();
  3659. tmpFactory := TSDODataFactory.Create();
  3660. s := TSDOSerializer.Create(tmpFactory,f);
  3661. ol := TSDODataObjectList.Create(tmpFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[ObjectType]));
  3662. s.load(localFileName,ol);
  3663. locFactory := CreateSdoTypes();
  3664. CompareTypesInclude(tmpFactory.getTypes(), locFactory.getTypes());
  3665. CompareTypesInclude(locFactory.getTypes(), tmpFactory.getTypes());
  3666. CheckEquals(2,ol.size(),'loaded objects count');
  3667. locComp := CreateCompanyObject(locFactory);
  3668. locComp.setString('name','A Second Sample company');
  3669. ol.getCursor().MoveFirst();
  3670. CheckEquals(True,TSDOEqualityHelper.equalShallow(locComp, ol.getDataObject()),'equalShallow');
  3671. CheckEquals(True,TSDOEqualityHelper.equal(locComp, ol.getDataObject()),'equal');
  3672. end;
  3673. procedure TSDOSerializer_Test.save_to_file_changesummary_simple();
  3674. var
  3675. locFac : ISDODataFactory;
  3676. locEmployee : ISDODataObject;
  3677. locCS : ISDOChangeSummary;
  3678. f : ISDOSerializerStream;
  3679. s : ISDOSerializer;
  3680. localFileName : string;
  3681. existDoc, serialDoc : TSDOXMLDocument;
  3682. begin
  3683. localFileName := sdoExpandLocalFileName('change_summary_simple.xml');
  3684. locFac := TSDODataFactory.Create() as ISDODataFactory;
  3685. locFac.AddType(s_uri,s_Employee,[]);
  3686. locFac.addProperty(s_uri,s_Employee,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  3687. locFac.addProperty(s_uri,s_Employee,s_sn,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  3688. locFac.addProperty(s_uri,s_Employee,s_manager,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType],[pfIsAttribute]);
  3689. locFac.addProperty(s_uri,s_Employee,s_age,sdo_namespace,SDOTypeDefaultTypeNames[ByteType],[pfIsAttribute]);
  3690. locFac.addProperty(s_uri,s_Employee,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  3691. locEmployee := locFac.createNew(s_uri,s_Employee);
  3692. locEmployee.setString(s_name,'Inoussa O.');
  3693. locEmployee.setString(s_sn,'002');
  3694. locEmployee.setBoolean(s_manager,True);
  3695. locEmployee.setByte(s_age,30);
  3696. locCS := locEmployee.getChangeSummary();
  3697. locCS.beginLogging();
  3698. locEmployee.setString(s_name,'Inoussa OUEDRAOGO');
  3699. locEmployee.setString(s_sn,'001');
  3700. locEmployee.setByte(s_age,32);
  3701. f := TSDOSerializerStreamXML.Create();
  3702. s := TSDOSerializer.Create(locFac,f);
  3703. s.save(s_Employee,locEmployee,localFileName);
  3704. existDoc := nil;
  3705. serialDoc := nil;
  3706. ReadXMLFile(existDoc,sdoExpandLocalFileName(TestFilesPath + 'change_summary_simple.xml'));
  3707. try
  3708. ReadXMLFile(serialDoc,localFileName);
  3709. CheckEquals(True, CompareNodes(existDoc,serialDoc));
  3710. finally
  3711. ReleaseDomNode(existDoc);
  3712. ReleaseDomNode(serialDoc);
  3713. end;
  3714. end;
  3715. procedure TSDOSerializer_Test.load_from_file_changesummary_simple();
  3716. var
  3717. locFac, tmpFactory : ISDODataFactory;
  3718. locEmployee : ISDODataObject;
  3719. locCS : ISDOChangeSummary;
  3720. f : ISDOSerializerStream;
  3721. s : ISDOSerializer;
  3722. localFileName : string;
  3723. ol : ISDODataObjectList;
  3724. begin
  3725. localFileName := sdoExpandLocalFileName(TestFilesPath + 'change_summary_simple.xml');
  3726. locFac := TSDODataFactory.Create() as ISDODataFactory;
  3727. locFac.AddType(s_uri,s_Employee,[]);
  3728. locFac.addProperty(s_uri,s_Employee,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  3729. locFac.addProperty(s_uri,s_Employee,s_sn,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  3730. locFac.addProperty(s_uri,s_Employee,s_manager,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType],[pfIsAttribute]);
  3731. locFac.addProperty(s_uri,s_Employee,s_age,sdo_namespace,SDOTypeDefaultTypeNames[ByteType],[pfIsAttribute]);
  3732. locFac.addProperty(s_uri,s_Employee,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  3733. locEmployee := locFac.createNew(s_uri,s_Employee);
  3734. locEmployee.setString(s_name,'Inoussa O.');
  3735. locEmployee.setString(s_sn,'002');
  3736. locEmployee.setBoolean(s_manager,True);
  3737. locEmployee.setByte(s_age,30);
  3738. locCS := locEmployee.getChangeSummary();
  3739. locCS.beginLogging();
  3740. locEmployee.setString(s_name,'Inoussa OUEDRAOGO');
  3741. locEmployee.setString(s_sn,'001');
  3742. locEmployee.setByte(s_age,32);
  3743. f := TSDOSerializerStreamXML.Create();
  3744. tmpFactory := TSDODataFactory.Create();
  3745. s := TSDOSerializer.Create(tmpFactory,f);
  3746. ol := TSDODataObjectList.Create(tmpFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[ObjectType]));
  3747. s.load(localFileName,ol);
  3748. Check(TSDOEqualityHelper.equal(locEmployee,ol.getDataObject(0)));
  3749. Compare(
  3750. locEmployee.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  3751. ol.getDataObject(0).getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  3752. );
  3753. locEmployee.getChangeSummary().undoChanges();
  3754. ol.getDataObject(0).getChangeSummary().undoChanges();
  3755. CheckEquals(0, locEmployee.getChangeSummary().getChangedDataObjects().size());
  3756. CheckEquals(0, ol.getDataObject(0).getChangeSummary().getChangedDataObjects().size());
  3757. Check(TSDOEqualityHelper.equal(locEmployee,ol.getDataObject(0)));
  3758. end;
  3759. procedure TSDOSerializer_Test.save_to_file_changesummary_object_modify_nested();
  3760. var
  3761. locFac : ISDODataFactory;
  3762. locDep, locEmployee : ISDODataObject;
  3763. locCS : ISDOChangeSummary;
  3764. f : ISDOSerializerStream;
  3765. s : ISDOSerializer;
  3766. localFileName : string;
  3767. existDoc, serialDoc : TSDOXMLDocument;
  3768. begin
  3769. localFileName := sdoExpandLocalFileName('change_summary_object_modify_nested.xml');
  3770. locFac := TSDODataFactory.Create() as ISDODataFactory;
  3771. locFac.AddType(s_uri,s_DepartmentType,[]);
  3772. locFac.AddType(s_uri,s_Employee,[]);
  3773. locFac.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  3774. locFac.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  3775. locFac.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[pfIsAttribute]);
  3776. locFac.addProperty(s_uri,s_DepartmentType,s_Employee,s_uri,s_Employee,[pfIsContainment]);
  3777. locFac.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  3778. locFac.addProperty(s_uri,s_Employee,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  3779. locFac.addProperty(s_uri,s_Employee,s_sn,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  3780. locFac.addProperty(s_uri,s_Employee,s_manager,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType],[pfIsAttribute]);
  3781. locFac.addProperty(s_uri,s_Employee,s_age,sdo_namespace,SDOTypeDefaultTypeNames[ByteType],[pfIsAttribute]);
  3782. locDep := locFac.createNew(s_uri,s_DepartmentType);
  3783. locDep.setString(s_name,'R & D');
  3784. locDep.setString(s_location,'Ouaga, BF');
  3785. locDep.setInteger(s_number,1210);
  3786. locEmployee := locDep.createDataObject(s_Employee);
  3787. locEmployee.setString(s_name,'Inoussa O.');
  3788. locEmployee.setString(s_sn,'002');
  3789. locEmployee.setBoolean(s_manager,True);
  3790. locEmployee.setByte(s_age,12);
  3791. locCS := locDep.getChangeSummary();
  3792. locCS.beginLogging();
  3793. locDep.setString(s_name,'R & D Department');
  3794. locDep.setString(s_location,'Ouaga 01, BF');
  3795. locEmployee.setString(s_name,'Inoussa OUEDRAOGO');
  3796. locEmployee.setString(s_sn,'001');
  3797. locEmployee.setByte(s_age,32);
  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 + 'change_summary_object_modify_nested.xml'));
  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.save_to_file_changesummary_prop_list_integer();
  3813. const
  3814. FILE_NAME = 'changesummary_prop_list_integer.xml';
  3815. var
  3816. locFac : ISDODataFactory;
  3817. locDep : ISDODataObject;
  3818. ls : ISDODataObjectList;
  3819. locCS : ISDOChangeSummary;
  3820. f : ISDOSerializerStream;
  3821. s : ISDOSerializer;
  3822. localFileName : string;
  3823. existDoc, serialDoc : TSDOXMLDocument;
  3824. begin
  3825. localFileName := sdoExpandLocalFileName(FILE_NAME);
  3826. locFac := TSDODataFactory.Create() as ISDODataFactory;
  3827. locFac.AddType(s_uri,s_DepartmentType,[]);
  3828. locFac.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  3829. locFac.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  3830. locFac.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[]);
  3831. locFac.addProperty(s_uri,s_DepartmentType,s_list_int,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[pfIsMany]);
  3832. locFac.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  3833. locDep := locFac.createNew(s_uri,s_DepartmentType);
  3834. locDep.setString(s_name,'R & D');
  3835. locDep.setString(s_location,'Ouaga, BF');
  3836. locDep.setInteger(s_number,1210);
  3837. ls := locDep.getList(s_list_int);
  3838. ls.append(1);
  3839. ls.append(2);
  3840. ls.append(3);
  3841. locCS := locDep.getChangeSummary();
  3842. locCS.beginLogging();
  3843. locDep.setString(s_name,'R & D Department');
  3844. locDep.setString(s_location,'Ouaga 01, BF');
  3845. ls.setInteger(0,10);
  3846. ls.append(123);
  3847. ls.append(456);
  3848. ls.setInteger(1,20);
  3849. ls.delete(0);
  3850. ls.delete(1);
  3851. ls.insert(2, 1076);
  3852. ls.append(789);
  3853. {$IFDEF TEST_GENERATE_FILE}
  3854. (TSDOSerializer.Create(locFac,TSDOSerializerStreamXML.Create()) as ISDOSerializer).save(locDep,sdoExpandLocalFileName(FILE_NAME));
  3855. {$ENDIF TEST_GENERATE_FILE}
  3856. f := TSDOSerializerStreamXML.Create();
  3857. s := TSDOSerializer.Create(locFac,f);
  3858. s.save(s_DepartmentType,locDep,localFileName);
  3859. existDoc := nil;
  3860. serialDoc := nil;
  3861. ReadXMLFile(existDoc,sdoExpandLocalFileName(TestFilesPath + FILE_NAME));
  3862. try
  3863. ReadXMLFile(serialDoc,localFileName);
  3864. CheckEquals(True, CompareNodes(existDoc,serialDoc));
  3865. finally
  3866. ReleaseDomNode(existDoc);
  3867. ReleaseDomNode(serialDoc);
  3868. end;
  3869. end;
  3870. procedure TSDOSerializer_Test.save_to_file_changesummary_object_create();
  3871. var
  3872. locFac : ISDODataFactory;
  3873. locDep, locEmployee : ISDODataObject;
  3874. locCS : ISDOChangeSummary;
  3875. f : ISDOSerializerStream;
  3876. s : ISDOSerializer;
  3877. localFileName : string;
  3878. existDoc, serialDoc : TSDOXMLDocument;
  3879. begin
  3880. localFileName := sdoExpandLocalFileName('change_summary_object_create.xml');
  3881. locFac := TSDODataFactory.Create() as ISDODataFactory;
  3882. locFac.AddType(s_uri,s_DepartmentType,[]);
  3883. locFac.AddType(s_uri,s_Employee,[]);
  3884. locFac.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  3885. locFac.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  3886. locFac.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[pfIsAttribute]);
  3887. locFac.addProperty(s_uri,s_DepartmentType,s_Employee,s_uri,s_Employee,[pfIsContainment]);
  3888. locFac.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  3889. locFac.addProperty(s_uri,s_Employee,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  3890. locFac.addProperty(s_uri,s_Employee,s_sn,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  3891. locFac.addProperty(s_uri,s_Employee,s_manager,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType],[pfIsAttribute]);
  3892. locDep := locFac.createNew(s_uri,s_DepartmentType);
  3893. locDep.setString(s_name,'R & D');
  3894. locCS := locDep.getChangeSummary();
  3895. locDep.setString(s_location,'Ouaga, BF');
  3896. locCS.beginLogging();
  3897. locDep.setInteger(s_number,1210);
  3898. locEmployee := locDep.createDataObject(s_Employee);
  3899. locEmployee.setString(s_name,'Inoussa O.');
  3900. locEmployee.setString(s_sn,'002');
  3901. locEmployee.setBoolean(s_manager,True);
  3902. locDep.setString(s_name,'R & D Department');
  3903. locDep.setString(s_location,'Ouaga 01, BF');
  3904. locEmployee.setString(s_name,'Inoussa OUEDRAOGO');
  3905. locEmployee.setString(s_sn,'001');
  3906. f := TSDOSerializerStreamXML.Create();
  3907. s := TSDOSerializer.Create(locFac,f);
  3908. s.save(s_DepartmentType,locDep,localFileName);
  3909. existDoc := nil;
  3910. serialDoc := nil;
  3911. ReadXMLFile(existDoc,sdoExpandLocalFileName(TestFilesPath + 'change_summary_object_create.xml'));
  3912. try
  3913. ReadXMLFile(serialDoc,localFileName);
  3914. CheckEquals(True, CompareNodes(existDoc,serialDoc));
  3915. finally
  3916. ReleaseDomNode(existDoc);
  3917. ReleaseDomNode(serialDoc);
  3918. end;
  3919. end;
  3920. procedure TSDOSerializer_Test.save_to_file_changesummary_object_create_cont_ref();
  3921. var
  3922. locFac : ISDODataFactory;
  3923. locDep, locEmployee : ISDODataObject;
  3924. locCS : ISDOChangeSummary;
  3925. f : ISDOSerializerStream;
  3926. s : ISDOSerializer;
  3927. localFileName : string;
  3928. existDoc, serialDoc : TSDOXMLDocument;
  3929. begin
  3930. localFileName := sdoExpandLocalFileName('change_summary_object_create_cont_ref.xml');
  3931. locFac := TSDODataFactory.Create() as ISDODataFactory;
  3932. locFac.AddType(s_uri,s_DepartmentType,[]);
  3933. locFac.AddType(s_uri,s_Employee,[]);
  3934. locFac.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  3935. locFac.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  3936. locFac.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[pfIsAttribute]);
  3937. locFac.addProperty(s_uri,s_DepartmentType,s_Employee,s_uri,s_Employee,[pfIsContainment]);
  3938. locFac.addProperty(s_uri,s_DepartmentType,'employee_ref',s_uri,s_Employee,[]);
  3939. locFac.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  3940. locFac.addProperty(s_uri,s_Employee,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  3941. locFac.addProperty(s_uri,s_Employee,s_sn,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  3942. locFac.addProperty(s_uri,s_Employee,s_manager,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType],[pfIsAttribute]);
  3943. locDep := locFac.createNew(s_uri,s_DepartmentType);
  3944. locDep.setString(s_name,'R & D');
  3945. locCS := locDep.getChangeSummary();
  3946. locDep.setString(s_location,'Ouaga, BF');
  3947. locCS.beginLogging();
  3948. locDep.setInteger(s_number,1210);
  3949. locEmployee := locDep.createDataObject(s_Employee);
  3950. locEmployee.setString(s_name,'Inoussa O.');
  3951. locEmployee.setString(s_sn,'002');
  3952. locEmployee.setBoolean(s_manager,True);
  3953. locDep.setString(s_name,'R & D Department');
  3954. locDep.setString(s_location,'Ouaga 01, BF');
  3955. locDep.setDataObject('employee_ref',locEmployee);
  3956. locEmployee.setString(s_name,'Inoussa OUEDRAOGO');
  3957. locEmployee.setString(s_sn,'001');
  3958. f := TSDOSerializerStreamXML.Create();
  3959. s := TSDOSerializer.Create(locFac,f);
  3960. s.save(s_DepartmentType,locDep,localFileName);
  3961. existDoc := nil;
  3962. serialDoc := nil;
  3963. ReadXMLFile(existDoc,sdoExpandLocalFileName(TestFilesPath + 'change_summary_object_create_cont_ref.xml'));
  3964. try
  3965. ReadXMLFile(serialDoc,localFileName);
  3966. CheckEquals(True, CompareNodes(existDoc,serialDoc));
  3967. finally
  3968. ReleaseDomNode(existDoc);
  3969. ReleaseDomNode(serialDoc);
  3970. end;
  3971. end;
  3972. procedure TSDOSerializer_Test.load_from_file_changesummary_object_create_cont_ref();
  3973. var
  3974. locFac : ISDODataFactory;
  3975. locDep, locEmployee, locLoadedDep : ISDODataObject;
  3976. locCS : ISDOChangeSummary;
  3977. f : ISDOSerializerStream;
  3978. s : ISDOSerializer;
  3979. localFileName : string;
  3980. begin
  3981. localFileName := sdoExpandLocalFileName('change_summary_object_create_cont_ref.xml');
  3982. locFac := TSDODataFactory.Create() as ISDODataFactory;
  3983. locFac.AddType(s_uri,s_DepartmentType,[]);
  3984. locFac.AddType(s_uri,s_Employee,[]);
  3985. locFac.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  3986. locFac.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  3987. locFac.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[pfIsAttribute]);
  3988. locFac.addProperty(s_uri,s_DepartmentType,s_Employee,s_uri,s_Employee,[pfIsContainment]);
  3989. locFac.addProperty(s_uri,s_DepartmentType,'employee_ref',s_uri,s_Employee,[]);
  3990. locFac.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  3991. locFac.addProperty(s_uri,s_Employee,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  3992. locFac.addProperty(s_uri,s_Employee,s_sn,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsAttribute]);
  3993. locFac.addProperty(s_uri,s_Employee,s_manager,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType],[pfIsAttribute]);
  3994. locDep := locFac.createNew(s_uri,s_DepartmentType);
  3995. locDep.setString(s_name,'R & D');
  3996. locCS := locDep.getChangeSummary();
  3997. locDep.setString(s_location,'Ouaga, BF');
  3998. locCS.beginLogging();
  3999. locDep.setInteger(s_number,1210);
  4000. locEmployee := locDep.createDataObject(s_Employee);
  4001. locEmployee.setString(s_name,'Inoussa O.');
  4002. locEmployee.setString(s_sn,'002');
  4003. locEmployee.setBoolean(s_manager,True);
  4004. locDep.setString(s_name,'R & D Department');
  4005. locDep.setString(s_location,'Ouaga 01, BF');
  4006. locDep.setDataObject('employee_ref',locEmployee);
  4007. locEmployee.setString(s_name,'Inoussa OUEDRAOGO');
  4008. locEmployee.setString(s_sn,'001');
  4009. f := TSDOSerializerStreamXML.Create();
  4010. s := TSDOSerializer.Create(locFac,f);
  4011. locLoadedDep := s.load(sdoExpandLocalFileName(TestFilesPath + 'change_summary_object_create_cont_ref.xml'));
  4012. Check(TSDOEqualityHelper.equal(locLoadedDep,locDep),'Object');
  4013. Compare(
  4014. locDep.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  4015. locLoadedDep.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  4016. );
  4017. locDep.getChangeSummary().undoChanges();
  4018. locLoadedDep.getChangeSummary().undoChanges();
  4019. CheckEquals( 0, locDep.getChangeSummary().getChangedDataObjects().size());
  4020. CheckEquals( 0, locLoadedDep.getChangeSummary().getChangedDataObjects().size());
  4021. Check(TSDOEqualityHelper.equal(locDep, locLoadedDep),'Object');
  4022. end;
  4023. procedure TSDOSerializer_Test.save_to_file_changesummary_object_delete();
  4024. var
  4025. locFac : ISDODataFactory;
  4026. locDep, locEmployee : ISDODataObject;
  4027. locCS : ISDOChangeSummary;
  4028. f : ISDOSerializerStream;
  4029. s : ISDOSerializer;
  4030. localFileName : string;
  4031. existDoc, serialDoc : TSDOXMLDocument;
  4032. begin
  4033. localFileName := sdoExpandLocalFileName('change_summary_object_delete.xml');
  4034. locFac := TSDODataFactory.Create() as ISDODataFactory;
  4035. locFac.AddType(s_uri,s_DepartmentType,[]);
  4036. locFac.AddType(s_uri,s_Employee,[]);
  4037. locFac.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType], [pfIsAttribute]);
  4038. locFac.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType], [pfIsAttribute]);
  4039. locFac.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType], [pfIsAttribute]);
  4040. locFac.addProperty(s_uri,s_DepartmentType,s_Employee,s_uri,s_Employee,[pfIsContainment]);
  4041. locFac.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  4042. locFac.addProperty(s_uri,s_Employee,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType], [pfIsAttribute]);
  4043. locFac.addProperty(s_uri,s_Employee,s_sn,sdo_namespace,SDOTypeDefaultTypeNames[StringType], [pfIsAttribute]);
  4044. locFac.addProperty(s_uri,s_Employee,s_manager,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType], [pfIsAttribute]);
  4045. locDep := locFac.createNew(s_uri,s_DepartmentType);
  4046. locDep.setString(s_name,'R & D');
  4047. locEmployee := locDep.createDataObject(s_Employee);
  4048. locEmployee.setString(s_name,'Inoussa O.');
  4049. locEmployee.setString(s_sn,'002');
  4050. locEmployee.setBoolean(s_manager,True);
  4051. locCS := locDep.getChangeSummary();
  4052. locDep.setString(s_location,'Ouaga, BF');
  4053. locCS.beginLogging();
  4054. locDep.setInteger(s_number,1210);
  4055. locDep.setString(s_name,'R & D Department');
  4056. locDep.setString(s_location,'Ouaga 01, BF');
  4057. locDep.setDataObject(s_Employee,nil);
  4058. f := TSDOSerializerStreamXML.Create();
  4059. s := TSDOSerializer.Create(locFac,f);
  4060. s.save(s_DepartmentType,locDep,localFileName);
  4061. existDoc := nil;
  4062. serialDoc := nil;
  4063. ReadXMLFile(existDoc,sdoExpandLocalFileName(TestFilesPath + 'change_summary_object_delete.xml'));
  4064. try
  4065. ReadXMLFile(serialDoc,localFileName);
  4066. CheckEquals(True, CompareNodes(existDoc,serialDoc));
  4067. finally
  4068. ReleaseDomNode(existDoc);
  4069. ReleaseDomNode(serialDoc);
  4070. end;
  4071. end;
  4072. procedure TSDOSerializer_Test.load_from_file_changesummary_object_delete();
  4073. var
  4074. locFac, tmpFactory : ISDODataFactory;
  4075. locDep, locEmployee, locLoadedDep : ISDODataObject;
  4076. locCS : ISDOChangeSummary;
  4077. f : ISDOSerializerStream;
  4078. s : ISDOSerializer;
  4079. localFileName : string;
  4080. begin
  4081. localFileName := sdoExpandLocalFileName(TestFilesPath + 'change_summary_object_delete.xml');
  4082. locFac := TSDODataFactory.Create() as ISDODataFactory;
  4083. locFac.AddType(s_uri,s_DepartmentType,[]);
  4084. locFac.AddType(s_uri,s_Employee,[]);
  4085. locFac.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType], []);
  4086. locFac.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType], []);
  4087. locFac.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType], []);
  4088. locFac.addProperty(s_uri,s_DepartmentType,s_Employee,s_uri,s_Employee,[pfIsContainment]);
  4089. locFac.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  4090. locFac.addProperty(s_uri,s_Employee,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType], []);
  4091. locFac.addProperty(s_uri,s_Employee,s_sn,sdo_namespace,SDOTypeDefaultTypeNames[StringType], []);
  4092. locFac.addProperty(s_uri,s_Employee,s_manager,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType], []);
  4093. locDep := locFac.createNew(s_uri,s_DepartmentType);
  4094. locDep.setString(s_name,'R & D');
  4095. locEmployee := locDep.createDataObject(s_Employee);
  4096. locEmployee.setString(s_name,'Inoussa O.');
  4097. locEmployee.setString(s_sn,'002');
  4098. locEmployee.setBoolean(s_manager,True);
  4099. locCS := locDep.getChangeSummary();
  4100. locDep.setString(s_location,'Ouaga, BF');
  4101. locCS.beginLogging();
  4102. locDep.setInteger(s_number,1210);
  4103. locDep.setString(s_name,'R & D Department');
  4104. locDep.setString(s_location,'Ouaga 01, BF');
  4105. locDep.setDataObject(s_Employee,nil); (TSDOSerializer.Create(locFac,TSDOSerializerStreamXML.Create()) as ISDOSerializer).save(locDep,'change_summary_object_delete.xml');
  4106. f := TSDOSerializerStreamXML.Create();
  4107. tmpFactory := TSDOBaseDataFactory.Create();
  4108. s := TSDOSerializer.Create(tmpFactory,f);
  4109. locLoadedDep := s.load(localFileName);
  4110. Check(TSDOEqualityHelper.equal(locDep,locLoadedDep),'Object');
  4111. Compare(
  4112. locDep.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  4113. locLoadedDep.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  4114. );
  4115. locDep.getChangeSummary().undoChanges();
  4116. locLoadedDep.getChangeSummary().undoChanges();
  4117. CheckEquals( 0, locDep.getChangeSummary().getChangedDataObjects().size());
  4118. CheckEquals( 0, locLoadedDep.getChangeSummary().getChangedDataObjects().size());
  4119. Check(TSDOEqualityHelper.equal(locDep, locLoadedDep),'Object');
  4120. end;
  4121. procedure TSDOSerializer_Test.save_to_file_changesummary_object_delete_nested();
  4122. var
  4123. locFac : ISDODataFactory;
  4124. locA, locB, locC, locD : ISDODataObject;
  4125. locCS : ISDOChangeSummary;
  4126. f : ISDOSerializerStream;
  4127. s : ISDOSerializer;
  4128. localFileName : string;
  4129. existDoc, serialDoc : TSDOXMLDocument;
  4130. begin
  4131. localFileName := sdoExpandLocalFileName('change_summary_object_delete_nested.xml');
  4132. locFac := TSDODataFactory.Create() as ISDODataFactory;
  4133. locFac.AddType(s_uri,'a',[]);
  4134. locFac.AddType(s_uri,'b',[]);
  4135. locFac.AddType(s_uri,'c',[]);
  4136. locFac.AddType(s_uri,'d',[]);
  4137. locFac.addProperty(s_uri,'a','p_a_str',sdo_namespace,SDOTypeDefaultTypeNames[StringType], [pfIsAttribute]);
  4138. locFac.addProperty(s_uri,'a','p_ab',s_uri,'b',[pfIsContainment]);
  4139. locFac.addProperty(s_uri,'a','p_ac',s_uri,'c',[]);
  4140. locFac.addProperty(s_uri,'a','p_ad',s_uri,'d',[]);
  4141. locFac.addProperty(s_uri,'a',s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  4142. locFac.addProperty(s_uri,'b','p_bc',s_uri,'c',[pfIsContainment]);
  4143. locFac.addProperty(s_uri,'b','p_b_str',sdo_namespace,SDOTypeDefaultTypeNames[StringType], [pfIsAttribute]);
  4144. locFac.addProperty(s_uri,'c','p_cd',s_uri,'d',[pfIsContainment]);
  4145. locFac.addProperty(s_uri,'c','p_c_str',sdo_namespace,SDOTypeDefaultTypeNames[StringType], [pfIsAttribute]);
  4146. locFac.addProperty(s_uri,'d','p_d_str',sdo_namespace,SDOTypeDefaultTypeNames[StringType], [pfIsAttribute]);
  4147. locA := locFac.createNew(s_uri,'a');
  4148. locA.setString('p_a_str','sample A'' property.');
  4149. locB := locA.createDataObject('p_ab');
  4150. locB.setString('p_b_str','Inoussa O.');
  4151. locC := locB.createDataObject('p_bc');
  4152. locC.setString('p_c_str','azerty');
  4153. locD := locC.createDataObject('p_cd');
  4154. locD.setString('p_d_str','D value');
  4155. locA.setDataObject('p_ac',locC);
  4156. locA.setDataObject('p_ad',locD);
  4157. locCS := locA.getChangeSummary();
  4158. locCS.beginLogging();
  4159. locC.setDataObject('p_cd',nil);
  4160. locA.setDataObject('p_ab',nil);
  4161. f := TSDOSerializerStreamXML.Create();
  4162. s := TSDOSerializer.Create(locFac,f);
  4163. s.save('a',locA,localFileName);
  4164. existDoc := nil;
  4165. serialDoc := nil;
  4166. ReadXMLFile(existDoc,sdoExpandLocalFileName(TestFilesPath + 'change_summary_object_delete_nested.xml'));
  4167. try
  4168. ReadXMLFile(serialDoc,localFileName);
  4169. CheckEquals(True, CompareNodes(existDoc,serialDoc));
  4170. finally
  4171. ReleaseDomNode(existDoc);
  4172. ReleaseDomNode(serialDoc);
  4173. end;
  4174. end;
  4175. procedure TSDOSerializer_Test.load_from_file_changesummary_prop_list_integer();
  4176. const
  4177. FILE_NAME = 'changesummary_prop_list_integer.xml';
  4178. var
  4179. locFac, tmpFactory : ISDODataFactory;
  4180. locDep, locLoadedDep : ISDODataObject;
  4181. ls : ISDODataObjectList;
  4182. locCS : ISDOChangeSummary;
  4183. f : ISDOSerializerStream;
  4184. s : ISDOSerializer;
  4185. localFileName : string;
  4186. begin
  4187. locFac := TSDODataFactory.Create() as ISDODataFactory;
  4188. locFac.AddType(s_uri,s_DepartmentType,[]);
  4189. locFac.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  4190. locFac.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  4191. locFac.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[]);
  4192. locFac.addProperty(s_uri,s_DepartmentType,s_list_int,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[pfIsMany]);
  4193. locFac.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  4194. locDep := locFac.createNew(s_uri,s_DepartmentType);
  4195. locDep.setString(s_name,'R & D');
  4196. locDep.setString(s_location,'Ouaga, BF');
  4197. locDep.setInteger(s_number,1210);
  4198. ls := locDep.getList(s_list_int);
  4199. ls.append(1);
  4200. ls.append(2);
  4201. ls.append(3);
  4202. locCS := locDep.getChangeSummary();
  4203. locCS.beginLogging();
  4204. locDep.setString(s_name,'R & D Department');
  4205. locDep.setString(s_location,'Ouaga 01, BF');
  4206. ls.setInteger(0,10);
  4207. ls.append(123);
  4208. ls.append(456);
  4209. ls.setInteger(1,20);
  4210. ls.delete(0);
  4211. ls.delete(1);
  4212. ls.insert(2, 1076);
  4213. ls.append(789);
  4214. {$IFDEF TEST_GENERATE_FILE}
  4215. (TSDOSerializer.Create(locFac,TSDOSerializerStreamXML.Create())as ISDOSerializer).save(locDep,sdoExpandLocalFileName(FILE_NAME));
  4216. {$ENDIF TEST_GENERATE_FILE}
  4217. localFileName := sdoExpandLocalFileName(TestFilesPath + FILE_NAME);
  4218. f := TSDOSerializerStreamXML.Create();
  4219. tmpFactory := TSDOBaseDataFactory.Create();
  4220. s := TSDOSerializer.Create(tmpFactory,f);
  4221. locLoadedDep := s.load(localFileName);
  4222. Check(TSDOEqualityHelper.equal(locDep, locLoadedDep),'Object');
  4223. Compare(
  4224. locDep.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  4225. locLoadedDep.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  4226. );
  4227. end;
  4228. {$IFDEF HAS_SDO_LONG}
  4229. procedure TSDOSerializer_Test.load_from_file_changesummary_prop_list_long();
  4230. const
  4231. PROP_NAME = s_list_long;
  4232. PROP_TYPE = LongType;
  4233. FILE_NAME = 'changesummary_prop_list_long.xml';
  4234. var
  4235. locFac, tmpFactory : ISDODataFactory;
  4236. locDep, locLoadedDep : ISDODataObject;
  4237. ls : ISDODataObjectList;
  4238. locCS : ISDOChangeSummary;
  4239. f : ISDOSerializerStream;
  4240. s : ISDOSerializer;
  4241. localFileName : string;
  4242. begin
  4243. locFac := TSDODataFactory.Create() as ISDODataFactory;
  4244. locFac.AddType(s_uri,s_DepartmentType,[]);
  4245. locFac.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  4246. locFac.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  4247. locFac.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[ByteType],[]);
  4248. locFac.addProperty(s_uri,s_DepartmentType,PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE],[pfIsMany]);
  4249. locFac.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  4250. locDep := locFac.createNew(s_uri,s_DepartmentType);
  4251. locDep.setString(s_name,'R & D');
  4252. locDep.setString(s_location,'Ouaga, BF');
  4253. locDep.setByte(s_number,123);
  4254. ls := locDep.getList(PROP_NAME);
  4255. ls.append(TSDOLong(11111111111111111));
  4256. ls.append(TSDOLong(-2222222222222222));
  4257. ls.append(TSDOLong(333333333333333333));
  4258. locCS := locDep.getChangeSummary();
  4259. locCS.beginLogging();
  4260. locDep.setString(s_name,'R & D Department');
  4261. locDep.setString(s_location,'Ouaga 01, BF');
  4262. ls.setLong(0,4444444444444444444);
  4263. ls.append(TSDOLong(5555555555555555555));
  4264. ls.append(TSDOLong(-6666666666666666666));
  4265. ls.setLong(1,7777777777777777777);
  4266. ls.delete(0);
  4267. ls.delete(1);
  4268. ls.insert(2, TSDOLong(8));
  4269. ls.append(TSDOLong(-9));
  4270. {$IFDEF TEST_GENERATE_FILE}
  4271. (TSDOSerializer.Create(locFac,TSDOSerializerStreamXML.Create())as ISDOSerializer).save(locDep,sdoExpandLocalFileName(FILE_NAME));
  4272. {$ENDIF TEST_GENERATE_FILE}
  4273. localFileName := sdoExpandLocalFileName(TestFilesPath + FILE_NAME);
  4274. f := TSDOSerializerStreamXML.Create();
  4275. tmpFactory := TSDOBaseDataFactory.Create();
  4276. s := TSDOSerializer.Create(tmpFactory,f);
  4277. locLoadedDep := s.load(localFileName);
  4278. Check(TSDOEqualityHelper.equal(locDep, locLoadedDep),'Object');
  4279. Compare(
  4280. locDep.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  4281. locLoadedDep.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  4282. );
  4283. end;
  4284. {$ENDIF HAS_SDO_LONG}
  4285. {$IFDEF HAS_SDO_SHORT}
  4286. procedure TSDOSerializer_Test.load_from_file_changesummary_prop_list_short();
  4287. const
  4288. PROP_NAME = s_list_short;
  4289. PROP_TYPE = ShortType;
  4290. FILE_NAME = 'changesummary_prop_list_short.xml';
  4291. var
  4292. locFac, tmpFactory : ISDODataFactory;
  4293. locDep, locLoadedDep : ISDODataObject;
  4294. ls : ISDODataObjectList;
  4295. locCS : ISDOChangeSummary;
  4296. f : ISDOSerializerStream;
  4297. s : ISDOSerializer;
  4298. localFileName : string;
  4299. begin
  4300. locFac := TSDODataFactory.Create() as ISDODataFactory;
  4301. locFac.AddType(s_uri,s_DepartmentType,[]);
  4302. locFac.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  4303. locFac.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  4304. locFac.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[ByteType],[]);
  4305. locFac.addProperty(s_uri,s_DepartmentType,PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE],[pfIsMany]);
  4306. locFac.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  4307. locDep := locFac.createNew(s_uri,s_DepartmentType);
  4308. locDep.setString(s_name,'R & D');
  4309. locDep.setString(s_location,'Ouaga, BF');
  4310. locDep.setByte(s_number,123);
  4311. ls := locDep.getList(PROP_NAME);
  4312. ls.append(TSDOShort(1));
  4313. ls.append(TSDOShort(2));
  4314. ls.append(TSDOShort(3));
  4315. locCS := locDep.getChangeSummary();
  4316. locCS.beginLogging();
  4317. locDep.setString(s_name,'R & D Department');
  4318. locDep.setString(s_location,'Ouaga 01, BF');
  4319. ls.setShort(0,10);
  4320. ls.append(TSDOShort(12345));
  4321. ls.append(TSDOShort(-5245));
  4322. ls.setShort(1,20);
  4323. ls.delete(0);
  4324. ls.delete(1);
  4325. ls.insert(2, TSDOShort(107));
  4326. ls.append(TSDOShort(89));
  4327. {$IFDEF TEST_GENERATE_FILE}
  4328. (TSDOSerializer.Create(locFac,TSDOSerializerStreamXML.Create())as ISDOSerializer).save(locDep,sdoExpandLocalFileName(FILE_NAME));
  4329. {$ENDIF TEST_GENERATE_FILE}
  4330. localFileName := sdoExpandLocalFileName(TestFilesPath + FILE_NAME);
  4331. f := TSDOSerializerStreamXML.Create();
  4332. tmpFactory := TSDOBaseDataFactory.Create();
  4333. s := TSDOSerializer.Create(tmpFactory,f);
  4334. locLoadedDep := s.load(localFileName);
  4335. Check(TSDOEqualityHelper.equal(locDep, locLoadedDep),'Object');
  4336. Compare(
  4337. locDep.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  4338. locLoadedDep.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  4339. );
  4340. end;
  4341. {$ENDIF HAS_SDO_SHORT}
  4342. procedure TSDOSerializer_Test.load_from_file_changesummary_object_delete_nested();
  4343. var
  4344. locFac, tmpFactory : ISDODataFactory;
  4345. locA, locB, locC, locD, locLoadedA : ISDODataObject;
  4346. locCS : ISDOChangeSummary;
  4347. f : ISDOSerializerStream;
  4348. s : ISDOSerializer;
  4349. localFileName : string;
  4350. begin
  4351. localFileName := sdoExpandLocalFileName(TestFilesPath + 'change_summary_object_delete_nested.xml');
  4352. locFac := TSDODataFactory.Create() as ISDODataFactory;
  4353. locFac.AddType(s_uri,'a',[]);
  4354. locFac.AddType(s_uri,'b',[]);
  4355. locFac.AddType(s_uri,'c',[]);
  4356. locFac.AddType(s_uri,'d',[]);
  4357. locFac.addProperty(s_uri,'a','p_a_str',sdo_namespace,SDOTypeDefaultTypeNames[StringType], []);
  4358. locFac.addProperty(s_uri,'a','p_ab',s_uri,'b',[pfIsContainment]);
  4359. locFac.addProperty(s_uri,'a','p_ac',s_uri,'c',[]);
  4360. locFac.addProperty(s_uri,'a','p_ad',s_uri,'d',[]);
  4361. locFac.addProperty(s_uri,'a',s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  4362. locFac.addProperty(s_uri,'b','p_bc',s_uri,'c',[pfIsContainment]);
  4363. locFac.addProperty(s_uri,'b','p_b_str',sdo_namespace,SDOTypeDefaultTypeNames[StringType], []);
  4364. locFac.addProperty(s_uri,'c','p_cd',s_uri,'d',[pfIsContainment]);
  4365. locFac.addProperty(s_uri,'c','p_c_str',sdo_namespace,SDOTypeDefaultTypeNames[StringType], []);
  4366. locFac.addProperty(s_uri,'d','p_d_str',sdo_namespace,SDOTypeDefaultTypeNames[StringType], []);
  4367. locA := locFac.createNew(s_uri,'a');
  4368. locA.setString('p_a_str','sample A'' property.');
  4369. locB := locA.createDataObject('p_ab');
  4370. locB.setString('p_b_str','Inoussa O.');
  4371. locC := locB.createDataObject('p_bc');
  4372. locC.setString('p_c_str','azerty');
  4373. locD := locC.createDataObject('p_cd');
  4374. locD.setString('p_d_str','D value');
  4375. locA.setDataObject('p_ac',locC);
  4376. locA.setDataObject('p_ad',locD);
  4377. locCS := locA.getChangeSummary();
  4378. locCS.beginLogging();
  4379. locC.setDataObject('p_cd',nil);
  4380. locA.setDataObject('p_ab',nil);
  4381. f := TSDOSerializerStreamXML.Create();
  4382. tmpFactory := TSDOBaseDataFactory.Create();
  4383. s := TSDOSerializer.Create(tmpFactory,f);
  4384. locLoadedA := s.load(localFileName);
  4385. Check(TSDOEqualityHelper.equal(locA,locLoadedA),'Object');
  4386. Compare(
  4387. locA.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  4388. locLoadedA.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  4389. );
  4390. locA.getChangeSummary().undoChanges();
  4391. locLoadedA.getChangeSummary().undoChanges();
  4392. CheckEquals( 0, locA.getChangeSummary().getChangedDataObjects().size());
  4393. CheckEquals( 0, locLoadedA.getChangeSummary().getChangedDataObjects().size());
  4394. Check(TSDOEqualityHelper.equal(locA, locLoadedA),'Object');
  4395. end;
  4396. procedure TSDOSerializer_Test.save_to_file_changesummary_object_delete_2_objects_same_type();
  4397. var
  4398. locFac : ISDODataFactory;
  4399. locA, locB : ISDODataObject;
  4400. locCS : ISDOChangeSummary;
  4401. f : ISDOSerializerStream;
  4402. s : ISDOSerializer;
  4403. localFileName : string;
  4404. existDoc, serialDoc : TSDOXMLDocument;
  4405. begin
  4406. localFileName := sdoExpandLocalFileName('changesummary_object_delete_2_objects_same_type.xml');
  4407. locFac := TSDODataFactory.Create() as ISDODataFactory;
  4408. locFac.AddType(s_uri,'a',[]);
  4409. locFac.AddType(s_uri,'b',[]);
  4410. locFac.addProperty(s_uri,'a','p_a_str',sdo_namespace,SDOTypeDefaultTypeNames[StringType], [pfIsAttribute]);
  4411. locFac.addProperty(s_uri,'a','p_ab1',s_uri,'b',[pfIsContainment]);
  4412. locFac.addProperty(s_uri,'a','p_ab2',s_uri,'b',[pfIsContainment]);
  4413. locFac.addProperty(s_uri,'a',s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  4414. locFac.addProperty(s_uri,'b','p_b_str',sdo_namespace,SDOTypeDefaultTypeNames[StringType], [pfIsAttribute]);
  4415. locA := locFac.createNew(s_uri,'a');
  4416. locA.setString('p_a_str','sample A'' property.');
  4417. locB := locA.createDataObject('p_ab1');
  4418. locB.setString('p_b_str','p_ab1\p_b_str value');
  4419. locB := locA.createDataObject('p_ab2');
  4420. locB.setString('p_b_str','p_ab2\p_b_str value');
  4421. locCS := locA.getChangeSummary();
  4422. locCS.beginLogging();
  4423. locA.setDataObject('p_ab1',nil);
  4424. locA.setDataObject('p_ab2',nil);
  4425. f := TSDOSerializerStreamXML.Create();
  4426. s := TSDOSerializer.Create(locFac,f);
  4427. s.save('a',locA,localFileName);
  4428. existDoc := nil;
  4429. serialDoc := nil;
  4430. ReadXMLFile(existDoc,sdoExpandLocalFileName(TestFilesPath + 'changesummary_object_delete_2_objects_same_type.xml'));
  4431. try
  4432. ReadXMLFile(serialDoc,localFileName);
  4433. CheckEquals(True, CompareNodes(existDoc,serialDoc));
  4434. finally
  4435. ReleaseDomNode(existDoc);
  4436. ReleaseDomNode(serialDoc);
  4437. end;
  4438. end;
  4439. procedure TSDOSerializer_Test.load_from_file_changesummary_object_delete_2_objects_same_type();
  4440. var
  4441. locFac, tmpFactory : ISDODataFactory;
  4442. locA, locB, locLoadedA : ISDODataObject;
  4443. locCS : ISDOChangeSummary;
  4444. f : ISDOSerializerStream;
  4445. s : ISDOSerializer;
  4446. localFileName : string;
  4447. begin
  4448. localFileName := sdoExpandLocalFileName(TestFilesPath + 'changesummary_object_delete_2_objects_same_type.xml');
  4449. locFac := TSDODataFactory.Create() as ISDODataFactory;
  4450. locFac.AddType(s_uri,'a',[]);
  4451. locFac.AddType(s_uri,'b',[]);
  4452. locFac.addProperty(s_uri,'a','p_a_str',sdo_namespace,SDOTypeDefaultTypeNames[StringType], []);
  4453. locFac.addProperty(s_uri,'a','p_ab1',s_uri,'b',[pfIsContainment]);
  4454. locFac.addProperty(s_uri,'a','p_ab2',s_uri,'b',[pfIsContainment]);
  4455. locFac.addProperty(s_uri,'a',s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  4456. locFac.addProperty(s_uri,'b','p_b_str',sdo_namespace,SDOTypeDefaultTypeNames[StringType], []);
  4457. locA := locFac.createNew(s_uri,'a');
  4458. locA.setString('p_a_str','sample A'' property.');
  4459. locB := locA.createDataObject('p_ab1');
  4460. locB.setString('p_b_str','p_ab1\p_b_str value');
  4461. locB := locA.createDataObject('p_ab2');
  4462. locB.setString('p_b_str','p_ab2\p_b_str value');
  4463. locCS := locA.getChangeSummary();
  4464. locCS.beginLogging();
  4465. locA.setDataObject('p_ab1',nil);
  4466. locA.setDataObject('p_ab2',nil);
  4467. f := TSDOSerializerStreamXML.Create();
  4468. tmpFactory := TSDOBaseDataFactory.Create();
  4469. s := TSDOSerializer.Create(tmpFactory,f);
  4470. locLoadedA := s.load(localFileName);
  4471. Check(TSDOEqualityHelper.equal(locA,locLoadedA),'Object');
  4472. Compare(
  4473. locA.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  4474. locLoadedA.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  4475. );
  4476. locA.getChangeSummary().undoChanges();
  4477. locLoadedA.getChangeSummary().undoChanges();
  4478. CheckEquals( 0, locA.getChangeSummary().getChangedDataObjects().size());
  4479. CheckEquals( 0, locLoadedA.getChangeSummary().getChangedDataObjects().size());
  4480. Check(TSDOEqualityHelper.equal(locA, locLoadedA),'Object');
  4481. end;
  4482. procedure TSDOSerializer_Test.save_to_file_changesummary_object_2_objects_same_type_del_upd();
  4483. var
  4484. locFac : ISDODataFactory;
  4485. locA, locB : ISDODataObject;
  4486. locCS : ISDOChangeSummary;
  4487. f : ISDOSerializerStream;
  4488. s : ISDOSerializer;
  4489. localFileName : string;
  4490. existDoc, serialDoc : TSDOXMLDocument;
  4491. begin
  4492. localFileName := sdoExpandLocalFileName('changesummary_object_2_objects_same_type_del_upd.xml');
  4493. locFac := TSDODataFactory.Create() as ISDODataFactory;
  4494. locFac.AddType(s_uri,'a',[]);
  4495. locFac.AddType(s_uri,'b',[]);
  4496. locFac.addProperty(s_uri,'a','p_a_str',sdo_namespace,SDOTypeDefaultTypeNames[StringType], [pfIsAttribute]);
  4497. locFac.addProperty(s_uri,'a','p_ab1',s_uri,'b',[pfIsContainment]);
  4498. locFac.addProperty(s_uri,'a','p_ab2',s_uri,'b',[pfIsContainment]);
  4499. locFac.addProperty(s_uri,'a','p_ab3',s_uri,'b',[pfIsContainment]);
  4500. locFac.addProperty(s_uri,'a',s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  4501. locFac.addProperty(s_uri,'b','p_b_str',sdo_namespace,SDOTypeDefaultTypeNames[StringType], [pfIsAttribute]);
  4502. locA := locFac.createNew(s_uri,'a');
  4503. locA.setString('p_a_str','sample A'' property.');
  4504. locB := locA.createDataObject('p_ab1');
  4505. locB.setString('p_b_str','p_ab1\p_b_str value');
  4506. locB := locA.createDataObject('p_ab2');
  4507. locB.setString('p_b_str','p_ab2\p_b_str value before');
  4508. locB := locA.createDataObject('p_ab3');
  4509. locB.setString('p_b_str','p_ab3\p_b_str value');
  4510. locCS := locA.getChangeSummary();
  4511. locCS.beginLogging();
  4512. locA.setDataObject('p_ab1',nil);
  4513. locA.setString('p_ab2/p_b_str','p_ab3\p_b_str value after');
  4514. locA.setDataObject('p_ab3',nil);
  4515. f := TSDOSerializerStreamXML.Create();
  4516. s := TSDOSerializer.Create(locFac,f);
  4517. s.save('a',locA,localFileName);
  4518. existDoc := nil;
  4519. serialDoc := nil;
  4520. ReadXMLFile(existDoc,sdoExpandLocalFileName(TestFilesPath + 'changesummary_object_2_objects_same_type_del_upd.xml'));
  4521. try
  4522. ReadXMLFile(serialDoc,localFileName);
  4523. CheckEquals(True, CompareNodes(existDoc,serialDoc));
  4524. finally
  4525. ReleaseDomNode(existDoc);
  4526. ReleaseDomNode(serialDoc);
  4527. end;
  4528. end;
  4529. procedure TSDOSerializer_Test.load_from_file_changesummary_object_2_objects_same_type_del_upd();
  4530. var
  4531. locFac, tmpFactory : ISDODataFactory;
  4532. locA, locB, locLoadedA : ISDODataObject;
  4533. locCS : ISDOChangeSummary;
  4534. f : ISDOSerializerStream;
  4535. s : ISDOSerializer;
  4536. localFileName : string;
  4537. begin
  4538. localFileName := sdoExpandLocalFileName(TestFilesPath + 'changesummary_object_2_objects_same_type_del_upd.xml');
  4539. locFac := TSDODataFactory.Create() as ISDODataFactory;
  4540. locFac.AddType(s_uri,'a',[]);
  4541. locFac.AddType(s_uri,'b',[]);
  4542. locFac.addProperty(s_uri,'a','p_a_str',sdo_namespace,SDOTypeDefaultTypeNames[StringType], []);
  4543. locFac.addProperty(s_uri,'a','p_ab1',s_uri,'b',[pfIsContainment]);
  4544. locFac.addProperty(s_uri,'a','p_ab2',s_uri,'b',[pfIsContainment]);
  4545. locFac.addProperty(s_uri,'a','p_ab3',s_uri,'b',[pfIsContainment]);
  4546. locFac.addProperty(s_uri,'a',s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  4547. locFac.addProperty(s_uri,'b','p_b_str',sdo_namespace,SDOTypeDefaultTypeNames[StringType], []);
  4548. locA := locFac.createNew(s_uri,'a');
  4549. locA.setString('p_a_str','sample A'' property.');
  4550. locB := locA.createDataObject('p_ab1');
  4551. locB.setString('p_b_str','p_ab1\p_b_str value');
  4552. locB := locA.createDataObject('p_ab2');
  4553. locB.setString('p_b_str','p_ab2\p_b_str value before');
  4554. locB := locA.createDataObject('p_ab3');
  4555. locB.setString('p_b_str','p_ab3\p_b_str value');
  4556. locCS := locA.getChangeSummary();
  4557. locCS.beginLogging();
  4558. locA.setDataObject('p_ab1',nil);
  4559. locA.setString('p_ab2/p_b_str','p_ab3\p_b_str value after');
  4560. locA.setDataObject('p_ab3',nil);
  4561. f := TSDOSerializerStreamXML.Create();
  4562. tmpFactory := TSDOBaseDataFactory.Create();
  4563. s := TSDOSerializer.Create(tmpFactory,f);
  4564. locLoadedA := s.load(localFileName);
  4565. Check(TSDOEqualityHelper.equal(locA,locLoadedA),'Object');
  4566. Compare(
  4567. locA.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  4568. locLoadedA.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  4569. );
  4570. locA.getChangeSummary().undoChanges();
  4571. locLoadedA.getChangeSummary().undoChanges();
  4572. CheckEquals( 0, locA.getChangeSummary().getChangedDataObjects().size());
  4573. CheckEquals( 0, locLoadedA.getChangeSummary().getChangedDataObjects().size());
  4574. Check(TSDOEqualityHelper.equal(locA, locLoadedA),'Object');
  4575. end;
  4576. procedure TSDOSerializer_Test.save_to_file_changesummary_prop_list_object();
  4577. function create_employee(
  4578. const AFac : ISDODataFactory;
  4579. const AName, ASN : TSDOString;
  4580. const AManager : Boolean
  4581. ) : ISDODataObject;
  4582. begin
  4583. Result := AFac.createNew(s_uri, s_EmployeeType);
  4584. Result.setString(s_name, AName);
  4585. Result.setString(s_sn, ASN);
  4586. Result.setBoolean(s_manager, AManager);
  4587. end;
  4588. var
  4589. locFac : ISDODataFactory;
  4590. locDep, e1, e2 : ISDODataObject;
  4591. ls : ISDODataObjectList;
  4592. locCS : ISDOChangeSummary;
  4593. f : ISDOSerializerStream;
  4594. s : ISDOSerializer;
  4595. localFileName : string;
  4596. existDoc, serialDoc : TSDOXMLDocument;
  4597. begin
  4598. localFileName := sdoExpandLocalFileName('changesummary_prop_list_object.xml');
  4599. locFac := TSDODataFactory.Create() as ISDODataFactory;
  4600. locFac.AddType(s_uri,s_EmployeeType,[]);
  4601. locFac.addProperty(s_uri, s_EmployeeType,'name',sdo_namespace,'string',[]);
  4602. locFac.addProperty(s_uri, s_EmployeeType,'SN',sdo_namespace,'string',[]);
  4603. locFac.addProperty(s_uri, s_EmployeeType,'manager',sdo_namespace,'boolean',[]);
  4604. locFac.AddType(s_uri,s_DepartmentType,[]);
  4605. locFac.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  4606. locFac.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  4607. locFac.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[]);
  4608. locFac.addProperty(s_uri,s_DepartmentType,s_list_object,s_uri,s_EmployeeType,[pfIsMany,pfIsContainment]);
  4609. locFac.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  4610. locDep := locFac.createNew(s_uri,s_DepartmentType);
  4611. locDep.setString(s_name,'R & D');
  4612. locDep.setString(s_location,'Ouaga, BF');
  4613. locDep.setInteger(s_number,1210);
  4614. ls := locDep.getList(s_list_object);
  4615. ls.append(create_employee(locFac,'Inoussa O.', '0001', True));
  4616. ls.append(create_employee(locFac,'Kis O.', '0002', False));
  4617. ls.append(create_employee(locFac,'WST', '0003', False));
  4618. locCS := locDep.getChangeSummary();
  4619. locCS.beginLogging();
  4620. locDep.setString(s_name,'R & D Department');
  4621. locDep.setString(s_location,'Ouaga 01, BF');
  4622. e1 := create_employee(locFac,'FPC', '0010', False);
  4623. e2 := create_employee(locFac,'Lazarus', '0011', False);
  4624. ls.setDataObject(0,e1);
  4625. ls.append(create_employee(locFac,'FPC 2 ', '0020', True));
  4626. ls.insert(3,create_employee(locFac,'FPC 5', '0050', False));
  4627. ls.append(create_employee(locFac,'FPC 3', '0030', False));
  4628. ls.setDataObject(1,e2);
  4629. ls.delete(0);
  4630. ls.delete(1);
  4631. ls.append(create_employee(locFac,'FPC 4', '0040', True));
  4632. f := TSDOSerializerStreamXML.Create();
  4633. s := TSDOSerializer.Create(locFac,f);
  4634. s.save(s_DepartmentType,locDep,localFileName);
  4635. existDoc := nil;
  4636. serialDoc := nil;
  4637. ReadXMLFile(existDoc,sdoExpandLocalFileName(TestFilesPath + 'changesummary_prop_list_object.xml'));
  4638. try
  4639. ReadXMLFile(serialDoc,localFileName);
  4640. CheckEquals(True, CompareNodes(existDoc,serialDoc));
  4641. finally
  4642. ReleaseDomNode(existDoc);
  4643. ReleaseDomNode(serialDoc);
  4644. end;
  4645. end;
  4646. procedure TSDOSerializer_Test.load_from_file_changesummary_prop_list_object();
  4647. function create_employee(
  4648. const AFac : ISDODataFactory;
  4649. const AName, ASN : TSDOString;
  4650. const AManager : Boolean
  4651. ) : ISDODataObject;
  4652. begin
  4653. Result := AFac.createNew(s_uri, s_EmployeeType);
  4654. Result.setString(s_name, AName);
  4655. Result.setString(s_sn, ASN);
  4656. Result.setBoolean(s_manager, AManager);
  4657. end;
  4658. var
  4659. locFac, tmpFactory : ISDODataFactory;
  4660. locDep, locLoadedDep, e1, e2 : ISDODataObject;
  4661. ls : ISDODataObjectList;
  4662. locCS : ISDOChangeSummary;
  4663. f : ISDOSerializerStream;
  4664. s : ISDOSerializer;
  4665. localFileName : string;
  4666. begin
  4667. locFac := TSDODataFactory.Create() as ISDODataFactory;
  4668. locFac.AddType(s_uri,s_EmployeeType,[]);
  4669. locFac.addProperty(s_uri, s_EmployeeType,'name',sdo_namespace,'string',[]);
  4670. locFac.addProperty(s_uri, s_EmployeeType,'SN',sdo_namespace,'string',[]);
  4671. locFac.addProperty(s_uri, s_EmployeeType,'manager',sdo_namespace,'boolean',[]);
  4672. locFac.AddType(s_uri,s_DepartmentType,[]);
  4673. locFac.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  4674. locFac.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  4675. locFac.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[]);
  4676. locFac.addProperty(s_uri,s_DepartmentType,s_list_object,s_uri,s_EmployeeType,[pfIsMany,pfIsContainment]);
  4677. locFac.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  4678. locDep := locFac.createNew(s_uri,s_DepartmentType);
  4679. locDep.setString(s_name,'R & D');
  4680. locDep.setString(s_location,'Ouaga, BF');
  4681. locDep.setInteger(s_number,1210);
  4682. ls := locDep.getList(s_list_object);
  4683. ls.append(create_employee(locFac,'Inoussa O.', '0001', True));
  4684. ls.append(create_employee(locFac,'Kis O.', '0002', False));
  4685. ls.append(create_employee(locFac,'WST', '0003', False));
  4686. locCS := locDep.getChangeSummary();
  4687. locCS.beginLogging();
  4688. locDep.setString(s_name,'R & D Department');
  4689. locDep.setString(s_location,'Ouaga 01, BF');
  4690. e1 := create_employee(locFac,'FPC', '0010', False);
  4691. e2 := create_employee(locFac,'Lazarus', '0011', False);
  4692. ls.setDataObject(0,e1);
  4693. ls.append(create_employee(locFac,'FPC 2 ', '0020', True));
  4694. ls.insert(3,create_employee(locFac,'FPC 5', '0050', False));
  4695. ls.append(create_employee(locFac,'FPC 3', '0030', False));
  4696. ls.setDataObject(1,e2);
  4697. ls.delete(0);
  4698. ls.delete(1);
  4699. ls.append(create_employee(locFac,'FPC 4', '0040', True));
  4700. localFileName := sdoExpandLocalFileName(TestFilesPath + 'changesummary_prop_list_object.xml');
  4701. f := TSDOSerializerStreamXML.Create();
  4702. tmpFactory := TSDOBaseDataFactory.Create();
  4703. s := TSDOSerializer.Create(tmpFactory,f);
  4704. locLoadedDep := s.load(localFileName);
  4705. locDep.getChangeSummary().getOldValues(locDep);
  4706. locLoadedDep.getChangeSummary().getOldValues(locLoadedDep);
  4707. Check(TSDOEqualityHelper.equal(locDep,locLoadedDep),'Object');
  4708. {Compare(
  4709. locDep.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  4710. locLoadedDep.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  4711. );}
  4712. locDep.getChangeSummary().undoChanges();
  4713. locLoadedDep.getChangeSummary().undoChanges();
  4714. CheckEquals( 0, locDep.getChangeSummary().getChangedDataObjects().size());
  4715. CheckEquals( 0, locLoadedDep.getChangeSummary().getChangedDataObjects().size());
  4716. Check(TSDOEqualityHelper.equal(locDep, locLoadedDep),'Object');
  4717. end;
  4718. procedure TSDOSerializer_Test.save_to_file_changesummary_prop_list_bool();
  4719. var
  4720. locFac : ISDODataFactory;
  4721. locDep : ISDODataObject;
  4722. ls : ISDODataObjectList;
  4723. locCS : ISDOChangeSummary;
  4724. f : ISDOSerializerStream;
  4725. s : ISDOSerializer;
  4726. localFileName : string;
  4727. existDoc, serialDoc : TSDOXMLDocument;
  4728. begin
  4729. localFileName := sdoExpandLocalFileName('changesummary_prop_list_bool.xml');
  4730. locFac := TSDODataFactory.Create() as ISDODataFactory;
  4731. locFac.AddType(s_uri,s_DepartmentType,[]);
  4732. locFac.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  4733. locFac.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  4734. locFac.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[]);
  4735. locFac.addProperty(s_uri,s_DepartmentType,s_list_bool,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType],[pfIsMany]);
  4736. locFac.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  4737. locDep := locFac.createNew(s_uri,s_DepartmentType);
  4738. locDep.setString(s_name,'R & D');
  4739. locDep.setString(s_location,'Ouaga, BF');
  4740. locDep.setInteger(s_number,1210);
  4741. ls := locDep.getList(s_list_bool);
  4742. ls.append(False);
  4743. ls.append(True);
  4744. ls.append(False);
  4745. locCS := locDep.getChangeSummary();
  4746. locCS.beginLogging();
  4747. locDep.setString(s_name,'R & D Department');
  4748. locDep.setString(s_location,'Ouaga 01, BF');
  4749. ls.setBoolean(0,True);
  4750. ls.append(True);
  4751. ls.append(True);
  4752. ls.setBoolean(1,False);
  4753. ls.delete(0);
  4754. ls.delete(1);
  4755. ls.insert(2, False);
  4756. ls.append(False);
  4757. f := TSDOSerializerStreamXML.Create();
  4758. s := TSDOSerializer.Create(locFac,f);
  4759. s.save(s_DepartmentType,locDep,localFileName);
  4760. existDoc := nil;
  4761. serialDoc := nil;
  4762. ReadXMLFile(existDoc,sdoExpandLocalFileName(TestFilesPath + 'changesummary_prop_list_bool.xml'));
  4763. try
  4764. ReadXMLFile(serialDoc,localFileName);
  4765. CheckEquals(True, CompareNodes(existDoc,serialDoc));
  4766. finally
  4767. ReleaseDomNode(existDoc);
  4768. ReleaseDomNode(serialDoc);
  4769. end;
  4770. end;
  4771. procedure TSDOSerializer_Test.load_from_file_changesummary_prop_list_bool();
  4772. var
  4773. locFac, tmpFactory : ISDODataFactory;
  4774. locDep, locLoadedDep : ISDODataObject;
  4775. ls : ISDODataObjectList;
  4776. locCS : ISDOChangeSummary;
  4777. f : ISDOSerializerStream;
  4778. s : ISDOSerializer;
  4779. localFileName : string;
  4780. begin
  4781. locFac := TSDODataFactory.Create() as ISDODataFactory;
  4782. locFac.AddType(s_uri,s_DepartmentType,[]);
  4783. locFac.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  4784. locFac.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  4785. locFac.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[]);
  4786. locFac.addProperty(s_uri,s_DepartmentType,s_list_bool,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType],[pfIsMany]);
  4787. locFac.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  4788. locDep := locFac.createNew(s_uri,s_DepartmentType);
  4789. locDep.setString(s_name,'R & D');
  4790. locDep.setString(s_location,'Ouaga, BF');
  4791. locDep.setInteger(s_number,1210);
  4792. ls := locDep.getList(s_list_bool);
  4793. ls.append(False);
  4794. ls.append(True);
  4795. ls.append(False);
  4796. locCS := locDep.getChangeSummary();
  4797. locCS.beginLogging();
  4798. locDep.setString(s_name,'R & D Department');
  4799. locDep.setString(s_location,'Ouaga 01, BF');
  4800. ls.setBoolean(0,True);
  4801. ls.append(True);
  4802. ls.append(True);
  4803. ls.setBoolean(1,False);
  4804. ls.delete(0);
  4805. ls.delete(1);
  4806. ls.insert(2, False);
  4807. ls.append(False);
  4808. localFileName := sdoExpandLocalFileName(TestFilesPath + 'changesummary_prop_list_bool.xml');
  4809. f := TSDOSerializerStreamXML.Create();
  4810. tmpFactory := TSDOBaseDataFactory.Create();
  4811. s := TSDOSerializer.Create(tmpFactory,f);
  4812. locLoadedDep := s.load(localFileName);
  4813. Check(TSDOEqualityHelper.equal(locDep, locLoadedDep),'Object');
  4814. Compare(
  4815. locDep.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  4816. locLoadedDep.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  4817. );
  4818. end;
  4819. procedure TSDOSerializer_Test.save_to_file_changesummary_prop_list_string();
  4820. var
  4821. locFac : ISDODataFactory;
  4822. locDep : ISDODataObject;
  4823. ls : ISDODataObjectList;
  4824. locCS : ISDOChangeSummary;
  4825. f : ISDOSerializerStream;
  4826. s : ISDOSerializer;
  4827. localFileName : string;
  4828. existDoc, serialDoc : TSDOXMLDocument;
  4829. begin
  4830. localFileName := sdoExpandLocalFileName('changesummary_prop_list_string.xml');
  4831. locFac := TSDODataFactory.Create() as ISDODataFactory;
  4832. locFac.AddType(s_uri,s_DepartmentType,[]);
  4833. locFac.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  4834. locFac.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  4835. locFac.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[]);
  4836. locFac.addProperty(s_uri,s_DepartmentType,s_list_string,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsMany]);
  4837. locFac.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  4838. locDep := locFac.createNew(s_uri,s_DepartmentType);
  4839. locDep.setString(s_name,'R & D');
  4840. locDep.setString(s_location,'Ouaga, BF');
  4841. locDep.setInteger(s_number,1210);
  4842. ls := locDep.getList(s_list_string);
  4843. ls.append('wst');
  4844. ls.append('sdo');
  4845. ls.append('fpc-lazarus');
  4846. locCS := locDep.getChangeSummary();
  4847. locCS.beginLogging();
  4848. locDep.setString(s_name,'R & D Department');
  4849. locDep.setString(s_location,'Ouaga 01, BF');
  4850. ls.setString(0,'azerty');
  4851. ls.append('Ouagadougou');
  4852. ls.append('BF');
  4853. ls.setString(1,'kis');
  4854. ls.delete(0);
  4855. ls.delete(1);
  4856. ls.insert(2, '107612');
  4857. ls.append('this is a multi words text. Lets test it!');
  4858. f := TSDOSerializerStreamXML.Create();
  4859. s := TSDOSerializer.Create(locFac,f);
  4860. s.save(s_DepartmentType,locDep,localFileName);
  4861. existDoc := nil;
  4862. serialDoc := nil;
  4863. ReadXMLFile(existDoc,sdoExpandLocalFileName(TestFilesPath + 'changesummary_prop_list_string.xml'));
  4864. try
  4865. ReadXMLFile(serialDoc,localFileName);
  4866. CheckEquals(True, CompareNodes(existDoc,serialDoc));
  4867. finally
  4868. ReleaseDomNode(existDoc);
  4869. ReleaseDomNode(serialDoc);
  4870. end;
  4871. end;
  4872. procedure TSDOSerializer_Test.load_from_file_changesummary_prop_list_string();
  4873. var
  4874. locFac, tmpFactory : ISDODataFactory;
  4875. locDep, locLoadedDep : ISDODataObject;
  4876. ls : ISDODataObjectList;
  4877. locCS : ISDOChangeSummary;
  4878. f : ISDOSerializerStream;
  4879. s : ISDOSerializer;
  4880. localFileName : string;
  4881. begin
  4882. locFac := TSDODataFactory.Create() as ISDODataFactory;
  4883. locFac.AddType(s_uri,s_DepartmentType,[]);
  4884. locFac.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  4885. locFac.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  4886. locFac.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[]);
  4887. locFac.addProperty(s_uri,s_DepartmentType,s_list_string,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsMany]);
  4888. locFac.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  4889. locDep := locFac.createNew(s_uri,s_DepartmentType);
  4890. locDep.setString(s_name,'R & D');
  4891. locDep.setString(s_location,'Ouaga, BF');
  4892. locDep.setInteger(s_number,1210);
  4893. ls := locDep.getList(s_list_string);
  4894. ls.append('wst');
  4895. ls.append('sdo');
  4896. ls.append('fpc-lazarus');
  4897. locCS := locDep.getChangeSummary();
  4898. locCS.beginLogging();
  4899. locDep.setString(s_name,'R & D Department');
  4900. locDep.setString(s_location,'Ouaga 01, BF');
  4901. ls.setString(0,'azerty');
  4902. ls.append('Ouagadougou');
  4903. ls.append('BF');
  4904. ls.setString(1,'kis');
  4905. ls.delete(0);
  4906. ls.delete(1);
  4907. ls.insert(2, '107612');
  4908. ls.append('this is a multi words text. Lets test it!');
  4909. localFileName := sdoExpandLocalFileName(TestFilesPath + 'changesummary_prop_list_string.xml');
  4910. f := TSDOSerializerStreamXML.Create();
  4911. tmpFactory := TSDOBaseDataFactory.Create();
  4912. s := TSDOSerializer.Create(tmpFactory,f);
  4913. locLoadedDep := s.load(localFileName);
  4914. Check(TSDOEqualityHelper.equal(locDep, locLoadedDep),'Object');
  4915. Compare(
  4916. locDep.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  4917. locLoadedDep.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  4918. );
  4919. end;
  4920. procedure TSDOSerializer_Test.save_to_file_changesummary_prop_list_object_nested();
  4921. function create_employee(
  4922. const AFac : ISDODataFactory;
  4923. const AName, ASN : TSDOString;
  4924. const AManager : Boolean;
  4925. const AJobCount : Integer
  4926. ) : ISDODataObject;
  4927. var
  4928. jb : ISDODataObject;
  4929. k : Integer;
  4930. begin
  4931. Result := AFac.createNew(s_uri, s_EmployeeType);
  4932. Result.setString(s_name, AName);
  4933. Result.setString(s_sn, ASN);
  4934. Result.setBoolean(s_manager, AManager);
  4935. for k := 0 to Pred(AJobCount) do begin
  4936. jb := Result.createDataObject('jobs');
  4937. jb.setString('title', Format('%s''s job #%d',[AName,k]));
  4938. jb.setByte('MaxEmployeeCount',( k * AJobCount ) mod High(TSDOByte));
  4939. Result.getList('jobs').append(jb);
  4940. end;
  4941. end;
  4942. var
  4943. locFac : ISDODataFactory;
  4944. locDep, e1, e2 : ISDODataObject;
  4945. ls : ISDODataObjectList;
  4946. locCS : ISDOChangeSummary;
  4947. f : ISDOSerializerStream;
  4948. s : ISDOSerializer;
  4949. localFileName : string;
  4950. existDoc, serialDoc : TSDOXMLDocument;
  4951. begin
  4952. localFileName := sdoExpandLocalFileName('changesummary_prop_list_object_nested.xml');
  4953. locFac := TSDODataFactory.Create() as ISDODataFactory;
  4954. locFac.AddType(s_uri,'job',[]);
  4955. locFac.addProperty(s_uri, 'job','title',sdo_namespace,'string',[]);
  4956. locFac.addProperty(s_uri, 'job','MaxEmployeeCount',sdo_namespace,'byte',[]);
  4957. locFac.AddType(s_uri,s_EmployeeType,[]);
  4958. locFac.addProperty(s_uri, s_EmployeeType,'name',sdo_namespace,'string',[]);
  4959. locFac.addProperty(s_uri, s_EmployeeType,'SN',sdo_namespace,'string',[]);
  4960. locFac.addProperty(s_uri, s_EmployeeType,'manager',sdo_namespace,'boolean',[]);
  4961. locFac.addProperty(s_uri, s_EmployeeType,'jobs',s_uri,'job',[pfIsMany,pfIsContainment]);
  4962. locFac.AddType(s_uri,s_DepartmentType,[]);
  4963. locFac.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  4964. locFac.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  4965. locFac.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[]);
  4966. locFac.addProperty(s_uri,s_DepartmentType,s_list_object,s_uri,s_EmployeeType,[pfIsMany,pfIsContainment]);
  4967. locFac.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  4968. locDep := locFac.createNew(s_uri,s_DepartmentType);
  4969. locDep.setString(s_name,'R & D');
  4970. locDep.setString(s_location,'Ouaga, BF');
  4971. locDep.setInteger(s_number,1210);
  4972. ls := locDep.getList(s_list_object);
  4973. ls.append(create_employee(locFac,'Inoussa O.', '0001', True,3));
  4974. ls.append(create_employee(locFac,'Kis O.', '0002', False,2));
  4975. ls.append(create_employee(locFac,'WST', '0003', False,4));
  4976. locCS := locDep.getChangeSummary();
  4977. locCS.beginLogging();
  4978. locDep.setString(s_name,'R & D Department');
  4979. locDep.setString(s_location,'Ouaga 01, BF');
  4980. e1 := create_employee(locFac,'FPC', '0010', False,1);
  4981. e2 := create_employee(locFac,'Lazarus', '0011', False,3);
  4982. ls.setDataObject(0,e1);
  4983. ls.append(create_employee(locFac,'FPC 2 ', '0020', True,0));
  4984. ls.insert(3,create_employee(locFac,'FPC 5', '0050', False,1));
  4985. ls.append(create_employee(locFac,'FPC 3', '0030', False,0));
  4986. ls.setDataObject(1,e2);
  4987. ls.delete(0);
  4988. ls.delete(1);
  4989. ls.append(create_employee(locFac,'FPC 4', '0040', True,1));
  4990. f := TSDOSerializerStreamXML.Create();
  4991. s := TSDOSerializer.Create(locFac,f);
  4992. s.save(s_DepartmentType,locDep,localFileName);
  4993. existDoc := nil;
  4994. serialDoc := nil;
  4995. ReadXMLFile(existDoc,sdoExpandLocalFileName(TestFilesPath + 'changesummary_prop_list_object_nested.xml'));
  4996. try
  4997. ReadXMLFile(serialDoc,localFileName);
  4998. CheckEquals(True, CompareNodes(existDoc,serialDoc));
  4999. finally
  5000. ReleaseDomNode(existDoc);
  5001. ReleaseDomNode(serialDoc);
  5002. end;
  5003. end;
  5004. procedure TSDOSerializer_Test.load_from_file_changesummary_prop_list_object_nested();
  5005. function create_employee(
  5006. const AFac : ISDODataFactory;
  5007. const AName, ASN : TSDOString;
  5008. const AManager : Boolean;
  5009. const AJobCount : Integer
  5010. ) : ISDODataObject;
  5011. var
  5012. jb : ISDODataObject;
  5013. k : Integer;
  5014. begin
  5015. Result := AFac.createNew(s_uri, s_EmployeeType);
  5016. Result.setString(s_name, AName);
  5017. Result.setString(s_sn, ASN);
  5018. Result.setBoolean(s_manager, AManager);
  5019. for k := 0 to Pred(AJobCount) do begin
  5020. jb := Result.createDataObject('jobs');
  5021. jb.setString('title', Format('%s''s job #%d',[AName,k]));
  5022. jb.setByte('MaxEmployeeCount',( k * AJobCount ) mod High(TSDOByte));
  5023. Result.getList('jobs').append(jb);
  5024. end;
  5025. end;
  5026. var
  5027. locFac, tmpFactory : ISDODataFactory;
  5028. locDep, e1, e2, locLoadedDep : ISDODataObject;
  5029. ls : ISDODataObjectList;
  5030. locCS : ISDOChangeSummary;
  5031. f : ISDOSerializerStream;
  5032. s : ISDOSerializer;
  5033. localFileName : string;
  5034. begin
  5035. locFac := TSDODataFactory.Create() as ISDODataFactory;
  5036. locFac.AddType(s_uri,'job',[]);
  5037. locFac.addProperty(s_uri, 'job','title',sdo_namespace,'string',[]);
  5038. locFac.addProperty(s_uri, 'job','MaxEmployeeCount',sdo_namespace,'byte',[]);
  5039. locFac.AddType(s_uri,s_EmployeeType,[]);
  5040. locFac.addProperty(s_uri, s_EmployeeType,'name',sdo_namespace,'string',[]);
  5041. locFac.addProperty(s_uri, s_EmployeeType,'SN',sdo_namespace,'string',[]);
  5042. locFac.addProperty(s_uri, s_EmployeeType,'manager',sdo_namespace,'boolean',[]);
  5043. locFac.addProperty(s_uri, s_EmployeeType,'jobs',s_uri,'job',[pfIsMany,pfIsContainment]);
  5044. locFac.AddType(s_uri,s_DepartmentType,[]);
  5045. locFac.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  5046. locFac.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  5047. locFac.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[]);
  5048. locFac.addProperty(s_uri,s_DepartmentType,s_list_object,s_uri,s_EmployeeType,[pfIsMany,pfIsContainment]);
  5049. locFac.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  5050. locDep := locFac.createNew(s_uri,s_DepartmentType);
  5051. locDep.setString(s_name,'R & D');
  5052. locDep.setString(s_location,'Ouaga, BF');
  5053. locDep.setInteger(s_number,1210);
  5054. ls := locDep.getList(s_list_object);
  5055. ls.append(create_employee(locFac,'Inoussa O.', '0001', True,3));
  5056. ls.append(create_employee(locFac,'Kis O.', '0002', False,2));
  5057. ls.append(create_employee(locFac,'WST', '0003', False,4));
  5058. locCS := locDep.getChangeSummary();
  5059. locCS.beginLogging();
  5060. locDep.setString(s_name,'R & D Department');
  5061. locDep.setString(s_location,'Ouaga 01, BF');
  5062. e1 := create_employee(locFac,'FPC', '0010', False,1);
  5063. e2 := create_employee(locFac,'Lazarus', '0011', False,3);
  5064. ls.setDataObject(0,e1);
  5065. ls.append(create_employee(locFac,'FPC 2 ', '0020', True,0));
  5066. ls.insert(3,create_employee(locFac,'FPC 5', '0050', False,1));
  5067. ls.append(create_employee(locFac,'FPC 3', '0030', False,0));
  5068. ls.setDataObject(1,e2);
  5069. ls.delete(0);
  5070. ls.delete(1);
  5071. ls.append(create_employee(locFac,'FPC 4', '0040', True,1));
  5072. localFileName := sdoExpandLocalFileName(TestFilesPath + 'changesummary_prop_list_object_nested.xml');
  5073. f := TSDOSerializerStreamXML.Create();
  5074. tmpFactory := TSDOBaseDataFactory.Create();
  5075. s := TSDOSerializer.Create(tmpFactory,f);
  5076. locLoadedDep := s.load(localFileName);
  5077. locDep.getChangeSummary().getOldValues(locDep);
  5078. locLoadedDep.getChangeSummary().getOldValues(locLoadedDep);
  5079. Check(TSDOEqualityHelper.equal(locDep,locLoadedDep),'Object');
  5080. {Compare(
  5081. locDep.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  5082. locLoadedDep.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  5083. );}
  5084. locDep.getChangeSummary().undoChanges();
  5085. locLoadedDep.getChangeSummary().undoChanges();
  5086. CheckEquals( 0, locDep.getChangeSummary().getChangedDataObjects().size());
  5087. CheckEquals( 0, locLoadedDep.getChangeSummary().getChangedDataObjects().size());
  5088. Check(TSDOEqualityHelper.equal(locDep, locLoadedDep),'Object');
  5089. end;
  5090. procedure TSDOSerializer_Test.save_to_and_load_file_ref_prop_crash_1();
  5091. var
  5092. locFac : ISDODataFactory;
  5093. locPL, locPL1, locPJ0, locPJ1, locP1, locP2, locP3 : ISDODataObject;
  5094. locCS : ISDOChangeSummary;
  5095. serializer : ISDOSerializer;
  5096. begin
  5097. locFac := TSDODataFactory.Create() as ISDODataFactory;
  5098. locFac.AddType(s_uri,'ProjectList',[]);
  5099. locFac.AddType(s_uri,'ProjectType',[]);
  5100. locFac.AddType(s_uri,'Person',[]);
  5101. locFac.addProperty(s_uri,'ProjectList','Project',s_uri,'ProjectType',[pfIsContainment,pfIsMany]);
  5102. locFac.addProperty(s_uri,'ProjectList',s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly]);
  5103. locFac.addProperty(s_uri,'ProjectType','Member',s_uri,'Person',[pfIsContainment,pfIsMany]);
  5104. locFac.addProperty(s_uri,'Person','Manager',s_uri,'Person',[]);
  5105. locFac.addProperty(s_uri,'Person','Name',sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  5106. locPL := locFac.createNew(s_uri,'ProjectList');
  5107. locCS := locPL.getChangeSummary();
  5108. locCS.endLogging();
  5109. locPJ0 := locPL.createDataObject('Project');
  5110. locPL.getList('Project').append(locPJ0);
  5111. locPJ1 := locPL.createDataObject('Project');
  5112. locPL.getList('Project').append(locPJ1);
  5113. locP1 := locPJ1.createDataObject('Member');
  5114. locPJ1.getList('Member').append(locP1);
  5115. locP1.setString('Name', 'P1 person');
  5116. locP2 := locPJ1.createDataObject('Member');
  5117. locPJ1.getList('Member').append(locP2);
  5118. locP2.setString('Name', 'P2 person');
  5119. locP2.setDataObject('Manager', locPJ1.getDataObject('Member[Name="P1 person"]'));
  5120. locP3 := locPJ1.createDataObject('Member');
  5121. locPJ1.getList('Member').append(locP3);
  5122. locP3.setString('Name', 'P3 person');
  5123. locP1.setDataObject('Manager', locPJ1.getDataObject('Member[Name="P3 person"]'));
  5124. locCS.beginLogging();
  5125. locPL.getList('Project').delete(1);
  5126. serializer := TSDOSerializer.Create(locFac,TSDOSerializerStreamXML.Create());
  5127. serializer.save('ProjectList',locPL,'save_to_and_load_file_ref_prop_crash_1.xml');
  5128. serializer := TSDOSerializer.Create(locFac,TSDOSerializerStreamXML.Create());
  5129. locPL1 := serializer.load('save_to_and_load_file_ref_prop_crash_1.xml');
  5130. end;
  5131. procedure TSDOSerializer_Test.save_to_and_load_file_ref_prop_crash_2();
  5132. var
  5133. locFac : ISDODataFactory;
  5134. locPL, locPL1, locPJ0, locPJ1, locP1, locP2, locP3 : ISDODataObject;
  5135. locCS : ISDOChangeSummary;
  5136. serializer : ISDOSerializer;
  5137. begin
  5138. locFac := TSDODataFactory.Create() as ISDODataFactory;
  5139. locFac.AddType(s_uri,'ProjectList',[]);
  5140. locFac.AddType(s_uri,'ProjectType',[]);
  5141. locFac.AddType(s_uri,'Person',[]);
  5142. locFac.addProperty(s_uri,'ProjectList','Project',s_uri,'ProjectType',[pfIsContainment,pfIsMany]);
  5143. locFac.addProperty(s_uri,'ProjectList',s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly]);
  5144. locFac.addProperty(s_uri,'ProjectType','Member',s_uri,'Person',[pfIsContainment,pfIsMany]);
  5145. locFac.addProperty(s_uri,'Person','Manager',s_uri,'Person',[]);
  5146. locFac.addProperty(s_uri,'Person','Name',sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  5147. locPL := locFac.createNew(s_uri,'ProjectList');
  5148. locCS := locPL.getChangeSummary();
  5149. locCS.endLogging();
  5150. locPJ0 := locPL.createDataObject('Project');
  5151. locPL.getList('Project').append(locPJ0);
  5152. locPJ1 := locPL.createDataObject('Project');
  5153. locPL.getList('Project').append(locPJ1);
  5154. locP1 := locPJ1.createDataObject('Member');
  5155. locPJ1.getList('Member').append(locP1);
  5156. locP1.setString('Name', 'P1 person');
  5157. locP2 := locPJ1.createDataObject('Member');
  5158. locPJ1.getList('Member').append(locP2);
  5159. locP2.setString('Name', 'P2 person');
  5160. locP2.setDataObject('Manager', locPJ1.getDataObject('Member[Name="P1 person"]'));
  5161. locCS.beginLogging();
  5162. locP3 := locPJ1.createDataObject('Member');
  5163. locPJ1.getList('Member').append(locP3);
  5164. locP3.setString('Name', 'P3 person');
  5165. locP1.setDataObject('Manager', locPJ1.getDataObject('Member[Name="P3 person"]'));
  5166. locPL.getList('Project').delete(1);
  5167. serializer := TSDOSerializer.Create(locFac,TSDOSerializerStreamXML.Create());
  5168. serializer.save('ProjectList',locPL,'save_to_and_load_file_ref_prop_crash_2.xml');
  5169. serializer := TSDOSerializer.Create(locFac,TSDOSerializerStreamXML.Create());
  5170. locPL1 := serializer.load('save_to_and_load_file_ref_prop_crash_2.xml');
  5171. end;
  5172. procedure TSDOSerializer_Test.load_from_file_reference_property();
  5173. var
  5174. locFac : ISDODataFactory;
  5175. locLoadedObj : ISDODataObject;
  5176. s : ISDOSerializer;
  5177. localFileName : string;
  5178. locType : ISDOType;
  5179. p : ISDOProperty;
  5180. projObj, user1, user2, man : ISDODataObject;
  5181. begin
  5182. locFac := TSDODataFactory.Create() as ISDODataFactory;
  5183. localFileName := sdoExpandLocalFileName(TestFilesPath + 'load_from_file_reference_property.xml');
  5184. s := TSDOSerializer.Create(locFac,TSDOSerializerStreamXML.Create());
  5185. locLoadedObj := s.load(localFileName);
  5186. locType := locFac.getType('uri:sample','ProjectType');
  5187. Check(( locType <> nil ),'ProjectType');
  5188. p := locType.getProperty('ProjectLeader');
  5189. Check(p <> nil,'ProjectLeader');
  5190. Check(p.isReference(),'"ProjectLeader" should be a "Reference" property');
  5191. Check(p.getType() = locFac.getType('uri:sample','Person'),'"ProjectLeader" should be a "Person" type property');
  5192. Check(locLoadedObj <> nil,'ProjectList');
  5193. projObj := locLoadedObj.getDataObject('Project[ProjectName="WST"]');
  5194. Check(projObj <> nil,'Project');
  5195. user1 := projObj.getDataObject('Member[Name="wst user 1"]');
  5196. Check(user1 <> nil,'Member[Name="wst user 1"]');
  5197. user2 := projObj.getDataObject('Member[Name="wst user 2"]');
  5198. Check(user1 <> nil,'Member[Name="wst user 2"]');
  5199. man := projObj.getDataObject('Member[Name="Inoussa O."]');
  5200. Check(user1 <> nil,'Member[Name="Inoussa O."]');
  5201. Check( man = projObj.getDataObject('ProjectLeader'), 'ProjectLeader');
  5202. Check( man = user2.getDataObject('Manager'), 'user Manager');
  5203. end;
  5204. procedure TSDOSerializer_Test.save_object_open_type();
  5205. var
  5206. fact : ISDODataFactory;
  5207. dst, row : ISDODataObject;
  5208. ser : ISDOSerializer;
  5209. stream : TMemoryStream;
  5210. existDoc, serialDoc : TSDOXMLDocument;
  5211. begin
  5212. fact := TSDODataFactory.Create() as ISDODataFactory;
  5213. fact.AddType(s_uri,'Datarow',[tfIsOpen]);
  5214. fact.AddType(s_uri,'Dataset',[tfIsOpen]);
  5215. fact.addProperty(s_uri,'Dataset','rows',s_uri,'Datarow',[pfIsMany,pfIsContainment]);
  5216. dst := fact.createNew(s_uri,'Dataset');
  5217. row := dst.createDataObject('rows');
  5218. row.setString('Name','SDO-Pascal');
  5219. row.setString('Description','Object Pascal implementation of SDO');
  5220. row.setInteger('Order',1);
  5221. dst.getList('rows').append(row);
  5222. row := dst.createDataObject('rows');
  5223. row.setString('Name','WST');
  5224. row.setString('Description','Object Pascal Web Services Toolkit');
  5225. row.setInteger('Order',2);
  5226. dst.getList('rows').append(row);
  5227. existDoc := nil;
  5228. serialDoc := nil;
  5229. ser := TSDOSerializer.Create(fact,TSDOSerializerStreamXML.Create());
  5230. stream := TMemoryStream.Create();
  5231. try
  5232. ser.save(dst,stream);
  5233. {$IFDEF TEST_GENERATE_FILE}
  5234. stream.SaveToFile(sdoExpandLocalFileName('open_type.xml'));
  5235. {$ENDIF TEST_GENERATE_FILE}
  5236. stream.Position := 0;
  5237. ReadXMLFile(serialDoc,stream);
  5238. ReadXMLFile(existDoc,sdoExpandLocalFileName(TestFilesPath + 'open_type.xml'));
  5239. CheckEquals(True, CompareNodes(existDoc,serialDoc),'generated document differs from the existent one.');
  5240. finally
  5241. stream.Free();
  5242. ReleaseDomNode(existDoc);
  5243. ReleaseDomNode(serialDoc);
  5244. end;
  5245. end;
  5246. procedure TSDOSerializer_Test.load_object_open_type();
  5247. var
  5248. fact, factGen : ISDODataFactory;
  5249. ser : ISDOSerializer;
  5250. loadedObj, dstGen, row : ISDODataObject;
  5251. begin
  5252. // Load the existing file
  5253. fact := TSDODataFactory.Create();
  5254. ser := TSDOSerializer.Create(fact,TSDOSerializerStreamXML.Create());
  5255. loadedObj := ser.load(sdoExpandLocalFileName(TestFilesPath + 'open_type.xml'));
  5256. Check(( loadedObj <> nil ), 'Root object is NULL.');
  5257. CheckEquals('Dataset',loadedObj.getType().getName());
  5258. CheckEquals(2,loadedObj.getList('rows').size());
  5259. // Generate the object copy
  5260. factGen := TSDODataFactory.Create() as ISDODataFactory;
  5261. factGen.AddType(s_uri,'Datarow',[tfIsOpen]);
  5262. factGen.AddType(s_uri,'Dataset',[tfIsOpen]);
  5263. factGen.addProperty(s_uri,'Dataset','rows',s_uri,'Datarow',[pfIsMany,pfIsContainment]);
  5264. dstGen := factGen.createNew(s_uri,'Dataset');
  5265. row := dstGen.createDataObject('rows');
  5266. row.setString('Name','SDO-Pascal');
  5267. row.setString('Description','Object Pascal implementation of SDO');
  5268. row.setInteger('Order',1);
  5269. dstGen.getList('rows').append(row);
  5270. row := dstGen.createDataObject('rows');
  5271. row.setString('Name','WST');
  5272. row.setString('Description','Object Pascal Web Services Toolkit');
  5273. row.setInteger('Order',2);
  5274. dstGen.getList('rows').append(row);
  5275. // ... compare them now
  5276. Check(TSDOEqualityHelper.equal(dstGen,loadedObj), 'Loaded object differs from generated object');
  5277. end;
  5278. procedure TSDOSerializer_Test.save_to_file_changesummary_prop_list_byte();
  5279. const
  5280. LIST_PROP_NAME = s_list_byte;
  5281. LIST_PROP_TYPE = ByteType;
  5282. FILE_NAME = 'changesummary_prop_list_byte.xml';
  5283. var
  5284. locFac : ISDODataFactory;
  5285. locDep : ISDODataObject;
  5286. ls : ISDODataObjectList;
  5287. locCS : ISDOChangeSummary;
  5288. f : ISDOSerializerStream;
  5289. s : ISDOSerializer;
  5290. localFileName : string;
  5291. existDoc, serialDoc : TSDOXMLDocument;
  5292. begin
  5293. localFileName := sdoExpandLocalFileName(FILE_NAME);
  5294. locFac := TSDODataFactory.Create() as ISDODataFactory;
  5295. locFac.AddType(s_uri,s_DepartmentType,[]);
  5296. locFac.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  5297. locFac.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  5298. locFac.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[ByteType],[]);
  5299. locFac.addProperty(s_uri,s_DepartmentType,LIST_PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[LIST_PROP_TYPE],[pfIsMany]);
  5300. locFac.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  5301. locDep := locFac.createNew(s_uri,s_DepartmentType);
  5302. locDep.setString(s_name,'R & D');
  5303. locDep.setString(s_location,'Ouaga, BF');
  5304. locDep.setByte(s_number,123);
  5305. ls := locDep.getList(LIST_PROP_NAME);
  5306. ls.append(TSDOByte(1));
  5307. ls.append(TSDOByte(2));
  5308. ls.append(TSDOByte(3));
  5309. locCS := locDep.getChangeSummary();
  5310. locCS.beginLogging();
  5311. locDep.setString(s_name,'R & D Department');
  5312. locDep.setString(s_location,'Ouaga 01, BF');
  5313. ls.setByte(0,10);
  5314. ls.append(TSDOByte(123));
  5315. ls.append(TSDOByte(45));
  5316. ls.setByte(1,20);
  5317. ls.delete(0);
  5318. ls.delete(1);
  5319. ls.insert(2, TSDOByte(107));
  5320. ls.append(TSDOByte(89));
  5321. f := TSDOSerializerStreamXML.Create();
  5322. s := TSDOSerializer.Create(locFac,f);
  5323. s.save(s_DepartmentType,locDep,localFileName);
  5324. existDoc := nil;
  5325. serialDoc := nil;
  5326. ReadXMLFile(existDoc,sdoExpandLocalFileName(TestFilesPath + FILE_NAME));
  5327. try
  5328. ReadXMLFile(serialDoc,localFileName);
  5329. CheckEquals(True, CompareNodes(existDoc,serialDoc));
  5330. finally
  5331. ReleaseDomNode(existDoc);
  5332. ReleaseDomNode(serialDoc);
  5333. end;
  5334. end;
  5335. procedure TSDOSerializer_Test.save_to_file_changesummary_prop_list_date();
  5336. const VAL_1 : TSDODate = ( Date : 0; HourOffset : 0; MinuteOffset : 0; );
  5337. VAL_2 : TSDODate = ( Date : 0; HourOffset : 0; MinuteOffset : 0; );
  5338. VAL_3 : TSDODate = ( Date : 0; HourOffset : 0; MinuteOffset : 0; );
  5339. VAL_4 : TSDODate = ( Date : 0; HourOffset : 0; MinuteOffset : 0; );
  5340. VAL_5 : TSDODate = ( Date : 0; HourOffset : 0; MinuteOffset : 0; );
  5341. procedure SetConstants();
  5342. var
  5343. d : TSDODate;
  5344. begin
  5345. FillChar(d,SizeOf(TSDODate),#0);
  5346. d.Date := EncodeDateTime(1976,10,12,23,34,45,56);
  5347. d.HourOffset := 5;
  5348. d.MinuteOffset := 6;
  5349. PSDODate(@VAL_1)^ := d;
  5350. FillChar(d,SizeOf(TSDODate),#0);
  5351. d.Date := EncodeDateTime(2008,7,8,9,10,11,12);
  5352. d.HourOffset := 0;
  5353. d.MinuteOffset := 13;
  5354. PSDODate(@VAL_3)^ := d;
  5355. FillChar(d,SizeOf(TSDODate),#0);
  5356. d.Date := EncodeDateTime(2009,9,1,2,3,0,1);
  5357. d.HourOffset := 0;
  5358. d.MinuteOffset := 13;
  5359. PSDODate(@VAL_4)^ := d;
  5360. FillChar(d,SizeOf(TSDODate),#0);
  5361. d.Date := EncodeDateTime(1900,11,8,1,2,0,0);
  5362. d.HourOffset := 0;
  5363. d.MinuteOffset := 13;
  5364. PSDODate(@VAL_5)^ := d;
  5365. end;
  5366. var
  5367. locFac : ISDODataFactory;
  5368. locDep : ISDODataObject;
  5369. ls : ISDODataObjectList;
  5370. locCS : ISDOChangeSummary;
  5371. f : ISDOSerializerStream;
  5372. s : ISDOSerializer;
  5373. localFileName : string;
  5374. existDoc, serialDoc : TSDOXMLDocument;
  5375. begin
  5376. SetConstants();
  5377. localFileName := sdoExpandLocalFileName('changesummary_prop_list_date.xml');
  5378. locFac := TSDODataFactory.Create() as ISDODataFactory;
  5379. locFac.AddType(s_uri,s_DepartmentType,[]);
  5380. locFac.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  5381. locFac.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  5382. locFac.addProperty(s_uri,s_DepartmentType,s_birthDate,sdo_namespace,SDOTypeDefaultTypeNames[DateTimeType],[]);
  5383. locFac.addProperty(s_uri,s_DepartmentType,s_list_date,sdo_namespace,SDOTypeDefaultTypeNames[DateTimeType],[pfIsMany]);
  5384. locFac.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  5385. locDep := locFac.createNew(s_uri,s_DepartmentType);
  5386. locDep.setString(s_name,'R & D');
  5387. locDep.setString(s_location,'Ouaga, BF');
  5388. locDep.setDate(s_birthDate,VAL_1);
  5389. ls := locDep.getList(s_list_date);
  5390. ls.append(VAL_1);
  5391. ls.append(VAL_2);
  5392. ls.append(VAL_3);
  5393. locCS := locDep.getChangeSummary();
  5394. locCS.beginLogging();
  5395. locDep.setString(s_name,'R & D Department');
  5396. locDep.setString(s_location,'Ouaga 01, BF');
  5397. ls.setDate(0,VAL_4);
  5398. ls.append(VAL_5);
  5399. ls.append(VAL_1);
  5400. ls.setDate(1,VAL_2);
  5401. ls.delete(0);
  5402. ls.delete(1);
  5403. ls.insert(2, VAL_3);
  5404. ls.append(VAL_4);
  5405. f := TSDOSerializerStreamXML.Create();
  5406. s := TSDOSerializer.Create(locFac,f);
  5407. s.save(s_DepartmentType,locDep,localFileName);
  5408. existDoc := nil;
  5409. serialDoc := nil;
  5410. ReadXMLFile(existDoc,sdoExpandLocalFileName(TestFilesPath + 'changesummary_prop_list_date.xml'));
  5411. try
  5412. ReadXMLFile(serialDoc,localFileName);
  5413. CheckEquals(True, CompareNodes(existDoc,serialDoc));
  5414. finally
  5415. ReleaseDomNode(existDoc);
  5416. ReleaseDomNode(serialDoc);
  5417. end;
  5418. end;
  5419. {$IFDEF HAS_SDO_BYTES}
  5420. procedure TSDOSerializer_Test.save_to_file_changesummary_prop_list_bytes();
  5421. const
  5422. FILE_NAME = 'changesummary_prop_list_bytes.xml';
  5423. LIST_PROP_NAME = s_list_bytes;
  5424. PROP_TYPE = BytesType;
  5425. var
  5426. VAL_1, VAL_2, VAL_3, VAL_4, VAL_5 : TSDOBytes;
  5427. procedure SetConstants();
  5428. var
  5429. v : TSDOBytes;
  5430. k : Integer;
  5431. begin
  5432. SetLength(v,10);
  5433. for k := 0 to High(v) do
  5434. v[k] := k mod High(Byte);
  5435. VAL_1 := v;
  5436. v := nil;
  5437. VAL_2 := nil;
  5438. SetLength(v,20);
  5439. for k := 0 to High(v) do
  5440. v[k] := ( ( 3 * k ) + 1 ) mod High(Byte);
  5441. VAL_3 := v;
  5442. v := nil;
  5443. SetLength(v,30);
  5444. for k := 0 to High(v) do
  5445. v[k] := ( ( 3 * k ) + 1 ) mod High(Byte);
  5446. VAL_4 := v;
  5447. v := nil;
  5448. SetLength(v,40);
  5449. for k := 0 to High(v) do
  5450. v[k] := ( ( 3 * k ) + 1 ) mod High(Byte);
  5451. VAL_5 := v;
  5452. v := nil;
  5453. end;
  5454. var
  5455. locFac : ISDODataFactory;
  5456. locDep : ISDODataObject;
  5457. ls : ISDODataObjectList;
  5458. locCS : ISDOChangeSummary;
  5459. f : ISDOSerializerStream;
  5460. s : ISDOSerializer;
  5461. localFileName : string;
  5462. existDoc, serialDoc : TSDOXMLDocument;
  5463. begin
  5464. SetConstants();
  5465. localFileName := sdoExpandLocalFileName(FILE_NAME);
  5466. locFac := TSDODataFactory.Create() as ISDODataFactory;
  5467. locFac.AddType(s_uri,s_DepartmentType,[]);
  5468. locFac.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  5469. locFac.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  5470. locFac.addProperty(s_uri,s_DepartmentType,s_birthDate,sdo_namespace,SDOTypeDefaultTypeNames[DateTimeType],[]);
  5471. locFac.addProperty(s_uri,s_DepartmentType,LIST_PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE],[pfIsMany]);
  5472. locFac.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  5473. locDep := locFac.createNew(s_uri,s_DepartmentType);
  5474. locDep.setString(s_name,'R & D');
  5475. locDep.setString(s_location,'Ouaga, BF');
  5476. //locDep.setBytes(s_birthDate,VAL_1);
  5477. ls := locDep.getList(LIST_PROP_NAME);
  5478. ls.appendBytes(VAL_1);
  5479. ls.appendBytes(VAL_2);
  5480. ls.appendBytes(VAL_3);
  5481. locCS := locDep.getChangeSummary();
  5482. locCS.beginLogging();
  5483. locDep.setString(s_name,'R & D Department');
  5484. locDep.setString(s_location,'Ouaga 01, BF');
  5485. ls.setBytes(0,VAL_4);
  5486. ls.appendBytes(VAL_5);
  5487. ls.appendBytes(VAL_1);
  5488. ls.setBytes(1,VAL_2);
  5489. ls.delete(0);
  5490. ls.delete(1);
  5491. ls.insertBytes(2, VAL_3);
  5492. ls.appendBytes(VAL_4);
  5493. {$IFDEF TEST_GENERATE_FILE}
  5494. (TSDOSerializer.Create(locFac,TSDOSerializerStreamXML.Create()) as ISDOSerializer).save(locDep,sdoExpandLocalFileName(FILE_NAME));
  5495. {$ENDIF TEST_GENERATE_FILE}
  5496. f := TSDOSerializerStreamXML.Create();
  5497. s := TSDOSerializer.Create(locFac,f);
  5498. s.save(s_DepartmentType,locDep,localFileName);
  5499. existDoc := nil;
  5500. serialDoc := nil;
  5501. ReadXMLFile(existDoc,sdoExpandLocalFileName(TestFilesPath + FILE_NAME));
  5502. try
  5503. ReadXMLFile(serialDoc,localFileName);
  5504. CheckEquals(True, CompareNodes(existDoc,serialDoc));
  5505. finally
  5506. ReleaseDomNode(existDoc);
  5507. ReleaseDomNode(serialDoc);
  5508. end;
  5509. end;
  5510. procedure TSDOSerializer_Test.load_from_file_changesummary_bytes();
  5511. const
  5512. PROP_NAME = 'sampleProperty';
  5513. PROP_TYPE = BytesType;
  5514. FILE_NAME = 'change_summary_bytes.xml';
  5515. var
  5516. VAL_1, VAL_2 : TSDOBytes;
  5517. procedure SetConstants();
  5518. var
  5519. v : TSDOBytes;
  5520. k : Integer;
  5521. begin
  5522. SetLength(v,10);
  5523. for k := 0 to High(v) do
  5524. v[k] := k mod High(Byte);
  5525. VAL_1 := v;
  5526. v := nil;
  5527. SetLength(v,20);
  5528. for k := 0 to High(v) do
  5529. v[k] := ( ( 3 * k ) + 1 ) mod High(Byte);
  5530. VAL_2 := v;
  5531. end;
  5532. var
  5533. locFac, tmpFactory : ISDODataFactory;
  5534. locEmployee : ISDODataObject;
  5535. locCS : ISDOChangeSummary;
  5536. f : ISDOSerializerStream;
  5537. s : ISDOSerializer;
  5538. localFileName : string;
  5539. ol : ISDODataObjectList;
  5540. begin
  5541. SetConstants();
  5542. localFileName := sdoExpandLocalFileName(TestFilesPath + FILE_NAME);
  5543. locFac := TSDODataFactory.Create() as ISDODataFactory;
  5544. locFac.AddType(s_uri,s_Employee,[]);
  5545. locFac.addProperty(s_uri,s_Employee,PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE],[]);
  5546. locFac.addProperty(s_uri,s_Employee,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  5547. locEmployee := locFac.createNew(s_uri,s_Employee);
  5548. locEmployee.setBytes(PROP_NAME,VAL_1);
  5549. locCS := locEmployee.getChangeSummary();
  5550. locCS.beginLogging();
  5551. locEmployee.setBytes(PROP_NAME,VAL_2);
  5552. {$IFDEF TEST_GENERATE_FILE}
  5553. (TSDOSerializer.Create(locFac,TSDOSerializerStreamXML.Create()) as ISDOSerializer).save(locEmployee,sdoExpandLocalFileName(FILE_NAME));
  5554. {$ENDIF TEST_GENERATE_FILE}
  5555. f := TSDOSerializerStreamXML.Create();
  5556. tmpFactory := TSDODataFactory.Create();
  5557. s := TSDOSerializer.Create(tmpFactory,f);
  5558. ol := TSDODataObjectList.Create(tmpFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[ObjectType]));
  5559. s.load(localFileName,ol);
  5560. Check(TSDOEqualityHelper.equal(locEmployee,ol.getDataObject(0)));
  5561. Compare(
  5562. locEmployee.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  5563. ol.getDataObject(0).getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  5564. );
  5565. locEmployee.getChangeSummary().undoChanges();
  5566. ol.getDataObject(0).getChangeSummary().undoChanges();
  5567. CheckEquals(0, locEmployee.getChangeSummary().getChangedDataObjects().size());
  5568. CheckEquals(0, ol.getDataObject(0).getChangeSummary().getChangedDataObjects().size());
  5569. Check(TSDOEqualityHelper.equal(locEmployee,ol.getDataObject(0)));
  5570. end;
  5571. procedure TSDOSerializer_Test.load_from_file_changesummary_prop_list_bytes();
  5572. const
  5573. FILE_NAME = 'changesummary_prop_list_bytes.xml';
  5574. LIST_PROP_NAME = s_list_bytes;
  5575. PROP_TYPE = BytesType;
  5576. var
  5577. VAL_1, VAL_2, VAL_3, VAL_4, VAL_5 : TSDOBytes;
  5578. procedure SetConstants();
  5579. var
  5580. v : TSDOBytes;
  5581. k : Integer;
  5582. begin
  5583. SetLength(v,10);
  5584. for k := 0 to High(v) do
  5585. v[k] := k mod High(Byte);
  5586. VAL_1 := v;
  5587. v := nil;
  5588. VAL_2 := nil;
  5589. SetLength(v,20);
  5590. for k := 0 to High(v) do
  5591. v[k] := ( ( 3 * k ) + 1 ) mod High(Byte);
  5592. VAL_3 := v;
  5593. v := nil;
  5594. SetLength(v,30);
  5595. for k := 0 to High(v) do
  5596. v[k] := ( ( 3 * k ) + 1 ) mod High(Byte);
  5597. VAL_4 := v;
  5598. v := nil;
  5599. SetLength(v,40);
  5600. for k := 0 to High(v) do
  5601. v[k] := ( ( 3 * k ) + 1 ) mod High(Byte);
  5602. VAL_5 := v;
  5603. v := nil;
  5604. end;
  5605. var
  5606. locFac, tmpFactory : ISDODataFactory;
  5607. locDep, locLoadedDep : ISDODataObject;
  5608. ls : ISDODataObjectList;
  5609. locCS : ISDOChangeSummary;
  5610. f : ISDOSerializerStream;
  5611. s : ISDOSerializer;
  5612. localFileName : string;
  5613. begin
  5614. SetConstants();
  5615. localFileName := sdoExpandLocalFileName(FILE_NAME);
  5616. locFac := TSDODataFactory.Create() as ISDODataFactory;
  5617. locFac.AddType(s_uri,s_DepartmentType,[]);
  5618. locFac.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  5619. locFac.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  5620. locFac.addProperty(s_uri,s_DepartmentType,s_birthDate,sdo_namespace,SDOTypeDefaultTypeNames[DateTimeType],[]);
  5621. locFac.addProperty(s_uri,s_DepartmentType,LIST_PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE],[pfIsMany]);
  5622. locFac.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  5623. locDep := locFac.createNew(s_uri,s_DepartmentType);
  5624. locDep.setString(s_name,'R & D');
  5625. locDep.setString(s_location,'Ouaga, BF');
  5626. //locDep.setBytes(s_birthDate,VAL_1);
  5627. ls := locDep.getList(LIST_PROP_NAME);
  5628. ls.appendBytes(VAL_1);
  5629. ls.appendBytes(VAL_2);
  5630. ls.appendBytes(VAL_3);
  5631. locCS := locDep.getChangeSummary();
  5632. locCS.beginLogging();
  5633. locDep.setString(s_name,'R & D Department');
  5634. locDep.setString(s_location,'Ouaga 01, BF');
  5635. ls.setBytes(0,VAL_4);
  5636. ls.appendBytes(VAL_5);
  5637. ls.appendBytes(VAL_1);
  5638. ls.setBytes(1,VAL_2);
  5639. ls.delete(0);
  5640. ls.delete(1);
  5641. ls.insertBytes(2, VAL_3);
  5642. ls.appendBytes(VAL_4);
  5643. localFileName := sdoExpandLocalFileName(TestFilesPath + FILE_NAME);
  5644. f := TSDOSerializerStreamXML.Create();
  5645. tmpFactory := TSDOBaseDataFactory.Create();
  5646. s := TSDOSerializer.Create(tmpFactory,f);
  5647. locLoadedDep := s.load(localFileName);
  5648. Check(TSDOEqualityHelper.equal(locDep, locLoadedDep),'Object');
  5649. Compare(
  5650. locDep.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  5651. locLoadedDep.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  5652. );
  5653. end;
  5654. {$ENDIF HAS_SDO_BYTES}
  5655. {$IFDEF HAS_SDO_CHAR}
  5656. procedure TSDOSerializer_Test.save_to_file_changesummary_prop_list_char();
  5657. const
  5658. LIST_PROP_NAME = s_list_char;
  5659. LIST_PROP_TYPE = CharacterType;
  5660. FILE_NAME = 'changesummary_prop_list_char.xml';
  5661. var
  5662. locFac : ISDODataFactory;
  5663. locDep : ISDODataObject;
  5664. ls : ISDODataObjectList;
  5665. locCS : ISDOChangeSummary;
  5666. f : ISDOSerializerStream;
  5667. s : ISDOSerializer;
  5668. localFileName : string;
  5669. existDoc, serialDoc : TSDOXMLDocument;
  5670. begin
  5671. localFileName := sdoExpandLocalFileName(FILE_NAME);
  5672. locFac := TSDODataFactory.Create() as ISDODataFactory;
  5673. locFac.AddType(s_uri,s_DepartmentType,[]);
  5674. locFac.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  5675. locFac.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  5676. locFac.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[ByteType],[]);
  5677. locFac.addProperty(s_uri,s_DepartmentType,LIST_PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[LIST_PROP_TYPE],[pfIsMany]);
  5678. locFac.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  5679. locDep := locFac.createNew(s_uri,s_DepartmentType);
  5680. locDep.setString(s_name,'R & D');
  5681. locDep.setString(s_location,'Ouaga, BF');
  5682. locDep.setByte(s_number,123);
  5683. ls := locDep.getList(LIST_PROP_NAME);
  5684. ls.append(TSDOChar('k'));
  5685. ls.append(TSDOChar('y'));
  5686. ls.append(TSDOChar('g'));
  5687. locCS := locDep.getChangeSummary();
  5688. locCS.beginLogging();
  5689. locDep.setString(s_name,'R & D Department');
  5690. locDep.setString(s_location,'Ouaga 01, BF');
  5691. ls.setCharacter(0,TSDOChar('j'));
  5692. ls.append(TSDOChar('a'));
  5693. ls.append(TSDOChar('x'));
  5694. ls.setCharacter(1,TSDOChar('v'));
  5695. ls.delete(0);
  5696. ls.delete(1);
  5697. ls.insert(2, TSDOChar('A'));
  5698. ls.append(TSDOChar('Z'));
  5699. {$IFDEF TEST_GENERATE_FILE}
  5700. (TSDOSerializer.Create(locFac,TSDOSerializerStreamXML.Create()) as ISDOSerializer).save(locDep,sdoExpandLocalFileName(FILE_NAME));
  5701. {$ENDIF TEST_GENERATE_FILE}
  5702. f := TSDOSerializerStreamXML.Create();
  5703. s := TSDOSerializer.Create(locFac,f);
  5704. s.save(s_DepartmentType,locDep,localFileName);
  5705. existDoc := nil;
  5706. serialDoc := nil;
  5707. ReadXMLFile(existDoc,sdoExpandLocalFileName(TestFilesPath + FILE_NAME));
  5708. try
  5709. ReadXMLFile(serialDoc,localFileName);
  5710. CheckEquals(True, CompareNodes(existDoc,serialDoc));
  5711. finally
  5712. ReleaseDomNode(existDoc);
  5713. ReleaseDomNode(serialDoc);
  5714. end;
  5715. end;
  5716. {$ENDIF HAS_SDO_CHAR}
  5717. {$IFDEF HAS_SDO_LONG}
  5718. procedure TSDOSerializer_Test.save_to_file_changesummary_prop_list_long();
  5719. const
  5720. LIST_PROP_NAME = s_list_long;
  5721. LIST_PROP_TYPE = LongType;
  5722. FILE_NAME = 'changesummary_prop_list_long.xml';
  5723. var
  5724. locFac : ISDODataFactory;
  5725. locDep : ISDODataObject;
  5726. ls : ISDODataObjectList;
  5727. locCS : ISDOChangeSummary;
  5728. f : ISDOSerializerStream;
  5729. s : ISDOSerializer;
  5730. localFileName : string;
  5731. existDoc, serialDoc : TSDOXMLDocument;
  5732. begin
  5733. localFileName := sdoExpandLocalFileName(FILE_NAME);
  5734. locFac := TSDODataFactory.Create() as ISDODataFactory;
  5735. locFac.AddType(s_uri,s_DepartmentType,[]);
  5736. locFac.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  5737. locFac.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  5738. locFac.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[ByteType],[]);
  5739. locFac.addProperty(s_uri,s_DepartmentType,LIST_PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[LIST_PROP_TYPE],[pfIsMany]);
  5740. locFac.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  5741. locDep := locFac.createNew(s_uri,s_DepartmentType);
  5742. locDep.setString(s_name,'R & D');
  5743. locDep.setString(s_location,'Ouaga, BF');
  5744. locDep.setByte(s_number,123);
  5745. ls := locDep.getList(LIST_PROP_NAME);
  5746. ls.append(TSDOLong(11111111111111111));
  5747. ls.append(TSDOLong(-2222222222222222));
  5748. ls.append(TSDOLong(333333333333333333));
  5749. locCS := locDep.getChangeSummary();
  5750. locCS.beginLogging();
  5751. locDep.setString(s_name,'R & D Department');
  5752. locDep.setString(s_location,'Ouaga 01, BF');
  5753. ls.setLong(0,4444444444444444444);
  5754. ls.append(TSDOLong(5555555555555555555));
  5755. ls.append(TSDOLong(-6666666666666666666));
  5756. ls.setLong(1,7777777777777777777);
  5757. ls.delete(0);
  5758. ls.delete(1);
  5759. ls.insert(2, TSDOLong(8));
  5760. ls.append(TSDOLong(-9));
  5761. {$IFDEF TEST_GENERATE_FILE}
  5762. (TSDOSerializer.Create(locFac,TSDOSerializerStreamXML.Create()) as ISDOSerializer).save(locDep,sdoExpandLocalFileName(FILE_NAME));
  5763. {$ENDIF TEST_GENERATE_FILE}
  5764. f := TSDOSerializerStreamXML.Create();
  5765. s := TSDOSerializer.Create(locFac,f);
  5766. s.save(s_DepartmentType,locDep,localFileName);
  5767. existDoc := nil;
  5768. serialDoc := nil;
  5769. ReadXMLFile(existDoc,sdoExpandLocalFileName(TestFilesPath + FILE_NAME));
  5770. try
  5771. ReadXMLFile(serialDoc,localFileName);
  5772. CheckEquals(True, CompareNodes(existDoc,serialDoc));
  5773. finally
  5774. ReleaseDomNode(existDoc);
  5775. ReleaseDomNode(serialDoc);
  5776. end;
  5777. end;
  5778. {$ENDIF HAS_SDO_LONG}
  5779. {$IFDEF HAS_SDO_SHORT}
  5780. procedure TSDOSerializer_Test.save_to_file_changesummary_prop_list_short();
  5781. const
  5782. LIST_PROP_NAME = s_list_short;
  5783. LIST_PROP_TYPE = ShortType;
  5784. FILE_NAME = 'changesummary_prop_list_short.xml';
  5785. var
  5786. locFac : ISDODataFactory;
  5787. locDep : ISDODataObject;
  5788. ls : ISDODataObjectList;
  5789. locCS : ISDOChangeSummary;
  5790. f : ISDOSerializerStream;
  5791. s : ISDOSerializer;
  5792. localFileName : string;
  5793. existDoc, serialDoc : TSDOXMLDocument;
  5794. begin
  5795. localFileName := sdoExpandLocalFileName(FILE_NAME);
  5796. locFac := TSDODataFactory.Create() as ISDODataFactory;
  5797. locFac.AddType(s_uri,s_DepartmentType,[]);
  5798. locFac.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  5799. locFac.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  5800. locFac.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[ByteType],[]);
  5801. locFac.addProperty(s_uri,s_DepartmentType,LIST_PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[LIST_PROP_TYPE],[pfIsMany]);
  5802. locFac.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  5803. locDep := locFac.createNew(s_uri,s_DepartmentType);
  5804. locDep.setString(s_name,'R & D');
  5805. locDep.setString(s_location,'Ouaga, BF');
  5806. locDep.setByte(s_number,123);
  5807. ls := locDep.getList(LIST_PROP_NAME);
  5808. ls.append(TSDOShort(1));
  5809. ls.append(TSDOShort(2));
  5810. ls.append(TSDOShort(3));
  5811. locCS := locDep.getChangeSummary();
  5812. locCS.beginLogging();
  5813. locDep.setString(s_name,'R & D Department');
  5814. locDep.setString(s_location,'Ouaga 01, BF');
  5815. ls.setShort(0,10);
  5816. ls.append(TSDOShort(12345));
  5817. ls.append(TSDOShort(-5245));
  5818. ls.setShort(1,20);
  5819. ls.delete(0);
  5820. ls.delete(1);
  5821. ls.insert(2, TSDOShort(107));
  5822. ls.append(TSDOShort(89));
  5823. {$IFDEF TEST_GENERATE_FILE}
  5824. (TSDOSerializer.Create(locFac,TSDOSerializerStreamXML.Create()) as ISDOSerializer).save(locDep,sdoExpandLocalFileName(FILE_NAME));
  5825. {$ENDIF TEST_GENERATE_FILE}
  5826. f := TSDOSerializerStreamXML.Create();
  5827. s := TSDOSerializer.Create(locFac,f);
  5828. s.save(s_DepartmentType,locDep,localFileName);
  5829. existDoc := nil;
  5830. serialDoc := nil;
  5831. ReadXMLFile(existDoc,sdoExpandLocalFileName(TestFilesPath + FILE_NAME));
  5832. try
  5833. ReadXMLFile(serialDoc,localFileName);
  5834. CheckEquals(True, CompareNodes(existDoc,serialDoc));
  5835. finally
  5836. ReleaseDomNode(existDoc);
  5837. ReleaseDomNode(serialDoc);
  5838. end;
  5839. end;
  5840. {$ENDIF HAS_SDO_SHORT}
  5841. {$IFDEF HAS_SDO_CURRENCY}
  5842. procedure TSDOSerializer_Test.save_to_file_changesummary_prop_list_currency();
  5843. const
  5844. LIST_PROP_NAME = s_list_currency;
  5845. LIST_PROP_TYPE = CurrencyType;
  5846. FILE_NAME = 'changesummary_prop_list_currency.xml';
  5847. var
  5848. locFac : ISDODataFactory;
  5849. locDep : ISDODataObject;
  5850. ls : ISDODataObjectList;
  5851. locCS : ISDOChangeSummary;
  5852. f : ISDOSerializerStream;
  5853. s : ISDOSerializer;
  5854. localFileName : string;
  5855. existDoc, serialDoc : TSDOXMLDocument;
  5856. begin
  5857. localFileName := sdoExpandLocalFileName(FILE_NAME);
  5858. locFac := TSDODataFactory.Create() as ISDODataFactory;
  5859. locFac.AddType(s_uri,s_DepartmentType,[]);
  5860. locFac.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  5861. locFac.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  5862. locFac.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[ByteType],[]);
  5863. locFac.addProperty(s_uri,s_DepartmentType,LIST_PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[LIST_PROP_TYPE],[pfIsMany]);
  5864. locFac.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  5865. locDep := locFac.createNew(s_uri,s_DepartmentType);
  5866. locDep.setString(s_name,'R & D');
  5867. locDep.setString(s_location,'Ouaga, BF');
  5868. locDep.setByte(s_number,123);
  5869. ls := locDep.getList(LIST_PROP_NAME);
  5870. ls.appendCurrency(CURRENCY_VALUES_REPEATED_DIGITED[0]);
  5871. ls.appendCurrency(CURRENCY_VALUES_REPEATED_DIGITED[1]);
  5872. ls.appendCurrency(CURRENCY_VALUES_REPEATED_DIGITED[2]);
  5873. locCS := locDep.getChangeSummary();
  5874. locCS.beginLogging();
  5875. locDep.setString(s_name,'R & D Department');
  5876. locDep.setString(s_location,'Ouaga 01, BF');
  5877. ls.setCurrency(0,CURRENCY_VALUES_REPEATED_DIGITED[3]);
  5878. ls.appendCurrency(CURRENCY_VALUES_REPEATED_DIGITED[4]);
  5879. ls.appendCurrency(CURRENCY_VALUES_REPEATED_DIGITED[5]);
  5880. ls.setCurrency(1,CURRENCY_VALUES_REPEATED_DIGITED[6]);
  5881. ls.delete(0);
  5882. ls.delete(1);
  5883. ls.insertCurrency(2, CURRENCY_VALUES_REPEATED_DIGITED[7]);
  5884. ls.appendCurrency(CURRENCY_VALUES_REPEATED_DIGITED[8]);
  5885. {$IFDEF TEST_GENERATE_FILE}
  5886. (TSDOSerializer.Create(locFac,TSDOSerializerStreamXML.Create()) as ISDOSerializer).save(locDep,sdoExpandLocalFileName(FILE_NAME));
  5887. {$ENDIF TEST_GENERATE_FILE}
  5888. f := TSDOSerializerStreamXML.Create();
  5889. s := TSDOSerializer.Create(locFac,f);
  5890. s.save(s_DepartmentType,locDep,localFileName);
  5891. existDoc := nil;
  5892. serialDoc := nil;
  5893. ReadXMLFile(existDoc,sdoExpandLocalFileName(TestFilesPath + FILE_NAME));
  5894. try
  5895. ReadXMLFile(serialDoc,localFileName);
  5896. CheckEquals(True, CompareNodes(existDoc,serialDoc));
  5897. finally
  5898. ReleaseDomNode(existDoc);
  5899. ReleaseDomNode(serialDoc);
  5900. end;
  5901. end;
  5902. procedure TSDOSerializer_Test.load_from_file_changesummary_currency();
  5903. const
  5904. PROP_NAME = 'sampleProperty';
  5905. PROP_TYPE = CurrencyType;
  5906. FILE_NAME = 'change_summary_currency.xml';
  5907. VAL_1 : TSDOCurrency = 12398745632145.6987;
  5908. VAL_2 : TSDOCurrency = -45821568.7422;
  5909. var
  5910. locFac, tmpFactory : ISDODataFactory;
  5911. locEmployee : ISDODataObject;
  5912. locCS : ISDOChangeSummary;
  5913. f : ISDOSerializerStream;
  5914. s : ISDOSerializer;
  5915. localFileName : string;
  5916. ol : ISDODataObjectList;
  5917. begin
  5918. localFileName := sdoExpandLocalFileName(TestFilesPath + FILE_NAME);
  5919. locFac := TSDODataFactory.Create() as ISDODataFactory;
  5920. locFac.AddType(s_uri,s_Employee,[]);
  5921. locFac.addProperty(s_uri,s_Employee,PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE],[]);
  5922. locFac.addProperty(s_uri,s_Employee,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  5923. locEmployee := locFac.createNew(s_uri,s_Employee);
  5924. locEmployee.setCurrency(PROP_NAME,VAL_1);
  5925. locCS := locEmployee.getChangeSummary();
  5926. locCS.beginLogging();
  5927. locEmployee.setCurrency(PROP_NAME,VAL_2);
  5928. {$IFDEF TEST_GENERATE_FILE}
  5929. (TSDOSerializer.Create(locFac,TSDOSerializerStreamXML.Create())as ISDOSerializer).save(locEmployee,sdoExpandLocalFileName(FILE_NAME));
  5930. {$ENDIF TEST_GENERATE_FILE}
  5931. f := TSDOSerializerStreamXML.Create();
  5932. tmpFactory := TSDODataFactory.Create();
  5933. s := TSDOSerializer.Create(tmpFactory,f);
  5934. ol := TSDODataObjectList.Create(tmpFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[ObjectType]));
  5935. s.load(localFileName,ol);
  5936. Check(TSDOEqualityHelper.equal(locEmployee,ol.getDataObject(0)));
  5937. Compare(
  5938. locEmployee.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  5939. ol.getDataObject(0).getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  5940. );
  5941. locEmployee.getChangeSummary().undoChanges();
  5942. ol.getDataObject(0).getChangeSummary().undoChanges();
  5943. CheckEquals(0, locEmployee.getChangeSummary().getChangedDataObjects().size());
  5944. CheckEquals(0, ol.getDataObject(0).getChangeSummary().getChangedDataObjects().size());
  5945. Check(TSDOEqualityHelper.equal(locEmployee,ol.getDataObject(0)));
  5946. end;
  5947. procedure TSDOSerializer_Test.load_from_file_changesummary_prop_list_currency();
  5948. const
  5949. PROP_NAME = s_list_currency;
  5950. PROP_TYPE = CurrencyType;
  5951. FILE_NAME = 'changesummary_prop_list_currency.xml';
  5952. var
  5953. locFac, tmpFactory : ISDODataFactory;
  5954. locDep, locLoadedDep : ISDODataObject;
  5955. ls : ISDODataObjectList;
  5956. locCS : ISDOChangeSummary;
  5957. f : ISDOSerializerStream;
  5958. s : ISDOSerializer;
  5959. localFileName : string;
  5960. begin
  5961. locFac := TSDODataFactory.Create() as ISDODataFactory;
  5962. locFac.AddType(s_uri,s_DepartmentType,[]);
  5963. locFac.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  5964. locFac.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  5965. locFac.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[ByteType],[]);
  5966. locFac.addProperty(s_uri,s_DepartmentType,PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE],[pfIsMany]);
  5967. locFac.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  5968. locDep := locFac.createNew(s_uri,s_DepartmentType);
  5969. locDep.setString(s_name,'R & D');
  5970. locDep.setString(s_location,'Ouaga, BF');
  5971. locDep.setByte(s_number,123);
  5972. ls := locDep.getList(PROP_NAME);
  5973. ls.appendCurrency(CURRENCY_VALUES_REPEATED_DIGITED[0]);
  5974. ls.appendCurrency(CURRENCY_VALUES_REPEATED_DIGITED[1]);
  5975. ls.appendCurrency(CURRENCY_VALUES_REPEATED_DIGITED[2]);
  5976. locCS := locDep.getChangeSummary();
  5977. locCS.beginLogging();
  5978. locDep.setString(s_name,'R & D Department');
  5979. locDep.setString(s_location,'Ouaga 01, BF');
  5980. ls.setCurrency(0,CURRENCY_VALUES_REPEATED_DIGITED[3]);
  5981. ls.appendCurrency(CURRENCY_VALUES_REPEATED_DIGITED[4]);
  5982. ls.appendCurrency(CURRENCY_VALUES_REPEATED_DIGITED[5]);
  5983. ls.setCurrency(1,CURRENCY_VALUES_REPEATED_DIGITED[6]);
  5984. ls.delete(0);
  5985. ls.delete(1);
  5986. ls.insertCurrency(2, CURRENCY_VALUES_REPEATED_DIGITED[7]);
  5987. ls.appendCurrency(CURRENCY_VALUES_REPEATED_DIGITED[8]);
  5988. {$IFDEF TEST_GENERATE_FILE}
  5989. (TSDOSerializer.Create(locFac,TSDOSerializerStreamXML.Create())as ISDOSerializer).save(locDep,sdoExpandLocalFileName(FILE_NAME));
  5990. {$ENDIF TEST_GENERATE_FILE}
  5991. localFileName := sdoExpandLocalFileName(TestFilesPath + FILE_NAME);
  5992. f := TSDOSerializerStreamXML.Create();
  5993. tmpFactory := TSDOBaseDataFactory.Create();
  5994. s := TSDOSerializer.Create(tmpFactory,f);
  5995. locLoadedDep := s.load(localFileName);
  5996. Check(TSDOEqualityHelper.equal(locDep, locLoadedDep),'Object');
  5997. Compare(
  5998. locDep.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  5999. locLoadedDep.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  6000. );
  6001. end;
  6002. {$ENDIF HAS_SDO_CURRENCY}
  6003. {$IFDEF HAS_SDO_DOUBLE}
  6004. procedure TSDOSerializer_Test.save_to_file_changesummary_prop_list_double();
  6005. const
  6006. LIST_PROP_NAME = s_list_double;
  6007. LIST_PROP_TYPE = DoubleType;
  6008. FILE_NAME = 'changesummary_prop_list_double.xml';
  6009. var
  6010. locFac : ISDODataFactory;
  6011. locDep : ISDODataObject;
  6012. ls : ISDODataObjectList;
  6013. locCS : ISDOChangeSummary;
  6014. f : ISDOSerializerStream;
  6015. s : ISDOSerializer;
  6016. localFileName : string;
  6017. existDoc, serialDoc : TSDOXMLDocument;
  6018. begin
  6019. localFileName := sdoExpandLocalFileName(FILE_NAME);
  6020. locFac := TSDODataFactory.Create() as ISDODataFactory;
  6021. locFac.AddType(s_uri,s_DepartmentType,[]);
  6022. locFac.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  6023. locFac.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  6024. locFac.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[ByteType],[]);
  6025. locFac.addProperty(s_uri,s_DepartmentType,LIST_PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[LIST_PROP_TYPE],[pfIsMany]);
  6026. locFac.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  6027. locDep := locFac.createNew(s_uri,s_DepartmentType);
  6028. locDep.setString(s_name,'R & D');
  6029. locDep.setString(s_location,'Ouaga, BF');
  6030. locDep.setByte(s_number,123);
  6031. ls := locDep.getList(LIST_PROP_NAME);
  6032. ls.append(DOUBLE_VALUES_REPEATED_DIGITED[0]);
  6033. ls.append(DOUBLE_VALUES_REPEATED_DIGITED[1]);
  6034. ls.append(DOUBLE_VALUES_REPEATED_DIGITED[2]);
  6035. locCS := locDep.getChangeSummary();
  6036. locCS.beginLogging();
  6037. locDep.setString(s_name,'R & D Department');
  6038. locDep.setString(s_location,'Ouaga 01, BF');
  6039. ls.setDouble(0,DOUBLE_VALUES_REPEATED_DIGITED[3]);
  6040. ls.append(DOUBLE_VALUES_REPEATED_DIGITED[4]);
  6041. ls.append(DOUBLE_VALUES_REPEATED_DIGITED[5]);
  6042. ls.setDouble(1,DOUBLE_VALUES_REPEATED_DIGITED[6]);
  6043. ls.delete(0);
  6044. ls.delete(1);
  6045. ls.insert(2, DOUBLE_VALUES_REPEATED_DIGITED[7]);
  6046. ls.append(DOUBLE_VALUES_REPEATED_DIGITED[8]);
  6047. {$IFDEF TEST_GENERATE_FILE}
  6048. (TSDOSerializer.Create(locFac,TSDOSerializerStreamXML.Create()) as ISDOSerializer).save(locDep,sdoExpandLocalFileName(FILE_NAME));
  6049. {$ENDIF TEST_GENERATE_FILE}
  6050. f := TSDOSerializerStreamXML.Create();
  6051. s := TSDOSerializer.Create(locFac,f);
  6052. s.save(s_DepartmentType,locDep,localFileName);
  6053. existDoc := nil;
  6054. serialDoc := nil;
  6055. ReadXMLFile(existDoc,sdoExpandLocalFileName(TestFilesPath + FILE_NAME));
  6056. try
  6057. ReadXMLFile(serialDoc,localFileName);
  6058. CheckEquals(True, CompareNodes(existDoc,serialDoc));
  6059. finally
  6060. ReleaseDomNode(existDoc);
  6061. ReleaseDomNode(serialDoc);
  6062. end;
  6063. end;
  6064. procedure TSDOSerializer_Test.load_from_file_changesummary_double();
  6065. const
  6066. PROP_NAME = 'sampleProperty';
  6067. PROP_TYPE = DoubleType;
  6068. FILE_NAME = 'change_summary_double.xml';
  6069. VAL_1 : TSDODouble = 1239874567;
  6070. VAL_2 : TSDODouble = -4582152;
  6071. var
  6072. locFac, tmpFactory : ISDODataFactory;
  6073. locEmployee : ISDODataObject;
  6074. locCS : ISDOChangeSummary;
  6075. f : ISDOSerializerStream;
  6076. s : ISDOSerializer;
  6077. localFileName : string;
  6078. ol : ISDODataObjectList;
  6079. begin
  6080. localFileName := sdoExpandLocalFileName(TestFilesPath + FILE_NAME);
  6081. locFac := TSDODataFactory.Create() as ISDODataFactory;
  6082. locFac.AddType(s_uri,s_Employee,[]);
  6083. locFac.addProperty(s_uri,s_Employee,PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE],[]);
  6084. locFac.addProperty(s_uri,s_Employee,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  6085. locEmployee := locFac.createNew(s_uri,s_Employee);
  6086. locEmployee.setDouble(PROP_NAME,VAL_1);
  6087. locCS := locEmployee.getChangeSummary();
  6088. locCS.beginLogging();
  6089. locEmployee.setDouble(PROP_NAME,VAL_2);
  6090. {$IFDEF TEST_GENERATE_FILE}
  6091. (TSDOSerializer.Create(locFac,TSDOSerializerStreamXML.Create())as ISDOSerializer).save(locEmployee,sdoExpandLocalFileName(FILE_NAME));
  6092. {$ENDIF TEST_GENERATE_FILE}
  6093. f := TSDOSerializerStreamXML.Create();
  6094. tmpFactory := TSDODataFactory.Create();
  6095. s := TSDOSerializer.Create(tmpFactory,f);
  6096. ol := TSDODataObjectList.Create(tmpFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[ObjectType]));
  6097. s.load(localFileName,ol);
  6098. Check(TSDOEqualityHelper.equal(locEmployee,ol.getDataObject(0)));
  6099. Compare(
  6100. locEmployee.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  6101. ol.getDataObject(0).getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  6102. );
  6103. locEmployee.getChangeSummary().undoChanges();
  6104. ol.getDataObject(0).getChangeSummary().undoChanges();
  6105. CheckEquals(0, locEmployee.getChangeSummary().getChangedDataObjects().size());
  6106. CheckEquals(0, ol.getDataObject(0).getChangeSummary().getChangedDataObjects().size());
  6107. Check(TSDOEqualityHelper.equal(locEmployee,ol.getDataObject(0)));
  6108. end;
  6109. procedure TSDOSerializer_Test.load_from_file_changesummary_prop_list_double();
  6110. const
  6111. PROP_NAME = s_list_double;
  6112. PROP_TYPE = DoubleType;
  6113. FILE_NAME = 'changesummary_prop_list_double.xml';
  6114. var
  6115. locFac, tmpFactory : ISDODataFactory;
  6116. locDep, locLoadedDep : ISDODataObject;
  6117. ls : ISDODataObjectList;
  6118. locCS : ISDOChangeSummary;
  6119. f : ISDOSerializerStream;
  6120. s : ISDOSerializer;
  6121. localFileName : string;
  6122. begin
  6123. locFac := TSDODataFactory.Create() as ISDODataFactory;
  6124. locFac.AddType(s_uri,s_DepartmentType,[]);
  6125. locFac.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  6126. locFac.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  6127. locFac.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[ByteType],[]);
  6128. locFac.addProperty(s_uri,s_DepartmentType,PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE],[pfIsMany]);
  6129. locFac.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  6130. locDep := locFac.createNew(s_uri,s_DepartmentType);
  6131. locDep.setString(s_name,'R & D');
  6132. locDep.setString(s_location,'Ouaga, BF');
  6133. locDep.setByte(s_number,123);
  6134. ls := locDep.getList(PROP_NAME);
  6135. ls.append(DOUBLE_VALUES_REPEATED_DIGITED[0]);
  6136. ls.append(DOUBLE_VALUES_REPEATED_DIGITED[1]);
  6137. ls.append(DOUBLE_VALUES_REPEATED_DIGITED[2]);
  6138. locCS := locDep.getChangeSummary();
  6139. locCS.beginLogging();
  6140. locDep.setString(s_name,'R & D Department');
  6141. locDep.setString(s_location,'Ouaga 01, BF');
  6142. ls.setDouble(0,DOUBLE_VALUES_REPEATED_DIGITED[3]);
  6143. ls.append(DOUBLE_VALUES_REPEATED_DIGITED[4]);
  6144. ls.append(DOUBLE_VALUES_REPEATED_DIGITED[5]);
  6145. ls.setDouble(1,DOUBLE_VALUES_REPEATED_DIGITED[6]);
  6146. ls.delete(0);
  6147. ls.delete(1);
  6148. ls.insert(2, DOUBLE_VALUES_REPEATED_DIGITED[7]);
  6149. ls.append(DOUBLE_VALUES_REPEATED_DIGITED[8]);
  6150. {$IFDEF TEST_GENERATE_FILE}
  6151. (TSDOSerializer.Create(locFac,TSDOSerializerStreamXML.Create())as ISDOSerializer).save(locDep,sdoExpandLocalFileName(FILE_NAME));
  6152. {$ENDIF TEST_GENERATE_FILE}
  6153. localFileName := sdoExpandLocalFileName(TestFilesPath + FILE_NAME);
  6154. f := TSDOSerializerStreamXML.Create();
  6155. tmpFactory := TSDOBaseDataFactory.Create();
  6156. s := TSDOSerializer.Create(tmpFactory,f);
  6157. locLoadedDep := s.load(localFileName);
  6158. Check(TSDOEqualityHelper.equal(locDep, locLoadedDep),'Object');
  6159. Compare(
  6160. locDep.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  6161. locLoadedDep.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  6162. );
  6163. end;
  6164. {$ENDIF HAS_SDO_DOUBLE}
  6165. {$IFDEF HAS_SDO_FLOAT}
  6166. procedure TSDOSerializer_Test.save_to_file_changesummary_prop_list_float();
  6167. const
  6168. LIST_PROP_NAME = s_list_float;
  6169. LIST_PROP_TYPE = FloatType;
  6170. FILE_NAME = 'changesummary_prop_list_float.xml';
  6171. var
  6172. locFac : ISDODataFactory;
  6173. locDep : ISDODataObject;
  6174. ls : ISDODataObjectList;
  6175. locCS : ISDOChangeSummary;
  6176. f : ISDOSerializerStream;
  6177. s : ISDOSerializer;
  6178. localFileName : string;
  6179. existDoc, serialDoc : TSDOXMLDocument;
  6180. begin
  6181. localFileName := sdoExpandLocalFileName(FILE_NAME);
  6182. locFac := TSDODataFactory.Create() as ISDODataFactory;
  6183. locFac.AddType(s_uri,s_DepartmentType,[]);
  6184. locFac.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  6185. locFac.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  6186. locFac.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[ByteType],[]);
  6187. locFac.addProperty(s_uri,s_DepartmentType,LIST_PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[LIST_PROP_TYPE],[pfIsMany]);
  6188. locFac.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  6189. locDep := locFac.createNew(s_uri,s_DepartmentType);
  6190. locDep.setString(s_name,'R & D');
  6191. locDep.setString(s_location,'Ouaga, BF');
  6192. locDep.setByte(s_number,123);
  6193. ls := locDep.getList(LIST_PROP_NAME);
  6194. ls.append(FLOAT_VALUES_REPEATED_DIGITED[0]);
  6195. ls.append(FLOAT_VALUES_REPEATED_DIGITED[1]);
  6196. ls.append(FLOAT_VALUES_REPEATED_DIGITED[2]);
  6197. locCS := locDep.getChangeSummary();
  6198. locCS.beginLogging();
  6199. locDep.setString(s_name,'R & D Department');
  6200. locDep.setString(s_location,'Ouaga 01, BF');
  6201. ls.setFloat(0,FLOAT_VALUES_REPEATED_DIGITED[3]);
  6202. ls.append(FLOAT_VALUES_REPEATED_DIGITED[4]);
  6203. ls.append(FLOAT_VALUES_REPEATED_DIGITED[5]);
  6204. ls.setFloat(1,FLOAT_VALUES_REPEATED_DIGITED[6]);
  6205. ls.delete(0);
  6206. ls.delete(1);
  6207. ls.insert(2, FLOAT_VALUES_REPEATED_DIGITED[7]);
  6208. ls.append(FLOAT_VALUES_REPEATED_DIGITED[8]);
  6209. {$IFDEF TEST_GENERATE_FILE}
  6210. (TSDOSerializer.Create(locFac,TSDOSerializerStreamXML.Create()) as ISDOSerializer).save(locDep,sdoExpandLocalFileName(FILE_NAME));
  6211. {$ENDIF TEST_GENERATE_FILE}
  6212. f := TSDOSerializerStreamXML.Create();
  6213. s := TSDOSerializer.Create(locFac,f);
  6214. s.save(s_DepartmentType,locDep,localFileName);
  6215. existDoc := nil;
  6216. serialDoc := nil;
  6217. ReadXMLFile(existDoc,sdoExpandLocalFileName(TestFilesPath + FILE_NAME));
  6218. try
  6219. ReadXMLFile(serialDoc,localFileName);
  6220. CheckEquals(True, CompareNodes(existDoc,serialDoc));
  6221. finally
  6222. ReleaseDomNode(existDoc);
  6223. ReleaseDomNode(serialDoc);
  6224. end;
  6225. end;
  6226. procedure TSDOSerializer_Test.load_from_file_changesummary_float();
  6227. const
  6228. PROP_NAME = 'sampleProperty';
  6229. PROP_TYPE = FloatType;
  6230. FILE_NAME = 'change_summary_float.xml';
  6231. VAL_1 : TSDOFloat = 1239874567;
  6232. VAL_2 : TSDOFloat = -4582152;
  6233. var
  6234. locFac, tmpFactory : ISDODataFactory;
  6235. locEmployee : ISDODataObject;
  6236. locCS : ISDOChangeSummary;
  6237. f : ISDOSerializerStream;
  6238. s : ISDOSerializer;
  6239. localFileName : string;
  6240. ol : ISDODataObjectList;
  6241. begin
  6242. localFileName := sdoExpandLocalFileName(TestFilesPath + FILE_NAME);
  6243. locFac := TSDODataFactory.Create() as ISDODataFactory;
  6244. locFac.AddType(s_uri,s_Employee,[]);
  6245. locFac.addProperty(s_uri,s_Employee,PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE],[]);
  6246. locFac.addProperty(s_uri,s_Employee,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  6247. locEmployee := locFac.createNew(s_uri,s_Employee);
  6248. locEmployee.setFloat(PROP_NAME,VAL_1);
  6249. locCS := locEmployee.getChangeSummary();
  6250. locCS.beginLogging();
  6251. locEmployee.setFloat(PROP_NAME,VAL_2);
  6252. {$IFDEF TEST_GENERATE_FILE}
  6253. (TSDOSerializer.Create(locFac,TSDOSerializerStreamXML.Create())as ISDOSerializer).save(locEmployee,sdoExpandLocalFileName(FILE_NAME));
  6254. {$ENDIF TEST_GENERATE_FILE}
  6255. f := TSDOSerializerStreamXML.Create();
  6256. tmpFactory := TSDODataFactory.Create();
  6257. s := TSDOSerializer.Create(tmpFactory,f);
  6258. ol := TSDODataObjectList.Create(tmpFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[ObjectType]));
  6259. s.load(localFileName,ol);
  6260. Check(TSDOEqualityHelper.equal(locEmployee,ol.getDataObject(0)));
  6261. Compare(
  6262. locEmployee.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  6263. ol.getDataObject(0).getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  6264. );
  6265. locEmployee.getChangeSummary().undoChanges();
  6266. ol.getDataObject(0).getChangeSummary().undoChanges();
  6267. CheckEquals(0, locEmployee.getChangeSummary().getChangedDataObjects().size());
  6268. CheckEquals(0, ol.getDataObject(0).getChangeSummary().getChangedDataObjects().size());
  6269. Check(TSDOEqualityHelper.equal(locEmployee,ol.getDataObject(0)));
  6270. end;
  6271. procedure TSDOSerializer_Test.load_from_file_changesummary_prop_list_float();
  6272. const
  6273. PROP_NAME = s_list_float;
  6274. PROP_TYPE = FloatType;
  6275. FILE_NAME = 'changesummary_prop_list_float.xml';
  6276. var
  6277. locFac, tmpFactory : ISDODataFactory;
  6278. locDep, locLoadedDep : ISDODataObject;
  6279. ls : ISDODataObjectList;
  6280. locCS : ISDOChangeSummary;
  6281. f : ISDOSerializerStream;
  6282. s : ISDOSerializer;
  6283. localFileName : string;
  6284. begin
  6285. locFac := TSDODataFactory.Create() as ISDODataFactory;
  6286. locFac.AddType(s_uri,s_DepartmentType,[]);
  6287. locFac.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  6288. locFac.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  6289. locFac.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[ByteType],[]);
  6290. locFac.addProperty(s_uri,s_DepartmentType,PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE],[pfIsMany]);
  6291. locFac.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  6292. locDep := locFac.createNew(s_uri,s_DepartmentType);
  6293. locDep.setString(s_name,'R & D');
  6294. locDep.setString(s_location,'Ouaga, BF');
  6295. locDep.setByte(s_number,123);
  6296. ls := locDep.getList(PROP_NAME);
  6297. ls.append(FLOAT_VALUES_REPEATED_DIGITED[0]);
  6298. ls.append(FLOAT_VALUES_REPEATED_DIGITED[1]);
  6299. ls.append(FLOAT_VALUES_REPEATED_DIGITED[2]);
  6300. locCS := locDep.getChangeSummary();
  6301. locCS.beginLogging();
  6302. locDep.setString(s_name,'R & D Department');
  6303. locDep.setString(s_location,'Ouaga 01, BF');
  6304. ls.setFloat(0,FLOAT_VALUES_REPEATED_DIGITED[3]);
  6305. ls.append(FLOAT_VALUES_REPEATED_DIGITED[4]);
  6306. ls.append(FLOAT_VALUES_REPEATED_DIGITED[5]);
  6307. ls.setFloat(1,FLOAT_VALUES_REPEATED_DIGITED[6]);
  6308. ls.delete(0);
  6309. ls.delete(1);
  6310. ls.insert(2, FLOAT_VALUES_REPEATED_DIGITED[7]);
  6311. ls.append(FLOAT_VALUES_REPEATED_DIGITED[8]);
  6312. {$IFDEF TEST_GENERATE_FILE}
  6313. (TSDOSerializer.Create(locFac,TSDOSerializerStreamXML.Create())as ISDOSerializer).save(locDep,sdoExpandLocalFileName(FILE_NAME));
  6314. {$ENDIF TEST_GENERATE_FILE}
  6315. localFileName := sdoExpandLocalFileName(TestFilesPath + FILE_NAME);
  6316. f := TSDOSerializerStreamXML.Create();
  6317. tmpFactory := TSDOBaseDataFactory.Create();
  6318. s := TSDOSerializer.Create(tmpFactory,f);
  6319. locLoadedDep := s.load(localFileName);
  6320. Check(TSDOEqualityHelper.equal(locDep, locLoadedDep),'Object');
  6321. Compare(
  6322. locDep.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  6323. locLoadedDep.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  6324. );
  6325. end;
  6326. {$ENDIF HAS_SDO_FLOAT}
  6327. procedure TSDOSerializer_Test.load_from_file_changesummary_bool();
  6328. const
  6329. PROP_NAME = 'sampleProperty';
  6330. PROP_TYPE = BooleanType;
  6331. VAL_1 : TSDOBoolean = True;
  6332. VAL_2 : TSDOBoolean = False;
  6333. var
  6334. locFac, tmpFactory : ISDODataFactory;
  6335. locEmployee : ISDODataObject;
  6336. locCS : ISDOChangeSummary;
  6337. f : ISDOSerializerStream;
  6338. s : ISDOSerializer;
  6339. localFileName : string;
  6340. ol : ISDODataObjectList;
  6341. begin
  6342. localFileName := sdoExpandLocalFileName(TestFilesPath + 'change_summary_bool.xml');
  6343. locFac := TSDODataFactory.Create() as ISDODataFactory;
  6344. locFac.AddType(s_uri,s_Employee,[]);
  6345. locFac.addProperty(s_uri,s_Employee,PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE],[]);
  6346. locFac.addProperty(s_uri,s_Employee,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  6347. locEmployee := locFac.createNew(s_uri,s_Employee);
  6348. locEmployee.setBoolean(PROP_NAME,VAL_1);
  6349. locCS := locEmployee.getChangeSummary();
  6350. locCS.beginLogging();
  6351. locEmployee.setBoolean(PROP_NAME,VAL_2);
  6352. //(TSDOSerializer.Create(locFac,TSDOSerializerStreamXML.Create())as ISDOSerializer).save(locEmployee,sdoExpandLocalFileName('change_summary_bool.xml'));
  6353. f := TSDOSerializerStreamXML.Create();
  6354. tmpFactory := TSDODataFactory.Create();
  6355. s := TSDOSerializer.Create(tmpFactory,f);
  6356. ol := TSDODataObjectList.Create(tmpFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[ObjectType]));
  6357. s.load(localFileName,ol);
  6358. Check(TSDOEqualityHelper.equal(locEmployee,ol.getDataObject(0)));
  6359. Compare(
  6360. locEmployee.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  6361. ol.getDataObject(0).getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  6362. );
  6363. locEmployee.getChangeSummary().undoChanges();
  6364. ol.getDataObject(0).getChangeSummary().undoChanges();
  6365. CheckEquals(0, locEmployee.getChangeSummary().getChangedDataObjects().size());
  6366. CheckEquals(0, ol.getDataObject(0).getChangeSummary().getChangedDataObjects().size());
  6367. Check(TSDOEqualityHelper.equal(locEmployee,ol.getDataObject(0)));
  6368. end;
  6369. procedure TSDOSerializer_Test.load_from_file_changesummary_byte();
  6370. const
  6371. PROP_NAME = 'sampleProperty';
  6372. PROP_TYPE = ByteType;
  6373. FILE_NAME = 'change_summary_byte.xml';
  6374. VAL_1 : TSDOByte = 200;
  6375. VAL_2 : TSDOByte = 123;
  6376. var
  6377. locFac, tmpFactory : ISDODataFactory;
  6378. locEmployee : ISDODataObject;
  6379. locCS : ISDOChangeSummary;
  6380. f : ISDOSerializerStream;
  6381. s : ISDOSerializer;
  6382. localFileName : string;
  6383. ol : ISDODataObjectList;
  6384. begin
  6385. localFileName := sdoExpandLocalFileName(TestFilesPath + FILE_NAME);
  6386. locFac := TSDODataFactory.Create() as ISDODataFactory;
  6387. locFac.AddType(s_uri,s_Employee,[]);
  6388. locFac.addProperty(s_uri,s_Employee,PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE],[]);
  6389. locFac.addProperty(s_uri,s_Employee,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  6390. locEmployee := locFac.createNew(s_uri,s_Employee);
  6391. locEmployee.setByte(PROP_NAME,VAL_1);
  6392. locCS := locEmployee.getChangeSummary();
  6393. locCS.beginLogging();
  6394. locEmployee.setByte(PROP_NAME,VAL_2);
  6395. {$IFDEF TEST_GENERATE_FILE}
  6396. (TSDOSerializer.Create(locFac,TSDOSerializerStreamXML.Create())as ISDOSerializer).save(locEmployee,sdoExpandLocalFileName(FILE_NAME));
  6397. {$ENDIF TEST_GENERATE_FILE}
  6398. f := TSDOSerializerStreamXML.Create();
  6399. tmpFactory := TSDODataFactory.Create();
  6400. s := TSDOSerializer.Create(tmpFactory,f);
  6401. ol := TSDODataObjectList.Create(tmpFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[ObjectType]));
  6402. s.load(localFileName,ol);
  6403. Check(TSDOEqualityHelper.equal(locEmployee,ol.getDataObject(0)));
  6404. Compare(
  6405. locEmployee.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  6406. ol.getDataObject(0).getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  6407. );
  6408. locEmployee.getChangeSummary().undoChanges();
  6409. ol.getDataObject(0).getChangeSummary().undoChanges();
  6410. CheckEquals(0, locEmployee.getChangeSummary().getChangedDataObjects().size());
  6411. CheckEquals(0, ol.getDataObject(0).getChangeSummary().getChangedDataObjects().size());
  6412. Check(TSDOEqualityHelper.equal(locEmployee,ol.getDataObject(0)));
  6413. end;
  6414. {$IFDEF HAS_SDO_CHAR}
  6415. procedure TSDOSerializer_Test.load_from_file_changesummary_char();
  6416. const
  6417. PROP_NAME = 'sampleProperty';
  6418. PROP_TYPE = CharacterType;
  6419. FILE_NAME = 'change_summary_char.xml';
  6420. VAL_1 : TSDOChar = 'a';
  6421. VAL_2 : TSDOChar = 'z';
  6422. var
  6423. locFac, tmpFactory : ISDODataFactory;
  6424. locEmployee : ISDODataObject;
  6425. locCS : ISDOChangeSummary;
  6426. f : ISDOSerializerStream;
  6427. s : ISDOSerializer;
  6428. localFileName : string;
  6429. ol : ISDODataObjectList;
  6430. begin
  6431. localFileName := sdoExpandLocalFileName(TestFilesPath + FILE_NAME);
  6432. locFac := TSDODataFactory.Create() as ISDODataFactory;
  6433. locFac.AddType(s_uri,s_Employee,[]);
  6434. locFac.addProperty(s_uri,s_Employee,PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE],[]);
  6435. locFac.addProperty(s_uri,s_Employee,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  6436. locEmployee := locFac.createNew(s_uri,s_Employee);
  6437. locEmployee.setCharacter(PROP_NAME,VAL_1);
  6438. locCS := locEmployee.getChangeSummary();
  6439. locCS.beginLogging();
  6440. locEmployee.setCharacter(PROP_NAME,VAL_2);
  6441. {$IFDEF TEST_GENERATE_FILE}
  6442. (TSDOSerializer.Create(locFac,TSDOSerializerStreamXML.Create())as ISDOSerializer).save(locEmployee,sdoExpandLocalFileName(FILE_NAME));
  6443. {$ENDIF TEST_GENERATE_FILE}
  6444. f := TSDOSerializerStreamXML.Create();
  6445. tmpFactory := TSDODataFactory.Create();
  6446. s := TSDOSerializer.Create(tmpFactory,f);
  6447. ol := TSDODataObjectList.Create(tmpFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[ObjectType]));
  6448. s.load(localFileName,ol);
  6449. Check(TSDOEqualityHelper.equal(locEmployee,ol.getDataObject(0)));
  6450. Compare(
  6451. locEmployee.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  6452. ol.getDataObject(0).getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  6453. );
  6454. locEmployee.getChangeSummary().undoChanges();
  6455. ol.getDataObject(0).getChangeSummary().undoChanges();
  6456. CheckEquals(0, locEmployee.getChangeSummary().getChangedDataObjects().size());
  6457. CheckEquals(0, ol.getDataObject(0).getChangeSummary().getChangedDataObjects().size());
  6458. Check(TSDOEqualityHelper.equal(locEmployee,ol.getDataObject(0)));
  6459. end;
  6460. {$ENDIF HAS_SDO_CHAR}
  6461. procedure TSDOSerializer_Test.load_from_file_changesummary_date();
  6462. const
  6463. PROP_NAME = 'sampleProperty';
  6464. PROP_TYPE = DateTimeType;
  6465. VAL_1 : TSDODate = ( Date : 45123; HourOffset : 0; MinuteOffset : 5; );
  6466. VAL_2 : TSDODate = ( Date : 39000; HourOffset : -8; MinuteOffset : 0; );
  6467. var
  6468. locFac, tmpFactory : ISDODataFactory;
  6469. locEmployee : ISDODataObject;
  6470. locCS : ISDOChangeSummary;
  6471. f : ISDOSerializerStream;
  6472. s : ISDOSerializer;
  6473. localFileName : string;
  6474. ol : ISDODataObjectList;
  6475. begin
  6476. localFileName := sdoExpandLocalFileName(TestFilesPath + 'change_summary_date.xml');
  6477. locFac := TSDODataFactory.Create() as ISDODataFactory;
  6478. locFac.AddType(s_uri,s_Employee,[]);
  6479. locFac.addProperty(s_uri,s_Employee,PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE],[]);
  6480. locFac.addProperty(s_uri,s_Employee,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  6481. locEmployee := locFac.createNew(s_uri,s_Employee);
  6482. locEmployee.setDate(PROP_NAME,VAL_1);
  6483. locCS := locEmployee.getChangeSummary();
  6484. locCS.beginLogging();
  6485. locEmployee.setDate(PROP_NAME,VAL_2);
  6486. f := TSDOSerializerStreamXML.Create();
  6487. tmpFactory := TSDODataFactory.Create();
  6488. s := TSDOSerializer.Create(tmpFactory,f);
  6489. ol := TSDODataObjectList.Create(tmpFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[ObjectType]));
  6490. s.load(localFileName,ol);
  6491. Check(TSDOEqualityHelper.equal(locEmployee,ol.getDataObject(0)));
  6492. Compare(
  6493. locEmployee.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  6494. ol.getDataObject(0).getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  6495. );
  6496. locEmployee.getChangeSummary().undoChanges();
  6497. ol.getDataObject(0).getChangeSummary().undoChanges();
  6498. CheckEquals(0, locEmployee.getChangeSummary().getChangedDataObjects().size());
  6499. CheckEquals(0, ol.getDataObject(0).getChangeSummary().getChangedDataObjects().size());
  6500. Check(TSDOEqualityHelper.equal(locEmployee,ol.getDataObject(0)));
  6501. end;
  6502. procedure TSDOSerializer_Test.load_from_file_changesummary_integer();
  6503. const
  6504. PROP_NAME = 'sampleProperty';
  6505. PROP_TYPE = IntegerType;
  6506. VAL_1 : TSDOInteger = 12345;
  6507. VAL_2 : TSDOInteger = -789;
  6508. var
  6509. locFac, tmpFactory : ISDODataFactory;
  6510. locEmployee : ISDODataObject;
  6511. locCS : ISDOChangeSummary;
  6512. f : ISDOSerializerStream;
  6513. s : ISDOSerializer;
  6514. localFileName : string;
  6515. ol : ISDODataObjectList;
  6516. begin
  6517. localFileName := sdoExpandLocalFileName(TestFilesPath + 'change_summary_integer.xml');
  6518. locFac := TSDODataFactory.Create() as ISDODataFactory;
  6519. locFac.AddType(s_uri,s_Employee,[]);
  6520. locFac.addProperty(s_uri,s_Employee,PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE],[]);
  6521. locFac.addProperty(s_uri,s_Employee,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  6522. locEmployee := locFac.createNew(s_uri,s_Employee);
  6523. locEmployee.setInteger(PROP_NAME,VAL_1);
  6524. locCS := locEmployee.getChangeSummary();
  6525. locCS.beginLogging();
  6526. locEmployee.setInteger(PROP_NAME,VAL_2);
  6527. //(TSDOSerializer.Create(locFac,TSDOSerializerStreamXML.Create())as ISDOSerializer).save(locEmployee,sdoExpandLocalFileName('change_summary_integer.xml'));
  6528. f := TSDOSerializerStreamXML.Create();
  6529. tmpFactory := TSDODataFactory.Create();
  6530. s := TSDOSerializer.Create(tmpFactory,f);
  6531. ol := TSDODataObjectList.Create(tmpFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[ObjectType]));
  6532. s.load(localFileName,ol);
  6533. Check(TSDOEqualityHelper.equal(locEmployee,ol.getDataObject(0)));
  6534. Compare(
  6535. locEmployee.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  6536. ol.getDataObject(0).getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  6537. );
  6538. locEmployee.getChangeSummary().undoChanges();
  6539. ol.getDataObject(0).getChangeSummary().undoChanges();
  6540. CheckEquals(0, locEmployee.getChangeSummary().getChangedDataObjects().size());
  6541. CheckEquals(0, ol.getDataObject(0).getChangeSummary().getChangedDataObjects().size());
  6542. Check(TSDOEqualityHelper.equal(locEmployee,ol.getDataObject(0)));
  6543. end;
  6544. {$IFDEF HAS_SDO_LONG}
  6545. procedure TSDOSerializer_Test.load_from_file_changesummary_long();
  6546. const
  6547. PROP_NAME = 'sampleProperty';
  6548. PROP_TYPE = LongType;
  6549. FILE_NAME = 'change_summary_long.xml';
  6550. VAL_1 : TSDOLong = 123987456321456987;
  6551. VAL_2 : TSDOLong = -458215687422;
  6552. var
  6553. locFac, tmpFactory : ISDODataFactory;
  6554. locEmployee : ISDODataObject;
  6555. locCS : ISDOChangeSummary;
  6556. f : ISDOSerializerStream;
  6557. s : ISDOSerializer;
  6558. localFileName : string;
  6559. ol : ISDODataObjectList;
  6560. begin
  6561. localFileName := sdoExpandLocalFileName(TestFilesPath + FILE_NAME);
  6562. locFac := TSDODataFactory.Create() as ISDODataFactory;
  6563. locFac.AddType(s_uri,s_Employee,[]);
  6564. locFac.addProperty(s_uri,s_Employee,PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE],[]);
  6565. locFac.addProperty(s_uri,s_Employee,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  6566. locEmployee := locFac.createNew(s_uri,s_Employee);
  6567. locEmployee.setLong(PROP_NAME,VAL_1);
  6568. locCS := locEmployee.getChangeSummary();
  6569. locCS.beginLogging();
  6570. locEmployee.setLong(PROP_NAME,VAL_2);
  6571. {$IFDEF TEST_GENERATE_FILE}
  6572. (TSDOSerializer.Create(locFac,TSDOSerializerStreamXML.Create())as ISDOSerializer).save(locEmployee,sdoExpandLocalFileName(FILE_NAME));
  6573. {$ENDIF TEST_GENERATE_FILE}
  6574. f := TSDOSerializerStreamXML.Create();
  6575. tmpFactory := TSDODataFactory.Create();
  6576. s := TSDOSerializer.Create(tmpFactory,f);
  6577. ol := TSDODataObjectList.Create(tmpFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[ObjectType]));
  6578. s.load(localFileName,ol);
  6579. Check(TSDOEqualityHelper.equal(locEmployee,ol.getDataObject(0)));
  6580. Compare(
  6581. locEmployee.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  6582. ol.getDataObject(0).getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  6583. );
  6584. locEmployee.getChangeSummary().undoChanges();
  6585. ol.getDataObject(0).getChangeSummary().undoChanges();
  6586. CheckEquals(0, locEmployee.getChangeSummary().getChangedDataObjects().size());
  6587. CheckEquals(0, ol.getDataObject(0).getChangeSummary().getChangedDataObjects().size());
  6588. Check(TSDOEqualityHelper.equal(locEmployee,ol.getDataObject(0)));
  6589. end;
  6590. {$ENDIF HAS_SDO_LONG}
  6591. {$IFDEF HAS_SDO_SHORT}
  6592. procedure TSDOSerializer_Test.load_from_file_changesummary_short();
  6593. const
  6594. PROP_NAME = 'sampleProperty';
  6595. PROP_TYPE = ShortType;
  6596. FILE_NAME = 'change_summary_short.xml';
  6597. VAL_1 : TSDOShort = 1592;
  6598. VAL_2 : TSDOShort = -9876;
  6599. var
  6600. locFac, tmpFactory : ISDODataFactory;
  6601. locEmployee : ISDODataObject;
  6602. locCS : ISDOChangeSummary;
  6603. f : ISDOSerializerStream;
  6604. s : ISDOSerializer;
  6605. localFileName : string;
  6606. ol : ISDODataObjectList;
  6607. begin
  6608. localFileName := sdoExpandLocalFileName(TestFilesPath + FILE_NAME);
  6609. locFac := TSDODataFactory.Create() as ISDODataFactory;
  6610. locFac.AddType(s_uri,s_Employee,[]);
  6611. locFac.addProperty(s_uri,s_Employee,PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE],[]);
  6612. locFac.addProperty(s_uri,s_Employee,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  6613. locEmployee := locFac.createNew(s_uri,s_Employee);
  6614. locEmployee.setShort(PROP_NAME,VAL_1);
  6615. locCS := locEmployee.getChangeSummary();
  6616. locCS.beginLogging();
  6617. locEmployee.setShort(PROP_NAME,VAL_2);
  6618. {$IFDEF TEST_GENERATE_FILE}
  6619. (TSDOSerializer.Create(locFac,TSDOSerializerStreamXML.Create())as ISDOSerializer).save(locEmployee,sdoExpandLocalFileName(FILE_NAME));
  6620. {$ENDIF TEST_GENERATE_FILE}
  6621. f := TSDOSerializerStreamXML.Create();
  6622. tmpFactory := TSDODataFactory.Create();
  6623. s := TSDOSerializer.Create(tmpFactory,f);
  6624. ol := TSDODataObjectList.Create(tmpFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[ObjectType]));
  6625. s.load(localFileName,ol);
  6626. Check(TSDOEqualityHelper.equal(locEmployee,ol.getDataObject(0)));
  6627. Compare(
  6628. locEmployee.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  6629. ol.getDataObject(0).getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  6630. );
  6631. locEmployee.getChangeSummary().undoChanges();
  6632. ol.getDataObject(0).getChangeSummary().undoChanges();
  6633. CheckEquals(0, locEmployee.getChangeSummary().getChangedDataObjects().size());
  6634. CheckEquals(0, ol.getDataObject(0).getChangeSummary().getChangedDataObjects().size());
  6635. Check(TSDOEqualityHelper.equal(locEmployee,ol.getDataObject(0)));
  6636. end;
  6637. {$ENDIF HAS_SDO_SHORT}
  6638. procedure TSDOSerializer_Test.load_from_file_changesummary_string();
  6639. const
  6640. PROP_NAME = 'sampleProperty';
  6641. PROP_TYPE = StringType;
  6642. VAL_1 : TSDOString = 'Inoussa.O';
  6643. VAL_2 : TSDOString = 'sdo.fpc.delphi';
  6644. var
  6645. locFac, tmpFactory : ISDODataFactory;
  6646. locEmployee : ISDODataObject;
  6647. locCS : ISDOChangeSummary;
  6648. f : ISDOSerializerStream;
  6649. s : ISDOSerializer;
  6650. localFileName : string;
  6651. ol : ISDODataObjectList;
  6652. begin
  6653. localFileName := sdoExpandLocalFileName(TestFilesPath + 'change_summary_string.xml');
  6654. locFac := TSDODataFactory.Create() as ISDODataFactory;
  6655. locFac.AddType(s_uri,s_Employee,[]);
  6656. locFac.addProperty(s_uri,s_Employee,PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE],[]);
  6657. locFac.addProperty(s_uri,s_Employee,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  6658. locEmployee := locFac.createNew(s_uri,s_Employee);
  6659. locEmployee.setString(PROP_NAME,VAL_1);
  6660. locCS := locEmployee.getChangeSummary();
  6661. locCS.beginLogging();
  6662. locEmployee.setString(PROP_NAME,VAL_2);
  6663. //(TSDOSerializer.Create(locFac,TSDOSerializerStreamXML.Create())as ISDOSerializer).save(locEmployee,sdoExpandLocalFileName('change_summary_string.xml'));
  6664. f := TSDOSerializerStreamXML.Create();
  6665. tmpFactory := TSDODataFactory.Create();
  6666. s := TSDOSerializer.Create(tmpFactory,f);
  6667. ol := TSDODataObjectList.Create(tmpFactory.getType(sdo_namespace,SDOTypeDefaultTypeNames[ObjectType]));
  6668. s.load(localFileName,ol);
  6669. Check(TSDOEqualityHelper.equal(locEmployee,ol.getDataObject(0)));
  6670. Compare(
  6671. locEmployee.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  6672. ol.getDataObject(0).getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  6673. );
  6674. locEmployee.getChangeSummary().undoChanges();
  6675. ol.getDataObject(0).getChangeSummary().undoChanges();
  6676. CheckEquals(0, locEmployee.getChangeSummary().getChangedDataObjects().size());
  6677. CheckEquals(0, ol.getDataObject(0).getChangeSummary().getChangedDataObjects().size());
  6678. Check(TSDOEqualityHelper.equal(locEmployee,ol.getDataObject(0)));
  6679. end;
  6680. procedure TSDOSerializer_Test.load_from_file_changesummary_prop_list_byte();
  6681. const
  6682. PROP_NAME = s_list_byte;
  6683. PROP_TYPE = ByteType;
  6684. FILE_NAME = 'changesummary_prop_list_byte.xml';
  6685. var
  6686. locFac, tmpFactory : ISDODataFactory;
  6687. locDep, locLoadedDep : ISDODataObject;
  6688. ls : ISDODataObjectList;
  6689. locCS : ISDOChangeSummary;
  6690. f : ISDOSerializerStream;
  6691. s : ISDOSerializer;
  6692. localFileName : string;
  6693. begin
  6694. locFac := TSDODataFactory.Create() as ISDODataFactory;
  6695. locFac.AddType(s_uri,s_DepartmentType,[]);
  6696. locFac.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  6697. locFac.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  6698. locFac.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[ByteType],[]);
  6699. locFac.addProperty(s_uri,s_DepartmentType,PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE],[pfIsMany]);
  6700. locFac.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  6701. locDep := locFac.createNew(s_uri,s_DepartmentType);
  6702. locDep.setString(s_name,'R & D');
  6703. locDep.setString(s_location,'Ouaga, BF');
  6704. locDep.setByte(s_number,123);
  6705. ls := locDep.getList(PROP_NAME);
  6706. ls.append(TSDOByte(1));
  6707. ls.append(TSDOByte(2));
  6708. ls.append(TSDOByte(3));
  6709. locCS := locDep.getChangeSummary();
  6710. locCS.beginLogging();
  6711. locDep.setString(s_name,'R & D Department');
  6712. locDep.setString(s_location,'Ouaga 01, BF');
  6713. ls.setByte(0,10);
  6714. ls.append(TSDOByte(123));
  6715. ls.append(TSDOByte(45));
  6716. ls.setByte(1,20);
  6717. ls.delete(0);
  6718. ls.delete(1);
  6719. ls.insert(2, TSDOByte(107));
  6720. ls.append(TSDOByte(89));
  6721. {$IFDEF TEST_GENERATE_FILE}
  6722. (TSDOSerializer.Create(locFac,TSDOSerializerStreamXML.Create())as ISDOSerializer).save(locDep,sdoExpandLocalFileName(FILE_NAME));
  6723. {$ENDIF TEST_GENERATE_FILE}
  6724. localFileName := sdoExpandLocalFileName(TestFilesPath + FILE_NAME);
  6725. f := TSDOSerializerStreamXML.Create();
  6726. tmpFactory := TSDOBaseDataFactory.Create();
  6727. s := TSDOSerializer.Create(tmpFactory,f);
  6728. locLoadedDep := s.load(localFileName);
  6729. Check(TSDOEqualityHelper.equal(locDep, locLoadedDep),'Object');
  6730. Compare(
  6731. locDep.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  6732. locLoadedDep.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  6733. );
  6734. end;
  6735. {$IFDEF HAS_SDO_CHAR}
  6736. procedure TSDOSerializer_Test.load_from_file_changesummary_prop_list_char();
  6737. const
  6738. PROP_NAME = s_list_char;
  6739. PROP_TYPE = CharacterType;
  6740. FILE_NAME = 'changesummary_prop_list_char.xml';
  6741. var
  6742. locFac, tmpFactory : ISDODataFactory;
  6743. locDep, locLoadedDep : ISDODataObject;
  6744. ls : ISDODataObjectList;
  6745. locCS : ISDOChangeSummary;
  6746. f : ISDOSerializerStream;
  6747. s : ISDOSerializer;
  6748. localFileName : string;
  6749. begin
  6750. locFac := TSDODataFactory.Create() as ISDODataFactory;
  6751. locFac.AddType(s_uri,s_DepartmentType,[]);
  6752. locFac.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  6753. locFac.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  6754. locFac.addProperty(s_uri,s_DepartmentType,s_number,sdo_namespace,SDOTypeDefaultTypeNames[ByteType],[]);
  6755. locFac.addProperty(s_uri,s_DepartmentType,PROP_NAME,sdo_namespace,SDOTypeDefaultTypeNames[PROP_TYPE],[pfIsMany]);
  6756. locFac.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  6757. locDep := locFac.createNew(s_uri,s_DepartmentType);
  6758. locDep.setString(s_name,'R & D');
  6759. locDep.setString(s_location,'Ouaga, BF');
  6760. locDep.setByte(s_number,123);
  6761. ls := locDep.getList(PROP_NAME);
  6762. ls.append(TSDOChar('k'));
  6763. ls.append(TSDOChar('y'));
  6764. ls.append(TSDOChar('g'));
  6765. locCS := locDep.getChangeSummary();
  6766. locCS.beginLogging();
  6767. locDep.setString(s_name,'R & D Department');
  6768. locDep.setString(s_location,'Ouaga 01, BF');
  6769. ls.setCharacter(0,TSDOChar('j'));
  6770. ls.append(TSDOChar('a'));
  6771. ls.append(TSDOChar('x'));
  6772. ls.setCharacter(1,TSDOChar('v'));
  6773. ls.delete(0);
  6774. ls.delete(1);
  6775. ls.insert(2, TSDOChar('A'));
  6776. ls.append(TSDOChar('Z'));
  6777. {$IFDEF TEST_GENERATE_FILE}
  6778. (TSDOSerializer.Create(locFac,TSDOSerializerStreamXML.Create())as ISDOSerializer).save(locDep,sdoExpandLocalFileName(FILE_NAME));
  6779. {$ENDIF TEST_GENERATE_FILE}
  6780. localFileName := sdoExpandLocalFileName(TestFilesPath + FILE_NAME);
  6781. f := TSDOSerializerStreamXML.Create();
  6782. tmpFactory := TSDOBaseDataFactory.Create();
  6783. s := TSDOSerializer.Create(tmpFactory,f);
  6784. locLoadedDep := s.load(localFileName);
  6785. Check(TSDOEqualityHelper.equal(locDep, locLoadedDep),'Object');
  6786. Compare(
  6787. locDep.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  6788. locLoadedDep.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  6789. );
  6790. end;
  6791. {$ENDIF HAS_SDO_CHAR}
  6792. procedure TSDOSerializer_Test.load_from_file_changesummary_prop_list_date();
  6793. const VAL_1 : TSDODate = ( Date : 0; HourOffset : 0; MinuteOffset : 0; );
  6794. VAL_2 : TSDODate = ( Date : 0; HourOffset : 0; MinuteOffset : 0; );
  6795. VAL_3 : TSDODate = ( Date : 0; HourOffset : 0; MinuteOffset : 0; );
  6796. VAL_4 : TSDODate = ( Date : 0; HourOffset : 0; MinuteOffset : 0; );
  6797. VAL_5 : TSDODate = ( Date : 0; HourOffset : 0; MinuteOffset : 0; );
  6798. procedure SetConstants();
  6799. var
  6800. d : TSDODate;
  6801. begin
  6802. FillChar(d,SizeOf(TSDODate),#0);
  6803. d.Date := EncodeDateTime(1976,10,12,23,34,45,56);
  6804. d.HourOffset := 5;
  6805. d.MinuteOffset := 6;
  6806. PSDODate(@VAL_1)^ := d;
  6807. FillChar(d,SizeOf(TSDODate),#0);
  6808. d.Date := EncodeDateTime(2008,7,8,9,10,11,12);
  6809. d.HourOffset := 0;
  6810. d.MinuteOffset := 13;
  6811. PSDODate(@VAL_3)^ := d;
  6812. FillChar(d,SizeOf(TSDODate),#0);
  6813. d.Date := EncodeDateTime(2009,9,1,2,3,0,1);
  6814. d.HourOffset := 0;
  6815. d.MinuteOffset := 13;
  6816. PSDODate(@VAL_4)^ := d;
  6817. FillChar(d,SizeOf(TSDODate),#0);
  6818. d.Date := EncodeDateTime(1900,11,8,1,2,0,0);
  6819. d.HourOffset := 0;
  6820. d.MinuteOffset := 13;
  6821. PSDODate(@VAL_5)^ := d;
  6822. end;
  6823. var
  6824. locFac, tmpFactory : ISDODataFactory;
  6825. locDep, locLoadedDep : ISDODataObject;
  6826. ls : ISDODataObjectList;
  6827. locCS : ISDOChangeSummary;
  6828. f : ISDOSerializerStream;
  6829. s : ISDOSerializer;
  6830. localFileName : string;
  6831. begin
  6832. SetConstants();
  6833. localFileName := sdoExpandLocalFileName('changesummary_prop_list_date.xml');
  6834. locFac := TSDODataFactory.Create() as ISDODataFactory;
  6835. locFac.AddType(s_uri,s_DepartmentType,[]);
  6836. locFac.addProperty(s_uri,s_DepartmentType,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  6837. locFac.addProperty(s_uri,s_DepartmentType,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
  6838. locFac.addProperty(s_uri,s_DepartmentType,s_birthDate,sdo_namespace,SDOTypeDefaultTypeNames[DateTimeType],[]);
  6839. locFac.addProperty(s_uri,s_DepartmentType,s_list_date,sdo_namespace,SDOTypeDefaultTypeNames[DateTimeType],[pfIsMany]);
  6840. locFac.addProperty(s_uri,s_DepartmentType,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
  6841. locDep := locFac.createNew(s_uri,s_DepartmentType);
  6842. locDep.setString(s_name,'R & D');
  6843. locDep.setString(s_location,'Ouaga, BF');
  6844. locDep.setDate(s_birthDate,VAL_1);
  6845. ls := locDep.getList(s_list_date);
  6846. ls.append(VAL_1);
  6847. ls.append(VAL_2);
  6848. ls.append(VAL_3);
  6849. locCS := locDep.getChangeSummary();
  6850. locCS.beginLogging();
  6851. locDep.setString(s_name,'R & D Department');
  6852. locDep.setString(s_location,'Ouaga 01, BF');
  6853. ls.setDate(0,VAL_4);
  6854. ls.append(VAL_5);
  6855. ls.append(VAL_1);
  6856. ls.setDate(1,VAL_2);
  6857. ls.delete(0);
  6858. ls.delete(1);
  6859. ls.insert(2, VAL_3);
  6860. ls.append(VAL_4);
  6861. localFileName := sdoExpandLocalFileName(TestFilesPath + 'changesummary_prop_list_date.xml');
  6862. f := TSDOSerializerStreamXML.Create();
  6863. tmpFactory := TSDOBaseDataFactory.Create();
  6864. s := TSDOSerializer.Create(tmpFactory,f);
  6865. locLoadedDep := s.load(localFileName);
  6866. Check(TSDOEqualityHelper.equal(locDep, locLoadedDep),'Object');
  6867. Compare(
  6868. locDep.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx,
  6869. locLoadedDep.getChangeSummary().getChangedDataObjects() as ISDOChangedDataObjectListEx
  6870. );
  6871. end;
  6872. { TSDOSerializerXML_Test }
  6873. class function TSDOSerializerXML_Test.CreateSerializerStream: ISDOSerializerStream;
  6874. begin
  6875. Result := TSDOSerializerStreamXML.Create();
  6876. end;
  6877. initialization
  6878. RegisterTest('Helpers',TSDOSerializerXML_Test.Suite);
  6879. RegisterTest('Helpers',TSDOSerializerBinary_Test.Suite);
  6880. end.